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()
#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"));
// 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()
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", "&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);
+
+ // 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());
+ 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;
+ }
+
+ switch ( m_timeouts->GetSelection() )
+ {
+ case Timeout_None:
+ tip.SetTimeout(0);
+ break;
+
+ case Timeout_Default:
+ break;
+
+ case Timeout_3sec:
+ tip.SetTimeout(3000);
+ 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;
+};
+
+void MyFrame::OnRichTipDialog(wxCommandEvent& WXUNUSED(event))
+{
+ RichTipDialog dialog(this);
+ dialog.ShowModal();
+}
+
+#endif // wxUSE_RICHTOOLTIP
+
void MyFrame::OnStandardButtonsSizerDialog(wxCommandEvent& WXUNUSED(event))
{
StdButtonSizerDialog dialog(this);
// 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,
void TestMessageBoxDialog::OnApply(wxCommandEvent& WXUNUSED(event))
{
- wxMessageDialog dlg(this, GetMessage(), "Test Message Box", GetStyle());
+ wxMessageDialog dlg(this, GetMessage(), GetBoxTitle(), GetStyle());
PrepareMessageDialog(dlg);
wxString btnName;
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(),