]> git.saurik.com Git - wxWidgets.git/commitdiff
Allow using custom labels for wxGenericMessageDialog buttons.
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 30 Aug 2010 21:48:21 +0000 (21:48 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 30 Aug 2010 21:48:21 +0000 (21:48 +0000)
Custom labels set for wxGenericMessageDialog buttons were simply ignored as it
used CreateSeparatedButtonSizer() to create the actual buttons which in turn
always used the standard labels.

Fix this by explicitly creating the buttons with custom labels if necessary.

This also fixes custom label support in wxGenericRichMessageDialog deriving
from this class.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65449 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/msgdlgg.h
include/wx/msgdlg.h
src/generic/msgdlgg.cpp

index 8238ccd7d1aed39ec6248b0568e964e14c52c72d..f6583bd3511e7d676381226a732b8e0308e5215b 100644 (file)
@@ -12,6 +12,8 @@
 #ifndef _WX_GENERIC_MSGDLGG_H_
 #define _WX_GENERIC_MSGDLGG_H_
 
+class WXDLLIMPEXP_FWD_CORE wxSizer;
+
 class WXDLLIMPEXP_CORE wxGenericMessageDialog : public wxMessageDialogBase
 {
 public:
@@ -37,6 +39,12 @@ protected:
     virtual void AddMessageDialogDetails(wxSizer *WXUNUSED(sizer)) { }
 
 private:
+    // Creates and returns a standard button sizer using the style of this
+    // dialog and the custom labels, if any.
+    //
+    // May return NULL on smart phone platforms not using buttons at all.
+    wxSizer *CreateMsgDlgButtonSizer();
+
     wxPoint m_pos;
     bool m_created;
 
index 7e2eb5c80cb9ee59695f855d9b80c8258ffbd820..958e46a782caade794b5f43fdf49e5e998e423fd 100644 (file)
@@ -242,6 +242,16 @@ protected:
         var = label.GetAsString();
     }
 
+    // these functions return the custom label or empty string and should be
+    // used only in specific circumstances such as creating the buttons with
+    // these labels (in which case it makes sense to only use a custom label if
+    // it was really given and fall back on stock label otherwise), use the
+    // Get{Yes,No,OK,Cancel}Label() methods above otherwise
+    const wxString& GetCustomYesLabel() const { return m_yes; }
+    const wxString& GetCustomNoLabel() const { return m_no; }
+    const wxString& GetCustomOKLabel() const { return m_ok; }
+    const wxString& GetCustomCancelLabel() const { return m_cancel; }
+
 private:
     // these functions may be overridden to provide different defaults for the
     // default button labels (this is used by wxGTK)
index ec6e7e924fda8857369b55ae9b0d9304ddb7f2d7..9ba2ee10d89746e2360e2aeac56fbce435bf338a 100644 (file)
@@ -93,6 +93,66 @@ wxGenericMessageDialog::wxGenericMessageDialog( wxWindow *parent,
     m_created = false;
 }
 
+wxSizer *wxGenericMessageDialog::CreateMsgDlgButtonSizer()
+{
+#ifndef __SMARTPHONE__
+    if ( HasCustomLabels() )
+    {
+        wxStdDialogButtonSizer * const sizerStd = new wxStdDialogButtonSizer;
+
+        wxButton *btnDef = NULL;
+
+        if ( m_dialogStyle & wxOK )
+        {
+            btnDef = new wxButton(this, wxID_OK, GetCustomOKLabel());
+            sizerStd->AddButton(btnDef);
+        }
+
+        if ( m_dialogStyle & wxCANCEL )
+        {
+            wxButton * const
+                cancel = new wxButton(this, wxID_CANCEL, GetCustomCancelLabel());
+            sizerStd->AddButton(cancel);
+
+            if ( m_dialogStyle & wxCANCEL_DEFAULT )
+                btnDef = cancel;
+        }
+
+        if ( m_dialogStyle & wxYES_NO )
+        {
+            wxButton * const
+                yes = new wxButton(this, wxID_YES, GetCustomYesLabel());
+            sizerStd->AddButton(yes);
+
+            wxButton * const
+                no = new wxButton(this, wxID_NO, GetCustomNoLabel());
+            sizerStd->AddButton(no);
+            if ( m_dialogStyle & wxNO_DEFAULT )
+                btnDef = no;
+            else if ( !btnDef )
+                btnDef = yes;
+        }
+
+        if ( btnDef )
+        {
+            btnDef->SetDefault();
+            btnDef->SetFocus();
+        }
+
+        sizerStd->Realize();
+
+        return CreateSeparatedSizer(sizerStd);
+    }
+#endif // !__SMARTPHONE__
+
+    // Use standard labels for all buttons
+    return CreateSeparatedButtonSizer
+           (
+                m_dialogStyle & (wxOK | wxCANCEL | wxYES_NO |
+                                 wxNO_DEFAULT | wxCANCEL_DEFAULT)
+           );
+}
+
 void wxGenericMessageDialog::DoCreateMsgdialog()
 {
     wxDialog::Create(m_parent, wxID_ANY, m_caption, m_pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE);
@@ -156,11 +216,7 @@ void wxGenericMessageDialog::DoCreateMsgdialog()
     int center_flag = wxEXPAND;
     if (m_dialogStyle & wxYES_NO)
         center_flag = wxALIGN_CENTRE;
-    wxSizer *sizerBtn = CreateSeparatedButtonSizer
-                        (
-                            m_dialogStyle & (wxOK | wxCANCEL | wxYES_NO |
-                                             wxNO_DEFAULT | wxCANCEL_DEFAULT)
-                        );
+    wxSizer *sizerBtn = CreateMsgDlgButtonSizer();
     if ( sizerBtn )
         topsizer->Add(sizerBtn, 0, center_flag | wxALL, 10 );