1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/gtk/msgdlg.cpp
3 // Purpose: wxMessageDialog for GTK+2
4 // Author: Vaclav Slavik
8 // Copyright: (c) Vaclav Slavik, 2003
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // For compilers that support precompilation, includes "wx.h".
13 #include "wx/wxprec.h"
19 #if wxUSE_MSGDLG && defined(__WXGTK20__) && !defined(__WXGPE__)
21 #include "wx/msgdlg.h"
27 #include "wx/gtk/private.h"
30 IMPLEMENT_CLASS(wxMessageDialog
, wxDialog
)
32 wxMessageDialog::wxMessageDialog(wxWindow
*parent
,
33 const wxString
& message
,
34 const wxString
& caption
,
36 const wxPoint
& WXUNUSED(pos
))
40 SetMessageDialogStyle(style
);
41 m_parent
= wxGetTopLevelParent(parent
);
43 GtkMessageType type
= GTK_MESSAGE_ERROR
;
44 GtkButtonsType buttons
= GTK_BUTTONS_OK
;
49 buttons
= GTK_BUTTONS_NONE
;
51 buttons
= GTK_BUTTONS_YES_NO
;
57 buttons
= GTK_BUTTONS_OK_CANCEL
;
59 buttons
= GTK_BUTTONS_OK
;
62 if (style
& wxICON_EXCLAMATION
)
63 type
= GTK_MESSAGE_WARNING
;
64 else if (style
& wxICON_ERROR
)
65 type
= GTK_MESSAGE_ERROR
;
66 else if (style
& wxICON_INFORMATION
)
67 type
= GTK_MESSAGE_INFO
;
68 else if (style
& wxICON_QUESTION
)
69 type
= GTK_MESSAGE_QUESTION
;
72 // GTK+ doesn't have a "typeless" msg box, so try to auto detect...
73 type
= style
& wxYES
? GTK_MESSAGE_QUESTION
: GTK_MESSAGE_INFO
;
76 m_widget
= gtk_message_dialog_new(m_parent
?
77 GTK_WINDOW(m_parent
->m_widget
) : NULL
,
80 "%s", (const char*)wxGTK_CONV(m_message
));
81 if (m_caption
!= wxMessageBoxCaptionStr
)
82 gtk_window_set_title(GTK_WINDOW(m_widget
), wxGTK_CONV(m_caption
));
88 gtk_dialog_add_button(GTK_DIALOG(m_widget
), GTK_STOCK_NO
,
90 gtk_dialog_add_button(GTK_DIALOG(m_widget
), GTK_STOCK_CANCEL
,
92 gtk_dialog_add_button(GTK_DIALOG(m_widget
), GTK_STOCK_YES
,
95 if (style
& wxNO_DEFAULT
)
96 gtk_dialog_set_default_response(GTK_DIALOG(m_widget
), GTK_RESPONSE_NO
);
98 gtk_dialog_set_default_response(GTK_DIALOG(m_widget
), GTK_RESPONSE_YES
);
102 gtk_window_set_transient_for(GTK_WINDOW(m_widget
),
103 GTK_WINDOW(m_parent
->m_widget
));
106 wxMessageDialog::~wxMessageDialog()
110 int wxMessageDialog::ShowModal()
112 // This should be necessary, but otherwise the
113 // parent TLW will disappear..
115 gtk_window_present( GTK_WINDOW(m_parent
->m_widget
) );
117 gint result
= gtk_dialog_run(GTK_DIALOG(m_widget
));
118 gtk_widget_destroy(m_widget
);
124 wxFAIL_MSG(_T("unexpected GtkMessageDialog return code"));
127 case GTK_RESPONSE_CANCEL
:
128 case GTK_RESPONSE_DELETE_EVENT
:
129 case GTK_RESPONSE_CLOSE
:
131 case GTK_RESPONSE_OK
:
133 case GTK_RESPONSE_YES
:
135 case GTK_RESPONSE_NO
:
141 #endif // wxUSE_MSGDLG && defined(__WXGTK20__) && !defined(__WXGPE__)