1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/generic/srchctlg.h 3 // Purpose: generic wxSearchCtrl class 4 // Author: Vince Harron 5 // Created: 2006-02-19 6 // RCS-ID: $Id: srchctlg.h 53135 2008-04-12 02:31:04Z VZ $ 7 // Copyright: Vince Harron 8 // Licence: wxWindows licence 9 ///////////////////////////////////////////////////////////////////////////// 10 11 #ifndef _WX_GENERIC_SEARCHCTRL_H_ 12 #define _WX_GENERIC_SEARCHCTRL_H_ 13 14 #if wxUSE_SEARCHCTRL 15 16 #include "wx/bitmap.h" 17 18 class WXDLLIMPEXP_FWD_CORE wxSearchButton; 19 class WXDLLIMPEXP_FWD_CORE wxSearchTextCtrl; 20 21 // ---------------------------------------------------------------------------- 22 // wxSearchCtrl is a combination of wxTextCtrl and wxSearchButton 23 // ---------------------------------------------------------------------------- 24 25 class WXDLLEXPORT wxSearchCtrl : public wxSearchCtrlBase 26 { 27 public: 28 // creation 29 // -------- 30 31 wxSearchCtrl(); 32 wxSearchCtrl(wxWindow *parent, wxWindowID id, 33 const wxString& value = wxEmptyString, 34 const wxPoint& pos = wxDefaultPosition, 35 const wxSize& size = wxDefaultSize, 36 long style = 0, 37 const wxValidator& validator = wxDefaultValidator, 38 const wxString& name = wxSearchCtrlNameStr); 39 40 virtual ~wxSearchCtrl(); 41 42 bool Create(wxWindow *parent, wxWindowID id, 43 const wxString& value = wxEmptyString, 44 const wxPoint& pos = wxDefaultPosition, 45 const wxSize& size = wxDefaultSize, 46 long style = 0, 47 const wxValidator& validator = wxDefaultValidator, 48 const wxString& name = wxSearchCtrlNameStr); 49 50 #if wxUSE_MENUS 51 // get/set search button menu 52 // -------------------------- 53 virtual void SetMenu( wxMenu* menu ); 54 virtual wxMenu* GetMenu(); 55 #endif // wxUSE_MENUS 56 57 // get/set search options 58 // ---------------------- 59 virtual void ShowSearchButton( bool show ); 60 virtual bool IsSearchButtonVisible() const; 61 62 virtual void ShowCancelButton( bool show ); 63 virtual bool IsCancelButtonVisible() const; 64 65 #if wxABI_VERSION >= 20802 66 // TODO: In 2.9 these should probably be virtual, and declared in the base class... 67 void SetDescriptiveText(const wxString& text); 68 wxString GetDescriptiveText() const; 69 #endif 70 71 // accessors 72 // --------- 73 74 virtual wxString GetValue() const; 75 virtual void SetValue(const wxString& value); 76 77 virtual wxString GetRange(long from, long to) const; 78 79 virtual int GetLineLength(long lineNo) const; 80 virtual wxString GetLineText(long lineNo) const; 81 virtual int GetNumberOfLines() const; 82 83 virtual bool IsModified() const; 84 virtual bool IsEditable() const; 85 86 // more readable flag testing methods 87 virtual bool IsSingleLine() const; 88 virtual bool IsMultiLine() const; 89 90 // If the return values from and to are the same, there is no selection. 91 virtual void GetSelection(long* from, long* to) const; 92 93 virtual wxString GetStringSelection() const; 94 95 // operations 96 // ---------- 97 98 // editing 99 virtual void Clear(); 100 virtual void Replace(long from, long to, const wxString& value); 101 virtual void Remove(long from, long to); 102 103 // load/save the controls contents from/to the file 104 virtual bool LoadFile(const wxString& file); 105 virtual bool SaveFile(const wxString& file = wxEmptyString); 106 107 // sets/clears the dirty flag 108 virtual void MarkDirty(); 109 virtual void DiscardEdits(); 110 111 // set the max number of characters which may be entered in a single line 112 // text control 113 virtual void SetMaxLength(unsigned long WXUNUSED(len)); 114 115 // writing text inserts it at the current position, appending always 116 // inserts it at the end 117 virtual void WriteText(const wxString& text); 118 virtual void AppendText(const wxString& text); 119 120 // insert the character which would have resulted from this key event, 121 // return true if anything has been inserted 122 virtual bool EmulateKeyPress(const wxKeyEvent& event); 123 124 // text control under some platforms supports the text styles: these 125 // methods allow to apply the given text style to the given selection or to 126 // set/get the style which will be used for all appended text 127 virtual bool SetStyle(long start, long end, const wxTextAttr& style); 128 virtual bool GetStyle(long position, wxTextAttr& style); 129 virtual bool SetDefaultStyle(const wxTextAttr& style); 130 virtual const wxTextAttr& GetDefaultStyle() const; 131 132 // translate between the position (which is just an index in the text ctrl 133 // considering all its contents as a single strings) and (x, y) coordinates 134 // which represent column and line. 135 virtual long XYToPosition(long x, long y) const; 136 virtual bool PositionToXY(long pos, long *x, long *y) const; 137 138 virtual void ShowPosition(long pos); 139 140 // find the character at position given in pixels 141 // 142 // NB: pt is in device coords (not adjusted for the client area origin nor 143 // scrolling) 144 virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const; 145 virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, 146 wxTextCoord *col, 147 wxTextCoord *row) const; 148 149 // Clipboard operations 150 virtual void Copy(); 151 virtual void Cut(); 152 virtual void Paste(); 153 154 virtual bool CanCopy() const; 155 virtual bool CanCut() const; 156 virtual bool CanPaste() const; 157 158 // Undo/redo 159 virtual void Undo(); 160 virtual void Redo(); 161 162 virtual bool CanUndo() const; 163 virtual bool CanRedo() const; 164 165 // Insertion point 166 virtual void SetInsertionPoint(long pos); 167 virtual void SetInsertionPointEnd(); 168 virtual long GetInsertionPoint() const; 169 virtual wxTextPos GetLastPosition() const; 170 171 virtual void SetSelection(long from, long to); 172 virtual void SelectAll(); 173 virtual void SetEditable(bool editable); 174 175 #if 0 176 177 // override streambuf method 178 #if wxHAS_TEXT_WINDOW_STREAM 179 int overflow(int i); 180 #endif // wxHAS_TEXT_WINDOW_STREAM 181 182 // stream-like insertion operators: these are always available, whether we 183 // were, or not, compiled with streambuf support 184 wxTextCtrl& operator<<(const wxString& s); 185 wxTextCtrl& operator<<(int i); 186 wxTextCtrl& operator<<(long i); 187 wxTextCtrl& operator<<(float f); 188 wxTextCtrl& operator<<(double d); 189 wxTextCtrl& operator<<(const wxChar c); 190 #endif 191 192 // do the window-specific processing after processing the update event 193 virtual void DoUpdateWindowUI(wxUpdateUIEvent& event); 194 195 virtual bool ShouldInheritColours() const; 196 197 // wxWindow overrides 198 virtual bool SetFont(const wxFont& font); 199 200 // search control generic only 201 void SetSearchBitmap( const wxBitmap& bitmap ); 202 void SetCancelBitmap( const wxBitmap& bitmap ); 203 #if wxUSE_MENUS 204 void SetSearchMenuBitmap( const wxBitmap& bitmap ); 205 #endif // wxUSE_MENUS 206 207 protected: 208 virtual void DoSetValue(const wxString& value, int flags = 0); 209 210 // override the base class virtuals involved into geometry calculations 211 virtual wxSize DoGetBestSize() const; 212 virtual void DoMoveWindow(int x, int y, int width, int height); 213 virtual void LayoutControls(int x, int y, int width, int height); 214 215 virtual void RecalcBitmaps(); 216 217 void Init(); 218 219 virtual wxBitmap RenderSearchBitmap( int x, int y, bool renderDrop ); 220 virtual wxBitmap RenderCancelBitmap( int x, int y ); 221 222 virtual void OnSearchButton( wxCommandEvent& event ); 223 224 void OnSetFocus( wxFocusEvent& event ); 225 void OnSize( wxSizeEvent& event ); 226 HasMenu()227 bool HasMenu() const 228 { 229 #if wxUSE_MENUS 230 return m_menu != NULL; 231 #else // !wxUSE_MENUS 232 return false; 233 #endif // wxUSE_MENUS/!wxUSE_MENUS 234 } 235 236 private: 237 friend class wxSearchButton; 238 239 #if wxUSE_MENUS 240 void PopupSearchMenu(); 241 #endif // wxUSE_MENUS 242 243 // the subcontrols 244 wxSearchTextCtrl *m_text; 245 wxSearchButton *m_searchButton; 246 wxSearchButton *m_cancelButton; 247 #if wxUSE_MENUS 248 wxMenu *m_menu; 249 #endif // wxUSE_MENUS 250 251 bool m_searchButtonVisible; 252 bool m_cancelButtonVisible; 253 254 bool m_searchBitmapUser; 255 bool m_cancelBitmapUser; 256 #if wxUSE_MENUS 257 bool m_searchMenuBitmapUser; 258 #endif // wxUSE_MENUS 259 260 wxBitmap m_searchBitmap; 261 wxBitmap m_cancelBitmap; 262 #if wxUSE_MENUS 263 wxBitmap m_searchMenuBitmap; 264 #endif // wxUSE_MENUS 265 266 private: 267 DECLARE_DYNAMIC_CLASS(wxSearchCtrl) 268 269 DECLARE_EVENT_TABLE() 270 }; 271 272 #endif // wxUSE_SEARCHCTRL 273 274 #endif // _WX_GENERIC_SEARCHCTRL_H_ 275 276