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