#include "wx/imaglist.h"
#include "wx/minifram.h"
#include "wx/sysopt.h"
+#include "wx/notifmsg.h"
#if wxUSE_COLOURDLG
#include "wx/colordlg.h"
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
+#if wxUSE_MSGDLG
EVT_MENU(DIALOGS_MESSAGE_BOX, MyFrame::MessageBox)
-
+ EVT_MENU(DIALOGS_MESSAGE_BOX_WXINFO, MyFrame::MessageBoxInfo)
+#endif // wxUSE_MSGDLG
#if wxUSE_COLOURDLG
EVT_MENU(DIALOGS_CHOOSE_COLOUR, MyFrame::ChooseColour)
+ EVT_MENU(DIALOGS_GET_COLOUR, MyFrame::GetColour)
#endif // wxUSE_COLOURDLG
#if wxUSE_FONTDLG
EVT_MENU(DIALOGS_CENTRE_SCREEN, MyFrame::DlgCenteredScreen)
EVT_MENU(DIALOGS_CENTRE_PARENT, MyFrame::DlgCenteredParent)
EVT_MENU(DIALOGS_MINIFRAME, MyFrame::MiniFrame)
+ EVT_MENU(DIALOGS_ONTOP, MyFrame::DlgOnTop)
#if wxUSE_STARTUP_TIPS
EVT_MENU(DIALOGS_TIP, MyFrame::ShowTip)
EVT_MENU(DIALOGS_PROPERTY_SHEET, MyFrame::OnPropertySheet)
EVT_MENU(DIALOGS_PROPERTY_SHEET_TOOLBOOK, MyFrame::OnPropertySheet)
EVT_MENU(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, MyFrame::OnPropertySheet)
-#endif
+#endif // USE_SETTINGS_DIALOG
EVT_MENU(DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, MyFrame::OnStandardButtonsSizerDialog)
+ EVT_MENU(DIALOGS_TEST_DEFAULT_ACTION, MyFrame::OnTestDefaultActionDialog)
+
EVT_MENU(DIALOGS_REQUEST, MyFrame::OnRequestUserAttention)
+#if wxUSE_NOTIFICATION_MESSAGE
+ EVT_MENU(DIALOGS_NOTIFY_AUTO, MyFrame::OnNotifMsgAuto)
+ EVT_MENU(DIALOGS_NOTIFY_SHOW, MyFrame::OnNotifMsgShow)
+ EVT_MENU(DIALOGS_NOTIFY_HIDE, MyFrame::OnNotifMsgHide)
+#endif // wxUSE_NOTIFICATION_MESSAGE
EVT_MENU(wxID_EXIT, MyFrame::OnExit)
END_EVENT_TABLE()
wxMenu *choices_menu = new wxMenu;
#if wxUSE_COLOURDLG
- choices_menu->Append(DIALOGS_CHOOSE_COLOUR, _T("&Choose colour"));
+ choices_menu->Append(DIALOGS_CHOOSE_COLOUR, _T("&Choose bg colour"));
+ choices_menu->Append(DIALOGS_GET_COLOUR, _T("&Choose fg colour"));
#endif // wxUSE_COLOURDLG
#if wxUSE_FONTDLG
filedlg_menu->Append(DIALOGS_FILES_OPEN, _T("Open &files\tCtrl-Q"));
filedlg_menu->Append(DIALOGS_FILE_SAVE, _T("Sa&ve file\tCtrl-S"));
- #if USE_FILEDLG_GENERIC
- filedlg_menu->AppendSeparator();
- filedlg_menu->Append(DIALOGS_FILE_OPEN_GENERIC, _T("&Open file (generic)"));
- filedlg_menu->Append(DIALOGS_FILES_OPEN_GENERIC, _T("Open &files (generic)"));
- filedlg_menu->Append(DIALOGS_FILE_SAVE_GENERIC, _T("Sa&ve file (generic)"));
- #endif // USE_FILEDLG_GENERIC
+#if USE_FILEDLG_GENERIC
+ filedlg_menu->AppendSeparator();
+ filedlg_menu->Append(DIALOGS_FILE_OPEN_GENERIC, _T("&Open file (generic)"));
+ filedlg_menu->Append(DIALOGS_FILES_OPEN_GENERIC, _T("Open &files (generic)"));
+ filedlg_menu->Append(DIALOGS_FILE_SAVE_GENERIC, _T("Sa&ve file (generic)"));
+#endif // USE_FILEDLG_GENERIC
menuDlg->Append(wxID_ANY,_T("&File operations"),filedlg_menu);
#endif // wxUSE_DIRDLG
-#if wxUSE_STARTUP_TIPS || wxUSE_PROGRESSDLG || wxUSE_BUSYINFO || wxUSE_LOG_DIALOG
+#if wxUSE_STARTUP_TIPS || \
+ wxUSE_PROGRESSDLG || \
+ wxUSE_BUSYINFO || \
+ wxUSE_LOG_DIALOG || \
+ wxUSE_MSGDLG
wxMenu *info_menu = new wxMenu;
info_menu->Append(DIALOGS_LOG_DIALOG, _T("&Log dialog\tCtrl-L"));
#endif // wxUSE_LOG_DIALOG
+ #if wxUSE_MSGDLG
+ info_menu->Append(DIALOGS_MESSAGE_BOX_WXINFO,
+ _T("&wxWidgets information\tCtrl-I"));
+ #endif // wxUSE_MSGDLG
+
menuDlg->Append(wxID_ANY,_T("&Informative dialogs"),info_menu);
#endif // wxUSE_STARTUP_TIPS || wxUSE_PROGRESSDLG || wxUSE_BUSYINFO || wxUSE_LOG_DIALOG
dialogs_menu->Append(DIALOGS_CENTRE_SCREEN, _T("Centered on &screen\tShift-Ctrl-1"));
dialogs_menu->Append(DIALOGS_CENTRE_PARENT, _T("Centered on &parent\tShift-Ctrl-2"));
dialogs_menu->Append(DIALOGS_MINIFRAME, _T("&Mini frame"));
+ dialogs_menu->Append(DIALOGS_ONTOP, _T("Dialog staying on &top"));
menuDlg->Append(wxID_ANY, _T("&Generic dialogs"), dialogs_menu);
#if USE_SETTINGS_DIALOG
menuDlg->Append(wxID_ANY, _T("&Property sheets"), sheet_menu);
#endif // USE_SETTINGS_DIALOG
- menuDlg->Append(DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, _T("&Standard Buttons Sizer Dialog"));
+ wxMenu *menuNotif = new wxMenu;
+ menuNotif->Append(DIALOGS_REQUEST, _T("&Request user attention\tCtrl-R"));
+#if wxUSE_NOTIFICATION_MESSAGE
+ menuNotif->Append(DIALOGS_NOTIFY_AUTO, "&Automatically hidden notification");
+ menuNotif->Append(DIALOGS_NOTIFY_SHOW, "&Show manual notification");
+ menuNotif->Append(DIALOGS_NOTIFY_HIDE, "&Hide manual notification");
+#endif // wxUSE_NOTIFICATION_MESSAGE
+ menuDlg->AppendSubMenu(menuNotif, "&User notifications");
- menuDlg->Append(DIALOGS_REQUEST, _T("&Request user attention\tCtrl-R"));
+ menuDlg->Append(DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, _T("&Standard Buttons Sizer Dialog"));
+ menuDlg->Append(DIALOGS_TEST_DEFAULT_ACTION, _T("&Test dialog default action"));
menuDlg->AppendSeparator();
menuDlg->Append(wxID_EXIT, _T("E&xit\tAlt-X"));
#if wxUSE_COLOURDLG
m_clrData.SetChooseFull(true);
- for (int i = 0; i < 16; i++)
+ for (int i = 0; i < wxColourData::NUM_CUSTOM; i++)
{
- m_clrData.SetCustomColour(
- i,
- wxColour(
- (unsigned char)(i*16),
- (unsigned char)(i*16),
- (unsigned char)(i*16)
- )
- );
+ unsigned char n = i*16;
+ m_clrData.SetCustomColour(i, wxColour(n, n, n));
}
#endif // wxUSE_COLOURDLG
+#if wxUSE_NOTIFICATION_MESSAGE
+ m_notifMsg = NULL;
+#endif // wxUSE_NOTIFICATION_MESSAGE
+
#if wxUSE_STATUSBAR
CreateStatusBar();
#endif // wxUSE_STATUSBAR
}
+MyFrame::~MyFrame()
+{
+#if wxUSE_NOTIFICATION_MESSAGE
+ delete m_notifMsg;
+#endif // wxUSE_NOTIFICATION_MESSAGE
+}
+
#if wxUSE_COLOURDLG
-void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) )
+
+void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event))
{
m_clrData.SetColour(myCanvas->GetBackgroundColour());
wxColourDialog dialog(this, &m_clrData);
- dialog.SetTitle(_T("Choose the background colour"));
- if (dialog.ShowModal() == wxID_OK)
+ dialog.SetTitle(_("Please choose the background colour"));
+ if ( dialog.ShowModal() == wxID_OK )
{
m_clrData = dialog.GetColourData();
myCanvas->SetBackgroundColour(m_clrData.GetColour());
myCanvas->Refresh();
}
}
+
+void MyFrame::GetColour(wxCommandEvent& WXUNUSED(event))
+{
+ wxColour clr = wxGetColourFromUser
+ (
+ this,
+ wxGetApp().m_canvasTextColour,
+ "Please choose the foreground colour"
+ );
+ if ( clr.IsOk() )
+ {
+ wxGetApp().m_canvasTextColour = clr;
+ myCanvas->Refresh();
+ }
+ //else: dialog cancelled by user
+}
+
#endif // wxUSE_COLOURDLG
+
#if USE_COLOURDLG_GENERIC
void MyFrame::ChooseColourGeneric(wxCommandEvent& WXUNUSED(event))
{
}
#endif // wxUSE_LOG_DIALOG
+#if wxUSE_MSGDLG
void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event) )
{
- wxMessageDialog dialog(NULL,
+ wxMessageDialog dialog(this,
_T("This is a message box\nA long, long string to test out the message box properly"),
_T("Message box text"),
- wxNO_DEFAULT | wxYES_NO | wxCANCEL | wxICON_INFORMATION);
+ wxCENTER | wxNO_DEFAULT | wxYES_NO | wxCANCEL | wxICON_INFORMATION);
if ( dialog.SetYesNoLabels(_T("Answer &Yes"),_T("Answer &No")) )
{
}
}
+void MyFrame::MessageBoxInfo(wxCommandEvent& WXUNUSED(event))
+{
+ ::wxInfoMessageBox(this);
+}
+#endif // wxUSE_MSGDLG
+
#if wxUSE_NUMBERDLG
-void MyFrame::NumericEntry(wxCommandEvent& WXUNUSED(event) )
+void MyFrame::NumericEntry(wxCommandEvent& WXUNUSED(event))
{
long res = wxGetNumberFromUser( _T("This is some text, actually a lot of text.\n")
_T("Even two rows of text."),
#endif // wxUSE_CHOICEDLG
#if wxUSE_FILEDLG
+
+// panel with custom controls for file dialog
+class MyExtraPanel : public wxPanel
+{
+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:
+ wxButton *m_btn;
+ wxCheckBox *m_cb;
+};
+
+MyExtraPanel::MyExtraPanel(wxWindow *parent)
+ : wxPanel(parent)
+{
+ m_btn = new wxButton(this, -1, _T("Custom Button"));
+ m_btn->Enable(false);
+ m_cb = new wxCheckBox(this, -1, _T("Enable Custom Button"));
+ m_cb->Connect(wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED,
+ wxCommandEventHandler(MyExtraPanel::OnCheckBox), NULL, this);
+ wxBoxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
+ sizerTop->Add(m_cb, wxSizerFlags().Centre().Border());
+ sizerTop->AddStretchSpacer();
+ sizerTop->Add(m_btn, wxSizerFlags().Right().Border());
+ SetSizerAndFit(sizerTop);
+}
+
+// a static method can be used instead of a function with most of compilers
+static wxWindow* createMyExtraPanel(wxWindow *parent)
+{
+ return new MyExtraPanel(parent);
+}
+
void MyFrame::FileOpen(wxCommandEvent& WXUNUSED(event) )
{
wxFileDialog dialog
#endif
);
+ dialog.SetExtraControlCreator(&createMyExtraPanel);
dialog.CentreOnParent();
dialog.SetDirectory(wxGetHomeDir());
if (dialog.ShowModal() == wxID_OK)
{
wxString info;
+ MyExtraPanel *extra_panel
+ = static_cast<MyExtraPanel*>(dialog.GetExtraControl());
info.Printf(_T("Full file name: %s\n")
_T("Path: %s\n")
- _T("Name: %s"),
+ _T("Name: %s\n")
+ _T("Custom window: %s"),
dialog.GetPath().c_str(),
dialog.GetDirectory().c_str(),
- dialog.GetFilename().c_str());
+ dialog.GetFilename().c_str(),
+ extra_panel->GetInfo().c_str());
wxMessageDialog dialog2(this, info, _T("Selected file"));
dialog2.ShowModal();
}
_T("C++ files (*.cpp;*.h)|*.cpp;*.h")
);
+ dialog.SetExtraControlCreator(&createMyExtraPanel);
dialog.SetDirectory(wxGetHomeDir());
if (dialog.ShowModal() == wxID_OK)
frame->Show();
}
+void MyFrame::DlgOnTop(wxCommandEvent& WXUNUSED(event))
+{
+ wxDialog dlg(this, wxID_ANY, _T("Dialog staying on top of other windows"),
+ wxDefaultPosition, wxSize(300, 100),
+ wxDEFAULT_DIALOG_STYLE | wxSTAY_ON_TOP);
+ (new wxButton(&dlg, wxID_OK, _T("Close")))->Centre();
+ dlg.ShowModal();
+}
+
#if wxUSE_STARTUP_TIPS
void MyFrame::ShowTip(wxCommandEvent& WXUNUSED(event))
{
RequestUserAttention(wxUSER_ATTENTION_ERROR);
}
+#if wxUSE_NOTIFICATION_MESSAGE
+
+void MyFrame::OnNotifMsgAuto(wxCommandEvent& WXUNUSED(event))
+{
+ if ( !wxNotificationMessage
+ (
+ "Automatic Notification",
+ "Nothing important has happened\n"
+ "this notification will disappear soon."
+ ).Show() )
+ {
+ wxLogStatus("Failed to show notification message");
+ }
+}
+
+void MyFrame::OnNotifMsgShow(wxCommandEvent& WXUNUSED(event))
+{
+ if ( !m_notifMsg )
+ {
+ m_notifMsg = new wxNotificationMessage
+ (
+ "wxWidgets Manual Notification",
+ "You can hide this notification from the menu",
+ this
+ );
+ }
+
+ if ( !m_notifMsg->Show(wxNotificationMessage::Timeout_Never) )
+ {
+ wxLogStatus("Failed to show manual notification message");
+ }
+}
+
+void MyFrame::OnNotifMsgHide(wxCommandEvent& WXUNUSED(event))
+{
+ if ( m_notifMsg )
+ {
+ if ( !m_notifMsg->Close() )
+ wxLogStatus("Failed to hide manual notification message");
+ }
+}
+
+#endif // wxUSE_NOTIFICATION_MESSAGE
+
void MyFrame::OnStandardButtonsSizerDialog(wxCommandEvent& WXUNUSED(event))
{
StdButtonSizerDialog dialog(this);
dialog.ShowModal();
}
+// TestDefaultAction
+
+#define ID_CATCH_LISTBOX_DCLICK 100
+#define ID_LISTBOX 101
+
+BEGIN_EVENT_TABLE(TestDefaultActionDialog, wxDialog)
+ EVT_CHECKBOX(ID_CATCH_LISTBOX_DCLICK, TestDefaultActionDialog::OnCatchListBoxDClick)
+ EVT_LISTBOX_DCLICK(ID_LISTBOX, TestDefaultActionDialog::OnListBoxDClick)
+END_EVENT_TABLE()
+
+TestDefaultActionDialog::TestDefaultActionDialog( wxWindow *parent ) :
+ wxDialog( parent, -1, "Test default action" )
+{
+ 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 );
+}
+
+void TestDefaultActionDialog::OnCatchListBoxDClick(wxCommandEvent& WXUNUSED(event))
+{
+ m_catchListBoxDClick = !m_catchListBoxDClick;
+}
+
+void MyFrame::OnTestDefaultActionDialog(wxCommandEvent& WXUNUSED(event))
+{
+ TestDefaultActionDialog dialog( this );
+ dialog.ShowModal();
+}
+
void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event) )
{
Close(true);
static void InitAboutInfoAll(wxAboutDialogInfo& info)
{
- InitAboutInfoMinimal(info);
+ InitAboutInfoWebsite(info);
// we can add a second developer
info.AddDeveloper(_T("A.N. Other"));
sizerTop->Add(btn, 1, wxEXPAND | wxALL, 5);
sizerTop->Add(check, 1, wxEXPAND | wxALL, 5);
- SetSizer(sizerTop);
-
- sizerTop->SetSizeHints(this);
- sizerTop->Fit(this);
+ SetSizerAndFit(sizerTop);
}
void MyModelessDialog::OnButton(wxCommandEvent& WXUNUSED(event))
sizerTop->Add(m_btnDelete, 0, wxALIGN_CENTER | wxALL, 5);
sizerTop->Add(btnOk, 0, wxALIGN_CENTER | wxALL, 5);
- SetSizer(sizerTop);
-
- sizerTop->SetSizeHints(this);
- sizerTop->Fit(this);
+ SetSizerAndFit(sizerTop);
m_btnModal->SetFocus();
m_btnModal->SetDefault();
EnableDisableControls();
- SetSizer(sizerTop);
+ SetSizerAndFit(sizerTop);
- sizerTop->SetSizeHints(this);
wxCommandEvent ev;
OnEvent(ev);
}
topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
+ panel->SetSizerAndFit(topSizer);
return panel;
}
topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );
topSizer->AddSpacer(5);
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
+ panel->SetSizerAndFit(topSizer);
return panel;
}