From: David Elliott Date: Fri, 9 Nov 2007 18:11:17 +0000 (+0000) Subject: Applied slightly-modified patch 1826540 from Gareth Simpson. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/e9871aaf863828b7c4794d7cf365332e9f4c3e00 Applied slightly-modified patch 1826540 from Gareth Simpson. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49763 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/cocoa/msgdlg.h b/include/wx/cocoa/msgdlg.h index 8b13789179..aa03ad7993 100644 --- a/include/wx/cocoa/msgdlg.h +++ b/include/wx/cocoa/msgdlg.h @@ -1 +1,63 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/cocoa/dirdlg.h +// Purpose: wxMessageDialog class +// Author: Gareth Simpson +// Created: 2007-10-29 +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_COCOA_MSGDLG_H_ +#define _WX_COCOA_MSGDLG_H_ + +#include "wx/msgdlg.h" + +DECLARE_WXCOCOA_OBJC_CLASS(NSAlert); + + + +#define wxMessageDialog wxCocoaMessageDialog +//------------------------------------------------------------------------- +// wxMsgDialog +//------------------------------------------------------------------------- + + + +class WXDLLEXPORT wxMessageDialog: public wxMessageDialogBase +{ + DECLARE_DYNAMIC_CLASS(wxMessageDialog) + DECLARE_NO_COPY_CLASS(wxMessageDialog) + + +public: + wxMessageDialog(wxWindow *parent, + const wxString& message, + const wxString& caption = wxMessageBoxCaptionStr, + long style = wxOK|wxCENTRE, + const wxPoint& pos = wxDefaultPosition); + + virtual ~wxCocoaMessageDialog(); + + virtual int ShowModal(); + + // customization of the message box + virtual bool SetYesNoLabels(const wxString& yes,const wxString& no); + virtual bool SetYesNoCancelLabels(const wxString& yes, const wxString& no, const wxString& cancel); + virtual bool SetOKLabel(const wxString& ok); + virtual bool SetOKCancelLabels(const wxString& ok, const wxString& cancel); + +protected: + // not supported for message dialog + virtual void DoSetSize(int WXUNUSED(x), int WXUNUSED(y), + int WXUNUSED(width), int WXUNUSED(height), + int WXUNUSED(sizeFlags) = wxSIZE_AUTO) {} + +private: + wxString m_yes, + m_no, + m_ok, + m_cancel; + +}; + +#endif // _WX_MSGDLG_H_ diff --git a/include/wx/msgdlg.h b/include/wx/msgdlg.h index 6f48c11f2b..2efa9a4527 100644 --- a/include/wx/msgdlg.h +++ b/include/wx/msgdlg.h @@ -111,11 +111,12 @@ protected: #if defined(__WX_COMPILING_MSGDLGG_CPP__) || \ defined(__WXUNIVERSAL__) || defined(__WXGPE__) || \ - defined(__WXCOCOA__) || \ (defined(__WXGTK__) && !defined(__WXGTK20__)) #include "wx/generic/msgdlgg.h" #define wxMessageDialog wxGenericMessageDialog +#elif defined(__WXCOCOA__) + #include "wx/cocoa/msgdlg.h" #elif defined(__WXPALMOS__) #include "wx/palmos/msgdlg.h" #elif defined(__WXMSW__) diff --git a/src/cocoa/msgdlg.mm b/src/cocoa/msgdlg.mm index 8b13789179..cf026bbb4f 100644 --- a/src/cocoa/msgdlg.mm +++ b/src/cocoa/msgdlg.mm @@ -1 +1,194 @@ + ///////////////////////////////////////////////////////////////////////////// +// Name: src/cocoa/dirdlg.mm +// Purpose: wxMessageDialog for wxCocoa +// Author: Gareth Simpson +// Created: 2007-10-09 +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#if wxUSE_MSGDLG + + +#include "wx/msgdlg.h" + + +#ifndef WX_PRECOMP + #include "wx/app.h" +#endif + + +#include "wx/cocoa/autorelease.h" +#include "wx/cocoa/string.h" + +#import +// ============================================================================ +// implementation +// ============================================================================ + +IMPLEMENT_CLASS(wxCocoaMessageDialog, wxDialog) + +// ---------------------------------------------------------------------------- +// wxDirDialog +// ---------------------------------------------------------------------------- + +wxCocoaMessageDialog::wxCocoaMessageDialog(wxWindow *parent, + const wxString& message, + const wxString& caption, + long style, + const wxPoint& pos) : wxMessageDialogBase(parent,message,caption,style) +{ + + //m_caption = caption; + //m_message = message; + + //wxTopLevelWindows.Append((wxWindowBase*)this); + wxTopLevelWindows.Append(this); + + wxASSERT(CreateBase(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,style,wxDefaultValidator,wxDialogNameStr)); + + if ( parent ) + parent->AddChild(this); + + + m_cocoaNSWindow = nil; + m_cocoaNSView = nil; + + m_yes = _("Yes"); + m_no = _("No"); + m_ok = _("OK"); + m_cancel = _("Cancel"); + +} + +wxCocoaMessageDialog::~wxCocoaMessageDialog() +{ +} + +int wxCocoaMessageDialog::ShowModal() +{ + wxAutoNSAutoreleasePool thePool; + + NSAlert *alert = [[[NSAlert alloc] init] autorelease]; + + const long style = GetMessageDialogStyle(); + + NSAlertStyle nsStyle = NSInformationalAlertStyle; + if (style & wxICON_EXCLAMATION) + nsStyle = NSWarningAlertStyle; + else if (style & wxICON_HAND) + nsStyle = NSCriticalAlertStyle; + else if (style & wxICON_INFORMATION) + nsStyle = NSInformationalAlertStyle; + else if (style & wxICON_QUESTION) + nsStyle = NSInformationalAlertStyle; + + [alert setAlertStyle:nsStyle]; + + + + + // work out what to display + // if the extended text is empty then we use the caption as the title + // and the message as the text (for backwards compatibility) + // but if the extended message is not empty then we use the message as the title + // and the extended message as the text because that makes more sense + if (m_extendedMessage.empty()) + { + [alert setMessageText:wxNSStringWithWxString(m_caption)]; + [alert setInformativeText:wxNSStringWithWxString(m_message)]; + } + else + { + [alert setMessageText:wxNSStringWithWxString(m_message)]; + [alert setInformativeText:wxNSStringWithWxString(m_extendedMessage)]; + } + + // The wxReturn value corresponding to each button + int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ }; + if (style & wxYES_NO) + { + if ( style & wxNO_DEFAULT ) + { + [alert addButtonWithTitle:wxNSStringWithWxString(m_no)]; + [alert addButtonWithTitle:wxNSStringWithWxString(m_yes)]; + buttonId[0] = wxID_NO; + buttonId[1] = wxID_YES; + } + else + { + [alert addButtonWithTitle:wxNSStringWithWxString(m_yes)]; + [alert addButtonWithTitle:wxNSStringWithWxString(m_no)]; + buttonId[0] = wxID_YES; + buttonId[1] = wxID_NO; + } + if (style & wxCANCEL) + { + [alert addButtonWithTitle:wxNSStringWithWxString(m_cancel)]; + buttonId[2] = wxID_CANCEL; + } + } + else + { + // the MSW implementation even shows an OK button if it is not specified, we'll do the same + buttonId[0] = wxID_OK; + // using null as default title does not work on earlier systems + [alert addButtonWithTitle:wxNSStringWithWxString(m_ok)]; + if (style & wxCANCEL) + { + [alert addButtonWithTitle:wxNSStringWithWxString(m_cancel)]; + buttonId[1] = wxID_CANCEL; + } + } + + int ret = [alert runModal]; + + + return buttonId[ret-NSAlertFirstButtonReturn]; +} + +bool wxCocoaMessageDialog::SetYesNoLabels(const wxString& yes,const wxString& no) +{ + m_yes = yes; + m_yes.Replace(_("&"),_("")); + m_no = no; + m_no.Replace(_("&"),_("")); + return true; +} +bool wxCocoaMessageDialog::SetYesNoCancelLabels(const wxString& yes, const wxString& no, const wxString& cancel) +{ + m_yes = yes; + m_yes.Replace(_("&"),_("")); + m_no = no; + m_no.Replace(_("&"),_("")); + m_cancel = cancel; + m_cancel.Replace(_("&"),_("")); + return true; +} +bool wxCocoaMessageDialog::SetOKLabel(const wxString& ok) +{ + m_ok = ok; + m_ok.Replace(_("&"),_("")); + return true; +} +bool wxCocoaMessageDialog::SetOKCancelLabels(const wxString& ok, const wxString& cancel) +{ + m_ok = ok; + m_ok.Replace(_("&"),_("")); + m_cancel = cancel; + m_cancel.Replace(_("&"),_("")); + return true; +} + +#endif // wxUSE_DIRDLG