#include "wx/fontdlg.h"
#include "wx/choicdlg.h"
#include "wx/tipdlg.h"
+#include "wx/progdlg.h"
+
+// New wxGenericDirCtrl
+#include "wx/dirctrl.h"
#define wxTEST_GENERIC_DIALOGS_IN_MSW 0
EVT_MENU(DIALOGS_FILES_OPEN, MyFrame::FilesOpen)
EVT_MENU(DIALOGS_FILE_SAVE, MyFrame::FileSave)
EVT_MENU(DIALOGS_DIR_CHOOSE, MyFrame::DirChoose)
+ EVT_MENU(DIALOGS_GENERIC_DIR_CHOOSE, MyFrame::GenericDirChoose)
+ EVT_MENU(DIALOGS_MODAL, MyFrame::ModalDlg)
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
+#if wxUSE_PROGRESSDLG
+ EVT_MENU(DIALOGS_PROGRESS, MyFrame::ShowProgress)
#endif
EVT_MENU(wxID_EXIT, MyFrame::OnExit)
EVT_BUTTON(DIALOGS_MODELESS_BTN, MyFrame::OnButton)
END_EVENT_TABLE()
+
+BEGIN_EVENT_TABLE(MyModalDialog, wxDialog)
+ EVT_BUTTON(-1, MyModalDialog::OnButton)
+END_EVENT_TABLE()
+
+BEGIN_EVENT_TABLE(MyModelessDialog, wxDialog)
+ EVT_CLOSE(MyModelessDialog::OnClose)
+END_EVENT_TABLE()
+
MyCanvas *myCanvas = (MyCanvas *) NULL;
// `Main program' equivalent, creating windows and returning main app frame
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->Append(DIALOGS_GENERIC_DIR_CHOOSE, "&Choose a directory (generic implementation)");
+#if wxUSE_PROGRESSDLG
+ file_menu->Append(DIALOGS_PROGRESS, "Pro&gress dialog\tCtrl-G");
+#endif // wxUSE_PROGRESSDLG
file_menu->AppendSeparator();
+ file_menu->Append(DIALOGS_MODAL, "Mo&dal dialog\tCtrl-F");
file_menu->Append(DIALOGS_MODELESS, "Modeless &dialog\tCtrl-Z", "", TRUE);
file_menu->AppendSeparator();
file_menu->Append(wxID_EXIT, "E&xit\tAlt-X");
void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) )
{
- wxColourData data;
- data.SetChooseFull(TRUE);
- for (int i = 0; i < 16; i++)
- {
+ wxColourData data;
+ data.SetChooseFull(TRUE);
+ for (int i = 0; i < 16; i++)
+ {
wxColour colour(i*16, i*16, i*16);
data.SetCustomColour(i, colour);
- }
+ }
- wxColourDialog *dialog = new wxColourDialog(this, &data);
- if (dialog->ShowModal() == wxID_OK)
- {
+ wxColourDialog *dialog = new wxColourDialog(this, &data);
+ dialog->SetTitle("Choose the background colour");
+ if (dialog->ShowModal() == wxID_OK)
+ {
wxColourData retData = dialog->GetColourData();
wxColour col = retData.GetColour();
-// wxBrush *brush = wxTheBrushList->FindOrCreateBrush(&col, wxSOLID);
myCanvas->SetBackgroundColour(col);
myCanvas->Clear();
myCanvas->Refresh();
- }
- dialog->Destroy();
+ }
+ dialog->Destroy();
}
void MyFrame::ChooseFont(wxCommandEvent& WXUNUSED(event) )
void MyFrame::LogDialog(wxCommandEvent& event)
{
- wxLogMessage("This is some message - everything is ok so far.");
- wxLogMessage("Another message...");
- wxLogWarning("And then something went wrong!");
+ // calling wxYield() (as ~wxBusyCursor does) shouldn't result in messages
+ // being flushed -- test it
+ {
+ wxBusyCursor bc;
+ wxLogMessage("This is some message - everything is ok so far.");
+ wxLogMessage("Another message...\n... this one is on multiple lines");
+ wxLogWarning("And then something went wrong!");
+ }
+
wxLogError("Intermediary error handler decided to abort.");
- wxLogError("The top level caller detected an error.");
+ wxLogError("The top level caller detected an unrecoverable error.");
wxLog::FlushActive();
- wxLogMessage("And this is the same dialog but with onle one message");
+ wxLogMessage("And this is the same dialog but with only one message.");
}
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",
+ wxMessageDialog dialog( NULL, "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::PasswordEntry(wxCommandEvent& WXUNUSED(event))
{
wxString pwd = wxGetPasswordFromUser("Enter password:",
- "Passowrd entry dialog",
+ "Password entry dialog",
"",
this);
if ( !!pwd )
}
}
+void MyFrame::GenericDirChoose(wxCommandEvent& WXUNUSED(event) )
+{
+ // pass some initial dir to wxDirDialog
+ wxString dirHome;
+ wxGetHomeDir(&dirHome);
+
+ wxGenericDirDialog dialog(this, "Testing generic directory picker", dirHome);
+
+ if (dialog.ShowModal() == wxID_OK)
+ {
+ wxMessageDialog dialog2(this, dialog.GetPath(), "Selected path");
+ dialog2.ShowModal();
+ }
+}
+
+void MyFrame::ModalDlg(wxCommandEvent& WXUNUSED(event))
+{
+ MyModalDialog dlg(this);
+ dlg.ShowModal();
+}
+
void MyFrame::ModelessDlg(wxCommandEvent& event)
{
bool show = GetMenuBar()->IsChecked(event.GetInt());
Close(TRUE);
}
+#if wxUSE_PROGRESSDLG
+
+void MyFrame::ShowProgress( wxCommandEvent& WXUNUSED(event) )
+{
+ static const int max = 10;
+
+ wxProgressDialog dialog("Progress dialog example",
+ "An informative message",
+ max, // range
+ this, // parent
+ wxPD_CAN_ABORT |
+ wxPD_APP_MODAL |
+ wxPD_ELAPSED_TIME |
+ wxPD_ESTIMATED_TIME |
+ wxPD_REMAINING_TIME);
+
+ bool cont = TRUE;
+ for ( int i = 0; i <= max && cont; i++ )
+ {
+ wxSleep(1);
+ if ( i == max )
+ {
+ cont = dialog.Update(i, "That's all, folks!");
+ }
+ else if ( i == max / 2 )
+ {
+ cont = dialog.Update(i, "Only a half left (very long message)!");
+ }
+ else
+ {
+ cont = dialog.Update(i);
+ }
+ }
+
+ if ( !cont )
+ {
+ wxLogStatus("Progress dialog aborted!");
+ }
+ else
+ {
+ wxLogStatus("Countdown from %d finished", max);
+ }
+}
+
+#endif // wxUSE_PROGRESSDLG
+
+// ----------------------------------------------------------------------------
+// MyCanvas
+// ----------------------------------------------------------------------------
+
void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event) )
{
wxPaintDC dc(this);
MyModelessDialog::MyModelessDialog(wxWindow *parent)
: wxDialog(parent, -1, wxString("Modeless dialog"))
{
- (void)new wxButton(this, DIALOGS_MODELESS_BTN, "Press me");
- Fit();
- Centre();
+ wxBoxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
+
+ wxButton *btn = new wxButton(this, DIALOGS_MODELESS_BTN, "Press me");
+ wxCheckBox *check = new wxCheckBox(this, -1, "Should be disabled");
+ check->Disable();
+
+ sizerTop->Add(btn, 1, wxEXPAND | wxALL, 5);
+ sizerTop->Add(check, 1, wxEXPAND | wxALL, 5);
+
+ SetAutoLayout(TRUE);
+ SetSizer(sizerTop);
+
+ sizerTop->SetSizeHints(this);
+ sizerTop->Fit(this);
+}
+
+void MyModelessDialog::OnClose(wxCloseEvent& event)
+{
+ if ( event.CanVeto() )
+ {
+ wxMessageBox("Use the menu item to close this dialog",
+ "Modeless dialog",
+ wxOK | wxICON_INFORMATION, this);
+
+ event.Veto();
+ }
+}
+
+// ----------------------------------------------------------------------------
+// MyModalDialog
+// ----------------------------------------------------------------------------
+
+MyModalDialog::MyModalDialog(wxWindow *parent)
+ : wxDialog(parent, -1, wxString("Modal dialog"))
+{
+ wxBoxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
+
+ m_btnFocused = new wxButton(this, -1, "Default button");
+ m_btnDelete = new wxButton(this, -1, "&Delete button");
+ sizerTop->Add(m_btnFocused, 0, wxALIGN_CENTER | wxALL, 5);
+ sizerTop->Add(m_btnDelete, 0, wxALIGN_CENTER | wxALL, 5);
+
+ SetAutoLayout(TRUE);
+ SetSizer(sizerTop);
+
+ sizerTop->SetSizeHints(this);
+ sizerTop->Fit(this);
+
+ m_btnFocused->SetFocus();
+ m_btnFocused->SetDefault();
+}
+
+void MyModalDialog::OnButton(wxCommandEvent& event)
+{
+ if ( event.GetEventObject() == m_btnDelete )
+ {
+ delete m_btnFocused;
+ m_btnFocused = NULL;
+
+ m_btnDelete->Disable();
+ }
+ else if ( event.GetEventObject() == m_btnFocused )
+ {
+ wxGetTextFromUser("Dummy prompt", "Modal dialog called from dialog",
+ "", this);
+ }
+ else
+ {
+ event.Skip();
+ }
}