#endif // wxUSE_INFOBAR
#if wxUSE_TEXTDLG
+ EVT_MENU(DIALOGS_LINE_ENTRY, MyFrame::LineEntry)
EVT_MENU(DIALOGS_TEXT_ENTRY, MyFrame::TextEntry)
EVT_MENU(DIALOGS_PASSWORD_ENTRY, MyFrame::PasswordEntry)
#endif // wxUSE_TEXTDLG
EVT_MENU(DIALOGS_NOTIFY_HIDE, MyFrame::OnNotifMsgHide)
#endif // wxUSE_NOTIFICATION_MESSAGE
+#if wxUSE_RICHTOOLTIP
+ EVT_MENU(DIALOGS_RICHTIP_DIALOG, MyFrame::OnRichTipDialog)
+#endif // wxUSE_RICHTOOLTIP
+
EVT_MENU(wxID_EXIT, MyFrame::OnExit)
END_EVENT_TABLE()
EVT_RADIOBUTTON(wxID_ANY, StdButtonSizerDialog::OnEvent)
END_EVENT_TABLE()
+#if wxUSE_CMDLINE_PARSER
+
+#include "wx/cmdline.h"
+
+static const char *PROGRESS_SWITCH = "progress";
+
+void MyApp::OnInitCmdLine(wxCmdLineParser& parser)
+{
+ wxApp::OnInitCmdLine(parser);
+
+ parser.AddOption("", PROGRESS_SWITCH,
+ "Style for the startup progress dialog (wxPD_XXX)",
+ wxCMD_LINE_VAL_NUMBER);
+}
+
+bool MyApp::OnCmdLineParsed(wxCmdLineParser& parser)
+{
+ if ( !wxApp::OnCmdLineParsed(parser) )
+ return false;
+
+ parser.Found(PROGRESS_SWITCH, &m_startupProgressStyle);
+
+ return true;
+}
+
+#endif // wxUSE_CMDLINE_PARSER
+
// `Main program' equivalent, creating windows and returning main app frame
bool MyApp::OnInit()
{
if ( !wxApp::OnInit() )
return false;
+#if wxUSE_PROGRESSDLG
+ if ( m_startupProgressStyle != -1 )
+ {
+ // Show a test progress dialog before the main event loop is started:
+ // it should still work.
+ const int PROGRESS_COUNT = 100;
+ wxProgressDialog dlg
+ (
+ "Progress in progress",
+ "Please wait, starting...",
+ PROGRESS_COUNT,
+ NULL,
+ m_startupProgressStyle
+ );
+ for ( int i = 0; i <= PROGRESS_COUNT; i++ )
+ {
+ if ( !dlg.Update(i) )
+ break;
+
+ wxMilliSleep(50);
+ }
+ }
+#endif // wxUSE_PROGRESSDLG
+
#if wxUSE_IMAGE
wxInitAllImageHandlers();
#endif
wxMenu *entry_menu = new wxMenu;
#if wxUSE_TEXTDLG
- entry_menu->Append(DIALOGS_TEXT_ENTRY, wxT("Text &entry\tCtrl-E"));
+ entry_menu->Append(DIALOGS_LINE_ENTRY, wxT("Single line &entry\tCtrl-E"));
+ entry_menu->Append(DIALOGS_TEXT_ENTRY, wxT("Multi line text &entry\tShift-Ctrl-E"));
entry_menu->Append(DIALOGS_PASSWORD_ENTRY, wxT("&Password entry\tCtrl-P"));
#endif // wxUSE_TEXTDLG
#endif // wxUSE_NOTIFICATION_MESSAGE
menuDlg->AppendSubMenu(menuNotif, "&User notifications");
+#if wxUSE_RICHTOOLTIP
+ menuDlg->Append(DIALOGS_RICHTIP_DIALOG, "Rich &tooltip dialog...\tCtrl-H");
+ menuDlg->AppendSeparator();
+#endif // wxUSE_RICHTOOLTIP
+
menuDlg->Append(DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, wxT("&Standard Buttons Sizer Dialog"));
menuDlg->Append(DIALOGS_TEST_DEFAULT_ACTION, wxT("&Test dialog default action"));
menuHelp->Append(DIALOGS_ABOUTDLG_CUSTOM, wxT("About (&custom)...\tCtrl-Shift-F1"));
#endif // wxUSE_ABOUTDLG
+ wxMenu* editMenu = new wxMenu;
+ editMenu->Append(wxID_UNDO, _("&Undo\tCtrl+Z"));
+ editMenu->Append(wxID_REDO, _("&Redo\tCtrl+Y"));
+ editMenu->AppendSeparator();
+ editMenu->Append(wxID_CUT, _("Cu&t\tCtrl+X"));
+ editMenu->Append(wxID_COPY, _("&Copy\tCtrl+C"));
+ editMenu->Append(wxID_PASTE, _("&Paste\tCtrl+V"));
+ editMenu->Append(wxID_CLEAR, _("&Delete"));
+
+ editMenu->AppendSeparator();
+ editMenu->Append(wxID_SELECTALL, _("Select All\tCtrl+A"));
+
wxMenuBar *menubar = new wxMenuBar;
menubar->Append(menuDlg, wxT("&Dialogs"));
+
+ menubar->Append(editMenu, wxT("&Edit"));
+
#if wxUSE_ABOUTDLG
menubar->Append(menuHelp, wxT("&Help"));
#endif // wxUSE_ABOUTDLG
// covers our entire client area to avoid jarring colour jumps
SetOwnBackgroundColour(m_canvas->GetBackgroundColour());
#endif // wxUSE_INFOBAR
+
+#ifdef __WXMSW__
+ // Test MSW-specific function allowing to access the "system" menu.
+ wxMenu * const menu = MSWGetSystemMenu();
+ if ( menu )
+ {
+ menu->AppendSeparator();
+
+ // The ids of the menu commands in MSW system menu must be multiple of
+ // 16 so we can't use DIALOGS_ABOUTDLG_SIMPLE here because it might not
+ // satisfy this condition and need to define and connect a separate id.
+ static const int DIALOGS_SYSTEM_ABOUT = 0x4010;
+
+ menu->Append(DIALOGS_SYSTEM_ABOUT, "&About");
+ Connect(DIALOGS_SYSTEM_ABOUT, wxEVT_COMMAND_MENU_SELECTED,
+ wxCommandEventHandler(MyFrame::ShowSimpleAboutDialog));
+ }
+#endif // __WXMSW__
}
MyFrame::~MyFrame()
wxCENTER |
wxNO_DEFAULT | wxYES_NO | wxCANCEL |
wxICON_INFORMATION);
-
+
wxString extmsg;
if ( dialog.SetYesNoCancelLabels
(
"so the default \"Yes\"/\"No\"/\"Cancel\" buttons are used.";
}
dialog.SetExtendedMessage(extmsg);
-
+
switch ( dialog.ShowModal() )
{
case wxID_YES:
wxLogStatus(wxT("You pressed \"Yes\""));
break;
-
+
case wxID_NO:
wxLogStatus(wxT("You pressed \"No\""));
break;
-
+
case wxID_CANCEL:
wxLogStatus(wxT("You pressed \"Cancel\""));
break;
-
+
default:
wxLogError(wxT("Unexpected wxMessageDialog return code!"));
}
}
}
-void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event))
+void MyFrame::LineEntry(wxCommandEvent& WXUNUSED(event))
{
wxTextEntryDialog dialog(this,
wxT("This is a small sample\n")
wxMessageBox(dialog.GetValue(), wxT("Got string"), wxOK | wxICON_INFORMATION, this);
}
}
+
+void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event))
+{
+ wxTextEntryDialog dialog(this, "You can enter a multiline string here.",
+ "Please enter some text",
+ "First line\nSecond one\nAnd another one too",
+ wxOK | wxCANCEL | wxTE_MULTILINE);
+
+ if (dialog.ShowModal() == wxID_OK)
+ {
+ wxMessageBox(dialog.GetValue(), wxT("Got text"), wxOK | wxICON_INFORMATION, this);
+ }
+}
#endif // wxUSE_TEXTDLG
#if wxUSE_CHOICEDLG
void MyFrame::OnNotifMsgAuto(wxCommandEvent& WXUNUSED(event))
{
+ // Notice that the notification remains shown even after the
+ // wxNotificationMessage object itself is destroyed so we can show simple
+ // notifications using temporary objects.
if ( !wxNotificationMessage
(
"Automatic Notification",
{
wxLogStatus("Failed to show notification message");
}
+
+ // But it doesn't have to be a temporary, of course.
+ wxNotificationMessage n("Dummy Warning", "Example of a warning notification.");
+ n.SetFlags(wxICON_ERROR);
+ n.Show(5); // Just for testing, use 5 second delay.
}
void MyFrame::OnNotifMsgShow(wxCommandEvent& WXUNUSED(event))
#endif // wxUSE_NOTIFICATION_MESSAGE
+#if wxUSE_RICHTOOLTIP
+
+#include "wx/richtooltip.h"
+
+#include "tip.xpm"
+
+class RichTipDialog : public wxDialog
+{
+public:
+ RichTipDialog(wxWindow* parent)
+ : wxDialog(parent, wxID_ANY, "wxRichToolTip Test",
+ wxDefaultPosition, wxDefaultSize,
+ wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+ {
+ // Create the controls.
+ m_textTitle = new wxTextCtrl(this, wxID_ANY, "Tooltip title");
+ m_textBody = new wxTextCtrl(this, wxID_ANY, "Main tooltip text\n"
+ "possibly on several\n"
+ "lines.",
+ wxDefaultPosition, wxDefaultSize,
+ wxTE_MULTILINE);
+ wxButton* btnShowText = new wxButton(this, wxID_ANY, "Show for &text");
+ wxButton* btnShowBtn = new wxButton(this, wxID_ANY, "Show for &button");
+
+ const wxString icons[] =
+ {
+ "&None",
+ "&Information",
+ "&Warning",
+ "&Error",
+ "&Custom"
+ };
+ wxCOMPILE_TIME_ASSERT( WXSIZEOF(icons) == Icon_Max, IconMismatch );
+ m_icons = new wxRadioBox(this, wxID_ANY, "&Icon choice:",
+ wxDefaultPosition, wxDefaultSize,
+ WXSIZEOF(icons), icons,
+ 1, wxRA_SPECIFY_ROWS);
+ m_icons->SetSelection(Icon_Info);
+
+ const wxString tipKinds[] =
+ {
+ "&None", "Top left", "Top", "Top right",
+ "Bottom left", "Bottom", "Bottom right", "&Auto"
+ };
+ m_tipKinds = new wxRadioBox(this, wxID_ANY, "Tip &kind:",
+ wxDefaultPosition, wxDefaultSize,
+ WXSIZEOF(tipKinds), tipKinds,
+ 4, wxRA_SPECIFY_COLS);
+ m_tipKinds->SetSelection(wxTipKind_Auto);
+
+ const wxString bgStyles[] =
+ {
+ "&Default", "&Solid", "&Gradient",
+ };
+ wxCOMPILE_TIME_ASSERT( WXSIZEOF(bgStyles) == Bg_Max, BgMismatch );
+ m_bgStyles = new wxRadioBox(this, wxID_ANY, "Background style:",
+ wxDefaultPosition, wxDefaultSize,
+ WXSIZEOF(bgStyles), bgStyles,
+ 1, wxRA_SPECIFY_ROWS);
+
+ const wxString timeouts[] = { "&None", "&Default (no delay)", "&3 seconds" };
+ wxCOMPILE_TIME_ASSERT( WXSIZEOF(timeouts) == Timeout_Max, TmMismatch );
+ m_timeouts = new wxRadioBox(this, wxID_ANY, "Timeout:",
+ wxDefaultPosition, wxDefaultSize,
+ WXSIZEOF(timeouts), timeouts,
+ 1, wxRA_SPECIFY_ROWS);
+ m_timeouts->SetSelection(Timeout_Default);
+ m_timeDelay = new wxCheckBox(this, wxID_ANY, "Delay show" );
+
+ // Lay them out.
+ m_textBody->SetMinSize(wxSize(300, 200));
+
+ wxBoxSizer* const sizer = new wxBoxSizer(wxVERTICAL);
+ sizer->Add(m_textTitle, wxSizerFlags().Expand().Border());
+ sizer->Add(m_textBody, wxSizerFlags(1).Expand().Border());
+ sizer->Add(m_icons, wxSizerFlags().Expand().Border());
+ sizer->Add(m_tipKinds, wxSizerFlags().Centre().Border());
+ sizer->Add(m_bgStyles, wxSizerFlags().Centre().Border());
+ sizer->Add(m_timeouts, wxSizerFlags().Centre().Border());
+ sizer->Add(m_timeDelay, wxSizerFlags().Centre().Border());
+ wxBoxSizer* const sizerBtns = new wxBoxSizer(wxHORIZONTAL);
+ sizerBtns->Add(btnShowText, wxSizerFlags().Border(wxRIGHT));
+ sizerBtns->Add(btnShowBtn, wxSizerFlags().Border(wxLEFT));
+ sizer->Add(sizerBtns, wxSizerFlags().Centre().Border());
+ sizer->Add(CreateStdDialogButtonSizer(wxOK),
+ wxSizerFlags().Expand().Border());
+ SetSizerAndFit(sizer);
+
+
+ // And connect the event handlers.
+ btnShowText->Connect
+ (
+ wxEVT_COMMAND_BUTTON_CLICKED,
+ wxCommandEventHandler(RichTipDialog::OnShowTipForText),
+ NULL,
+ this
+ );
+
+ btnShowBtn->Connect
+ (
+ wxEVT_COMMAND_BUTTON_CLICKED,
+ wxCommandEventHandler(RichTipDialog::OnShowTipForBtn),
+ NULL,
+ this
+ );
+ }
+
+private:
+ enum
+ {
+ Icon_None,
+ Icon_Info,
+ Icon_Warning,
+ Icon_Error,
+ Icon_Custom,
+ Icon_Max
+ };
+
+ enum
+ {
+ Bg_Default,
+ Bg_Solid,
+ Bg_Gradient,
+ Bg_Max
+ };
+
+ enum
+ {
+ Timeout_None,
+ Timeout_Default,
+ Timeout_3sec,
+ Timeout_Max
+ };
+
+
+ void OnShowTipForText(wxCommandEvent& WXUNUSED(event))
+ {
+ DoShowTip(m_textTitle);
+ }
+
+ void OnShowTipForBtn(wxCommandEvent& WXUNUSED(event))
+ {
+ DoShowTip(FindWindow(wxID_OK));
+ }
+
+ void DoShowTip(wxWindow* win)
+ {
+ wxRichToolTip tip(m_textTitle->GetValue(), m_textBody->GetValue());
+ const int iconSel = m_icons->GetSelection();
+ if ( iconSel == Icon_Custom )
+ {
+ tip.SetIcon(tip_xpm);
+ }
+ else // Use a standard icon.
+ {
+ static const int stdIcons[] =
+ {
+ wxICON_NONE,
+ wxICON_INFORMATION,
+ wxICON_WARNING,
+ wxICON_ERROR,
+ };
+
+ tip.SetIcon(stdIcons[iconSel]);
+ }
+
+ switch ( m_bgStyles->GetSelection() )
+ {
+ case Bg_Default:
+ break;
+
+ case Bg_Solid:
+ tip.SetBackgroundColour(*wxLIGHT_GREY);
+ break;
+
+ case Bg_Gradient:
+ tip.SetBackgroundColour(*wxWHITE, wxColour(0xe4, 0xe5, 0xf0));
+ break;
+ }
+
+ int delay = m_timeDelay->IsChecked() ? 500 : 0;
+
+ switch ( m_timeouts->GetSelection() )
+ {
+ case Timeout_None:
+ // Don't call SetTimeout unnecessarily
+ // or msw will show generic impl
+ if ( delay )
+ tip.SetTimeout(0, delay);
+ break;
+
+ case Timeout_Default:
+ break;
+
+ case Timeout_3sec:
+ tip.SetTimeout(3000, delay);
+ break;
+ }
+
+ tip.SetTipKind(static_cast<wxTipKind>(m_tipKinds->GetSelection()));
+
+ tip.ShowFor(win);
+ }
+
+ wxTextCtrl* m_textTitle;
+ wxTextCtrl* m_textBody;
+ wxRadioBox* m_icons;
+ wxRadioBox* m_tipKinds;
+ wxRadioBox* m_bgStyles;
+ wxRadioBox* m_timeouts;
+ wxCheckBox* m_timeDelay;
+};
+
+void MyFrame::OnRichTipDialog(wxCommandEvent& WXUNUSED(event))
+{
+ RichTipDialog dialog(this);
+ dialog.ShowModal();
+}
+
+#endif // wxUSE_RICHTOOLTIP
+
void MyFrame::OnStandardButtonsSizerDialog(wxCommandEvent& WXUNUSED(event))
{
StdButtonSizerDialog dialog(this);
#define ID_CATCH_LISTBOX_DCLICK 100
#define ID_LISTBOX 101
+#define ID_DISABLE_OK 102
+#define ID_DISABLE_CANCEL 103
BEGIN_EVENT_TABLE(TestDefaultActionDialog, wxDialog)
EVT_CHECKBOX(ID_CATCH_LISTBOX_DCLICK, TestDefaultActionDialog::OnCatchListBoxDClick)
+ EVT_CHECKBOX(ID_DISABLE_OK, TestDefaultActionDialog::OnDisableOK)
+ EVT_CHECKBOX(ID_DISABLE_CANCEL, TestDefaultActionDialog::OnDisableCancel)
EVT_LISTBOX_DCLICK(ID_LISTBOX, TestDefaultActionDialog::OnListBoxDClick)
+ EVT_TEXT_ENTER(wxID_ANY, TestDefaultActionDialog::OnTextEnter)
END_EVENT_TABLE()
TestDefaultActionDialog::TestDefaultActionDialog( wxWindow *parent ) :
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 );
+ grid_sizer->Add( new wxCheckBox(this, ID_DISABLE_OK, "Disable \"OK\""), 0, wxALIGN_CENTRE_VERTICAL );
+ grid_sizer->Add( new wxCheckBox(this, ID_DISABLE_CANCEL, "Disable \"Cancel\""), 0, wxALIGN_CENTRE_VERTICAL );
+
main_sizer->Add( grid_sizer, 0, wxALL, 10 );
wxSizer *button_sizer = CreateSeparatedButtonSizer( wxOK|wxCANCEL );
SetSizerAndFit( main_sizer );
}
+void TestDefaultActionDialog::OnDisableOK(wxCommandEvent& event)
+{
+ FindWindow(wxID_OK)->Enable(!event.IsChecked());
+}
+
+void TestDefaultActionDialog::OnDisableCancel(wxCommandEvent& event)
+{
+ FindWindow(wxID_CANCEL)->Enable(!event.IsChecked());
+}
+
void TestDefaultActionDialog::OnListBoxDClick(wxCommandEvent& event)
{
event.Skip( !m_catchListBoxDClick );
m_catchListBoxDClick = !m_catchListBoxDClick;
}
+void TestDefaultActionDialog::OnTextEnter(wxCommandEvent& event)
+{
+ wxLogMessage("Text \"%s\" entered.", event.GetString());
+}
+
void MyFrame::OnTestDefaultActionDialog(wxCommandEvent& WXUNUSED(event))
{
TestDefaultActionDialog dialog( this );
{ wxNO, "&No" },
{ wxOK, "&Ok" },
{ wxCANCEL, "&Cancel" },
+ { wxHELP, "&Help" },
};
BEGIN_EVENT_TABLE(TestMessageBoxDialog, wxDialog)
// 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, "&Title:"));
+ m_textTitle = new wxTextCtrl(this, wxID_ANY, "Test Message Box");
+ sizerMsgs->Add(m_textTitle, wxSizerFlags().Expand().Border(wxBOTTOM));
+
sizerMsgs->Add(new wxStaticText(this, wxID_ANY, "&Main message:"));
m_textMsg = new wxTextCtrl(this, wxID_ANY, "Hello from a box!",
wxDefaultPosition, wxDefaultSize,
};
wxCOMPILE_TIME_ASSERT( WXSIZEOF(icons) == MsgDlgIcon_Max, IconMismatch );
-
+
m_icons = new wxRadioBox(this, wxID_ANY, "&Icon style",
wxDefaultPosition, wxDefaultSize,
WXSIZEOF(icons), icons,
dlg.SetOKLabel(m_labels[Btn_Ok]->GetValue());
}
}
+
+ if ( style & wxHELP )
+ {
+ dlg.SetHelpLabel(m_labels[Btn_Help]->GetValue());
+ }
}
void TestMessageBoxDialog::OnApply(wxCommandEvent& WXUNUSED(event))
{
- wxMessageDialog dlg(this, GetMessage(), "Test Message Box", GetStyle());
+ wxMessageDialog dlg(this, GetMessage(), GetBoxTitle(), GetStyle());
PrepareMessageDialog(dlg);
- dlg.ShowModal();
+ wxString btnName;
+ switch ( dlg.ShowModal() )
+ {
+ case wxID_OK:
+ btnName = "OK";
+ break;
+
+ case wxID_CANCEL:
+ // Avoid the extra message box if the dialog was cancelled.
+ return;
+
+ case wxID_YES:
+ btnName = "Yes";
+ break;
+
+ case wxID_NO:
+ btnName = "No";
+ break;
+
+ case wxID_HELP:
+ btnName = "Help";
+ break;
+
+ default:
+ btnName = "Unknown";
+ }
+
+ wxLogMessage("Dialog was closed with the \"%s\" button.", btnName);
}
void TestMessageBoxDialog::OnClose(wxCommandEvent& WXUNUSED(event))
void TestRichMessageDialog::OnApply(wxCommandEvent& WXUNUSED(event))
{
- wxRichMessageDialog dlg(this, GetMessage(), "Test Rich Message Dialog",
- GetStyle());
+ wxRichMessageDialog dlg(this, GetMessage(), GetBoxTitle(), GetStyle());
PrepareMessageDialog(dlg);
dlg.ShowCheckBox(m_textCheckBox->GetValue(),