1  /////////////////////////////////////////////////////////////////////////////
 
   2 // Name:        src/cocoa/dirdlg.mm
 
   3 // Purpose:     wxMessageDialog for wxCocoa
 
   4 // Author:      Gareth Simpson
 
   7 // Licence:     wxWindows licence
 
   8 /////////////////////////////////////////////////////////////////////////////
 
  10 // ============================================================================
 
  12 // ============================================================================
 
  14 // ----------------------------------------------------------------------------
 
  16 // ----------------------------------------------------------------------------
 
  18 // For compilers that support precompilation, includes "wx.h".
 
  19 #include "wx/wxprec.h"
 
  24 #include "wx/msgdlg.h"
 
  32 #include "wx/cocoa/autorelease.h"
 
  33 #include "wx/cocoa/string.h"
 
  35 #import <AppKit/NSAlert.h>
 
  36 // ============================================================================
 
  38 // ============================================================================
 
  40 IMPLEMENT_CLASS(wxCocoaMessageDialog, wxDialog)
 
  42 // ----------------------------------------------------------------------------
 
  44 // ----------------------------------------------------------------------------
 
  46 wxCocoaMessageDialog::wxCocoaMessageDialog(wxWindow *parent,
 
  47                                            const wxString& message,
 
  48                                            const wxString& caption,
 
  51     : wxMessageDialogWithCustomLabels(parent, message, caption, style)
 
  54     wxTopLevelWindows.Append(this);
 
  56     wxASSERT(CreateBase(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,style,wxDefaultValidator,wxDialogNameStr));
 
  59         parent->AddChild(this);
 
  62     m_cocoaNSWindow = nil;
 
  66 void wxCocoaMessageDialog::DoSetCustomLabel(wxString& var, const ButtonLabel& value)
 
  68     wxMessageDialogWithCustomLabels::DoSetCustomLabel(var, value);
 
  73 int wxCocoaMessageDialog::ShowModal()
 
  75     wxAutoNSAutoreleasePool thePool;
 
  77     NSAlert *alert = [[[NSAlert alloc] init] autorelease];
 
  79     const long style = GetMessageDialogStyle();
 
  81     NSAlertStyle nsStyle = NSInformationalAlertStyle;
 
  82     if (style & wxICON_EXCLAMATION)
 
  83         nsStyle = NSWarningAlertStyle;
 
  84     else if (style & wxICON_HAND)
 
  85         nsStyle = NSCriticalAlertStyle;
 
  86     else if (style & wxICON_INFORMATION)
 
  87         nsStyle = NSInformationalAlertStyle;
 
  88     else if (style & wxICON_QUESTION)
 
  89         nsStyle = NSInformationalAlertStyle;
 
  91     [alert setAlertStyle:nsStyle];
 
  96     // work out what to display
 
  97     // if the extended text is empty then we use the caption as the title
 
  98     // and the message as the text (for backwards compatibility)
 
  99     // but if the extended message is not empty then we use the message as the title
 
 100     // and the extended message as the text because that makes more sense
 
 101     if (m_extendedMessage.empty())
 
 103         [alert setMessageText:wxNSStringWithWxString(m_caption)];
 
 104         [alert setInformativeText:wxNSStringWithWxString(m_message)];
 
 108         [alert setMessageText:wxNSStringWithWxString(m_message)];
 
 109         [alert setInformativeText:wxNSStringWithWxString(m_extendedMessage)];
 
 112     //    The wxReturn value corresponding to each button
 
 113     int buttonId[4] = { 0, 0, 0, wxID_CANCEL /* time-out */ };
 
 114     if (style & wxYES_NO)
 
 116         if ( style & wxNO_DEFAULT )
 
 118             [alert addButtonWithTitle:wxNSStringWithWxString(GetNoLabel())];
 
 119             [alert addButtonWithTitle:wxNSStringWithWxString(GetYesLabel())];
 
 120             buttonId[0] = wxID_NO;
 
 121             buttonId[1] = wxID_YES;
 
 125             [alert addButtonWithTitle:wxNSStringWithWxString(GetYesLabel())];
 
 126             [alert addButtonWithTitle:wxNSStringWithWxString(GetNoLabel())];
 
 127             buttonId[0] = wxID_YES;
 
 128             buttonId[1] = wxID_NO;
 
 130         if (style & wxCANCEL)
 
 132             [alert addButtonWithTitle:wxNSStringWithWxString(GetCancelLabel())];
 
 133             buttonId[2] = wxID_CANCEL;
 
 138         // the MSW implementation even shows an OK button if it is not specified, we'll do the same
 
 139         buttonId[0] = wxID_OK;
 
 140         // using null as default title does not work on earlier systems
 
 141         [alert addButtonWithTitle:wxNSStringWithWxString(GetOKLabel())];
 
 142         if (style & wxCANCEL)
 
 144             [alert addButtonWithTitle:wxNSStringWithWxString(GetCancelLabel())];
 
 145             buttonId[1] = wxID_CANCEL;
 
 149     int ret = [alert runModal];
 
 152     return buttonId[ret-NSAlertFirstButtonReturn];
 
 155 #endif // wxUSE_DIRDLG