]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/dialogs/dialogs.cpp
moving to gcc 4.0 exclusively, 10.4 minimum system
[wxWidgets.git] / samples / dialogs / dialogs.cpp
index 486c82e4e777f8559b5ecb54a5e13e462f99252e..29195ad6dfc566b7327b5830c8e8edc1a03dd744 100644 (file)
@@ -27,7 +27,9 @@
 #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"
@@ -114,10 +116,13 @@ END_EVENT_TABLE()
 
 
 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
@@ -162,10 +167,12 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
 
 #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)
@@ -213,10 +220,16 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     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_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()
@@ -268,7 +281,8 @@ bool MyApp::OnInit()
     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
@@ -348,7 +362,11 @@ bool MyApp::OnInit()
 #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;
 
@@ -368,6 +386,11 @@ bool MyApp::OnInit()
        info_menu->Append(DIALOGS_LOG_DIALOG, _T("&Log dialog\tCtrl-L"));
     #endif // wxUSE_LOG_DIALOG
 
+    #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
@@ -380,14 +403,16 @@ bool MyApp::OnInit()
     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"));
+    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);
-#endif // USE_MODAL_PRESENTATION
 
 #if USE_SETTINGS_DIALOG
     wxMenu *sheet_menu = new wxMenu;
@@ -404,9 +429,16 @@ bool MyApp::OnInit()
     menuDlg->Append(wxID_ANY, _T("&Property sheets"), sheet_menu);
 #endif // USE_SETTINGS_DIALOG
 
-    menuDlg->Append(DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, _T("&Standard Buttons Sizer Dialog"));
+    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_REQUEST, _T("&Request user attention\tCtrl-R"));
+    menuDlg->Append(DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, _T("&Standard Buttons Sizer Dialog"));
 
     menuDlg->AppendSeparator();
     menuDlg->Append(wxID_EXIT, _T("E&xit\tAlt-X"));
@@ -458,32 +490,38 @@ MyFrame::MyFrame(wxWindow *parent,
 
 #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());
@@ -491,8 +529,26 @@ void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) )
         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))
 {
@@ -591,6 +647,7 @@ void MyFrame::LogDialog(wxCommandEvent& WXUNUSED(event))
 }
 #endif // wxUSE_LOG_DIALOG
 
+#if wxUSE_MSGDLG
 void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event) )
 {
     wxMessageDialog dialog(NULL,
@@ -626,8 +683,14 @@ void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event) )
     }
 }
 
+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."),
@@ -990,6 +1053,7 @@ void MyFrame::ModalDlg(wxCommandEvent& WXUNUSED(event))
     MyModalDialog dlg(this);
     dlg.ShowModal();
 }
+#endif // USE_MODAL_PRESENTATION
 
 void MyFrame::ModelessDlg(wxCommandEvent& event)
 {
@@ -1035,7 +1099,32 @@ void MyFrame::DlgCenteredParent(wxCommandEvent& WXUNUSED(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))
@@ -1083,6 +1172,50 @@ void MyFrame::OnRequestUserAttention(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);