X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/78bd7ed38ccdfdd5f2cf6cf77089046b9e3993b5..025562fee3e3dfe90d03ef58e8660b7753bf2bff:/samples/dialogs/dialogs.cpp?ds=sidebyside diff --git a/samples/dialogs/dialogs.cpp b/samples/dialogs/dialogs.cpp index daf445cefb..61fe0daccd 100644 --- a/samples/dialogs/dialogs.cpp +++ b/samples/dialogs/dialogs.cpp @@ -31,7 +31,6 @@ #include "wx/fontdlg.h" #include "wx/choicdlg.h" #include "wx/tipdlg.h" -#include "wx/extdlg.h" #define wxTEST_GENERIC_DIALOGS_IN_MSW 0 @@ -44,10 +43,37 @@ IMPLEMENT_APP(MyApp) +BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow) + EVT_PAINT(MyCanvas::OnPaint) +END_EVENT_TABLE() + +BEGIN_EVENT_TABLE(MyFrame, wxFrame) + EVT_MENU(DIALOGS_CHOOSE_COLOUR, MyFrame::ChooseColour) + EVT_MENU(DIALOGS_CHOOSE_FONT, MyFrame::ChooseFont) + EVT_MENU(DIALOGS_LOG_DIALOG, MyFrame::LogDialog) + EVT_MENU(DIALOGS_MESSAGE_BOX, MyFrame::MessageBox) + EVT_MENU(DIALOGS_TEXT_ENTRY, MyFrame::TextEntry) + EVT_MENU(DIALOGS_PASSWORD_ENTRY, MyFrame::PasswordEntry) + EVT_MENU(DIALOGS_NUM_ENTRY, MyFrame::NumericEntry) + EVT_MENU(DIALOGS_SINGLE_CHOICE, MyFrame::SingleChoice) + EVT_MENU(DIALOGS_FILE_OPEN, MyFrame::FileOpen) + EVT_MENU(DIALOGS_FILES_OPEN, MyFrame::FilesOpen) + EVT_MENU(DIALOGS_FILE_SAVE, MyFrame::FileSave) + EVT_MENU(DIALOGS_DIR_CHOOSE, MyFrame::DirChoose) + EVT_MENU(DIALOGS_MODELESS, MyFrame::ModelessDlg) + EVT_MENU(DIALOGS_TIP, MyFrame::ShowTip) +#if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW + EVT_MENU(DIALOGS_CHOOSE_COLOUR_GENERIC, MyFrame::ChooseColourGeneric) + EVT_MENU(DIALOGS_CHOOSE_FONT_GENERIC, MyFrame::ChooseFontGeneric) +#endif + EVT_MENU(wxID_EXIT, MyFrame::OnExit) + + EVT_BUTTON(DIALOGS_MODELESS_BTN, MyFrame::OnButton) +END_EVENT_TABLE() MyCanvas *myCanvas = (MyCanvas *) NULL; // `Main program' equivalent, creating windows and returning main app frame -bool MyApp::OnInit(void) +bool MyApp::OnInit() { #if defined(__WXGTK__) && defined(wxUSE_UNICODE) wxConvCurrent = &wxConvLibc; @@ -57,7 +83,7 @@ bool MyApp::OnInit(void) m_canvasFont = *wxNORMAL_FONT; // Create the main frame window - MyFrame *frame = new MyFrame((wxFrame *) NULL, (char *) "wxWindows dialogs example", wxPoint(50, 50), wxSize(400, 300)); + MyFrame *frame = new MyFrame((wxFrame *) NULL, (char *) "wxWindows dialogs example", wxPoint(20, 20), wxSize(400, 300)); // Make a menubar wxMenu *file_menu = new wxMenu; @@ -76,18 +102,23 @@ bool MyApp::OnInit(void) #endif file_menu->AppendSeparator(); - file_menu->Append(DIALOGS_MESSAGE_BOX, "&Message box"); - file_menu->Append(DIALOGS_TEXT_ENTRY, "Text &entry"); - file_menu->Append(DIALOGS_SINGLE_CHOICE, "&Single choice"); - file_menu->Append(DIALOGS_EXT_DIALOG, "&Extended dialog"); + file_menu->Append(DIALOGS_LOG_DIALOG, "&Log dialog\tCtrl-L"); + file_menu->Append(DIALOGS_MESSAGE_BOX, "&Message box\tCtrl-M"); + file_menu->Append(DIALOGS_TEXT_ENTRY, "Text &entry\tCtrl-E"); + file_menu->Append(DIALOGS_PASSWORD_ENTRY, "&Password entry\tCtrl-P"); + file_menu->Append(DIALOGS_NUM_ENTRY, "&Numeric entry\tCtrl-N"); + file_menu->Append(DIALOGS_SINGLE_CHOICE, "&Single choice\tCtrl-C"); file_menu->AppendSeparator(); - file_menu->Append(DIALOGS_TIP, "&Tip of the day"); + file_menu->Append(DIALOGS_TIP, "&Tip of the day\tCtrl-T"); file_menu->AppendSeparator(); - file_menu->Append(DIALOGS_FILE_OPEN, "&Open file"); - file_menu->Append(DIALOGS_FILE_SAVE, "Sa&ve file"); - file_menu->Append(DIALOGS_DIR_CHOOSE, "&Choose a directory"); + file_menu->Append(DIALOGS_FILE_OPEN, "&Open file\tCtrl-O"); + file_menu->Append(DIALOGS_FILES_OPEN, "Open &files\tCtrl-Q"); + file_menu->Append(DIALOGS_FILE_SAVE, "Sa&ve file\tCtrl-S"); + file_menu->Append(DIALOGS_DIR_CHOOSE, "&Choose a directory\tCtrl-D"); file_menu->AppendSeparator(); - file_menu->Append(wxID_EXIT, "E&xit"); + file_menu->Append(DIALOGS_MODELESS, "Modeless &dialog\tCtrl-Z", "", TRUE); + file_menu->AppendSeparator(); + file_menu->Append(wxID_EXIT, "E&xit\tAlt-X"); wxMenuBar *menu_bar = new wxMenuBar; menu_bar->Append(file_menu, "&File"); frame->SetMenuBar(menu_bar); @@ -96,7 +127,7 @@ bool MyApp::OnInit(void) myCanvas->SetBackgroundColour(*wxWHITE); frame->Centre(wxBOTH); - + // Show the frame frame->Show(TRUE); @@ -106,45 +137,13 @@ bool MyApp::OnInit(void) } // My frame constructor -MyFrame::MyFrame(wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size): - wxFrame(parent, -1, title, pos, size) -{} - -void MyFrame::ExtDialog(wxCommandEvent& WXUNUSED(event) ) +MyFrame::MyFrame(wxWindow *parent, + const wxString& title, + const wxPoint& pos, + const wxSize& size) + : wxFrame(parent, -1, title, pos, size) { - // The standard flags causes this dialog to display a - // wxStaticLine under wxMotif and wxGTK, but none under - // other platforms. Also, it will not be resizable - // anywhere. - - wxExtDialog dialog( this, -1, "Test 1 for wxExtDialog", wxOK|wxFORWARD|wxBACKWARD ); - dialog.AddButton( new wxButton( &dialog, -1, "Custom") ); - - dialog.SetClientWindow( new wxTextCtrl( &dialog, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) ); - - // query minimal recommended size from the buttons - dialog.SetSize( dialog.GetButtonAreaSize().x, 170 ); - - dialog.Centre( wxBOTH ); - dialog.ShowModal(); - - // This dialog uses the standard dialog styles but is also - // resizable on all platforms and shows a wxStaticLine on - // all platforms. - - wxExtDialog dialog2( this, -1, "Test 2 for wxExtDialog", - wxOK|wxFORWARD|wxBACKWARD|wxCANCEL, - wxDefaultPosition, wxSize(400,170), - wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxED_BUTTONS_RIGHT | wxED_STATIC_LINE | wxED_CLIENT_MARGIN ); - - dialog2.SetClientWindow( new wxTextCtrl( &dialog2, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) ); - - // query minimal recommended size from the buttons - wxSize min_size( dialog2.GetButtonAreaSize() ); - dialog2.SetSizeHints( min_size.x + 200, min_size.y ); - - dialog2.Centre( wxBOTH ); - dialog2.ShowModal(); + m_dialog = (MyModelessDialog *)NULL; } void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) ) @@ -156,7 +155,7 @@ void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) ) wxColour colour(i*16, i*16, i*16); data.SetCustomColour(i, colour); } - + wxColourDialog *dialog = new wxColourDialog(this, &data); if (dialog->ShowModal() == wxID_OK) { @@ -175,7 +174,7 @@ void MyFrame::ChooseFont(wxCommandEvent& WXUNUSED(event) ) wxFontData data; data.SetInitialFont(wxGetApp().m_canvasFont); data.SetColour(wxGetApp().m_canvasTextColour); - + wxFontDialog *dialog = new wxFontDialog(this, &data); if (dialog->ShowModal() == wxID_OK) { @@ -197,7 +196,7 @@ void MyFrame::ChooseColourGeneric(wxCommandEvent& WXUNUSED(event)) wxColour colour(i*16, i*16, i*16); data.SetCustomColour(i, colour); } - + wxGenericColourDialog *dialog = new wxGenericColourDialog(this, &data); if (dialog->ShowModal() == wxID_OK) { @@ -227,20 +226,73 @@ void MyFrame::ChooseFontGeneric(wxCommandEvent& WXUNUSED(event) ) } dialog->Destroy(); } -#endif +#endif // wxTEST_GENERIC_DIALOGS_IN_MSW + +void MyFrame::LogDialog(wxCommandEvent& event) +{ + wxLogMessage("This is some message - everything is ok so far."); + wxLogMessage("Another message..."); + wxLogWarning("And then something went wrong!"); + wxLogError("Intermediary error handler decided to abort."); + wxLogError("The top level caller detected an error."); + + wxLog::FlushActive(); + + wxLogMessage("And this is the same dialog but with only one message."); +} void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event) ) { - wxMessageDialog dialog(NULL, "This is a message box\nA long, long string to test out the message box properly", + wxMessageDialog dialog( this, "This is a message box\nA long, long string to test out the message box properly", "Message box text", wxYES_NO|wxCANCEL|wxICON_INFORMATION); dialog.ShowModal(); } -void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event) ) +void MyFrame::NumericEntry(wxCommandEvent& WXUNUSED(event) ) +{ + long res = wxGetNumberFromUser( "This is some text, actually a lot of text.\n" + "Even two rows of text.", + "Enter a number:", "Numeric input test", + 50, 0, 100, this ); + + wxString msg; + int icon; + if ( res == -1 ) + { + msg = "Invalid number entered or dialog cancelled."; + icon = wxICON_HAND; + } + else + { + msg.Printf(_T("You've entered %lu"), res ); + icon = wxICON_INFORMATION; + } + + wxMessageBox(msg, "Numeric test result", wxOK | icon, this); +} + +void MyFrame::PasswordEntry(wxCommandEvent& WXUNUSED(event)) +{ + wxString pwd = wxGetPasswordFromUser("Enter password:", + "Passowrd entry dialog", + "", + this); + if ( !!pwd ) + { + wxMessageBox(wxString::Format("Your password is '%s'", pwd.c_str()), + "Got password", wxOK | wxICON_INFORMATION, this); + } +} + +void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event)) { - wxTextEntryDialog dialog(this, "This is a small sample\nA long, long string to test out the text entrybox", - "Please enter a string", "Default value", wxOK|wxCANCEL); + wxTextEntryDialog dialog(this, + "This is a small sample\n" + "A long, long string to test out the text entrybox", + "Please enter a string", + "Default value", + wxOK | wxCANCEL); if (dialog.ShowModal() == wxID_OK) { @@ -284,9 +336,37 @@ void MyFrame::FileOpen(wxCommandEvent& WXUNUSED(event) ) } } +void MyFrame::FilesOpen(wxCommandEvent& WXUNUSED(event) ) +{ + wxFileDialog dialog(this, "Testing open multiple file dialog", + "", "", wxFileSelectorDefaultWildcardStr, + wxMULTIPLE); + + if (dialog.ShowModal() == wxID_OK) + { + wxArrayString paths, filenames; + + dialog.GetPaths(paths); + dialog.GetFilenames(filenames); + + wxString msg, s; + size_t count = paths.GetCount(); + for ( size_t n = 0; n < count; n++ ) + { + s.Printf(_T("File %d: %s (%s)\n"), + n, paths[n].c_str(), filenames[n].c_str()); + + msg += s; + } + + wxMessageDialog dialog2(this, msg, "Selected files"); + dialog2.ShowModal(); + } +} + void MyFrame::FileSave(wxCommandEvent& WXUNUSED(event) ) { - wxFileDialog dialog(this, "Testing save file dialog", "", "", + wxFileDialog dialog(this, "Testing save file dialog", "", "myletter.txt", "Text files (*.txt)|*.txt|Document files (*.doc)|*.doc", wxSAVE|wxOVERWRITE_PROMPT); @@ -301,7 +381,11 @@ void MyFrame::FileSave(wxCommandEvent& WXUNUSED(event) ) void MyFrame::DirChoose(wxCommandEvent& WXUNUSED(event) ) { - wxDirDialog dialog(this, "Testing directory picker", ""); + // pass some initial dir to wxDirDialog + wxString dirHome; + wxGetHomeDir(&dirHome); + + wxDirDialog dialog(this, "Testing directory picker", dirHome); if (dialog.ShowModal() == wxID_OK) { @@ -310,6 +394,31 @@ void MyFrame::DirChoose(wxCommandEvent& WXUNUSED(event) ) } } +void MyFrame::ModelessDlg(wxCommandEvent& event) +{ + bool show = GetMenuBar()->IsChecked(event.GetInt()); + + if ( show ) + { + if ( !m_dialog ) + { + m_dialog = new MyModelessDialog(this); + } + + m_dialog->Show(TRUE); + } + else // hide + { + m_dialog->Hide(); + } +} + +void MyFrame::OnButton(wxCommandEvent& WXUNUSED(event)) +{ + wxMessageBox("Button pressed in modeless dialog", "Info", + wxOK | wxICON_INFORMATION, this); +} + void MyFrame::ShowTip(wxCommandEvent& event) { #if wxUSE_STARTUP_TIPS @@ -353,25 +462,14 @@ void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event) ) dc.DrawText("wxWindows common dialogs test application", 10, 10); } -BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow) - EVT_PAINT(MyCanvas::OnPaint) -END_EVENT_TABLE() - -BEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_MENU(DIALOGS_CHOOSE_COLOUR, MyFrame::ChooseColour) - EVT_MENU(DIALOGS_CHOOSE_FONT, MyFrame::ChooseFont) - EVT_MENU(DIALOGS_MESSAGE_BOX, MyFrame::MessageBox) - EVT_MENU(DIALOGS_TEXT_ENTRY, MyFrame::TextEntry) - EVT_MENU(DIALOGS_SINGLE_CHOICE, MyFrame::SingleChoice) - EVT_MENU(DIALOGS_FILE_OPEN, MyFrame::FileOpen) - EVT_MENU(DIALOGS_FILE_SAVE, MyFrame::FileSave) - EVT_MENU(DIALOGS_DIR_CHOOSE, MyFrame::DirChoose) - EVT_MENU(DIALOGS_TIP, MyFrame::ShowTip) - EVT_MENU(DIALOGS_EXT_DIALOG, MyFrame::ExtDialog) -#if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW - EVT_MENU(DIALOGS_CHOOSE_COLOUR_GENERIC, MyFrame::ChooseColourGeneric) - EVT_MENU(DIALOGS_CHOOSE_FONT_GENERIC, MyFrame::ChooseFontGeneric) -#endif - EVT_MENU(wxID_EXIT, MyFrame::OnExit) -END_EVENT_TABLE() +// ---------------------------------------------------------------------------- +// MyModelessDialog +// ---------------------------------------------------------------------------- +MyModelessDialog::MyModelessDialog(wxWindow *parent) + : wxDialog(parent, -1, wxString("Modeless dialog")) +{ + (void)new wxButton(this, DIALOGS_MODELESS_BTN, "Press me"); + Fit(); + Centre(); +}