1/////////////////////////////////////////////////////////////////////////////
2// Name:        src/osx/iphone/msgdlg.mm
3// Purpose:     wxMessageDialog
4// Author:      Stefan Csomor
5// Modified by:
6// Created:     04/01/98
7// Copyright:   (c) Stefan Csomor
8// Licence:     wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11#include "wx/wxprec.h"
12
13#include "wx/msgdlg.h"
14
15#ifndef WX_PRECOMP
16    #include "wx/intl.h"
17    #include "wx/app.h"
18#endif
19
20#include "wx/thread.h"
21#include "wx/osx/private.h"
22#include "wx/modalhook.h"
23
24
25IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
26
27
28wxMessageDialog::wxMessageDialog(wxWindow *parent,
29                                 const wxString& message,
30                                 const wxString& caption,
31                                 long style,
32                                 const wxPoint& WXUNUSED(pos))
33               : wxMessageDialogBase(parent, message, caption, style)
34{
35}
36
37int wxMessageDialog::ShowModal()
38{
39    WX_HOOK_MODAL_DIALOG();
40
41    int resultbutton = wxID_CANCEL;
42
43    const long style = GetMessageDialogStyle();
44
45    // work out what to display
46    // if the extended text is empty then we use the caption as the title
47    // and the message as the text (for backwards compatibility)
48    // but if the extended message is not empty then we use the message as the title
49    // and the extended message as the text because that makes more sense
50
51    wxString msgtitle,msgtext;
52    if(m_extendedMessage.IsEmpty())
53    {
54        msgtitle = m_caption;
55        msgtext  = m_message;
56    }
57    else
58    {
59        msgtitle = m_message;
60        msgtext  = m_extendedMessage;
61    }
62
63    wxCFStringRef cfNoString( GetNoLabel(), GetFont().GetEncoding() );
64    wxCFStringRef cfYesString( GetYesLabel(), GetFont().GetEncoding() );
65    wxCFStringRef cfOKString( GetOKLabel(), GetFont().GetEncoding() );
66    wxCFStringRef cfCancelString( GetCancelLabel(), GetFont().GetEncoding() );
67
68    wxCFStringRef cfTitle( msgtitle, GetFont().GetEncoding() );
69    wxCFStringRef cfText( msgtext, GetFont().GetEncoding() );
70
71    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:cfTitle.AsNSString() message:cfText.AsNSString() delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
72
73    int buttonId[3] = { 0, 0, 0 };
74    int buttonCount = 0;
75
76    if (style & wxYES_NO)
77    {
78        if ( style & wxNO_DEFAULT )
79        {
80            [alert addButtonWithTitle:cfNoString.AsNSString()];
81            buttonId[ buttonCount++ ] = wxID_NO;
82            [alert addButtonWithTitle:cfYesString.AsNSString()];
83            buttonId[ buttonCount++ ] = wxID_YES;
84        }
85        else
86        {
87            [alert addButtonWithTitle:cfYesString.AsNSString()];
88            buttonId[ buttonCount++ ] = wxID_YES;
89            [alert addButtonWithTitle:cfNoString.AsNSString()];
90            buttonId[ buttonCount++ ] = wxID_NO;
91        }
92
93        if (style & wxCANCEL)
94        {
95            [alert addButtonWithTitle:cfCancelString.AsNSString()];
96            buttonId[ buttonCount++ ] = wxID_CANCEL;
97        }
98    }
99    // the MSW implementation even shows an OK button if it is not specified, we'll do the same
100    else
101    {
102        [alert addButtonWithTitle:cfOKString.AsNSString()];
103        buttonId[ buttonCount++ ] = wxID_OK;
104        if (style & wxCANCEL)
105        {
106            [alert addButtonWithTitle:cfCancelString.AsNSString()];
107            buttonId[ buttonCount++ ] = wxID_CANCEL;
108        }
109    }
110
111
112    wxNonOwnedWindow* parentWindow = NULL;
113    int button = -1;
114
115    if (GetParent())
116    {
117        parentWindow = dynamic_cast<wxNonOwnedWindow*>(wxGetTopLevelParent(GetParent()));
118    }
119
120/*
121    if (parentWindow)
122    {
123        NSWindow* nativeParent = parentWindow->GetWXWindow();
124        ModalDialogDelegate* sheetDelegate = [[ModalDialogDelegate alloc] init];
125        [alert beginSheetModalForWindow: nativeParent modalDelegate: sheetDelegate
126            didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
127            contextInfo: nil];
128        [sheetDelegate waitForSheetToFinish];
129        button = [sheetDelegate code];
130        [sheetDelegate release];
131    }
132    else
133*/
134    {
135        [alert show];
136    }
137    // [alert release];
138
139    return wxID_CANCEL;
140}
141