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
21class WXDLLIMPEXP_FWD_CORE wxFindDialogEvent;
22class WXDLLIMPEXP_FWD_CORE wxFindReplaceDialog;
23class WXDLLIMPEXP_FWD_CORE wxFindReplaceData;
24class WXDLLIMPEXP_FWD_CORE wxFindReplaceDialogImpl;
25
26// ----------------------------------------------------------------------------
27// Flags for wxFindReplaceData.Flags
28// ----------------------------------------------------------------------------
29
30// flages used by wxFindDialogEvent::GetFlags()
31enum 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()
44enum 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
63class WXDLLEXPORT wxFindReplaceData : public wxObject
64{
65public:
66    wxFindReplaceData() { Init(); }
67    wxFindReplaceData(wxUint32 flags) { Init(); SetFlags(flags); }
68
69    // accessors
70    const wxString& GetFindString() { return m_FindWhat; }
71    const wxString& GetReplaceString() { return m_ReplaceWith; }
72
73    int GetFlags() const { return m_Flags; }
74
75    // setters: may only be called before showing the dialog, no effect later
76    void SetFlags(wxUint32 flags) { m_Flags = flags; }
77
78    void SetFindString(const wxString& str) { m_FindWhat = str; }
79    void SetReplaceString(const wxString& str) { m_ReplaceWith = str; }
80
81protected:
82    void Init();
83
84private:
85    wxUint32 m_Flags;
86    wxString m_FindWhat,
87             m_ReplaceWith;
88
89    friend class wxFindReplaceDialogBase;
90};
91
92// ----------------------------------------------------------------------------
93// wxFindReplaceDialogBase
94// ----------------------------------------------------------------------------
95
96class WXDLLEXPORT wxFindReplaceDialogBase : public wxDialog
97{
98public:
99    // ctors and such
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
112    const wxFindReplaceData *GetData() const { return m_FindReplaceData; }
113    void SetData(wxFindReplaceData *data) { m_FindReplaceData = data; }
114
115    // implementation only, don't use
116    void Send(wxFindDialogEvent& event);
117
118protected:
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
140class WXDLLEXPORT wxFindDialogEvent : public wxCommandEvent
141{
142public:
143    wxFindDialogEvent(wxEventType commandType = wxEVT_NULL, int id = 0)
144        : wxCommandEvent(commandType, id) { }
145
146    int GetFlags() const { return GetInt(); }
147    wxString GetFindString() const { return GetString(); }
148    const wxString& GetReplaceString() const { return m_strReplace; }
149
150    wxFindReplaceDialog *GetDialog() const
151        { return wxStaticCast(GetEventObject(), wxFindReplaceDialog); }
152
153    // implementation only
154    void SetFlags(int flags) { SetInt(flags); }
155    void SetFindString(const wxString& str) { SetString(str); }
156    void SetReplaceString(const wxString& str) { m_strReplace = str; }
157
158private:
159    wxString m_strReplace;
160
161    DECLARE_DYNAMIC_CLASS_NO_COPY(wxFindDialogEvent)
162};
163
164BEGIN_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)
170END_DECLARE_EVENT_TYPES()
171
172typedef 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