#include "../sample.xpm"
+#include "wx/apptrait.h"
#include "wx/datetime.h"
#include "wx/image.h"
#include "wx/bookctrl.h"
#include "wx/fdrepdlg.h"
#endif // wxUSE_FINDREPLDLG
-#if wxUSE_SPINCTRL
#include "wx/spinctrl.h"
-#endif
-
#include "wx/propdlg.h"
#include "dialogs.h"
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
#if wxUSE_MSGDLG
EVT_MENU(DIALOGS_MESSAGE_BOX, MyFrame::MessageBox)
+ EVT_MENU(DIALOGS_MESSAGE_DIALOG, MyFrame::MessageBoxDialog)
EVT_MENU(DIALOGS_MESSAGE_BOX_WXINFO, MyFrame::MessageBoxInfo)
#endif // wxUSE_MSGDLG
#if wxUSE_COLOURDLG
wxMenu *menuDlg = new wxMenu;
menuDlg->Append(DIALOGS_MESSAGE_BOX, _T("&Message box\tCtrl-M"));
+ menuDlg->Append(DIALOGS_MESSAGE_DIALOG, _T("Message dialog\tShift-Ctrl-M"));
#if wxUSE_COLOURDLG || wxUSE_FONTDLG || wxUSE_CHOICEDLG
#endif // wxUSE_LOG_DIALOG
#if wxUSE_MSGDLG
-void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event) )
+void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event))
{
wxMessageDialog dialog(this,
"This is a message box\n"
"A long, long string to test out the message box "
"layout properly.",
"Message box text",
- wxCENTER | wxNO_DEFAULT | wxYES_NO | wxCANCEL | wxICON_INFORMATION);
+ wxVSCROLL | wxCENTER |
+ wxNO_DEFAULT | wxYES_NO | wxCANCEL |
+ wxICON_INFORMATION);
wxString extmsg;
if ( dialog.SetYesNoCancelLabels
) )
{
extmsg = "This platform supports custom button labels,\n"
- "so you should see the descriptiva text below.";
+ "so you should see the descriptive labels below.";
}
else
{
}
}
+void MyFrame::MessageBoxDialog(wxCommandEvent& WXUNUSED(event))
+{
+ TestMessageBoxDialog dlg(this);
+ dlg.ShowModal();
+}
+
void MyFrame::MessageBoxInfo(wxCommandEvent& WXUNUSED(event))
{
::wxInfoMessageBox(this);
m_catchListBoxDClick = false;
wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
-
+
wxFlexGridSizer *grid_sizer = new wxFlexGridSizer( 2, 5, 5 );
-
+
wxListBox *listbox = new wxListBox( this, ID_LISTBOX );
listbox->Append( "String 1" );
listbox->Append( "String 2" );
listbox->Append( "String 3" );
listbox->Append( "String 4" );
grid_sizer->Add( listbox );
-
+
grid_sizer->Add( new wxCheckBox( this, ID_CATCH_LISTBOX_DCLICK, "Catch DoubleClick from wxListBox" ), 0, wxALIGN_CENTRE_VERTICAL );
-
+
grid_sizer->Add( new wxTextCtrl( this, -1, "", wxDefaultPosition, wxSize(80,-1), 0 ), 0, wxALIGN_CENTRE_VERTICAL );
grid_sizer->Add( new wxStaticText( this, -1, "wxTextCtrl without wxTE_PROCESS_ENTER" ), 0, wxALIGN_CENTRE_VERTICAL );
-
+
grid_sizer->Add( new wxTextCtrl( this, -1, "", wxDefaultPosition, wxSize(80,-1), wxTE_PROCESS_ENTER ), 0, wxALIGN_CENTRE_VERTICAL );
grid_sizer->Add( new wxStaticText( this, -1, "wxTextCtrl with wxTE_PROCESS_ENTER" ), 0, wxALIGN_CENTRE_VERTICAL );
-
+
main_sizer->Add( grid_sizer, 0, wxALL, 10 );
-
+
wxSizer *button_sizer = CreateSeparatedButtonSizer( wxOK|wxCANCEL );
if (button_sizer)
main_sizer->Add( button_sizer, 0, wxALL|wxGROW, 5 );
-
+
SetSizerAndFit( main_sizer );
}
-
+
void TestDefaultActionDialog::OnListBoxDClick(wxCommandEvent& event)
{
event.Skip( !m_catchListBoxDClick );
return panel;
}
+// ----------------------------------------------------------------------------
+// TestMessageBoxDialog
+// ----------------------------------------------------------------------------
+
+/* static */
+const TestMessageBoxDialog::BtnInfo TestMessageBoxDialog::ms_btnInfo[] =
+{
+ { wxYES, "&Yes" },
+ { wxNO, "&No" },
+ { wxOK, "&Ok" },
+ { wxCANCEL, "&Cancel" },
+};
+
+BEGIN_EVENT_TABLE(TestMessageBoxDialog, wxDialog)
+ EVT_BUTTON(wxID_APPLY, TestMessageBoxDialog::OnApply)
+ EVT_BUTTON(wxID_CLOSE, TestMessageBoxDialog::OnClose)
+END_EVENT_TABLE()
+
+TestMessageBoxDialog::TestMessageBoxDialog(wxWindow *parent)
+ : wxDialog(parent, wxID_ANY, "Message Box Test Dialog",
+ wxDefaultPosition, wxDefaultSize,
+ wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+{
+ wxSizer * const sizerTop = new wxBoxSizer(wxVERTICAL);
+
+ // this sizer allows to configure the messages shown in the message box
+ wxSizer * const
+ sizerMsgs = new wxStaticBoxSizer(wxVERTICAL, this, "&Messages");
+ sizerMsgs->Add(new wxStaticText(this, wxID_ANY, "&Main message:"));
+ m_textMsg = new wxTextCtrl(this, wxID_ANY, "Hello from a box!",
+ wxDefaultPosition, wxDefaultSize,
+ wxTE_MULTILINE);
+ sizerMsgs->Add(m_textMsg, wxSizerFlags(1).Expand().Border(wxBOTTOM));
+
+ sizerMsgs->Add(new wxStaticText(this, wxID_ANY, "&Extended message:"));
+ m_textExtMsg = new wxTextCtrl(this, wxID_ANY, "",
+ wxDefaultPosition, wxDefaultSize,
+ wxTE_MULTILINE);
+ sizerMsgs->Add(m_textExtMsg, wxSizerFlags(1).Expand());
+
+ sizerTop->Add(sizerMsgs, wxSizerFlags(1).Expand().Border());
+
+
+ // this one is for configuring the buttons
+ wxFlexGridSizer * const sizerBtns = new wxFlexGridSizer(2, 5, 5);
+ sizerBtns->AddGrowableCol(1);
+
+ sizerBtns->Add(new wxStaticText(this, wxID_ANY, "Button(s)"));
+ sizerBtns->Add(new wxStaticText(this, wxID_ANY, "Custom label"));
+
+ for ( int n = 0; n < Btn_Max; n++ )
+ {
+ m_buttons[n] = new wxCheckBox(this, wxID_ANY, ms_btnInfo[n].name);
+ sizerBtns->Add(m_buttons[n], wxSizerFlags().Centre().Left());
+
+ m_labels[n] = new wxTextCtrl(this, wxID_ANY);
+ sizerBtns->Add(m_labels[n], wxSizerFlags(1).Centre().Expand());
+
+ m_labels[n]->Connect(wxEVT_UPDATE_UI,
+ wxUpdateUIEventHandler(
+ TestMessageBoxDialog::OnUpdateLabelUI),
+ NULL,
+ this);
+ }
+
+ wxSizer * const
+ sizerBtnsBox = new wxStaticBoxSizer(wxVERTICAL, this, "&Buttons");
+ sizerBtnsBox->Add(sizerBtns, wxSizerFlags(1).Expand());
+ sizerTop->Add(sizerBtnsBox, wxSizerFlags().Expand().Border());
+
+
+ // icon choice
+ const wxString icons[] = {
+ "&Information", "&Question", "&Warning", "&Error"
+ };
+
+ m_icons = new wxRadioBox(this, wxID_ANY, "&Icon:",
+ wxDefaultPosition, wxDefaultSize,
+ WXSIZEOF(icons), icons);
+ sizerTop->Add(m_icons, wxSizerFlags().Expand().Border());
+
+
+ // miscellaneous other stuff
+ wxSizer * const
+ sizerFlags = new wxStaticBoxSizer(wxHORIZONTAL, this, "&Other flags");
+
+ m_chkNoDefault = new wxCheckBox(this, wxID_ANY, "Make \"No\" &default");
+ m_chkNoDefault->Connect(wxEVT_UPDATE_UI,
+ wxUpdateUIEventHandler(
+ TestMessageBoxDialog::OnUpdateNoDefaultUI),
+ NULL,
+ this);
+ sizerFlags->Add(m_chkNoDefault, wxSizerFlags(1).Border());
+
+ m_chkCentre = new wxCheckBox(this, wxID_ANY, "Centre on &parent");
+ sizerFlags->Add(m_chkCentre, wxSizerFlags(1).Border());
+
+ sizerTop->Add(sizerFlags, wxSizerFlags().Expand().Border());
+
+ // finally buttons to show the resulting message box and close this dialog
+ sizerTop->Add(CreateStdDialogButtonSizer(wxAPPLY | wxCLOSE),
+ wxSizerFlags().Right().Border());
+
+ SetSizerAndFit(sizerTop);
+
+ m_buttons[Btn_Ok]->SetValue(true);
+}
+
+void TestMessageBoxDialog::OnUpdateLabelUI(wxUpdateUIEvent& event)
+{
+ for ( int n = 0; n < Btn_Max; n++ )
+ {
+ if ( event.GetEventObject() == m_labels[n] )
+ {
+ event.Enable( m_buttons[n]->IsChecked() );
+ return;
+ }
+ }
+
+ wxFAIL_MSG( "called for unknown label" );
+}
+
+void TestMessageBoxDialog::OnUpdateNoDefaultUI(wxUpdateUIEvent& event)
+{
+ event.Enable( m_buttons[Btn_No]->IsChecked() );
+}
+
+void TestMessageBoxDialog::OnApply(wxCommandEvent& WXUNUSED(event))
+{
+ long style = 0;
+
+ for ( int n = 0; n < Btn_Max; n++ )
+ {
+ if ( m_buttons[n]->IsChecked() )
+ style |= ms_btnInfo[n].flag;
+ }
+
+ switch ( m_icons->GetSelection() )
+ {
+ case 0: style |= wxICON_INFORMATION; break;
+ case 1: style |= wxICON_QUESTION; break;
+ case 2: style |= wxICON_WARNING; break;
+ case 3: style |= wxICON_ERROR; break;
+ }
+
+ if ( m_chkCentre->IsChecked() )
+ style |= wxCENTRE;
+
+ if ( m_chkNoDefault->IsEnabled() && m_chkNoDefault->IsChecked() )
+ style |= wxNO_DEFAULT;
+
+
+ wxMessageDialog dlg(this, m_textMsg->GetValue(), "Test Message Box",
+ style);
+ if ( !m_textExtMsg->IsEmpty() )
+ dlg.SetExtendedMessage(m_textExtMsg->GetValue());
+
+ if ( style & wxYES_NO )
+ {
+ if ( style & wxCANCEL )
+ {
+ dlg.SetYesNoCancelLabels(m_labels[Btn_Yes]->GetValue(),
+ m_labels[Btn_No]->GetValue(),
+ m_labels[Btn_Cancel]->GetValue());
+ }
+ else
+ {
+ dlg.SetYesNoLabels(m_labels[Btn_Yes]->GetValue(),
+ m_labels[Btn_No]->GetValue());
+ }
+ }
+ else
+ {
+ if ( style & wxCANCEL )
+ {
+ dlg.SetOKCancelLabels(m_labels[Btn_Ok]->GetValue(),
+ m_labels[Btn_Cancel]->GetValue());
+ }
+ else
+ {
+ dlg.SetOKLabel(m_labels[Btn_Ok]->GetValue());
+ }
+ }
+
+ dlg.ShowModal();
+}
+
+void TestMessageBoxDialog::OnClose(wxCommandEvent& WXUNUSED(event))
+{
+ EndModal(wxID_CANCEL);
+}
+
#endif // USE_SETTINGS_DIALOG
+
+#if wxUSE_LOG
+
+// ----------------------------------------------------------------------------
+// custom log target
+// ----------------------------------------------------------------------------
+
+class MyLogGui : public wxLogGui
+{
+private:
+ virtual void DoShowSingleLogMessage(const wxString& message,
+ const wxString& title,
+ int style)
+ {
+ wxMessageDialog dlg(NULL, message, title,
+ wxOK | wxCANCEL | wxCANCEL_DEFAULT | style);
+ dlg.SetOKCancelLabels(wxID_COPY, wxID_OK);
+ dlg.SetExtendedMessage("Note that this is a custom log dialog.");
+ dlg.ShowModal();
+ }
+};
+
+wxLog *MyAppTraits::CreateLogTarget()
+{
+ return new MyLogGui;
+}
+
+#endif // wxUSE_LOG