added generic implementation and documentation for wxFindReplaceDialog
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11232 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
288
src/generic/fdrepdlg.cpp
Normal file
288
src/generic/fdrepdlg.cpp
Normal file
@@ -0,0 +1,288 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/generic/fdrepgg.cpp
|
||||
// Purpose: Find/Replace dialogs
|
||||
// Author: Markus Greither and Vadim Zeitlin
|
||||
// Modified by:
|
||||
// Created: 05/25/01
|
||||
// RCS-ID:
|
||||
// Copyright: (c) wxWindows team
|
||||
// Licence: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ============================================================================
|
||||
// declarations
|
||||
// ============================================================================
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation "genericfdrepdlg.h"
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// headers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// For compilers that support precompilation, includes "wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#if wxUSE_FINDREPLDLG
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/intl.h"
|
||||
#include "wx/log.h"
|
||||
|
||||
#include "wx/sizer.h"
|
||||
|
||||
#include "wx/button.h"
|
||||
#include "wx/checkbox.h"
|
||||
#include "wx/radiobox.h"
|
||||
#include "wx/stattext.h"
|
||||
#include "wx/textctrl.h"
|
||||
#endif
|
||||
|
||||
#include "wx/fdrepdlg.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// constants
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
enum
|
||||
{
|
||||
wxID_REPLACE = 5890,
|
||||
wxID_REPLACE_ALL
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxGenericFindReplaceDialog, wxDialog)
|
||||
|
||||
BEGIN_EVENT_TABLE(wxGenericFindReplaceDialog, wxDialog)
|
||||
EVT_BUTTON(wxID_FIND, wxGenericFindReplaceDialog::OnFind)
|
||||
EVT_BUTTON(wxID_REPLACE, wxGenericFindReplaceDialog::OnReplace)
|
||||
EVT_BUTTON(wxID_REPLACE_ALL, wxGenericFindReplaceDialog::OnReplaceAll)
|
||||
EVT_BUTTON(wxID_CANCEL, wxGenericFindReplaceDialog::OnCancel)
|
||||
|
||||
EVT_UPDATE_UI(wxID_FIND, wxGenericFindReplaceDialog::OnUpdateFindUI)
|
||||
EVT_UPDATE_UI(wxID_REPLACE, wxGenericFindReplaceDialog::OnUpdateFindUI)
|
||||
EVT_UPDATE_UI(wxID_REPLACE_ALL, wxGenericFindReplaceDialog::OnUpdateFindUI)
|
||||
|
||||
EVT_CLOSE(wxGenericFindReplaceDialog::OnCloseWindow)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGenericFindReplaceDialog
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxGenericFindReplaceDialog::Init()
|
||||
{
|
||||
m_FindReplaceData = NULL;
|
||||
|
||||
m_chkWord =
|
||||
m_chkCase = NULL;
|
||||
|
||||
m_radioDir = NULL;
|
||||
|
||||
m_textFind =
|
||||
m_textRepl = NULL;
|
||||
}
|
||||
|
||||
bool wxGenericFindReplaceDialog::Create(wxWindow *parent,
|
||||
wxFindReplaceData *data,
|
||||
const wxString& title,
|
||||
int style)
|
||||
{
|
||||
if ( !wxDialog::Create(parent, -1, title,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | style) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
SetData(data);
|
||||
|
||||
wxCHECK_MSG( m_FindReplaceData, FALSE,
|
||||
_T("can't create dialog without data") );
|
||||
|
||||
wxBoxSizer *leftsizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
// 3 columns because there is a spacer in the middle
|
||||
wxFlexGridSizer *sizer2Col = new wxFlexGridSizer(3);
|
||||
sizer2Col->AddGrowableCol(2);
|
||||
|
||||
sizer2Col->Add(new wxStaticText(this, -1, _("Search for:"),
|
||||
wxDefaultPosition, wxSize(80, -1)),
|
||||
0,
|
||||
wxALIGN_CENTRE_VERTICAL | wxALIGN_RIGHT);
|
||||
|
||||
sizer2Col->Add(10, 0);
|
||||
|
||||
m_textFind = new wxTextCtrl(this, -1, m_FindReplaceData->GetFindString());
|
||||
sizer2Col->Add(m_textFind, 1, wxALIGN_CENTRE_VERTICAL | wxEXPAND);
|
||||
|
||||
if ( style & wxFR_REPLACEDIALOG )
|
||||
{
|
||||
sizer2Col->Add(new wxStaticText(this, -1, _("Replace with:"),
|
||||
wxDefaultPosition, wxSize(80, -1)),
|
||||
0,
|
||||
wxALIGN_CENTRE_VERTICAL |
|
||||
wxALIGN_RIGHT | wxTOP, 5);
|
||||
|
||||
sizer2Col->Add(10, 0);
|
||||
|
||||
m_textRepl = new wxTextCtrl(this, -1,
|
||||
m_FindReplaceData->GetReplaceString());
|
||||
sizer2Col->Add(m_textRepl, 1,
|
||||
wxALIGN_CENTRE_VERTICAL | wxEXPAND | wxTOP, 5);
|
||||
}
|
||||
|
||||
leftsizer->Add(sizer2Col, 0, wxEXPAND | wxALL, 5);
|
||||
|
||||
wxBoxSizer *optsizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxBoxSizer *chksizer = new wxBoxSizer( wxVERTICAL);
|
||||
|
||||
m_chkWord = new wxCheckBox(this, -1, _("Whole word"));
|
||||
chksizer->Add(m_chkWord, 0, wxALL, 3);
|
||||
|
||||
m_chkCase = new wxCheckBox(this, -1, _("Match case"));
|
||||
chksizer->Add(m_chkCase, 0, wxALL, 3);
|
||||
|
||||
optsizer->Add(chksizer, 0, wxALL, 10);
|
||||
|
||||
static const wxString searchDirections[] = {_("Up"), _("Down")};
|
||||
m_radioDir = new wxRadioBox(this, -1, _("Search direction"),
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
WXSIZEOF(searchDirections), searchDirections);
|
||||
|
||||
optsizer->Add(m_radioDir, 0, wxALL, 10);
|
||||
|
||||
leftsizer->Add(optsizer);
|
||||
|
||||
wxBoxSizer *bttnsizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
bttnsizer->Add(new wxButton(this, wxID_FIND, _("&Find")), 0, wxALL, 3);
|
||||
|
||||
bttnsizer->Add(new wxButton(this, wxID_CANCEL, _("&Cancel")), 0, wxALL, 3);
|
||||
|
||||
if ( style & wxFR_REPLACEDIALOG )
|
||||
{
|
||||
bttnsizer->Add(new wxButton(this, wxID_REPLACE, _("&Replace")),
|
||||
0, wxALL, 3);
|
||||
|
||||
bttnsizer->Add(new wxButton(this, wxID_REPLACE_ALL, _("Replace &all")),
|
||||
0, wxALL, 3);
|
||||
}
|
||||
|
||||
wxBoxSizer *topsizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
topsizer->Add(leftsizer, 1, wxALL, 5);
|
||||
topsizer->Add(bttnsizer, 0, wxALL, 5);
|
||||
|
||||
int flags = m_FindReplaceData->GetFlags();
|
||||
|
||||
if ( flags & wxFR_MATCHCASE )
|
||||
m_chkCase->SetValue(TRUE);
|
||||
|
||||
if ( flags & wxFR_WHOLEWORD )
|
||||
m_chkWord->SetValue(TRUE);
|
||||
|
||||
m_radioDir->SetSelection( flags & wxFR_DOWN );
|
||||
|
||||
if ( style & wxFR_NOMATCHCASE )
|
||||
m_chkCase->Enable(FALSE);
|
||||
|
||||
if ( style & wxFR_NOWHOLEWORD )
|
||||
m_chkWord->Enable(FALSE);
|
||||
|
||||
if ( style & wxFR_NOUPDOWN)
|
||||
m_radioDir->Enable(FALSE);
|
||||
|
||||
SetAutoLayout( TRUE );
|
||||
SetSizer( topsizer );
|
||||
|
||||
topsizer->SetSizeHints( this );
|
||||
topsizer->Fit( this );
|
||||
|
||||
Centre( wxBOTH );
|
||||
|
||||
m_textFind->SetFocus();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// send the notification event
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxGenericFindReplaceDialog::SendEvent(const wxEventType& evtType)
|
||||
{
|
||||
wxFindDialogEvent event(evtType, GetId());
|
||||
event.SetEventObject(this);
|
||||
event.SetFindString(m_textFind->GetValue());
|
||||
if ( HasFlag(wxFR_REPLACEDIALOG) )
|
||||
{
|
||||
event.SetReplaceString(m_textRepl->GetValue());
|
||||
}
|
||||
|
||||
int flags = 0;
|
||||
|
||||
if ( m_chkCase->GetValue() )
|
||||
flags |= wxFR_MATCHCASE;
|
||||
|
||||
if ( m_chkWord->GetValue() )
|
||||
flags |= wxFR_WHOLEWORD;
|
||||
|
||||
if ( !m_radioDir || m_radioDir->GetSelection() == 1 )
|
||||
{
|
||||
flags |= wxFR_DOWN;
|
||||
}
|
||||
|
||||
event.SetFlags(flags);
|
||||
|
||||
wxFindReplaceDialogBase::Send(event);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// event handlers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxGenericFindReplaceDialog::OnFind(wxCommandEvent& event)
|
||||
{
|
||||
SendEvent(wxEVT_COMMAND_FIND_NEXT);
|
||||
}
|
||||
|
||||
void wxGenericFindReplaceDialog::OnReplace(wxCommandEvent& event)
|
||||
{
|
||||
SendEvent(wxEVT_COMMAND_FIND_REPLACE);
|
||||
}
|
||||
|
||||
void wxGenericFindReplaceDialog::OnReplaceAll(wxCommandEvent& event)
|
||||
{
|
||||
SendEvent(wxEVT_COMMAND_FIND_REPLACE_ALL);
|
||||
}
|
||||
|
||||
void wxGenericFindReplaceDialog::OnCancel(wxCommandEvent& event)
|
||||
{
|
||||
SendEvent(wxEVT_COMMAND_FIND_CLOSE);
|
||||
|
||||
Show(FALSE);
|
||||
}
|
||||
|
||||
void wxGenericFindReplaceDialog::OnUpdateFindUI(wxUpdateUIEvent &event)
|
||||
{
|
||||
// we can't search for empty strings
|
||||
event.Enable( !m_textFind->GetValue().empty() );
|
||||
}
|
||||
|
||||
void wxGenericFindReplaceDialog::OnCloseWindow(wxCloseEvent &)
|
||||
{
|
||||
SendEvent(wxEVT_COMMAND_FIND_CLOSE);
|
||||
}
|
||||
|
||||
#endif // wxUSE_FINDREPLDLG
|
||||
|
Reference in New Issue
Block a user