dolphin/Externals/wxWidgets3/src/generic/fdrepdlg.cpp

293 lines
8.7 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/generic/fdrepdlg.cpp
// Purpose: Find/Replace dialogs
// Author: Markus Greither and Vadim Zeitlin
// Modified by:
// Created: 05/25/01
// Copyright: (c) wxWidgets team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// 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"
#include "wx/settings.h"
#endif
#include "wx/fdrepdlg.h"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
// ============================================================================
// 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)
{
parent = GetParentForModalDialog(parent, style);
if ( !wxDialog::Create(parent, wxID_ANY, title,
wxDefaultPosition, wxDefaultSize,
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER
| style) )
{
return false;
}
SetData(data);
wxCHECK_MSG( m_FindReplaceData, false,
wxT("can't create dialog without data") );
bool isPda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA);
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, wxID_ANY, _("Search for:"),
wxDefaultPosition, wxSize(80, wxDefaultCoord)),
0,
wxALIGN_CENTRE_VERTICAL | wxALIGN_RIGHT);
sizer2Col->Add(10, 0);
m_textFind = new wxTextCtrl(this, wxID_ANY, m_FindReplaceData->GetFindString());
sizer2Col->Add(m_textFind, 1, wxALIGN_CENTRE_VERTICAL | wxEXPAND);
if ( style & wxFR_REPLACEDIALOG )
{
sizer2Col->Add(new wxStaticText(this, wxID_ANY, _("Replace with:"),
wxDefaultPosition, wxSize(80, wxDefaultCoord)),
0,
wxALIGN_CENTRE_VERTICAL |
wxALIGN_RIGHT | wxTOP, 5);
sizer2Col->Add(isPda ? 2 : 10, 0);
m_textRepl = new wxTextCtrl(this, wxID_ANY,
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( isPda ? wxVERTICAL : wxHORIZONTAL );
wxBoxSizer *chksizer = new wxBoxSizer( wxVERTICAL);
m_chkWord = new wxCheckBox(this, wxID_ANY, _("Whole word"));
chksizer->Add(m_chkWord, 0, wxALL, 3);
m_chkCase = new wxCheckBox(this, wxID_ANY, _("Match case"));
chksizer->Add(m_chkCase, 0, wxALL, 3);
optsizer->Add(chksizer, 0, wxALL, 10);
static const wxString searchDirections[] = {_("Up"), _("Down")};
int majorDimension = 0;
int rbStyle ;
if (isPda)
rbStyle = wxRA_SPECIFY_ROWS;
else
rbStyle = wxRA_SPECIFY_COLS;
m_radioDir = new wxRadioBox(this, wxID_ANY, _("Search direction"),
wxDefaultPosition, wxDefaultSize,
WXSIZEOF(searchDirections), searchDirections,
majorDimension, rbStyle);
optsizer->Add(m_radioDir, 0, wxALL, isPda ? 5 : 10);
leftsizer->Add(optsizer);
wxBoxSizer *bttnsizer = new wxBoxSizer(wxVERTICAL);
wxButton* btn = new wxButton(this, wxID_FIND);
btn->SetDefault();
bttnsizer->Add(btn, 0, wxALL, 3);
bttnsizer->Add(new wxButton(this, wxID_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, isPda ? 0 : 5);
topsizer->Add(bttnsizer, 0, wxALL, isPda ? 0 : 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& WXUNUSED(event))
{
SendEvent(wxEVT_FIND_NEXT);
}
void wxGenericFindReplaceDialog::OnReplace(wxCommandEvent& WXUNUSED(event))
{
SendEvent(wxEVT_FIND_REPLACE);
}
void wxGenericFindReplaceDialog::OnReplaceAll(wxCommandEvent& WXUNUSED(event))
{
SendEvent(wxEVT_FIND_REPLACE_ALL);
}
void wxGenericFindReplaceDialog::OnCancel(wxCommandEvent& WXUNUSED(event))
{
SendEvent(wxEVT_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_FIND_CLOSE);
}
#endif // wxUSE_FINDREPLDLG