| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/msgdlg.h
- // Purpose: common header and base class for wxMessageDialog
- // Author: Julian Smart
- // Modified by:
- // Created:
- // Copyright: (c) Julian Smart
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_MSGDLG_H_BASE_
- #define _WX_MSGDLG_H_BASE_
- #include "wx/defs.h"
- #if wxUSE_MSGDLG
- #include "wx/dialog.h"
- #include "wx/stockitem.h"
- extern WXDLLIMPEXP_DATA_CORE(const char) wxMessageBoxCaptionStr[];
- // ----------------------------------------------------------------------------
- // wxMessageDialogBase: base class defining wxMessageDialog interface
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxMessageDialogBase : public wxDialog
- {
- public:
- // helper class for SetXXXLabels() methods: it makes it possible to pass
- // either a stock id (wxID_CLOSE) or a string ("&Close") to them
- class ButtonLabel
- {
- public:
- // ctors are not explicit, objects of this class can be implicitly
- // constructed from either stock ids or strings
- ButtonLabel(int stockId)
- : m_stockId(stockId)
- {
- wxASSERT_MSG( wxIsStockID(stockId), "invalid stock id" );
- }
- ButtonLabel(const wxString& label)
- : m_label(label), m_stockId(wxID_NONE)
- {
- }
- ButtonLabel(const char *label)
- : m_label(label), m_stockId(wxID_NONE)
- {
- }
- ButtonLabel(const wchar_t *label)
- : m_label(label), m_stockId(wxID_NONE)
- {
- }
- ButtonLabel(const wxCStrData& label)
- : m_label(label), m_stockId(wxID_NONE)
- {
- }
- // default copy ctor and dtor are ok
- // get the string label, whether it was originally specified directly
- // or as a stock id -- this is only useful for platforms without native
- // stock items id support
- wxString GetAsString() const
- {
- return m_stockId == wxID_NONE
- ? m_label
- : wxGetStockLabel(m_stockId, wxSTOCK_FOR_BUTTON);
- }
- // return the stock id or wxID_NONE if this is not a stock label
- int GetStockId() const { return m_stockId; }
- private:
- // the label if explicitly given or empty if this is a stock item
- const wxString m_label;
- // the stock item id or wxID_NONE if m_label should be used
- const int m_stockId;
- };
- // ctors
- wxMessageDialogBase() { m_dialogStyle = 0; }
- wxMessageDialogBase(wxWindow *parent,
- const wxString& message,
- const wxString& caption,
- long style)
- : m_message(message),
- m_caption(caption)
- {
- m_parent = parent;
- SetMessageDialogStyle(style);
- }
- // virtual dtor for the base class
- virtual ~wxMessageDialogBase() { }
- wxString GetCaption() const { return m_caption; }
- virtual void SetMessage(const wxString& message)
- {
- m_message = message;
- }
- wxString GetMessage() const { return m_message; }
- void SetExtendedMessage(const wxString& extendedMessage)
- {
- m_extendedMessage = extendedMessage;
- }
- wxString GetExtendedMessage() const { return m_extendedMessage; }
- // change the dialog style flag
- void SetMessageDialogStyle(long style)
- {
- wxASSERT_MSG( ((style & wxYES_NO) == wxYES_NO) || !(style & wxYES_NO),
- "wxYES and wxNO may only be used together" );
- wxASSERT_MSG( !(style & wxYES) || !(style & wxOK),
- "wxOK and wxYES/wxNO can't be used together" );
- // It is common to specify just the icon, without wxOK, in the existing
- // code, especially one written by Windows programmers as MB_OK is 0
- // and so they're used to omitting wxOK. Don't complain about it but
- // just add wxOK implicitly for compatibility.
- if ( !(style & wxYES) && !(style & wxOK) )
- style |= wxOK;
- wxASSERT_MSG( (style & wxID_OK) != wxID_OK,
- "wxMessageBox: Did you mean wxOK (and not wxID_OK)?" );
- wxASSERT_MSG( !(style & wxNO_DEFAULT) || (style & wxNO),
- "wxNO_DEFAULT is invalid without wxNO" );
- wxASSERT_MSG( !(style & wxCANCEL_DEFAULT) || (style & wxCANCEL),
- "wxCANCEL_DEFAULT is invalid without wxCANCEL" );
- wxASSERT_MSG( !(style & wxCANCEL_DEFAULT) || !(style & wxNO_DEFAULT),
- "only one default button can be specified" );
- m_dialogStyle = style;
- }
- long GetMessageDialogStyle() const { return m_dialogStyle; }
- // customization of the message box buttons
- virtual bool SetYesNoLabels(const ButtonLabel& yes,const ButtonLabel& no)
- {
- DoSetCustomLabel(m_yes, yes);
- DoSetCustomLabel(m_no, no);
- return true;
- }
- virtual bool SetYesNoCancelLabels(const ButtonLabel& yes,
- const ButtonLabel& no,
- const ButtonLabel& cancel)
- {
- DoSetCustomLabel(m_yes, yes);
- DoSetCustomLabel(m_no, no);
- DoSetCustomLabel(m_cancel, cancel);
- return true;
- }
- virtual bool SetOKLabel(const ButtonLabel& ok)
- {
- DoSetCustomLabel(m_ok, ok);
- return true;
- }
- virtual bool SetOKCancelLabels(const ButtonLabel& ok,
- const ButtonLabel& cancel)
- {
- DoSetCustomLabel(m_ok, ok);
- DoSetCustomLabel(m_cancel, cancel);
- return true;
- }
- virtual bool SetHelpLabel(const ButtonLabel& help)
- {
- DoSetCustomLabel(m_help, help);
- return true;
- }
- // test if any custom labels were set
- bool HasCustomLabels() const
- {
- return !(m_ok.empty() && m_cancel.empty() && m_help.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() ? GetDefaultYesLabel() : m_yes; }
- wxString GetNoLabel() const
- { return m_no.empty() ? GetDefaultNoLabel() : m_no; }
- wxString GetOKLabel() const
- { return m_ok.empty() ? GetDefaultOKLabel() : m_ok; }
- wxString GetCancelLabel() const
- { return m_cancel.empty() ? GetDefaultCancelLabel() : m_cancel; }
- wxString GetHelpLabel() const
- { return m_help.empty() ? GetDefaultHelpLabel() : m_help; }
- // based on message dialog style, returns exactly one of: wxICON_NONE,
- // wxICON_ERROR, wxICON_WARNING, wxICON_QUESTION, wxICON_INFORMATION,
- // wxICON_AUTH_NEEDED
- virtual long GetEffectiveIcon() const
- {
- if ( m_dialogStyle & wxICON_NONE )
- return wxICON_NONE;
- else if ( m_dialogStyle & wxICON_ERROR )
- return wxICON_ERROR;
- else if ( m_dialogStyle & wxICON_WARNING )
- return wxICON_WARNING;
- else if ( m_dialogStyle & wxICON_QUESTION )
- return wxICON_QUESTION;
- else if ( m_dialogStyle & wxICON_INFORMATION )
- return wxICON_INFORMATION;
- else if ( m_dialogStyle & wxYES )
- return wxICON_QUESTION;
- else
- return wxICON_INFORMATION;
- }
- protected:
- // for the platforms not supporting separate main and extended messages
- // this function should be used to combine both of them in a single string
- wxString GetFullMessage() const
- {
- wxString msg = m_message;
- if ( !m_extendedMessage.empty() )
- msg << "\n\n" << m_extendedMessage;
- return msg;
- }
- wxString m_message,
- m_extendedMessage,
- m_caption;
- long m_dialogStyle;
- // 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
- // while GTK+ one handles stock items specifically here)
- virtual void DoSetCustomLabel(wxString& var, const ButtonLabel& label)
- {
- 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& GetCustomHelpLabel() const { return m_help; }
- 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)
- virtual wxString GetDefaultYesLabel() const { return wxGetTranslation("Yes"); }
- virtual wxString GetDefaultNoLabel() const { return wxGetTranslation("No"); }
- virtual wxString GetDefaultOKLabel() const { return wxGetTranslation("OK"); }
- virtual wxString GetDefaultCancelLabel() const { return wxGetTranslation("Cancel"); }
- virtual wxString GetDefaultHelpLabel() const { return wxGetTranslation("Help"); }
- // 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,
- m_help;
- wxDECLARE_NO_COPY_CLASS(wxMessageDialogBase);
- };
- #include "wx/generic/msgdlgg.h"
- #if defined(__WX_COMPILING_MSGDLGG_CPP__) || \
- defined(__WXUNIVERSAL__) || defined(__WXGPE__) || \
- (defined(__WXGTK__) && !defined(__WXGTK20__))
- #define wxMessageDialog wxGenericMessageDialog
- #elif defined(__WXCOCOA__)
- #include "wx/cocoa/msgdlg.h"
- #elif defined(__WXMSW__)
- #include "wx/msw/msgdlg.h"
- #elif defined(__WXMOTIF__)
- #include "wx/motif/msgdlg.h"
- #elif defined(__WXGTK20__)
- #include "wx/gtk/msgdlg.h"
- #elif defined(__WXMAC__)
- #include "wx/osx/msgdlg.h"
- #elif defined(__WXPM__)
- #include "wx/os2/msgdlg.h"
- #endif
- // ----------------------------------------------------------------------------
- // wxMessageBox: the simplest way to use wxMessageDialog
- // ----------------------------------------------------------------------------
- int WXDLLIMPEXP_CORE wxMessageBox(const wxString& message,
- const wxString& caption = wxMessageBoxCaptionStr,
- long style = wxOK | wxCENTRE,
- wxWindow *parent = NULL,
- int x = wxDefaultCoord, int y = wxDefaultCoord);
- #endif // wxUSE_MSGDLG
- #endif // _WX_MSGDLG_H_BASE_
|