]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/dialogs/dialogs.cpp
Small fix for generic print dialog.
[wxWidgets.git] / samples / dialogs / dialogs.cpp
index 7264b345c56157ddbf676d23c13e6a3412d77764..fecd4b0ec3079131cb6f78bb4940dc016fe7a22a 100644 (file)
@@ -388,7 +388,14 @@ MyFrame::MyFrame(wxWindow *parent,
     m_clrData.SetChooseFull(true);
     for (int i = 0; i < 16; i++)
     {
-        m_clrData.SetCustomColour(i, wxColour(i*16, i*16, i*16));
+        m_clrData.SetCustomColour(
+          i,
+          wxColour(
+            (unsigned char)(i*16),
+            (unsigned char)(i*16),
+            (unsigned char)(i*16)
+          )
+        );
     }
 #endif // wxUSE_COLOURDLG
 
@@ -414,6 +421,36 @@ void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) )
 }
 #endif // wxUSE_COLOURDLG
 
+#if USE_COLOURDLG_GENERIC
+void MyFrame::ChooseColourGeneric(wxCommandEvent& WXUNUSED(event))
+{
+    m_clrData.SetColour(myCanvas->GetBackgroundColour());
+
+    //FIXME:TODO:This has no effect...
+    m_clrData.SetChooseFull(true);
+
+    for (int i = 0; i < 16; i++)
+    {
+        wxColour colour(
+            (unsigned char)(i*16),
+            (unsigned char)(i*16),
+            (unsigned char)(i*16)
+        );
+        m_clrData.SetCustomColour(i, colour);
+    }
+
+    wxGenericColourDialog *dialog = new wxGenericColourDialog(this, &m_clrData);
+    if (dialog->ShowModal() == wxID_OK)
+    {
+        m_clrData = dialog->GetColourData();
+        myCanvas->SetBackgroundColour(m_clrData.GetColour());
+        myCanvas->ClearBackground();
+        myCanvas->Refresh();
+    }
+    dialog->Destroy();
+}
+#endif // USE_COLOURDLG_GENERIC
+
 #if wxUSE_FONTDLG
 void MyFrame::ChooseFont(wxCommandEvent& WXUNUSED(event) )
 {
@@ -439,31 +476,6 @@ void MyFrame::ChooseFont(wxCommandEvent& WXUNUSED(event) )
 }
 #endif // wxUSE_FONTDLG
 
-#if USE_COLOURDLG_GENERIC
-void MyFrame::ChooseColourGeneric(wxCommandEvent& WXUNUSED(event))
-{
-    wxColourData data;
-    data.SetChooseFull(true);
-    for (int i = 0; i < 16; i++)
-    {
-        wxColour colour(i*16, i*16, i*16);
-        data.SetCustomColour(i, colour);
-    }
-
-    wxGenericColourDialog *dialog = new wxGenericColourDialog(this, &data);
-    if (dialog->ShowModal() == wxID_OK)
-    {
-        wxColourData retData = dialog->GetColourData();
-        wxColour col = retData.GetColour();
-//        wxBrush *brush = wxTheBrushList->FindOrCreateBrush(&col, wxSOLID);
-        myCanvas->SetBackgroundColour(col);
-        myCanvas->ClearBackground();
-        myCanvas->Refresh();
-    }
-    dialog->Destroy();
-}
-#endif // USE_COLOURDLG_GENERIC
-
 #if USE_FONTDLG_GENERIC
 void MyFrame::ChooseFontGeneric(wxCommandEvent& WXUNUSED(event) )
 {
@@ -563,7 +575,7 @@ void MyFrame::PasswordEntry(wxCommandEvent& WXUNUSED(event))
                                          _T("Password entry dialog"),
                                          wxEmptyString,
                                          this);
-    if ( !!pwd )
+    if ( !pwd.empty() )
     {
         wxMessageBox(wxString::Format(wxT("Your password is '%s'"), pwd.c_str()),
                      _T("Got password"), wxOK | wxICON_INFORMATION, this);
@@ -893,7 +905,14 @@ void MyFrame::ModelessDlg(wxCommandEvent& event)
     }
     else // hide
     {
-        m_dialog->Hide();
+        // If m_dialog is NULL, then possibly the system
+        // didn't report the checked menu item status correctly.
+        // It should be true just after the menu item was selected,
+        // if there was no modeless dialog yet.
+
+        wxASSERT( m_dialog != NULL );
+        if (m_dialog)
+            m_dialog->Hide();
     }
 }
 #endif // USE_MODAL_PRESENTATION
@@ -978,14 +997,18 @@ void MyFrame::ShowProgress( wxCommandEvent& WXUNUSED(event) )
                             max,    // range
                             this,   // parent
                             wxPD_CAN_ABORT |
+                            wxPD_CAN_SKIP |
                             wxPD_APP_MODAL |
                             // wxPD_AUTO_HIDE | -- try this as well
                             wxPD_ELAPSED_TIME |
                             wxPD_ESTIMATED_TIME |
-                            wxPD_REMAINING_TIME);
+                            wxPD_REMAINING_TIME |
+                            wxPD_SMOOTH);
 
     bool cont = true;
-    for ( int i = 0; i <= max; i++ )
+    bool skip = false;
+    // each skip will move progress about quarter forward
+    for ( int i = 0; i <= max; i = wxMin(i+(skip?int(max/4):1), max+1), skip = false )
     {
         #if wxUSE_STOPWATCH && wxUSE_LONGLONG
         // do (almost) the same operations as we did for the performance test
@@ -1006,25 +1029,27 @@ void MyFrame::ShowProgress( wxCommandEvent& WXUNUSED(event) )
         #else
         wxSleep(1);
         #endif
+
+        wxString msg;
+
         if ( i == max )
         {
-            cont = dialog.Update(i, _T("That's all, folks!"));
+            msg = _T("That's all, folks!");
         }
-        else if ( i == max / 2 )
+        else if ( i > max / 2 )
         {
-            cont = dialog.Update(i, _T("Only a half left (very long message)!"));
+            msg = _T("Only a half left (very long message)!");
         }
-        else
+
+#if wxUSE_STOPWATCH && wxUSE_LONGLONG
+        if ( (i % (max/100)) == 0 ) // // only 100 updates, this makes it much faster
         {
-            #if wxUSE_STOPWATCH && wxUSE_LONGLONG
-            if ( (i % (max/100)) == 0 ) // // only 100 updates, this makes it much faster
-            {
-                cont = dialog.Update(i);
-            }
-            #else
-            cont = dialog.Update(i);
-            #endif
+            cont = dialog.Update(i, msg, &skip);
         }
+#else
+        cont = dialog.Update(i, msg, &skip);
+#endif
+
         if ( !cont )
         {
             if ( wxMessageBox(_T("Do you really want to cancel?"),