1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/fdrepdlg.h
3 // Purpose:     wxFindReplaceDialog class
4 // Author:      Markus Greither and Vadim Zeitlin
5 // Modified by:
6 // Created:     23/03/2001
7 // RCS-ID:
8 // Copyright:   (c) Markus Greither
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_FINDREPLACEDLG_H_
13 #define _WX_FINDREPLACEDLG_H_
14 
15 #include "wx/defs.h"
16 
17 #if wxUSE_FINDREPLDLG
18 
19 #include "wx/dialog.h"
20 
21 class WXDLLIMPEXP_FWD_CORE wxFindDialogEvent;
22 class WXDLLIMPEXP_FWD_CORE wxFindReplaceDialog;
23 class WXDLLIMPEXP_FWD_CORE wxFindReplaceData;
24 class WXDLLIMPEXP_FWD_CORE wxFindReplaceDialogImpl;
25 
26 // ----------------------------------------------------------------------------
27 // Flags for wxFindReplaceData.Flags
28 // ----------------------------------------------------------------------------
29 
30 // flages used by wxFindDialogEvent::GetFlags()
31 enum wxFindReplaceFlags
32 {
33     // downward search/replace selected (otherwise - upwards)
34     wxFR_DOWN       = 1,
35 
36     // whole word search/replace selected
37     wxFR_WHOLEWORD  = 2,
38 
39     // case sensitive search/replace selected (otherwise - case insensitive)
40     wxFR_MATCHCASE  = 4
41 };
42 
43 // these flags can be specified in wxFindReplaceDialog ctor or Create()
44 enum wxFindReplaceDialogStyles
45 {
46     // replace dialog (otherwise find dialog)
47     wxFR_REPLACEDIALOG = 1,
48 
49     // don't allow changing the search direction
50     wxFR_NOUPDOWN      = 2,
51 
52     // don't allow case sensitive searching
53     wxFR_NOMATCHCASE   = 4,
54 
55     // don't allow whole word searching
56     wxFR_NOWHOLEWORD   = 8
57 };
58 
59 // ----------------------------------------------------------------------------
60 // wxFindReplaceData: holds Setup Data/Feedback Data for wxFindReplaceDialog
61 // ----------------------------------------------------------------------------
62 
63 class WXDLLEXPORT wxFindReplaceData : public wxObject
64 {
65 public:
wxFindReplaceData()66     wxFindReplaceData() { Init(); }
wxFindReplaceData(wxUint32 flags)67     wxFindReplaceData(wxUint32 flags) { Init(); SetFlags(flags); }
68 
69     // accessors
GetFindString()70     const wxString& GetFindString() { return m_FindWhat; }
GetReplaceString()71     const wxString& GetReplaceString() { return m_ReplaceWith; }
72 
GetFlags()73     int GetFlags() const { return m_Flags; }
74 
75     // setters: may only be called before showing the dialog, no effect later
SetFlags(wxUint32 flags)76     void SetFlags(wxUint32 flags) { m_Flags = flags; }
77 
SetFindString(const wxString & str)78     void SetFindString(const wxString& str) { m_FindWhat = str; }
SetReplaceString(const wxString & str)79     void SetReplaceString(const wxString& str) { m_ReplaceWith = str; }
80 
81 protected:
82     void Init();
83 
84 private:
85     wxUint32 m_Flags;
86     wxString m_FindWhat,
87              m_ReplaceWith;
88 
89     friend class wxFindReplaceDialogBase;
90 };
91 
92 // ----------------------------------------------------------------------------
93 // wxFindReplaceDialogBase
94 // ----------------------------------------------------------------------------
95 
96 class WXDLLEXPORT wxFindReplaceDialogBase : public wxDialog
97 {
98 public:
99     // ctors and such
wxFindReplaceDialogBase()100     wxFindReplaceDialogBase() { m_FindReplaceData = NULL; }
101     wxFindReplaceDialogBase(wxWindow * WXUNUSED(parent),
102                             wxFindReplaceData *data,
103                             const wxString& WXUNUSED(title),
104                             int WXUNUSED(style) = 0)
105     {
106         m_FindReplaceData = data;
107     }
108 
109     virtual ~wxFindReplaceDialogBase();
110 
111     // find dialog data access
GetData()112     const wxFindReplaceData *GetData() const { return m_FindReplaceData; }
SetData(wxFindReplaceData * data)113     void SetData(wxFindReplaceData *data) { m_FindReplaceData = data; }
114 
115     // implementation only, don't use
116     void Send(wxFindDialogEvent& event);
117 
118 protected:
119     wxFindReplaceData *m_FindReplaceData;
120 
121     // the last string we searched for
122     wxString m_lastSearch;
123 
124     DECLARE_NO_COPY_CLASS(wxFindReplaceDialogBase)
125 };
126 
127 // include wxFindReplaceDialog declaration
128 #if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) && !defined(__WXWINCE__)
129     #include "wx/msw/fdrepdlg.h"
130 #else
131     #define wxGenericFindReplaceDialog wxFindReplaceDialog
132 
133     #include "wx/generic/fdrepdlg.h"
134 #endif
135 
136 // ----------------------------------------------------------------------------
137 // wxFindReplaceDialog events
138 // ----------------------------------------------------------------------------
139 
140 class WXDLLEXPORT wxFindDialogEvent : public wxCommandEvent
141 {
142 public:
143     wxFindDialogEvent(wxEventType commandType = wxEVT_NULL, int id = 0)
wxCommandEvent(commandType,id)144         : wxCommandEvent(commandType, id) { }
145 
GetFlags()146     int GetFlags() const { return GetInt(); }
GetFindString()147     wxString GetFindString() const { return GetString(); }
GetReplaceString()148     const wxString& GetReplaceString() const { return m_strReplace; }
149 
GetDialog()150     wxFindReplaceDialog *GetDialog() const
151         { return wxStaticCast(GetEventObject(), wxFindReplaceDialog); }
152 
153     // implementation only
SetFlags(int flags)154     void SetFlags(int flags) { SetInt(flags); }
SetFindString(const wxString & str)155     void SetFindString(const wxString& str) { SetString(str); }
SetReplaceString(const wxString & str)156     void SetReplaceString(const wxString& str) { m_strReplace = str; }
157 
158 private:
159     wxString m_strReplace;
160 
161     DECLARE_DYNAMIC_CLASS_NO_COPY(wxFindDialogEvent)
162 };
163 
164 BEGIN_DECLARE_EVENT_TYPES()
165     DECLARE_EVENT_TYPE(wxEVT_COMMAND_FIND, 510)
166     DECLARE_EVENT_TYPE(wxEVT_COMMAND_FIND_NEXT, 511)
167     DECLARE_EVENT_TYPE(wxEVT_COMMAND_FIND_REPLACE, 512)
168     DECLARE_EVENT_TYPE(wxEVT_COMMAND_FIND_REPLACE_ALL, 513)
169     DECLARE_EVENT_TYPE(wxEVT_COMMAND_FIND_CLOSE, 514)
170 END_DECLARE_EVENT_TYPES()
171 
172 typedef void (wxEvtHandler::*wxFindDialogEventFunction)(wxFindDialogEvent&);
173 
174 #define wxFindDialogEventHandler(func) \
175     (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxFindDialogEventFunction, &func)
176 
177 #define EVT_FIND(id, fn) \
178     wx__DECLARE_EVT1(wxEVT_COMMAND_FIND, id, wxFindDialogEventHandler(fn))
179 
180 #define EVT_FIND_NEXT(id, fn) \
181     wx__DECLARE_EVT1(wxEVT_COMMAND_FIND_NEXT, id, wxFindDialogEventHandler(fn))
182 
183 #define EVT_FIND_REPLACE(id, fn) \
184     wx__DECLARE_EVT1(wxEVT_COMMAND_FIND_REPLACE, id, wxFindDialogEventHandler(fn))
185 
186 #define EVT_FIND_REPLACE_ALL(id, fn) \
187     wx__DECLARE_EVT1(wxEVT_COMMAND_FIND_REPLACE_ALL, id, wxFindDialogEventHandler(fn))
188 
189 #define EVT_FIND_CLOSE(id, fn) \
190     wx__DECLARE_EVT1(wxEVT_COMMAND_FIND_CLOSE, id, wxFindDialogEventHandler(fn))
191 
192 #endif // wxUSE_FINDREPLDLG
193 
194 #endif
195     // _WX_FDREPDLG_H
196