X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c31d9c7f601e767cc3210b63a989434af76fef61..a8fc3508e77811dbce06afa7703cfbeb3b037962:/samples/dialogs/dialogs.cpp?ds=sidebyside diff --git a/samples/dialogs/dialogs.cpp b/samples/dialogs/dialogs.cpp index 3abb136139..eeeecdac1f 100644 --- a/samples/dialogs/dialogs.cpp +++ b/samples/dialogs/dialogs.cpp @@ -152,6 +152,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) #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 @@ -277,12 +278,63 @@ BEGIN_EVENT_TABLE(StdButtonSizerDialog, wxDialog) 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 @@ -344,7 +396,8 @@ bool MyApp::OnInit() 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 @@ -488,8 +541,23 @@ bool MyApp::OnInit() 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 @@ -580,6 +648,24 @@ MyFrame::MyFrame(const wxString& title) // 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() @@ -758,7 +844,7 @@ void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event)) wxCENTER | wxNO_DEFAULT | wxYES_NO | wxCANCEL | wxICON_INFORMATION); - + wxString extmsg; if ( dialog.SetYesNoCancelLabels ( @@ -776,21 +862,21 @@ void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event)) "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!")); } @@ -912,7 +998,7 @@ void MyFrame::PasswordEntry(wxCommandEvent& WXUNUSED(event)) } } -void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event)) +void MyFrame::LineEntry(wxCommandEvent& WXUNUSED(event)) { wxTextEntryDialog dialog(this, wxT("This is a small sample\n") @@ -926,6 +1012,19 @@ void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event)) 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 @@ -1688,10 +1787,15 @@ void MyFrame::OnStandardButtonsSizerDialog(wxCommandEvent& WXUNUSED(event)) #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 ) : @@ -1720,6 +1824,9 @@ 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 ); @@ -1729,6 +1836,16 @@ TestDefaultActionDialog::TestDefaultActionDialog( wxWindow *parent ) : 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 ); @@ -1739,6 +1856,11 @@ void TestDefaultActionDialog::OnCatchListBoxDClick(wxCommandEvent& WXUNUSED(even m_catchListBoxDClick = !m_catchListBoxDClick; } +void TestDefaultActionDialog::OnTextEnter(wxCommandEvent& event) +{ + wxLogMessage("Text \"%s\" entered.", event.GetString()); +} + void MyFrame::OnTestDefaultActionDialog(wxCommandEvent& WXUNUSED(event)) { TestDefaultActionDialog dialog( this ); @@ -2565,6 +2687,7 @@ const TestMessageBoxDialog::BtnInfo TestMessageBoxDialog::ms_btnInfo[] = { wxNO, "&No" }, { wxOK, "&Ok" }, { wxCANCEL, "&Cancel" }, + { wxHELP, "&Help" }, }; BEGIN_EVENT_TABLE(TestMessageBoxDialog, wxDialog) @@ -2644,7 +2767,7 @@ bool TestMessageBoxDialog::Create() }; wxCOMPILE_TIME_ASSERT( WXSIZEOF(icons) == MsgDlgIcon_Max, IconMismatch ); - + m_icons = new wxRadioBox(this, wxID_ANY, "&Icon style", wxDefaultPosition, wxDefaultSize, WXSIZEOF(icons), icons, @@ -2785,6 +2908,11 @@ void TestMessageBoxDialog::PrepareMessageDialog(wxMessageDialogBase &dlg) dlg.SetOKLabel(m_labels[Btn_Ok]->GetValue()); } } + + if ( style & wxHELP ) + { + dlg.SetHelpLabel(m_labels[Btn_Help]->GetValue()); + } } void TestMessageBoxDialog::OnApply(wxCommandEvent& WXUNUSED(event)) @@ -2792,7 +2920,34 @@ void TestMessageBoxDialog::OnApply(wxCommandEvent& WXUNUSED(event)) wxMessageDialog dlg(this, GetMessage(), "Test Message Box", 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))