#include "wx/sysopt.h"
#include "wx/notifmsg.h"
+#if wxUSE_RICHMSGDLG
+ #include "wx/richmsgdlg.h"
+#endif // wxUSE_RICHMSGDLG
+
#if wxUSE_COLOURDLG
#include "wx/colordlg.h"
#endif // wxUSE_COLOURDLG
EVT_MENU(DIALOGS_MESSAGE_DIALOG, MyFrame::MessageBoxDialog)
EVT_MENU(DIALOGS_MESSAGE_BOX_WXINFO, MyFrame::MessageBoxInfo)
#endif // wxUSE_MSGDLG
+#if wxUSE_RICHMSGDLG
+ EVT_MENU(DIALOGS_RICH_MESSAGE_DIALOG, MyFrame::RichMessageDialog)
+#endif // wxUSE_RICHMSGDLG
#if wxUSE_COLOURDLG
EVT_MENU(DIALOGS_CHOOSE_COLOUR, MyFrame::ChooseColour)
EVT_MENU(DIALOGS_GET_COLOUR, MyFrame::GetColour)
menuDlg->Append(DIALOGS_MESSAGE_BOX, wxT("&Message box\tCtrl-M"));
menuDlg->Append(DIALOGS_MESSAGE_BOX_WINDOW_MODAL, wxT("Window-Modal Message box "));
menuDlg->Append(DIALOGS_MESSAGE_DIALOG, wxT("Message dialog\tShift-Ctrl-M"));
+#if wxUSE_RICHMSGDLG
+ menuDlg->Append(DIALOGS_RICH_MESSAGE_DIALOG, wxT("Rich message dialog"));
+#endif // wxUSE_RICHMSGDLG
#if wxUSE_COLOURDLG || wxUSE_FONTDLG || wxUSE_CHOICEDLG
void MyFrame::MessageBoxDialog(wxCommandEvent& WXUNUSED(event))
{
TestMessageBoxDialog dlg(this);
+ dlg.Create();
dlg.ShowModal();
}
}
#endif // wxUSE_MSGDLG
+#if wxUSE_RICHMSGDLG
+void MyFrame::RichMessageDialog(wxCommandEvent& WXUNUSED(event))
+{
+ TestRichMessageDialog dlg(this);
+ dlg.Create();
+ dlg.ShowModal();
+}
+#endif // wxUSE_RICHMSGDLG
+
#if wxUSE_NUMBERDLG
void MyFrame::NumericEntry(wxCommandEvent& WXUNUSED(event))
{
{
static const int max = 100;
- wxProgressDialog dialog(wxT("Progress dialog example"),
- wxT("An informative message"),
+ wxProgressDialog dialog("Progress dialog example",
+ // "Reserve" enough space for the multiline
+ // messages below, we'll change it anyhow
+ // immediately in the loop below
+ wxString(' ', 100) + "\n\n\n\n",
max, // range
this, // parent
wxPD_CAN_ABORT |
wxPD_CAN_SKIP |
wxPD_APP_MODAL |
- // wxPD_AUTO_HIDE | -- try this as well
+ //wxPD_AUTO_HIDE | // -- try this as well
wxPD_ELAPSED_TIME |
wxPD_ESTIMATED_TIME |
- wxPD_REMAINING_TIME
- | wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small
+ wxPD_REMAINING_TIME |
+ wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small
);
bool cont = true;
for ( int i = 0; i <= max; i++ )
{
- wxMilliSleep(200);
-
wxString msg;
// test both modes of wxProgressDialog behaviour: start in
if ( i == max )
{
- msg = wxT("That's all, folks!");
+ msg = "That's all, folks!\n"
+ "\n"
+ "Nothing to see here any more.";
}
else if ( !determinate )
{
- msg = wxT("Testing indeterminate mode");
+ msg = "Testing indeterminate mode\n"
+ "\n"
+ "This mode allows you to show to the user\n"
+ "that something is going on even if you don't know\n"
+ "when exactly will you finish.";
}
else if ( determinate )
{
- msg = wxT("Now in standard determinate mode");
+ msg = "Now in standard determinate mode\n"
+ "\n"
+ "This is the standard usage mode in which you\n"
+ "update the dialog after performing each new step of work.\n"
+ "It requires knowing the total number of steps in advance.";
}
// will be set to true if "Skip" button was pressed
// each skip will move progress about quarter forward
if ( skip )
+ {
i += max/4;
+ if ( i >= 100 )
+ i = 99;
+ }
+
if ( !cont )
{
if ( wxMessageBox(wxT("Do you really want to cancel?"),
cont = true;
dialog.Resume();
}
+
+ wxMilliSleep(200);
}
if ( !cont )
return panel;
}
+#endif // USE_SETTINGS_DIALOG
+
+#if wxUSE_MSGDLG
// ----------------------------------------------------------------------------
// TestMessageBoxDialog
// ----------------------------------------------------------------------------
: wxDialog(parent, wxID_ANY, "Message Box Test Dialog",
wxDefaultPosition, wxDefaultSize,
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+{
+}
+
+bool TestMessageBoxDialog::Create()
{
wxSizer * const sizerTop = new wxBoxSizer(wxVERTICAL);
sizerTop->Add(sizerMsgs, wxSizerFlags(1).Expand().Border());
+ // if a derived class provides more message configurations, add these.
+ AddAdditionalTextOptions(sizerTop);
// this one is for configuring the buttons
wxSizer * const
sizerBtnsBox = new wxStaticBoxSizer(wxVERTICAL, this, "&Buttons");
-
+
wxFlexGridSizer * const sizerBtns = new wxFlexGridSizer(2, 5, 5);
sizerBtns->AddGrowableCol(1);
m_chkCentre = new wxCheckBox(this, wxID_ANY, "Centre on &parent");
sizerFlags->Add(m_chkCentre, wxSizerFlags(1).Border());
+ // add any additional flag from subclasses
+ AddAdditionalFlags(sizerFlags);
+
sizerTop->Add(sizerFlags, wxSizerFlags().Expand().Border());
// finally buttons to show the resulting message box and close this dialog
SetSizerAndFit(sizerTop);
m_buttons[Btn_Ok]->SetValue(true);
+
+ return true;
}
void TestMessageBoxDialog::OnUpdateLabelUI(wxUpdateUIEvent& event)
event.Enable( m_buttons[Btn_No]->IsChecked() );
}
-void TestMessageBoxDialog::OnApply(wxCommandEvent& WXUNUSED(event))
+long TestMessageBoxDialog::GetStyle()
{
long style = 0;
if ( m_chkNoDefault->IsEnabled() && m_chkNoDefault->IsChecked() )
style |= wxNO_DEFAULT;
+ return style;
+}
+
+void TestMessageBoxDialog::PrepareMessageDialog(wxMessageDialogBase &dlg)
+{
+ long style = dlg.GetMessageDialogStyle();
- wxMessageDialog dlg(this, m_textMsg->GetValue(), "Test Message Box",
- style);
if ( !m_textExtMsg->IsEmpty() )
dlg.SetExtendedMessage(m_textExtMsg->GetValue());
dlg.SetOKLabel(m_labels[Btn_Ok]->GetValue());
}
}
+}
+
+void TestMessageBoxDialog::OnApply(wxCommandEvent& WXUNUSED(event))
+{
+ wxMessageDialog dlg(this, GetMessage(), "Test Message Box", GetStyle());
+ PrepareMessageDialog(dlg);
dlg.ShowModal();
}
{
EndModal(wxID_CANCEL);
}
+#endif // wxUSE_MSGDLG
-#endif // USE_SETTINGS_DIALOG
+#if wxUSE_RICHMSGDLG
+// ----------------------------------------------------------------------------
+// TestRichMessageDialog
+// ----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(TestRichMessageDialog, TestMessageBoxDialog)
+ EVT_BUTTON(wxID_APPLY, TestRichMessageDialog::OnApply)
+END_EVENT_TABLE()
+
+TestRichMessageDialog::TestRichMessageDialog(wxWindow *parent)
+ : TestMessageBoxDialog(parent)
+{
+ SetTitle("Rich Message Dialog Test Dialog");
+}
+
+void TestRichMessageDialog::AddAdditionalTextOptions(wxSizer *sizer)
+{
+ wxSizer * const sizerMsgs = new wxStaticBoxSizer(wxVERTICAL, this,
+ "&Additional Elements");
+
+ // add a option to show a check box.
+ wxFlexGridSizer * const sizerCheckBox = new wxFlexGridSizer(2, 5, 5);
+ sizerCheckBox->AddGrowableCol(1);
+ sizerCheckBox->Add(new wxStaticText(this, wxID_ANY, "&Check box:"));
+ m_textCheckBox = new wxTextCtrl(this, wxID_ANY);
+ sizerCheckBox->Add(m_textCheckBox, wxSizerFlags(1).Expand().Border(wxBOTTOM));
+ sizerMsgs->Add(sizerCheckBox, wxSizerFlags(1).Expand());
+
+ // add option to show a detailed text.
+ sizerMsgs->Add(new wxStaticText(this, wxID_ANY, "&Detailed message:"));
+ m_textDetailed = new wxTextCtrl(this, wxID_ANY, "",
+ wxDefaultPosition, wxDefaultSize,
+ wxTE_MULTILINE);
+ sizerMsgs->Add(m_textDetailed, wxSizerFlags(1).Expand());
+
+ sizer->Add(sizerMsgs, wxSizerFlags(1).Expand().Border());
+}
+
+void TestRichMessageDialog::AddAdditionalFlags(wxSizer *sizer)
+{
+ // add checkbox to set the initial state for the checkbox shown
+ // in the dialog.
+ m_initialValueCheckBox =
+ new wxCheckBox(this, wxID_ANY, "Checkbox initially checked");
+ sizer->Add(m_initialValueCheckBox, wxSizerFlags(1).Border());
+}
+
+void TestRichMessageDialog::OnApply(wxCommandEvent& WXUNUSED(event))
+{
+ wxRichMessageDialog dlg(this, GetMessage(), "Test Rich Message Dialog",
+ GetStyle());
+ PrepareMessageDialog(dlg);
+
+ dlg.ShowCheckBox(m_textCheckBox->GetValue(),
+ m_initialValueCheckBox->GetValue());
+ dlg.ShowDetailedText(m_textDetailed->GetValue());
+
+ dlg.ShowModal();
+}
+
+#endif // wxUSE_RICHMSGDLG
#if wxUSE_LOG