#include "wx/apptrait.h"
#include "wx/datetime.h"
+#include "wx/filename.h"
#include "wx/image.h"
#include "wx/bookctrl.h"
#include "wx/artprov.h"
#include "wx/minifram.h"
#include "wx/sysopt.h"
#include "wx/notifmsg.h"
+#include "wx/modalhook.h"
#if wxUSE_RICHMSGDLG
#include "wx/richmsgdlg.h"
EVT_MENU(DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, MyFrame::OnStandardButtonsSizerDialog)
EVT_MENU(DIALOGS_TEST_DEFAULT_ACTION, MyFrame::OnTestDefaultActionDialog)
+ EVT_MENU(DIALOGS_MODAL_HOOK, MyFrame::OnModalHook)
EVT_MENU(DIALOGS_REQUEST, MyFrame::OnRequestUserAttention)
#if wxUSE_NOTIFICATION_MESSAGE
menuDlg->Append(DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, wxT("&Standard Buttons Sizer Dialog"));
menuDlg->Append(DIALOGS_TEST_DEFAULT_ACTION, wxT("&Test dialog default action"));
+ menuDlg->AppendCheckItem(DIALOGS_MODAL_HOOK, "Enable modal dialog hook");
menuDlg->AppendSeparator();
menuDlg->Append(wxID_EXIT, wxT("E&xit\tAlt-X"));
m_infoBarAdvanced->AddButton(wxID_UNDO);
m_infoBarAdvanced->AddButton(wxID_REDO);
- m_infoBarAdvanced->Connect(wxID_REDO, wxEVT_COMMAND_BUTTON_CLICKED,
+ m_infoBarAdvanced->Connect(wxID_REDO, wxEVT_BUTTON,
wxCommandEventHandler(MyFrame::OnInfoBarRedo),
NULL,
this);
static const int DIALOGS_SYSTEM_ABOUT = 0x4010;
menu->Append(DIALOGS_SYSTEM_ABOUT, "&About");
- Connect(DIALOGS_SYSTEM_ABOUT, wxEVT_COMMAND_MENU_SELECTED,
+ Connect(DIALOGS_SYSTEM_ABOUT, wxEVT_MENU,
wxCommandEventHandler(MyFrame::ShowSimpleAboutDialog));
}
#endif // __WXMSW__
{
public:
MyExtraPanel(wxWindow *parent);
- void OnCheckBox(wxCommandEvent& event) { m_btn->Enable(event.IsChecked()); }
wxString GetInfo() const
{
return wxString::Format("checkbox value = %d", (int) m_cb->GetValue());
}
+
private:
+ void OnCheckBox(wxCommandEvent& event) { m_btn->Enable(event.IsChecked()); }
+ void OnUpdateLabelUI(wxUpdateUIEvent& event)
+ {
+ wxFileDialog* const dialog = wxStaticCast(GetParent(), wxFileDialog);
+ const wxString fn = dialog->GetCurrentlySelectedFilename();
+
+ wxString msg;
+ if ( fn.empty() )
+ msg = "Nothing";
+ else if ( wxFileName::FileExists(fn) )
+ msg = "File";
+ else if ( wxFileName::DirExists(fn) )
+ msg = "Directory";
+ else
+ msg = "Something else";
+
+ event.SetText(msg + " selected");
+ }
+
wxButton *m_btn;
wxCheckBox *m_cb;
+ wxStaticText *m_label;
};
MyExtraPanel::MyExtraPanel(wxWindow *parent)
m_btn = new wxButton(this, -1, wxT("Custom Button"));
m_btn->Enable(false);
m_cb = new wxCheckBox(this, -1, wxT("Enable Custom Button"));
- m_cb->Connect(wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED,
+ m_cb->Connect(wxEVT_CHECKBOX,
wxCommandEventHandler(MyExtraPanel::OnCheckBox), NULL, this);
+ m_label = new wxStaticText(this, wxID_ANY, "Nothing selected");
+ m_label->Connect(wxEVT_UPDATE_UI,
+ wxUpdateUIEventHandler(MyExtraPanel::OnUpdateLabelUI),
+ NULL, this);
+
wxBoxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
sizerTop->Add(m_cb, wxSizerFlags().Centre().Border());
sizerTop->AddStretchSpacer();
- sizerTop->Add(m_btn, wxSizerFlags().Right().Border());
+ sizerTop->Add(m_btn, wxSizerFlags().Centre().Border());
+ sizerTop->AddStretchSpacer();
+ sizerTop->Add(m_label, wxSizerFlags().Centre().Border());
+
SetSizerAndFit(sizerTop);
}
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))
WXSIZEOF(bgStyles), bgStyles,
1, wxRA_SPECIFY_ROWS);
- const wxString timeouts[] = { "&None", "&Default", "&3 seconds" };
+ 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));
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));
// And connect the event handlers.
btnShowText->Connect
(
- wxEVT_COMMAND_BUTTON_CLICKED,
+ wxEVT_BUTTON,
wxCommandEventHandler(RichTipDialog::OnShowTipForText),
NULL,
this
btnShowBtn->Connect
(
- wxEVT_COMMAND_BUTTON_CLICKED,
+ wxEVT_BUTTON,
wxCommandEventHandler(RichTipDialog::OnShowTipForBtn),
NULL,
this
break;
}
+ int delay = m_timeDelay->IsChecked() ? 500 : 0;
+
switch ( m_timeouts->GetSelection() )
{
case Timeout_None:
- tip.SetTimeout(0);
+ // 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);
+ tip.SetTimeout(3000, delay);
break;
}
wxRadioBox* m_tipKinds;
wxRadioBox* m_bgStyles;
wxRadioBox* m_timeouts;
+ wxCheckBox* m_timeDelay;
};
void MyFrame::OnRichTipDialog(wxCommandEvent& WXUNUSED(event))
dialog.ShowModal();
}
+void MyFrame::OnModalHook(wxCommandEvent& event)
+{
+ class TestModalHook : public wxModalDialogHook
+ {
+ protected:
+ virtual int Enter(wxDialog* dialog)
+ {
+ wxLogStatus("Showing %s modal dialog",
+ dialog->GetClassInfo()->GetClassName());
+ return wxID_NONE;
+ }
+
+ virtual void Exit(wxDialog* dialog)
+ {
+ wxLogStatus("Leaving %s modal dialog",
+ dialog->GetClassInfo()->GetClassName());
+ }
+ };
+
+ static TestModalHook s_hook;
+ if ( event.IsChecked() )
+ s_hook.Register();
+ else
+ s_hook.Unregister();
+}
+
void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event) )
{
Close(true);
{
wxEventType type = event.GetEventType();
- if ( type == wxEVT_COMMAND_FIND || type == wxEVT_COMMAND_FIND_NEXT )
+ if ( type == wxEVT_FIND || type == wxEVT_FIND_NEXT )
{
wxLogMessage(wxT("Find %s'%s' (flags: %s)"),
- type == wxEVT_COMMAND_FIND_NEXT ? wxT("next ") : wxT(""),
+ type == wxEVT_FIND_NEXT ? wxT("next ") : wxT(""),
event.GetFindString().c_str(),
DecodeFindDialogEventFlags(event.GetFlags()).c_str());
}
- else if ( type == wxEVT_COMMAND_FIND_REPLACE ||
- type == wxEVT_COMMAND_FIND_REPLACE_ALL )
+ else if ( type == wxEVT_FIND_REPLACE ||
+ type == wxEVT_FIND_REPLACE_ALL )
{
wxLogMessage(wxT("Replace %s'%s' with '%s' (flags: %s)"),
- type == wxEVT_COMMAND_FIND_REPLACE_ALL ? wxT("all ") : wxT(""),
+ type == wxEVT_FIND_REPLACE_ALL ? wxT("all ") : wxT(""),
event.GetFindString().c_str(),
event.GetReplaceString().c_str(),
DecodeFindDialogEventFlags(event.GetFlags()).c_str());
}
- else if ( type == wxEVT_COMMAND_FIND_CLOSE )
+ else if ( type == wxEVT_FIND_CLOSE )
{
wxFindReplaceDialog *dlg = event.GetDialog();
"&Information icon",
"&Question icon",
"&Warning icon",
- "&Error icon"
+ "&Error icon",
+ "A&uth needed icon"
};
wxCOMPILE_TIME_ASSERT( WXSIZEOF(icons) == MsgDlgIcon_Max, IconMismatch );
case MsgDlgIcon_Error:
style |= wxICON_ERROR;
break;
+
+ case MsgDlgIcon_AuthNeeded:
+ style |= wxICON_AUTH_NEEDED;
+ break;
}
if ( m_chkCentre->IsChecked() )