X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ef77f91e5be312b09b5b3cb6114f05b593376db1..ae80f83724464f0d178d85a60e1ba6e9a1c4ae8f:/samples/dialogs/dialogs.cpp diff --git a/samples/dialogs/dialogs.cpp b/samples/dialogs/dialogs.cpp index 5d4ddf64ee..59873ce715 100644 --- a/samples/dialogs/dialogs.cpp +++ b/samples/dialogs/dialogs.cpp @@ -6,7 +6,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -25,13 +25,16 @@ #include "wx/wx.h" #endif -#include -#include -#include -#include -#include +#include "wx/colordlg.h" +#include "wx/filedlg.h" +#include "wx/dirdlg.h" +#include "wx/fontdlg.h" +#include "wx/choicdlg.h" +#include "wx/tipdlg.h" -#if !defined(__WINDOWS__) || USE_GENERIC_DIALOGS_IN_MSW +#define wxTEST_GENERIC_DIALOGS_IN_MSW 0 + +#if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW #include #include #endif @@ -40,47 +43,52 @@ IMPLEMENT_APP(MyApp) -MyCanvas *myCanvas = NULL; - -// A macro needed for some compilers (AIX) that need 'main' to be defined -// in the application itself. -IMPLEMENT_WXWIN_MAIN +MyCanvas *myCanvas = (MyCanvas *) NULL; // `Main program' equivalent, creating windows and returning main app frame bool MyApp::OnInit(void) { +#if defined(__WXGTK__) && defined(wxUSE_UNICODE) + wxConvCurrent = &wxConvLibc; +#endif + m_canvasTextColour = wxColour("BLACK"); m_canvasFont = *wxNORMAL_FONT; // Create the main frame window - MyFrame *frame = new MyFrame(NULL, "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; file_menu->Append(DIALOGS_CHOOSE_COLOUR, "&Choose colour"); -#if !defined(__WINDOWS__) || USE_GENERIC_DIALOGS_IN_MSW +#if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW file_menu->Append(DIALOGS_CHOOSE_COLOUR_GENERIC, "Choose colour (&generic)"); #endif file_menu->AppendSeparator(); file_menu->Append(DIALOGS_CHOOSE_FONT, "Choose &font"); -#if !defined(__WINDOWS__) || USE_GENERIC_DIALOGS_IN_MSW +#if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW file_menu->Append(DIALOGS_CHOOSE_FONT_GENERIC, "Choose f&ont (generic)"); #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_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_NUM_ENTRY, "&Numeric entry\tCtrl-N"); + file_menu->Append(DIALOGS_SINGLE_CHOICE, "&Single choice\tCtrl-S"); file_menu->AppendSeparator(); - file_menu->Append(DIALOGS_FILE_OPEN, "&Open file"); + file_menu->Append(DIALOGS_TIP, "&Tip of the day\tCtrl-T"); + file_menu->AppendSeparator(); + 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"); - file_menu->Append(DIALOGS_DIR_CHOOSE, "&Choose a directory"); + file_menu->Append(DIALOGS_DIR_CHOOSE, "&Choose a directory\tCtrl-D"); file_menu->AppendSeparator(); - file_menu->Append(wxID_EXIT, "E&xit"); + file_menu->Append(wxID_EXIT, "E&xit\tAlt-X"); wxMenuBar *menu_bar = new wxMenuBar; menu_bar->Append(file_menu, "&File"); frame->SetMenuBar(menu_bar); @@ -89,7 +97,7 @@ bool MyApp::OnInit(void) myCanvas->SetBackgroundColour(*wxWHITE); frame->Centre(wxBOTH); - + // Show the frame frame->Show(TRUE); @@ -103,7 +111,7 @@ MyFrame::MyFrame(wxWindow *parent, const wxString& title, const wxPoint& pos, co wxFrame(parent, -1, title, pos, size) {} -void MyFrame::ChooseColour(wxCommandEvent& event) +void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) ) { wxColourData data; data.SetChooseFull(TRUE); @@ -112,7 +120,7 @@ void MyFrame::ChooseColour(wxCommandEvent& event) wxColour colour(i*16, i*16, i*16); data.SetCustomColour(i, colour); } - + wxColourDialog *dialog = new wxColourDialog(this, &data); if (dialog->ShowModal() == wxID_OK) { @@ -123,15 +131,15 @@ void MyFrame::ChooseColour(wxCommandEvent& event) myCanvas->Clear(); myCanvas->Refresh(); } - dialog->Close(); + dialog->Destroy(); } -void MyFrame::ChooseFont(wxCommandEvent& event) +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) { @@ -140,11 +148,11 @@ void MyFrame::ChooseFont(wxCommandEvent& event) wxGetApp().m_canvasTextColour = retData.GetColour(); myCanvas->Refresh(); } - dialog->Close(); + dialog->Destroy(); } -#if !defined(__WINDOWS__) || USE_GENERIC_DIALOGS_IN_MSW -void MyFrame::ChooseColourGeneric(wxCommandEvent& event) +#if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW +void MyFrame::ChooseColourGeneric(wxCommandEvent& WXUNUSED(event)) { wxColourData data; data.SetChooseFull(TRUE); @@ -153,7 +161,7 @@ void MyFrame::ChooseColourGeneric(wxCommandEvent& event) wxColour colour(i*16, i*16, i*16); data.SetCustomColour(i, colour); } - + wxGenericColourDialog *dialog = new wxGenericColourDialog(this, &data); if (dialog->ShowModal() == wxID_OK) { @@ -164,10 +172,10 @@ void MyFrame::ChooseColourGeneric(wxCommandEvent& event) myCanvas->Clear(); myCanvas->Refresh(); } - dialog->Close(); + dialog->Destroy(); } -void MyFrame::ChooseFontGeneric(wxCommandEvent& event) +void MyFrame::ChooseFontGeneric(wxCommandEvent& WXUNUSED(event) ) { wxFontData data; data.SetInitialFont(wxGetApp().m_canvasFont); @@ -181,31 +189,63 @@ void MyFrame::ChooseFontGeneric(wxCommandEvent& event) wxGetApp().m_canvasTextColour = retData.GetColour(); myCanvas->Refresh(); } - dialog->Close(); + dialog->Destroy(); +} +#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."); } -#endif -void MyFrame::MessageBox(wxCommandEvent& event) +void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event) ) { - 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); + 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& 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::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); + "Please enter a string", "Default value", wxOK|wxCANCEL); if (dialog.ShowModal() == wxID_OK) { - wxMessageDialog dialog2(this, dialog.GetValue(), "Got string"); - dialog2.ShowModal(); + wxMessageDialog dialog2(this, dialog.GetValue(), "Got string"); + dialog2.ShowModal(); } } -void MyFrame::SingleChoice(wxCommandEvent& event) +void MyFrame::SingleChoice(wxCommandEvent& WXUNUSED(event) ) { const wxString choices[] = { "One", "Two", "Three", "Four", "Five" } ; int n = 5; @@ -222,51 +262,119 @@ void MyFrame::SingleChoice(wxCommandEvent& event) } } -void MyFrame::FileOpen(wxCommandEvent& event) +void MyFrame::FileOpen(wxCommandEvent& WXUNUSED(event) ) { - wxFileDialog dialog(this, "Testing open file dialog", "", "", "*.txt", 0); + wxFileDialog dialog(this, "Testing open file dialog", "", "", "*.txt", 0); - if (dialog.ShowModal() == wxID_OK) - { - wxMessageDialog dialog2(this, dialog.GetPath(), "Selected path"); - dialog2.ShowModal(); - } + if (dialog.ShowModal() == wxID_OK) + { + wxString info; + info.Printf(_T("Full file name: %s\n") + _T("Path: %s\n") + _T("Name: %s"), + dialog.GetPath().c_str(), + dialog.GetDirectory().c_str(), + dialog.GetFilename().c_str()); + wxMessageDialog dialog2(this, info, "Selected file"); + dialog2.ShowModal(); + } } -void MyFrame::FileSave(wxCommandEvent& event) +void MyFrame::FilesOpen(wxCommandEvent& WXUNUSED(event) ) { - wxFileDialog dialog(this, "Testing save file dialog", "", "", - "Text files (*.txt)|*.txt|Document files (*.doc)|*.doc", - wxSAVE|wxOVERWRITE_PROMPT); - - if (dialog.ShowModal() == wxID_OK) - { - char buf[400]; - sprintf(buf, "%s, filter %d", (const char *)dialog.GetPath(), dialog.GetFilterIndex()); - wxMessageDialog dialog2(this, wxString(buf), "Selected path"); - dialog2.ShowModal(); - } + 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", "", "myletter.txt", + "Text files (*.txt)|*.txt|Document files (*.doc)|*.doc", + wxSAVE|wxOVERWRITE_PROMPT); + + if (dialog.ShowModal() == wxID_OK) + { + wxChar buf[400]; + wxSprintf(buf, _T("%s, filter %d"), (const wxChar*)dialog.GetPath(), dialog.GetFilterIndex()); + wxMessageDialog dialog2(this, wxString(buf), "Selected path"); + dialog2.ShowModal(); + } +} + +void MyFrame::DirChoose(wxCommandEvent& WXUNUSED(event) ) +{ + // pass some initial dir to wxDirDialog + wxString dirHome; + wxGetHomeDir(&dirHome); + + wxDirDialog dialog(this, "Testing directory picker", dirHome); + + if (dialog.ShowModal() == wxID_OK) + { + wxMessageDialog dialog2(this, dialog.GetPath(), "Selected path"); + dialog2.ShowModal(); + } } -void MyFrame::DirChoose(wxCommandEvent& event) +void MyFrame::ShowTip(wxCommandEvent& event) { - wxDirDialog dialog(this, "Testing directory picker", ""); +#if wxUSE_STARTUP_TIPS + static size_t s_index = (size_t)-1; + + if ( s_index == (size_t)-1 ) + { + srand(time(NULL)); - if (dialog.ShowModal() == wxID_OK) - { - wxMessageDialog dialog2(this, dialog.GetPath(), "Selected path"); - dialog2.ShowModal(); - } + // this is completely bogus, we don't know how many lines are there + // in the file, but who cares, it's a demo only... + s_index = rand() % 5; + } + + wxTipProvider *tipProvider = wxCreateFileTipProvider("tips.txt", s_index); + + bool showAtStartup = wxShowTip(this, tipProvider); + + if ( showAtStartup ) + { + wxMessageBox("Will show tips on startup", "Tips dialog", + wxOK | wxICON_INFORMATION, this); + } + + s_index = tipProvider->GetCurrentTip(); + delete tipProvider; +#endif } -void MyFrame::OnExit(wxCommandEvent& event) +void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event) ) { - Close(TRUE); + Close(TRUE); } -void MyCanvas::OnPaint(wxPaintEvent& event) +void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event) ) { - wxPaintDC dc(this); + wxPaintDC dc(this); dc.SetFont(wxGetApp().m_canvasFont); dc.SetTextForeground(wxGetApp().m_canvasTextColour); dc.SetBackgroundMode(wxTRANSPARENT); @@ -274,22 +382,26 @@ void MyCanvas::OnPaint(wxPaintEvent& event) } BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow) - EVT_PAINT(MyCanvas::OnPaint) + 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) -#if !defined(__WINDOWS__) || USE_GENERIC_DIALOGS_IN_MSW - EVT_MENU(DIALOGS_CHOOSE_COLOUR_GENERIC, MyFrame::ChooseColourGeneric) - EVT_MENU(DIALOGS_CHOOSE_FONT_GENERIC, MyFrame::ChooseFontGeneric) + 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_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_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_MENU(wxID_EXIT, MyFrame::OnExit) END_EVENT_TABLE()