#include "wx/bookctrl.h"
#include "wx/artprov.h"
#include "wx/imaglist.h"
+#include "wx/minifram.h"
#include "wx/sysopt.h"
+#include "wx/notifmsg.h"
#if wxUSE_COLOURDLG
#include "wx/colordlg.h"
#include "wx/progdlg.h"
#endif // wxUSE_PROGRESSDLG
+#if wxUSE_ABOUTDLG
+ #include "wx/aboutdlg.h"
+
+ // these headers are only needed for custom about dialog
+ #include "wx/statline.h"
+ #include "wx/generic/aboutdlgg.h"
+#endif // wxUSE_ABOUTDLG
+
#if wxUSE_BUSYINFO
#include "wx/busyinfo.h"
#endif // wxUSE_BUSYINFO
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
#if USE_MODAL_PRESENTATION
EVT_MENU(DIALOGS_MODAL, MyFrame::ModalDlg)
+#endif // USE_MODAL_PRESENTATION
EVT_MENU(DIALOGS_MODELESS, MyFrame::ModelessDlg)
EVT_MENU(DIALOGS_CENTRE_SCREEN, MyFrame::DlgCenteredScreen)
EVT_MENU(DIALOGS_CENTRE_PARENT, MyFrame::DlgCenteredParent)
-#endif // USE_MODAL
+ 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_PROGRESS, MyFrame::ShowProgress)
#endif // wxUSE_PROGRESSDLG
+#if wxUSE_ABOUTDLG
+ EVT_MENU(DIALOGS_ABOUTDLG_SIMPLE, MyFrame::ShowSimpleAboutDialog)
+ EVT_MENU(DIALOGS_ABOUTDLG_FANCY, MyFrame::ShowFancyAboutDialog)
+ EVT_MENU(DIALOGS_ABOUTDLG_FULL, MyFrame::ShowFullAboutDialog)
+ EVT_MENU(DIALOGS_ABOUTDLG_CUSTOM, MyFrame::ShowCustomAboutDialog)
+#endif // wxUSE_ABOUTDLG
+
#if wxUSE_BUSYINFO
EVT_MENU(DIALOGS_BUSYINFO, MyFrame::ShowBusyInfo)
#endif // wxUSE_BUSYINFO
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()
#endif // USE_MODAL_PRESENTATION
+BEGIN_EVENT_TABLE(StdButtonSizerDialog, wxDialog)
+ EVT_CHECKBOX(wxID_ANY, StdButtonSizerDialog::OnEvent)
+ EVT_RADIOBUTTON(wxID_ANY, StdButtonSizerDialog::OnEvent)
+END_EVENT_TABLE()
+
MyCanvas *myCanvas = (MyCanvas *) NULL;
// `Main program' equivalent, creating windows and returning main app frame
bool MyApp::OnInit()
{
+ if ( !wxApp::OnInit() )
+ return false;
+
#if wxUSE_IMAGE
wxInitAllImageHandlers();
#endif
MyFrame *frame = new MyFrame((wxFrame *) NULL, _T("wxWidgets dialogs example"));
// Make a menubar
- wxMenu *file_menu = new wxMenu;
+ wxMenu *menuDlg = new wxMenu;
- file_menu->Append(DIALOGS_MESSAGE_BOX, _T("&Message box\tCtrl-M"));
+ menuDlg->Append(DIALOGS_MESSAGE_BOX, _T("&Message box\tCtrl-M"));
#if wxUSE_COLOURDLG || wxUSE_FONTDLG || wxUSE_CHOICEDLG
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
choices_menu->Append(DIALOGS_CHOOSE_FONT_GENERIC, _T("Choose &font (generic)"));
#endif // USE_FONTDLG_GENERIC
- file_menu->Append(wxID_ANY,_T("&Choices and selectors"),choices_menu);
+ menuDlg->Append(wxID_ANY,_T("&Choices and selectors"),choices_menu);
#endif // wxUSE_COLOURDLG || wxUSE_FONTDLG || wxUSE_CHOICEDLG
entry_menu->Append(DIALOGS_NUM_ENTRY, _T("&Numeric entry\tCtrl-N"));
#endif // wxUSE_NUMBERDLG
- file_menu->Append(wxID_ANY,_T("&Entry dialogs"),entry_menu);
+ menuDlg->Append(wxID_ANY,_T("&Entry dialogs"),entry_menu);
#endif // wxUSE_TEXTDLG || wxUSE_NUMBERDLG
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
- file_menu->Append(wxID_ANY,_T("&File operations"),filedlg_menu);
+ menuDlg->Append(wxID_ANY,_T("&File operations"),filedlg_menu);
#endif // wxUSE_FILEDLG
dir_menu->Append(DIALOGS_DIR_CHOOSE, _T("&Choose a directory\tCtrl-D"));
dir_menu->Append(DIALOGS_DIRNEW_CHOOSE, _T("Choose a directory (with \"Ne&w\" button)\tShift-Ctrl-D"));
- file_menu->Append(wxID_ANY,_T("&Directory operations"),dir_menu);
+ menuDlg->Append(wxID_ANY,_T("&Directory operations"),dir_menu);
#if USE_DIRDLG_GENERIC
dir_menu->AppendSeparator();
#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
- file_menu->Append(wxID_ANY,_T("&Informative dialogs"),info_menu);
+ #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
wxMenu *find_menu = new wxMenu;
find_menu->AppendCheckItem(DIALOGS_FIND, _T("&Find dialog\tCtrl-F"));
find_menu->AppendCheckItem(DIALOGS_REPLACE, _T("Find and &replace dialog\tShift-Ctrl-F"));
- file_menu->Append(wxID_ANY,_T("&Searching"),find_menu);
+ menuDlg->Append(wxID_ANY,_T("&Searching"),find_menu);
#endif // wxUSE_FINDREPLDLG
-#if USE_MODAL_PRESENTATION
wxMenu *dialogs_menu = new wxMenu;
+#if USE_MODAL_PRESENTATION
dialogs_menu->Append(DIALOGS_MODAL, _T("&Modal dialog\tCtrl-W"));
+#endif // USE_MODAL_PRESENTATION
dialogs_menu->AppendCheckItem(DIALOGS_MODELESS, _T("Mode&less dialog\tCtrl-Z"));
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"));
- file_menu->Append(wxID_ANY, _T("&Generic dialogs"), dialogs_menu);
-#endif // USE_MODAL_PRESENTATION
+ 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
wxMenu *sheet_menu = new wxMenu;
sheet_menu->Append(DIALOGS_PROPERTY_SHEET, _T("&Standard property sheet\tShift-Ctrl-P"));
sheet_menu->Append(DIALOGS_PROPERTY_SHEET_TOOLBOOK, _T("&Toolbook sheet\tShift-Ctrl-T"));
- if (wxPlatformIs(wxMac))
+ if (wxPlatformIs(wxPORT_MAC))
sheet_menu->Append(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, _T("Button &Toolbook sheet\tShift-Ctrl-U"));
/*
#ifdef __WXMAC__
sheet_menu->Append(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, _T("Button &Toolbook sheet\tShift-Ctrl-U"));
#endif
*/
- file_menu->Append(wxID_ANY, _T("&Property sheets"), sheet_menu);
+ menuDlg->Append(wxID_ANY, _T("&Property sheets"), sheet_menu);
#endif // USE_SETTINGS_DIALOG
- file_menu->Append(DIALOGS_REQUEST, _T("&Request user attention\tCtrl-R"));
-
- file_menu->AppendSeparator();
- file_menu->Append(wxID_EXIT, _T("E&xit\tAlt-X"));
-
- wxMenuBar *menu_bar = new wxMenuBar;
- menu_bar->Append(file_menu, _T("&File"));
- frame->SetMenuBar(menu_bar);
+ 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_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_ABOUTDLG
+ wxMenu *menuHelp = new wxMenu;
+ menuHelp->Append(DIALOGS_ABOUTDLG_SIMPLE, _T("&About (simple)...\tF1"));
+ menuHelp->Append(DIALOGS_ABOUTDLG_FANCY, _T("About (&fancy)...\tShift-F1"));
+ menuHelp->Append(DIALOGS_ABOUTDLG_FULL, _T("About (f&ull)...\tCtrl-F1"));
+ menuHelp->Append(DIALOGS_ABOUTDLG_CUSTOM, _T("About (&custom)...\tCtrl-Shift-F1"));
+#endif // wxUSE_ABOUTDLG
+
+ wxMenuBar *menubar = new wxMenuBar;
+ menubar->Append(menuDlg, _T("&Dialogs"));
+#if wxUSE_ABOUTDLG
+ menubar->Append(menuHelp, _T("&Help"));
+#endif // wxUSE_ABOUTDLG
+
+ frame->SetMenuBar(menubar);
myCanvas = new MyCanvas(frame);
myCanvas->SetBackgroundColour(*wxWHITE);
#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, _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);
+ wxMessageDialog dialog(this,
+ _T("This is a message box\nA long, long string to test out the message box properly"),
+ _T("Message box text"),
+ wxCENTER | wxNO_DEFAULT | wxYES_NO | wxCANCEL | wxICON_INFORMATION);
+
+ if ( dialog.SetYesNoLabels(_T("Answer &Yes"),_T("Answer &No")) )
+ {
+ dialog.SetExtendedMessage(_T("This platform supports custom button labels"));
+ }
+ else
+ {
+ dialog.SetExtendedMessage(_T("Custom button labels are not supported."));
+ }
switch ( dialog.ShowModal() )
{
}
}
+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();
}
s_extDef = path.AfterLast(_T('.'));
wxLogMessage(_T("You selected the file '%s', remembered extension '%s'"),
- (const wxChar*) path, (const wxChar*) s_extDef);
+ path, s_extDef);
}
void MyFrame::FilesOpen(wxCommandEvent& WXUNUSED(event) )
_T("Testing save file dialog"),
wxEmptyString,
_T("myletter.doc"),
- _T("Text files (*.txt)|*.txt|Document files (*.doc)|*.doc"),
+ _T("Text files (*.txt)|*.txt|Document files (*.doc;*.ods)|*.doc;*.ods"),
wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
dialog.SetFilterIndex(1);
_T("C++ files (*.cpp;*.h)|*.cpp;*.h")
);
+ dialog.SetExtraControlCreator(&createMyExtraPanel);
dialog.SetDirectory(wxGetHomeDir());
if (dialog.ShowModal() == wxID_OK)
_T("Testing save file dialog"),
wxEmptyString,
_T("myletter.doc"),
- _T("Text files (*.txt)|*.txt|Document files (*.doc)|*.doc"),
+ _T("Text files (*.txt)|*.txt|Document files (*.doc;*.ods)|*.doc;*.ods"),
wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
dialog.SetFilterIndex(1);
MyModalDialog dlg(this);
dlg.ShowModal();
}
+#endif // USE_MODAL_PRESENTATION
void MyFrame::ModelessDlg(wxCommandEvent& event)
{
dlg.ShowModal();
}
-#endif // USE_MODAL_PRESENTATION
+void MyFrame::MiniFrame(wxCommandEvent& WXUNUSED(event))
+{
+ wxFrame *frame = new wxMiniFrame(this, wxID_ANY, _T("Mini frame"),
+ wxDefaultPosition, wxSize(300, 100),
+ wxCAPTION | wxCLOSE_BOX);
+ new wxStaticText(frame,
+ wxID_ANY,
+ _T("Mini frames have slightly different appearance"),
+ wxPoint(5, 5));
+ new wxStaticText(frame,
+ wxID_ANY,
+ _T("from the normal frames but that's the only difference."),
+ wxPoint(5, 25));
+
+ frame->CentreOnParent();
+ 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);
void MyFrame::ShowProgress( wxCommandEvent& WXUNUSED(event) )
{
- #if wxUSE_STOPWATCH && wxUSE_LONGLONG
- // check the performance
- int countrandomnumbers = 0, count = 0;
- wxTimeSpan tsTest(0,0,0,250);
- wxDateTime DT2, DT1 = wxDateTime::UNow();
- srand(0);
- while(1)
- {
- rand();
- ++countrandomnumbers;
- if ( countrandomnumbers == 1000 )
- {
- srand(0);
- countrandomnumbers = 0;
- ++count;
- DT2 = wxDateTime::UNow();
- wxTimeSpan ts = DT2.Subtract( DT1 );
- if ( ts.IsLongerThan( tsTest ) )
- {
- break;
- }
- }
- }
- const int max = 40 * count;
- #else
- static const int max = 10;
- #endif // wxUSE_STOPWATCH && wxUSE_LONGLONG
+ static const int max = 100;
wxProgressDialog dialog(_T("Progress dialog example"),
_T("An informative message"),
// wxPD_AUTO_HIDE | -- try this as well
wxPD_ELAPSED_TIME |
wxPD_ESTIMATED_TIME |
- wxPD_REMAINING_TIME |
- wxPD_SMOOTH);
+ wxPD_REMAINING_TIME
+ | wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small
+ );
bool cont = true;
- bool skip = false;
- // each skip will move progress about quarter forward
- for ( int i = 0; i <= max; i = wxMin(i+(skip?int(max/4):1), max+1), skip = false )
+ for ( int i = 0; i <= max; i++ )
{
- #if wxUSE_STOPWATCH && wxUSE_LONGLONG
- // do (almost) the same operations as we did for the performance test
- srand(0);
- for ( int j = 0; j < 1000; j++ )
- {
- rand();
- if ( j == 999 )
- {
- DT2 = wxDateTime::UNow();
- wxTimeSpan ts = DT2.Subtract( DT1 );
- if ( ts.IsLongerThan( tsTest ) )
- {
- // nothing to do
- }
- }
- }
- #else
- wxSleep(1);
- #endif
+ wxMilliSleep(200);
wxString msg;
+ // test both modes of wxProgressDialog behaviour: start in
+ // indeterminate mode but switch to the determinate one later
+ const bool determinate = i > max/2;
+
if ( i == max )
{
msg = _T("That's all, folks!");
}
- else if ( i > max / 2 )
+ else if ( !determinate )
{
- msg = _T("Only a half left (very long message)!");
+ msg = _T("Testing indeterminate mode");
+ }
+ else if ( determinate )
+ {
+ msg = _T("Now in standard determinate mode");
}
-#if wxUSE_STOPWATCH && wxUSE_LONGLONG
- if ( (i % (max/100)) == 0 ) // // only 100 updates, this makes it much faster
+ // will be set to true if "Skip" button was pressed
+ bool skip = false;
+ if ( determinate )
{
cont = dialog.Update(i, msg, &skip);
}
-#else
- cont = dialog.Update(i, msg, &skip);
-#endif
+ else
+ {
+ cont = dialog.Pulse(msg, &skip);
+ }
+
+ // each skip will move progress about quarter forward
+ if ( skip )
+ i += max/4;
if ( !cont )
{
#endif // wxUSE_PROGRESSDLG
+#if wxUSE_ABOUTDLG
+
+static void InitAboutInfoMinimal(wxAboutDialogInfo& info)
+{
+ info.SetName(_T("Dialogs Sample"));
+ info.SetVersion(wxVERSION_NUM_DOT_STRING_T);
+ info.SetDescription(_T("This sample shows different wxWidgets dialogs"));
+ info.SetCopyright(_T("(C) 1998-2006 wxWidgets dev team"));
+ info.AddDeveloper(_T("Vadim Zeitlin"));
+}
+
+static void InitAboutInfoWebsite(wxAboutDialogInfo& info)
+{
+ InitAboutInfoMinimal(info);
+
+ info.SetWebSite(_T("http://www.wxwidgets.org/"), _T("wxWidgets web site"));
+}
+
+static void InitAboutInfoAll(wxAboutDialogInfo& info)
+{
+ InitAboutInfoWebsite(info);
+
+ // we can add a second developer
+ info.AddDeveloper(_T("A.N. Other"));
+
+ // or we can add several persons at once like this
+ static const wxChar *docwriters[] =
+ {
+ _T("First D. Writer"),
+ _T("Second One"),
+ };
+
+ info.SetDocWriters(wxArrayString(WXSIZEOF(docwriters), docwriters));
+ info.SetLicence(wxString::FromAscii(
+" wxWindows Library Licence, Version 3.1\n"
+" ======================================\n"
+"\n"
+" Copyright (c) 1998-2005 Julian Smart, Robert Roebling et al\n"
+"\n"
+" Everyone is permitted to copy and distribute verbatim copies\n"
+" of this licence document, but changing it is not allowed.\n"
+"\n"
+" WXWINDOWS LIBRARY LICENCE\n"
+" TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n"
+"\n"
+" ...and so on and so forth...\n"
+ ));
+
+ info.AddTranslator(_T("Wun Ngo Wen (Martian)"));
+}
+
+void MyFrame::ShowSimpleAboutDialog(wxCommandEvent& WXUNUSED(event))
+{
+ wxAboutDialogInfo info;
+ InitAboutInfoMinimal(info);
+
+ wxAboutBox(info);
+}
+
+void MyFrame::ShowFancyAboutDialog(wxCommandEvent& WXUNUSED(event))
+{
+ wxAboutDialogInfo info;
+ InitAboutInfoWebsite(info);
+
+ wxAboutBox(info);
+}
+
+void MyFrame::ShowFullAboutDialog(wxCommandEvent& WXUNUSED(event))
+{
+ wxAboutDialogInfo info;
+ InitAboutInfoAll(info);
+
+ wxAboutBox(info);
+}
+
+// a trivial example of a custom dialog class
+class MyAboutDialog : public wxGenericAboutDialog
+{
+public:
+ MyAboutDialog(const wxAboutDialogInfo& info)
+ {
+ Create(info);
+ }
+
+ // add some custom controls
+ virtual void DoAddCustomControls()
+ {
+ AddControl(new wxStaticLine(this), wxSizerFlags().Expand());
+ AddText(_T("Some custom text"));
+ AddControl(new wxStaticLine(this), wxSizerFlags().Expand());
+ }
+};
+
+void MyFrame::ShowCustomAboutDialog(wxCommandEvent& WXUNUSED(event))
+{
+ wxAboutDialogInfo info;
+ InitAboutInfoAll(info);
+
+ MyAboutDialog dlg(info);
+ dlg.ShowModal();
+}
+
+#endif // wxUSE_ABOUTDLG
+
#if wxUSE_BUSYINFO
void MyFrame::ShowBusyInfo(wxCommandEvent& WXUNUSED(event))
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();
#endif // USE_MODAL_PRESENTATION
+// ----------------------------------------------------------------------------
+// StdButtonSizerDialog
+// ----------------------------------------------------------------------------
+
+StdButtonSizerDialog::StdButtonSizerDialog(wxWindow *parent)
+ : wxDialog(parent, wxID_ANY, wxString(_T("StdButtonSizer dialog")),
+ wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER),
+ m_buttonsSizer(NULL)
+{
+ wxBoxSizer *const sizerTop = new wxBoxSizer(wxVERTICAL);
+
+ wxBoxSizer *const sizer = new wxBoxSizer(wxHORIZONTAL);
+ wxBoxSizer *const sizerInside1 = new wxBoxSizer(wxVERTICAL);
+
+ m_chkboxAffirmativeButton = new wxCheckBox(this, wxID_ANY, _("Enable Affirmative Button"));
+
+ wxStaticBoxSizer *const sizer1 = new wxStaticBoxSizer(wxVERTICAL, this, wxT("Affirmative Button"));
+
+ m_radiobtnOk = new wxRadioButton(this, wxID_ANY, _("Ok"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
+ m_radiobtnYes = new wxRadioButton(this, wxID_ANY, _("Yes"));
+
+ wxBoxSizer *const sizerInside2 = new wxBoxSizer(wxVERTICAL);
+
+ m_chkboxDismissButton = new wxCheckBox(this, wxID_ANY, _("Enable Dismiss Button"));
+
+ wxStaticBoxSizer *const sizer2 = new wxStaticBoxSizer(wxVERTICAL, this, wxT("Dismiss Button"));
+
+ m_radiobtnCancel = new wxRadioButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
+ m_radiobtnClose = new wxRadioButton(this, wxID_ANY, _("Close"));
+
+ wxBoxSizer *const sizer3 = new wxBoxSizer(wxHORIZONTAL);
+
+ m_chkboxNo = new wxCheckBox(this, wxID_ANY, _("No"));
+ m_chkboxHelp = new wxCheckBox(this, wxID_ANY, _("Help"));
+ m_chkboxApply = new wxCheckBox(this, wxID_ANY, _("Apply"));
+
+ m_chkboxNoDefault = new wxCheckBox(this, wxID_ANY, wxT("No Default"));
+
+ sizer1->Add(m_radiobtnOk, 0, wxALL, 5);
+ sizer1->Add(m_radiobtnYes, 0, wxALL, 5);
+
+ sizer->Add(sizerInside1, 0, 0, 0);
+ sizerInside1->Add(m_chkboxAffirmativeButton, 0, wxALL, 5);
+ sizerInside1->Add(sizer1, 0, wxALL, 5);
+ sizerInside1->SetItemMinSize(sizer1, sizer1->GetStaticBox()->GetBestSize()); // to prevent wrapping of static box label
+
+ sizer2->Add(m_radiobtnCancel, 0, wxALL, 5);
+ sizer2->Add(m_radiobtnClose, 0, wxALL, 5);
+
+ sizer->Add(sizerInside2, 0, 0, 0);
+ sizerInside2->Add(m_chkboxDismissButton, 0, wxALL, 5);
+ sizerInside2->Add(sizer2, 0, wxALL, 5);
+ sizerInside2->SetItemMinSize(sizer2, sizer2->GetStaticBox()->GetBestSize()); // to prevent wrapping of static box label
+
+ sizerTop->Add(sizer, 0, wxALL, 5);
+
+ sizer3->Add(m_chkboxNo, 0, wxALL, 5);
+ sizer3->Add(m_chkboxHelp, 0, wxALL, 5);
+ sizer3->Add(m_chkboxApply, 0, wxALL, 5);
+
+ sizerTop->Add(sizer3, 0, wxALL, 5);
+
+ sizerTop->Add(m_chkboxNoDefault, 0, wxLEFT|wxRIGHT, 10);
+
+ EnableDisableControls();
+
+ SetSizerAndFit(sizerTop);
+
+ wxCommandEvent ev;
+ OnEvent(ev);
+}
+
+void StdButtonSizerDialog::OnEvent(wxCommandEvent& WXUNUSED(event))
+{
+ if (m_buttonsSizer)
+ {
+ m_buttonsSizer->DeleteWindows();
+ GetSizer()->Remove(m_buttonsSizer);
+ }
+
+ EnableDisableControls();
+
+ long flags = 0;
+ unsigned long numButtons = 0;
+
+ if (m_chkboxAffirmativeButton->IsChecked())
+ {
+ if (m_radiobtnOk->GetValue())
+ {
+ flags |= wxOK;
+ numButtons ++;
+ }
+ else if (m_radiobtnYes->GetValue())
+ {
+ flags |= wxYES;
+ numButtons ++;
+ }
+ }
+
+ if (m_chkboxDismissButton->IsChecked())
+ {
+ if (m_radiobtnCancel->GetValue())
+ {
+ flags |= wxCANCEL;
+ numButtons ++;
+ }
+
+ else if (m_radiobtnClose->GetValue())
+ {
+ flags |= wxCLOSE;
+ numButtons ++;
+ }
+
+ }
+
+ if (m_chkboxApply->IsChecked())
+ {
+ flags |= wxAPPLY;
+ numButtons ++;
+ }
+
+ if (m_chkboxNo->IsChecked())
+ {
+ flags |= wxNO;
+ numButtons ++;
+ }
+
+ if (m_chkboxHelp->IsChecked())
+ {
+ flags |= wxHELP;
+ numButtons ++;
+ }
+
+ if (m_chkboxNoDefault->IsChecked())
+ {
+ flags |= wxNO_DEFAULT;
+ }
+
+ m_buttonsSizer = CreateStdDialogButtonSizer(flags);
+ GetSizer()->Add(m_buttonsSizer, 0, wxGROW|wxALL, 5);
+
+ Layout();
+ GetSizer()->SetSizeHints(this);
+}
+
+void StdButtonSizerDialog::EnableDisableControls()
+{
+ const bool affButtonEnabled = m_chkboxAffirmativeButton->IsChecked();
+
+ m_radiobtnOk->Enable(affButtonEnabled);
+ m_radiobtnYes->Enable(affButtonEnabled);
+
+ const bool dismissButtonEnabled = m_chkboxDismissButton->IsChecked();
+
+ m_radiobtnCancel->Enable(dismissButtonEnabled);
+ m_radiobtnClose->Enable(dismissButtonEnabled);
+}
+
#if USE_SETTINGS_DIALOG
// ----------------------------------------------------------------------------
// SettingsDialog
m_imageList = NULL;
Create(win, wxID_ANY, _("Preferences"), wxDefaultPosition, wxDefaultSize,
- wxDEFAULT_DIALOG_STYLE| (int)wxPlatform::IfNot(wxWinCE, resizeBorder)
-/*
-#ifndef __WXWINCE__
- |resizeBorder
-#endif
-*/
+ wxDEFAULT_DIALOG_STYLE| (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, resizeBorder)
);
// If using a toolbook, also follow Mac style and don't create buttons
if (!useToolBook)
- CreateButtons(wxOK|wxCANCEL| (int)wxPlatform::IfNot(wxWinPocketPC, wxHELP)
-/*
-#ifndef __POCKETPC__
- |wxHELP
-#endif
-*/
+ CreateButtons(wxOK | wxCANCEL |
+ (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP)
);
wxBookCtrlBase* notebook = GetBookCtrl();
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;
}