implement support for custom button labels in wxMessageBox under MSW; refactor the code to reuse the existing setters in Mac ports for MSW as well

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55475 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-09-05 14:39:36 +00:00
parent 433aca2d0d
commit 23e00c551b
7 changed files with 285 additions and 154 deletions

View File

@@ -107,8 +107,101 @@ protected:
m_extendedMessage,
m_caption;
long m_dialogStyle;
DECLARE_NO_COPY_CLASS(wxMessageDialogBase)
};
// this is a helper class for native wxMessageDialog implementations which need
// to store the custom button labels as member variables and then use them in
// ShowModal() (there could conceivably be a port which would have some native
// functions for setting these labels immediately and we also don't need to
// store them at all if custom labels are not supported, which is why we do
// this in a separate class and not wxMessageDialogBase itself)
#if defined(__WXCOCOA__) || defined(__WXMAC__) || defined(__WXMSW__)
class WXDLLIMPEXP_CORE wxMessageDialogWithCustomLabels
: public wxMessageDialogBase
{
public:
// ctors
wxMessageDialogWithCustomLabels() { }
wxMessageDialogWithCustomLabels(wxWindow *parent,
const wxString& message,
const wxString& caption,
long style)
: wxMessageDialogBase(parent, message, caption, style)
{
}
// customization of the message box buttons
virtual bool SetYesNoLabels(const wxString& yes,const wxString& no)
{
DoSetCustomLabel(m_yes, yes);
DoSetCustomLabel(m_no, no);
return true;
}
virtual bool SetYesNoCancelLabels(const wxString& yes,
const wxString& no,
const wxString& cancel)
{
DoSetCustomLabel(m_yes, yes);
DoSetCustomLabel(m_no, no);
DoSetCustomLabel(m_cancel, cancel);
return true;
}
virtual bool SetOKLabel(const wxString& ok)
{
DoSetCustomLabel(m_ok, ok);
return true;
}
virtual bool SetOKCancelLabels(const wxString& ok, const wxString& cancel)
{
DoSetCustomLabel(m_ok, ok);
DoSetCustomLabel(m_cancel, cancel);
return true;
}
protected:
// test if any custom labels were set
bool HasCustomLabels() const
{
return !(m_ok.empty() && m_cancel.empty() &&
m_yes.empty() && m_no.empty());
}
// these functions return the label to be used for the button which is
// either a custom label explicitly set by the user or the default label,
// i.e. they always return a valid string
wxString GetYesLabel() const { return m_yes.empty() ? _("Yes") : m_yes; }
wxString GetNoLabel() const { return m_no.empty() ? _("No") : m_no; }
wxString GetOKLabel() const { return m_ok.empty() ? _("OK") : m_ok; }
wxString GetCancelLabel() const
{ return m_cancel.empty() ? _("Cancel") : m_cancel; }
private:
// this function is called by our public SetXXXLabels() and should assign
// the value to var with possibly some transformation (e.g. Cocoa version
// currently uses this to remove any accelerators from the button strings)
virtual void DoSetCustomLabel(wxString& var, const wxString& value)
{
var = value;
}
// labels for the buttons, initially empty meaning that the defaults should
// be used, use GetYes/No/OK/CancelLabel() to access them
wxString m_yes,
m_no,
m_ok,
m_cancel;
DECLARE_NO_COPY_CLASS(wxMessageDialogWithCustomLabels)
};
#endif // ports needing wxMessageDialogWithCustomLabels
#if defined(__WX_COMPILING_MSGDLGG_CPP__) || \
defined(__WXUNIVERSAL__) || defined(__WXGPE__) || \
(defined(__WXGTK__) && !defined(__WXGTK20__))