Merge new wxCocoaMessageDialog from trunk.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@49765 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1 +1,78 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
#ifndef wxUSE_COCOA_NATIVE_MSGDLG
|
||||||
|
// trunk: Always use Cocoa dialog
|
||||||
|
// 2.8: Only use Cocoa dialog if ABI incompatible features is on
|
||||||
|
// Build both on both branches (there was no wxCocoaMessageDialog class so it's not an ABI issue)
|
||||||
|
#if wxUSE_ABI_INCOMPATIBLE_FEATURES
|
||||||
|
#define wxUSE_COCOA_NATIVE_MSGDLG 1
|
||||||
|
#else
|
||||||
|
#define wxUSE_COCOA_NATIVE_MSGDLG 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__WX_COMPILING_COCOA_MSGDLG_MM__) || wxUSE_COCOA_NATIVE_MSGDLG
|
||||||
|
#define wxMessageDialog wxCocoaMessageDialog
|
||||||
|
#else
|
||||||
|
#include "wx/generic/msgdlgg.h"
|
||||||
|
#define wxMessageDialog wxGenericMessageDialog
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// wxMsgDialog
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxCocoaMessageDialog: public wxMessageDialogBase
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxCocoaMessageDialog)
|
||||||
|
DECLARE_NO_COPY_CLASS(wxCocoaMessageDialog)
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
wxCocoaMessageDialog(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_
|
||||||
|
|
||||||
|
@@ -37,7 +37,7 @@ private:
|
|||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
#if (!defined( __WXMSW__ ) && !defined( __WXMAC__) && !defined(__WXPM__)) || defined(__WXUNIVERSAL__)
|
#if (!defined( __WXMSW__ ) && !defined( __WXMAC__) && !defined(__WXPM__) && !defined(__WXCOCOA__)) || defined(__WXUNIVERSAL__)
|
||||||
#define wxMessageDialog wxGenericMessageDialog
|
#define wxMessageDialog wxGenericMessageDialog
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -58,7 +58,7 @@ private:
|
|||||||
#elif defined(__WXMAC__)
|
#elif defined(__WXMAC__)
|
||||||
#include "wx/mac/msgdlg.h"
|
#include "wx/mac/msgdlg.h"
|
||||||
#elif defined(__WXCOCOA__)
|
#elif defined(__WXCOCOA__)
|
||||||
#include "wx/generic/msgdlgg.h"
|
#include "wx/cocoa/msgdlg.h"
|
||||||
#elif defined(__WXPM__)
|
#elif defined(__WXPM__)
|
||||||
#include "wx/os2/msgdlg.h"
|
#include "wx/os2/msgdlg.h"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -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 <AppKit/NSAlert.h>
|
||||||
|
// ============================================================================
|
||||||
|
// 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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user