]> git.saurik.com Git - wxWidgets.git/blob - src/gtk/msgdlg.cpp
gdk_gc_unref -> g_object_unref
[wxWidgets.git] / src / gtk / msgdlg.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/gtk/msgdlg.cpp
3 // Purpose: wxMessageDialog for GTK+2
4 // Author: Vaclav Slavik
5 // Modified by:
6 // Created: 2003/02/28
7 // RCS-ID: $Id$
8 // Copyright: (c) Vaclav Slavik, 2003
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 // For compilers that support precompilation, includes "wx.h".
13 #include "wx/wxprec.h"
14
15 #ifdef __BORLANDC__
16 #pragma hdrstop
17 #endif
18
19 #if wxUSE_MSGDLG && defined(__WXGTK20__) && !defined(__WXGPE__)
20
21 #include "wx/msgdlg.h"
22 #include "wx/gtk/private.h"
23 #include <gtk/gtk.h>
24
25 #include "wx/intl.h"
26
27 IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
28
29 wxMessageDialog::wxMessageDialog(wxWindow *parent,
30 const wxString& message,
31 const wxString& caption,
32 long style,
33 const wxPoint& WXUNUSED(pos))
34 {
35 m_caption = caption;
36 m_message = message;
37 SetMessageDialogStyle(style);
38 m_parent = wxGetTopLevelParent(parent);
39
40 GtkMessageType type = GTK_MESSAGE_ERROR;
41 GtkButtonsType buttons = GTK_BUTTONS_OK;
42
43 if (style & wxYES_NO)
44 {
45 buttons = GTK_BUTTONS_YES_NO;
46 }
47
48 if (style & wxOK)
49 {
50 if (style & wxCANCEL)
51 buttons = GTK_BUTTONS_OK_CANCEL;
52 else
53 buttons = GTK_BUTTONS_OK;
54 }
55
56 if (style & wxICON_EXCLAMATION)
57 type = GTK_MESSAGE_WARNING;
58 else if (style & wxICON_ERROR)
59 type = GTK_MESSAGE_ERROR;
60 else if (style & wxICON_INFORMATION)
61 type = GTK_MESSAGE_INFO;
62 else if (style & wxICON_QUESTION)
63 type = GTK_MESSAGE_QUESTION;
64 else
65 {
66 // GTK+ doesn't have a "typeless" msg box, so try to auto detect...
67 type = style & wxYES ? GTK_MESSAGE_QUESTION : GTK_MESSAGE_INFO;
68 }
69
70 m_widget = gtk_message_dialog_new(m_parent ?
71 GTK_WINDOW(m_parent->m_widget) : NULL,
72 GTK_DIALOG_MODAL,
73 type, buttons,
74 "%s", (const char*)wxGTK_CONV(m_message));
75 if (m_caption != wxMessageBoxCaptionStr)
76 gtk_window_set_title(GTK_WINDOW(m_widget), wxGTK_CONV(m_caption));
77
78 if (style & wxYES_NO)
79 {
80 if (style & wxCANCEL)
81 gtk_dialog_add_button(GTK_DIALOG(m_widget), GTK_STOCK_CANCEL,
82 GTK_RESPONSE_CANCEL);
83 if (style & wxNO_DEFAULT)
84 gtk_dialog_set_default_response(GTK_DIALOG(m_widget), GTK_RESPONSE_NO);
85 else
86 gtk_dialog_set_default_response(GTK_DIALOG(m_widget), GTK_RESPONSE_YES);
87 }
88
89 if (m_parent)
90 gtk_window_set_transient_for(GTK_WINDOW(m_widget),
91 GTK_WINDOW(m_parent->m_widget));
92 }
93
94 wxMessageDialog::~wxMessageDialog()
95 {
96 }
97
98 int wxMessageDialog::ShowModal()
99 {
100 // This should be necessary, but otherwise the
101 // parent TLW will disappear..
102 if (m_parent)
103 gtk_window_present( GTK_WINDOW(m_parent->m_widget) );
104
105 gint result = gtk_dialog_run(GTK_DIALOG(m_widget));
106 gtk_widget_destroy(m_widget);
107 m_widget = NULL;
108
109 switch (result)
110 {
111 default:
112 wxFAIL_MSG(_T("unexpected GtkMessageDialog return code"));
113 // fall through
114
115 case GTK_RESPONSE_CANCEL:
116 case GTK_RESPONSE_DELETE_EVENT:
117 case GTK_RESPONSE_CLOSE:
118 return wxID_CANCEL;
119 case GTK_RESPONSE_OK:
120 return wxID_OK;
121 case GTK_RESPONSE_YES:
122 return wxID_YES;
123 case GTK_RESPONSE_NO:
124 return wxID_NO;
125 }
126 }
127
128
129 #endif // wxUSE_MSGDLG && defined(__WXGTK20__)
130