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