1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/generic/fdrepgg.cpp 
   3 // Purpose:     Find/Replace dialogs 
   4 // Author:      Markus Greither and Vadim Zeitlin 
   8 // Copyright:   (c) wxWidgets team 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // ============================================================================ 
  14 // ============================================================================ 
  16 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) 
  17     #pragma implementation "genericfdrepdlg.h" 
  20 // ---------------------------------------------------------------------------- 
  22 // ---------------------------------------------------------------------------- 
  24 // For compilers that support precompilation, includes "wx.h". 
  25 #include "wx/wxprec.h" 
  39     #include "wx/button.h" 
  40     #include "wx/checkbox.h" 
  41     #include "wx/radiobox.h" 
  42     #include "wx/stattext.h" 
  43     #include "wx/textctrl.h" 
  46 #include "wx/fdrepdlg.h" 
  47 #include "wx/settings.h" 
  49 // ---------------------------------------------------------------------------- 
  51 // ---------------------------------------------------------------------------- 
  53 // ============================================================================ 
  55 // ============================================================================ 
  57 IMPLEMENT_DYNAMIC_CLASS(wxGenericFindReplaceDialog
, wxDialog
) 
  59 BEGIN_EVENT_TABLE(wxGenericFindReplaceDialog
, wxDialog
) 
  60     EVT_BUTTON(wxID_FIND
, wxGenericFindReplaceDialog::OnFind
) 
  61     EVT_BUTTON(wxID_REPLACE
, wxGenericFindReplaceDialog::OnReplace
) 
  62     EVT_BUTTON(wxID_REPLACE_ALL
, wxGenericFindReplaceDialog::OnReplaceAll
) 
  63     EVT_BUTTON(wxID_CANCEL
, wxGenericFindReplaceDialog::OnCancel
) 
  65     EVT_UPDATE_UI(wxID_FIND
, wxGenericFindReplaceDialog::OnUpdateFindUI
) 
  66     EVT_UPDATE_UI(wxID_REPLACE
, wxGenericFindReplaceDialog::OnUpdateFindUI
) 
  67     EVT_UPDATE_UI(wxID_REPLACE_ALL
, wxGenericFindReplaceDialog::OnUpdateFindUI
) 
  69     EVT_CLOSE(wxGenericFindReplaceDialog::OnCloseWindow
) 
  72 // ---------------------------------------------------------------------------- 
  73 // wxGenericFindReplaceDialog 
  74 // ---------------------------------------------------------------------------- 
  76 void wxGenericFindReplaceDialog::Init() 
  78     m_FindReplaceData 
= NULL
; 
  89 bool wxGenericFindReplaceDialog::Create(wxWindow 
*parent
, 
  90                                         wxFindReplaceData 
*data
, 
  91                                         const wxString
& title
, 
  94     if ( !wxDialog::Create(parent
, wxID_ANY
, title
, 
  95                            wxDefaultPosition
, wxDefaultSize
, 
  96                            wxDEFAULT_DIALOG_STYLE 
| wxRESIZE_BORDER 
| style
) ) 
 103     wxCHECK_MSG( m_FindReplaceData
, false, 
 104                  _T("can't create dialog without data") ); 
 106     bool isPda 
= (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA
); 
 108     wxBoxSizer 
*leftsizer 
= new wxBoxSizer( wxVERTICAL 
); 
 110     // 3 columns because there is a spacer in the middle 
 111     wxFlexGridSizer 
*sizer2Col 
= new wxFlexGridSizer(3); 
 112     sizer2Col
->AddGrowableCol(2); 
 114     sizer2Col
->Add(new wxStaticText(this, wxID_ANY
, _("Search for:"), 
 115                                     wxDefaultPosition
, wxSize(80, wxDefaultCoord
)), 
 117                                     wxALIGN_CENTRE_VERTICAL 
| wxALIGN_RIGHT
); 
 119     sizer2Col
->Add(10, 0); 
 121     m_textFind 
= new wxTextCtrl(this, wxID_ANY
, m_FindReplaceData
->GetFindString()); 
 122     sizer2Col
->Add(m_textFind
, 1, wxALIGN_CENTRE_VERTICAL 
| wxEXPAND
); 
 124     if ( style 
& wxFR_REPLACEDIALOG 
) 
 126         sizer2Col
->Add(new wxStaticText(this, wxID_ANY
, _("Replace with:"), 
 127                                         wxDefaultPosition
, wxSize(80, wxDefaultCoord
)), 
 129                                         wxALIGN_CENTRE_VERTICAL 
| 
 130                                         wxALIGN_RIGHT 
| wxTOP
, 5); 
 132         sizer2Col
->Add(isPda 
? 2 : 10, 0); 
 134         m_textRepl 
= new wxTextCtrl(this, wxID_ANY
, 
 135                                     m_FindReplaceData
->GetReplaceString()); 
 136         sizer2Col
->Add(m_textRepl
, 1, 
 137                        wxALIGN_CENTRE_VERTICAL 
| wxEXPAND 
| wxTOP
, 5); 
 140     leftsizer
->Add(sizer2Col
, 0, wxEXPAND 
| wxALL
, 5); 
 142     wxBoxSizer 
*optsizer 
= new wxBoxSizer( isPda 
? wxVERTICAL 
: wxHORIZONTAL 
); 
 144     wxBoxSizer 
*chksizer 
= new wxBoxSizer( wxVERTICAL
); 
 146     m_chkWord 
= new wxCheckBox(this, wxID_ANY
, _("Whole word")); 
 147     chksizer
->Add(m_chkWord
, 0, wxALL
, 3); 
 149     m_chkCase 
= new wxCheckBox(this, wxID_ANY
, _("Match case")); 
 150     chksizer
->Add(m_chkCase
, 0, wxALL
, 3); 
 152     optsizer
->Add(chksizer
, 0, wxALL
, 10); 
 154     static const wxString searchDirections
[] = {_("Up"), _("Down")}; 
 155     int majorDimension 
= 0; 
 158         rbStyle 
= wxRA_SPECIFY_ROWS
; 
 160         rbStyle 
= wxRA_SPECIFY_COLS
; 
 162     m_radioDir 
= new wxRadioBox(this, wxID_ANY
, _("Search direction"), 
 163                                 wxDefaultPosition
, wxDefaultSize
, 
 164                                 WXSIZEOF(searchDirections
), searchDirections
, 
 165                                 majorDimension
, rbStyle
); 
 167     optsizer
->Add(m_radioDir
, 0, wxALL
, isPda 
? 5 : 10); 
 169     leftsizer
->Add(optsizer
); 
 171     wxBoxSizer 
*bttnsizer 
= new wxBoxSizer(wxVERTICAL
); 
 173     bttnsizer
->Add(new wxButton(this, wxID_FIND
), 0, wxALL
, 3); 
 175     bttnsizer
->Add(new wxButton(this, wxID_CANCEL
), 0, wxALL
, 3); 
 177     if ( style 
& wxFR_REPLACEDIALOG 
) 
 179         bttnsizer
->Add(new wxButton(this, wxID_REPLACE
, _("&Replace")), 
 182         bttnsizer
->Add(new wxButton(this, wxID_REPLACE_ALL
, _("Replace &all")), 
 186     wxBoxSizer 
*topsizer 
= new wxBoxSizer( wxHORIZONTAL 
); 
 188     topsizer
->Add(leftsizer
, 1, wxALL
, isPda 
? 0 : 5); 
 189     topsizer
->Add(bttnsizer
, 0, wxALL
, isPda 
? 0 : 5); 
 191     int flags 
= m_FindReplaceData
->GetFlags(); 
 193     if ( flags 
& wxFR_MATCHCASE 
) 
 194         m_chkCase
->SetValue(true); 
 196     if ( flags 
& wxFR_WHOLEWORD 
) 
 197         m_chkWord
->SetValue(true); 
 199     m_radioDir
->SetSelection( flags 
& wxFR_DOWN 
); 
 201     if ( style 
& wxFR_NOMATCHCASE 
) 
 202         m_chkCase
->Enable(false); 
 204     if ( style 
& wxFR_NOWHOLEWORD 
) 
 205         m_chkWord
->Enable(false); 
 207     if ( style 
& wxFR_NOUPDOWN
) 
 208         m_radioDir
->Enable(false); 
 210     SetAutoLayout( true ); 
 211     SetSizer( topsizer 
); 
 213     topsizer
->SetSizeHints( this ); 
 214     topsizer
->Fit( this ); 
 218     m_textFind
->SetFocus(); 
 223 // ---------------------------------------------------------------------------- 
 224 // send the notification event 
 225 // ---------------------------------------------------------------------------- 
 227 void wxGenericFindReplaceDialog::SendEvent(const wxEventType
& evtType
) 
 229     wxFindDialogEvent 
event(evtType
, GetId()); 
 230     event
.SetEventObject(this); 
 231     event
.SetFindString(m_textFind
->GetValue()); 
 232     if ( HasFlag(wxFR_REPLACEDIALOG
) ) 
 234         event
.SetReplaceString(m_textRepl
->GetValue()); 
 239     if ( m_chkCase
->GetValue() ) 
 240         flags 
|= wxFR_MATCHCASE
; 
 242     if ( m_chkWord
->GetValue() ) 
 243         flags 
|= wxFR_WHOLEWORD
; 
 245     if ( !m_radioDir 
|| m_radioDir
->GetSelection() == 1 ) 
 250     event
.SetFlags(flags
); 
 252     wxFindReplaceDialogBase::Send(event
); 
 255 // ---------------------------------------------------------------------------- 
 257 // ---------------------------------------------------------------------------- 
 259 void wxGenericFindReplaceDialog::OnFind(wxCommandEvent
& WXUNUSED(event
)) 
 261     SendEvent(wxEVT_COMMAND_FIND_NEXT
); 
 264 void wxGenericFindReplaceDialog::OnReplace(wxCommandEvent
& WXUNUSED(event
)) 
 266     SendEvent(wxEVT_COMMAND_FIND_REPLACE
); 
 269 void wxGenericFindReplaceDialog::OnReplaceAll(wxCommandEvent
& WXUNUSED(event
)) 
 271     SendEvent(wxEVT_COMMAND_FIND_REPLACE_ALL
); 
 274 void wxGenericFindReplaceDialog::OnCancel(wxCommandEvent
& WXUNUSED(event
)) 
 276     SendEvent(wxEVT_COMMAND_FIND_CLOSE
); 
 281 void wxGenericFindReplaceDialog::OnUpdateFindUI(wxUpdateUIEvent 
&event
) 
 283     // we can't search for empty strings 
 284     event
.Enable( !m_textFind
->GetValue().empty() ); 
 287 void wxGenericFindReplaceDialog::OnCloseWindow(wxCloseEvent 
&) 
 289     SendEvent(wxEVT_COMMAND_FIND_CLOSE
); 
 292 #endif // wxUSE_FINDREPLDLG