]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/dialogs/dialogs.cpp
don't treat changing focus to popup's child as loosing it
[wxWidgets.git] / samples / dialogs / dialogs.cpp
index 2fe34c932b38fbba33f08144caf5f0dfaea3b42f..9e8b340bfa0939e9aa3d26b285859f5659bc2b0e 100644 (file)
 #define wxTEST_GENERIC_DIALOGS_IN_MSW 0
 
 #if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW
-#include <wx/generic/colrdlgg.h>
-#include <wx/generic/fontdlgg.h>
+#include "wx/generic/colrdlgg.h"
+#include "wx/generic/fontdlgg.h"
 #endif
 
+#define wxUSE_DIRDLGG 0
+
 #if !defined(__WXMSW__) || defined(wxUSE_DIRDLGG) && wxUSE_DIRDLGG
-// New wxGenericDirCtrl
-#include "wx/dirctrl.h"
+#include "wx/generic/dirdlgg.h"
 #endif
 
 #include "dialogs.h"
@@ -165,8 +166,8 @@ bool MyApp::OnInit()
   file_menu->Append(DIALOGS_BUSYINFO, "&Busy info dialog\tCtrl-B");
 #endif // wxUSE_BUSYINFO
 #if wxUSE_FINDREPLDLG
-  file_menu->Append(DIALOGS_FIND, "&Find dialog\tCtrl-F");
-  file_menu->Append(DIALOGS_REPLACE, "Find and &replace dialog\tShift-Ctrl-F");
+  file_menu->Append(DIALOGS_FIND, "&Find dialog\tCtrl-F", "", TRUE);
+  file_menu->Append(DIALOGS_REPLACE, "Find and &replace dialog\tShift-Ctrl-F", "", TRUE);
 #endif // wxUSE_FINDREPLDLG
   file_menu->AppendSeparator();
   file_menu->Append(DIALOGS_MODAL, "Mo&dal dialog\tCtrl-D");
@@ -199,12 +200,20 @@ MyFrame::MyFrame(wxWindow *parent,
 {
     m_dialog = (MyModelessDialog *)NULL;
 
+#if wxUSE_FINDREPLDLG
+    m_dlgFind =
+    m_dlgReplace = NULL;
+#endif
+   
     CreateStatusBar();
 }
 
 void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) )
 {
+    wxColour col = myCanvas->GetBackgroundColour();
+
     wxColourData data;
+    data.SetColour(col);
     data.SetChooseFull(TRUE);
     for (int i = 0; i < 16; i++)
     {
@@ -212,17 +221,16 @@ void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) )
         data.SetCustomColour(i, colour);
     }
 
-    wxColourDialog *dialog = new wxColourDialog(this, &data);
-    dialog->SetTitle("Choose the background colour");
-    if (dialog->ShowModal() == wxID_OK)
+    wxColourDialog dialog(this, &data);
+    dialog.SetTitle("Choose the background colour");
+    if (dialog.ShowModal() == wxID_OK)
     {
-        wxColourData retData = dialog->GetColourData();
-        wxColour col = retData.GetColour();
+        wxColourData retData = dialog.GetColourData();
+        col = retData.GetColour();
         myCanvas->SetBackgroundColour(col);
         myCanvas->Clear();
         myCanvas->Refresh();
     }
-    dialog->Destroy();
 }
 
 void MyFrame::ChooseFont(wxCommandEvent& WXUNUSED(event) )
@@ -369,10 +377,12 @@ void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event))
 void MyFrame::SingleChoice(wxCommandEvent& WXUNUSED(event) )
 {
     const wxString choices[] = { "One", "Two", "Three", "Four", "Five" } ;
-    int n = 5;
 
-    wxSingleChoiceDialog dialog(this, "This is a small sample\nA single-choice convenience dialog",
-        "Please select a value", n, (const wxString *)choices);
+    wxSingleChoiceDialog dialog(this,
+                                "This is a small sample\n"
+                                "A single-choice convenience dialog",
+                                "Please select a value",
+                                WXSIZEOF(choices), choices);
 
     dialog.SetSelection(2);
 
@@ -385,15 +395,19 @@ void MyFrame::SingleChoice(wxCommandEvent& WXUNUSED(event) )
 
 void MyFrame::MultiChoice(wxCommandEvent& WXUNUSED(event) )
 {
-    const wxString choices[] = { "One", "Two", "Three", "Four", "Five" } ;
-    int n = 5;
+    const wxString choices[] =
+    {
+        "One", "Two", "Three", "Four", "Five",
+        "Six", "Seven", "Eight", "Nine", "Ten",
+        "Eleven", "Twelve", "Seventeen",
+    };
 
     wxArrayInt selections;
     size_t count = wxGetMultipleChoices(selections,
                                         "This is a small sample\n"
                                         "A multi-choice convenience dialog",
                                         "Please select a value",
-                                        n, (const wxString *)choices,
+                                        WXSIZEOF(choices), choices,
                                         this);
     if ( count )
     {
@@ -411,9 +425,14 @@ void MyFrame::MultiChoice(wxCommandEvent& WXUNUSED(event) )
 
 void MyFrame::FileOpen(wxCommandEvent& WXUNUSED(event) )
 {
-    wxFileDialog dialog(this, "Testing open file dialog",
-                        "", "",
-                        "C++ files (*.h;*.cpp)|*.h;*.cpp");
+    wxFileDialog dialog
+                 (
+                    this,
+                    _T("Testing open file dialog"),
+                    _T(""),
+                    _T(""),
+                    _T("C++ files (*.h;*.cpp)|*.h;*.cpp")
+                 );
 
     if (dialog.ShowModal() == wxID_OK)
     {
@@ -440,7 +459,7 @@ void MyFrame::FileOpen2(wxCommandEvent& WXUNUSED(event) )
                                     _T(""), _T(""),
                                     s_extDef,
                                     _T("Waveform (*.wav)|*.wav|Plain text (*.txt)|*.txt|All files (*.*)|*.*"),
-                                    0,
+                                    wxCHANGE_DIR,
                                     this
                                    );
 
@@ -641,7 +660,9 @@ void MyFrame::ShowProgress( wxCommandEvent& WXUNUSED(event) )
 
 void MyFrame::ShowBusyInfo(wxCommandEvent& WXUNUSED(event))
 {
-    wxBusyInfo info("Sleep^H^H^H^H^HWorkiing, please wait...\n... a bit more");
+    wxWindowDisabler disableAll;
+
+    wxBusyInfo info("Sleep^H^H^H^H^HWorkiing, please wait...", this);
 
     for ( int i = 0; i < 30; i++ )
     {
@@ -656,27 +677,45 @@ void MyFrame::ShowBusyInfo(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::ShowReplaceDialog( wxCommandEvent& WXUNUSED(event) )
 {
-    wxFindReplaceDialog *dialog = new wxFindReplaceDialog
-                                      (
-                                        this,
-                                        &m_findData,
-                                        "Find and replace dialog",
-                                        wxFR_REPLACEDIALOG
-                                      );
-    dialog->Show(TRUE);
+    if ( m_dlgReplace )
+    {
+        delete m_dlgReplace;
+        m_dlgReplace = NULL;
+    }
+    else
+    {
+        m_dlgReplace = new wxFindReplaceDialog
+                           (
+                            this,
+                            &m_findData,
+                            "Find and replace dialog",
+                            wxFR_REPLACEDIALOG
+                           );
+
+        m_dlgReplace->Show(TRUE);
+    }
 }
 
 void MyFrame::ShowFindDialog( wxCommandEvent& WXUNUSED(event) )
 {
-    wxFindReplaceDialog *dialog = new wxFindReplaceDialog
-                                      (
-                                        this,
-                                        &m_findData,
-                                        "Find dialog",
-                                        // just for testing
-                                        wxFR_NOWHOLEWORD
-                                      );
-    dialog->Show(TRUE);
+    if ( m_dlgFind )
+    {
+        delete m_dlgFind;
+        m_dlgFind = NULL;
+    }
+    else
+    {
+        m_dlgFind = new wxFindReplaceDialog
+                        (
+                            this,
+                            &m_findData,
+                            "Find dialog",
+                            // just for testing
+                            wxFR_NOWHOLEWORD
+                        );
+
+        m_dlgFind->Show(TRUE);
+    }
 }
 
 static wxString DecodeFindDialogEventFlags(int flags)
@@ -712,9 +751,29 @@ void MyFrame::OnFindDialog(wxFindDialogEvent& event)
     }
     else if ( type == wxEVT_COMMAND_FIND_CLOSE )
     {
-        wxLogMessage(wxT("Find dialog is being closed."));
+        wxFindReplaceDialog *dlg = event.GetDialog();
+
+        const wxChar *txt;
+        if ( dlg == m_dlgFind )
+        {
+            txt = _T("Find");
+            m_dlgFind = NULL;
+        }
+        else if ( dlg == m_dlgReplace )
+        {
+            txt = _T("Replace");
+            m_dlgReplace = NULL;
+        }
+        else
+        {
+            txt = _T("Unknown");
+
+            wxFAIL_MSG( _T("unexecpted event") );
+        }
+
+        wxLogMessage(wxT("%s dialog is being closed."), txt),
 
-        event.GetDialog()->Destroy();
+        dlg->Destroy();
     }
     else
     {