From 13a7abf97312d2e9427898f3432eb9214f09427f Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Fri, 28 Feb 2003 23:37:46 +0000 Subject: [PATCH] added native wxMessageDialog implementation for GTK+2 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19392 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/msgdlg.h | 46 ++++++++++++++++ include/wx/gtk1/msgdlg.h | 46 ++++++++++++++++ include/wx/msgdlg.h | 4 ++ src/gtk/app.cpp | 4 ++ src/gtk/files.lst | 5 ++ src/gtk/msgdlg.cpp | 113 +++++++++++++++++++++++++++++++++++++++ src/gtk1/app.cpp | 4 ++ src/gtk1/files.lst | 5 ++ src/gtk1/msgdlg.cpp | 113 +++++++++++++++++++++++++++++++++++++++ 9 files changed, 340 insertions(+) create mode 100644 include/wx/gtk/msgdlg.h create mode 100644 include/wx/gtk1/msgdlg.h create mode 100644 src/gtk/msgdlg.cpp create mode 100644 src/gtk1/msgdlg.cpp diff --git a/include/wx/gtk/msgdlg.h b/include/wx/gtk/msgdlg.h new file mode 100644 index 0000000000..8d310153e9 --- /dev/null +++ b/include/wx/gtk/msgdlg.h @@ -0,0 +1,46 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: msgdlg.h +// Purpose: wxMessageDialog for GTK+2 +// Author: Vaclav Slavik +// Modified by: +// Created: 2003/02/28 +// RCS-ID: $Id$ +// Copyright: (c) Vaclav Slavik, 2003 +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef __MSGDLG_H__ +#define __MSGDLG_H__ + +#if defined(__GNUG__) && !defined(__APPLE__) +#pragma interface "msgdlg.h" +#endif + +#include "wx/setup.h" +#include "wx/dialog.h" + +// type is an 'or' (|) of wxOK, wxCANCEL, wxYES_NO +// Returns wxYES/NO/OK/CANCEL + +WXDLLEXPORT_DATA(extern const wxChar*) wxMessageBoxCaptionStr; + +class WXDLLEXPORT wxMessageDialog: public wxDialog +{ +public: + wxMessageDialog(wxWindow *parent, const wxString& message, + const wxString& caption = wxMessageBoxCaptionStr, + long style = wxOK|wxCENTRE, + const wxPoint& pos = wxDefaultPosition); + + int ShowModal(); + +private: + wxString m_caption; + wxString m_message; + long m_dialogStyle; + wxWindow *m_parent; + + DECLARE_DYNAMIC_CLASS(wxMessageDialog) +}; + +#endif diff --git a/include/wx/gtk1/msgdlg.h b/include/wx/gtk1/msgdlg.h new file mode 100644 index 0000000000..8d310153e9 --- /dev/null +++ b/include/wx/gtk1/msgdlg.h @@ -0,0 +1,46 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: msgdlg.h +// Purpose: wxMessageDialog for GTK+2 +// Author: Vaclav Slavik +// Modified by: +// Created: 2003/02/28 +// RCS-ID: $Id$ +// Copyright: (c) Vaclav Slavik, 2003 +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef __MSGDLG_H__ +#define __MSGDLG_H__ + +#if defined(__GNUG__) && !defined(__APPLE__) +#pragma interface "msgdlg.h" +#endif + +#include "wx/setup.h" +#include "wx/dialog.h" + +// type is an 'or' (|) of wxOK, wxCANCEL, wxYES_NO +// Returns wxYES/NO/OK/CANCEL + +WXDLLEXPORT_DATA(extern const wxChar*) wxMessageBoxCaptionStr; + +class WXDLLEXPORT wxMessageDialog: public wxDialog +{ +public: + wxMessageDialog(wxWindow *parent, const wxString& message, + const wxString& caption = wxMessageBoxCaptionStr, + long style = wxOK|wxCENTRE, + const wxPoint& pos = wxDefaultPosition); + + int ShowModal(); + +private: + wxString m_caption; + wxString m_message; + long m_dialogStyle; + wxWindow *m_parent; + + DECLARE_DYNAMIC_CLASS(wxMessageDialog) +}; + +#endif diff --git a/include/wx/msgdlg.h b/include/wx/msgdlg.h index c24fb85873..2b0ba33db2 100644 --- a/include/wx/msgdlg.h +++ b/include/wx/msgdlg.h @@ -1,6 +1,8 @@ #ifndef _WX_MSGDLG_H_BASE_ #define _WX_MSGDLG_H_BASE_ +#include "wx/setup.h" + #if wxUSE_MSGDLG #if defined(__WXUNIVERSAL__) @@ -9,6 +11,8 @@ #include "wx/msw/msgdlg.h" #elif defined(__WXMOTIF__) #include "wx/motif/msgdlg.h" +#elif defined(__WXGTK__) && defined(__WXGTK20__) +#include "wx/gtk/msgdlg.h" #elif defined(__WXGTK__) #include "wx/generic/msgdlgg.h" #elif defined(__WXMAC__) diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index c3f805327c..704c36a921 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -239,7 +239,11 @@ static gint wxapp_idle_callback( gpointer WXUNUSED(data) ) if (wxTopLevelWindows.GetCount() > 0) { wxWindow* win = (wxWindow*) wxTopLevelWindows.GetLast()->GetData(); +#ifdef __WXGTK20__ + if (win->IsKindOf(CLASSINFO(wxMessageDialog))) +#else if (win->IsKindOf(CLASSINFO(wxGenericMessageDialog))) +#endif win->OnInternalIdle(); } return TRUE; diff --git a/src/gtk/files.lst b/src/gtk/files.lst index a1e231bd91..eaae85b72a 100644 --- a/src/gtk/files.lst +++ b/src/gtk/files.lst @@ -48,6 +48,7 @@ ALL_SOURCES = \ generic/treectlg.cpp \ generic/treelay.cpp \ generic/wizard.cpp \ + common/accesscmn.cpp \ common/appcmn.cpp \ common/artprov.cpp \ common/artstd.cpp \ @@ -212,6 +213,7 @@ ALL_SOURCES = \ gtk/mdi.cpp \ gtk/menu.cpp \ gtk/minifram.cpp \ + gtk/msgdlg.cpp \ gtk/notebook.cpp \ gtk/pen.cpp \ gtk/popupwin.cpp \ @@ -272,6 +274,7 @@ ALL_SOURCES = \ ALL_HEADERS = \ accel.h \ + access.h \ app.h \ arrimpl.cpp \ artprov.h \ @@ -637,6 +640,7 @@ ALL_HEADERS = \ protocol/protocol.h COMMONOBJS = \ + accesscmn.o \ appcmn.o \ artprov.o \ artstd.o \ @@ -850,6 +854,7 @@ GUIOBJS = \ mdi.o \ menu.o \ minifram.o \ + msgdlg.o \ notebook.o \ pen.o \ popupwin.o \ diff --git a/src/gtk/msgdlg.cpp b/src/gtk/msgdlg.cpp new file mode 100644 index 0000000000..85ac15e5eb --- /dev/null +++ b/src/gtk/msgdlg.cpp @@ -0,0 +1,113 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: msgdlg.cpp +// Purpose: wxMessageDialog for GTK+2 +// Author: Vaclav Slavik +// Modified by: +// Created: 2003/02/28 +// RCS-ID: $Id$ +// Copyright: (c) Vaclav Slavik, 2003 +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "msgdlg.h" +#endif + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#if wxUSE_MSGDLG && defined(__WXGTK20__) + +#include "wx/gtk/private.h" +#include + +#include "wx/msgdlg.h" +#include "wx/intl.h" + +IMPLEMENT_CLASS(wxMessageDialog, wxDialog) + +wxMessageDialog::wxMessageDialog(wxWindow *parent, + const wxString& message, + const wxString& caption, + long style, + const wxPoint& WXUNUSED(pos)) +{ + m_caption = caption; + m_message = message; + m_dialogStyle = style; + m_parent = parent; +} + +int wxMessageDialog::ShowModal() +{ + GtkWidget *dlg; + GtkMessageType type; + GtkButtonsType buttons = GTK_BUTTONS_OK; + + if (m_dialogStyle & wxYES_NO) + { + buttons = GTK_BUTTONS_YES_NO; + } + + if (m_dialogStyle & wxOK) + { + if (m_dialogStyle & wxCANCEL) + buttons = GTK_BUTTONS_OK_CANCEL; + else + buttons = GTK_BUTTONS_OK; + } + + if (m_dialogStyle & wxICON_EXCLAMATION) + type = GTK_MESSAGE_WARNING; + else if (m_dialogStyle & wxICON_ERROR) + type = GTK_MESSAGE_ERROR; + else if (m_dialogStyle & wxICON_INFORMATION) + type = GTK_MESSAGE_INFO; + else if (m_dialogStyle & wxICON_QUESTION) + type = GTK_MESSAGE_QUESTION; + + dlg = gtk_message_dialog_new(m_parent ? + GTK_WINDOW(m_parent->m_widget) : NULL, + GTK_DIALOG_MODAL, + type, buttons, + "%s", (const char*)wxGTK_CONV(m_message)); + if (m_caption != wxMessageBoxCaptionStr) + gtk_window_set_title(GTK_WINDOW(dlg), wxGTK_CONV(m_caption)); + + if (m_dialogStyle & wxYES_NO) + { + if (m_dialogStyle & wxCANCEL) + gtk_dialog_add_button(GTK_DIALOG(dlg), GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL); + if (m_dialogStyle & wxNO_DEFAULT) + gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_NO); + else + gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_YES); + } + + gint result = gtk_dialog_run(GTK_DIALOG(dlg)); + gtk_widget_destroy(dlg); + + switch (result) + { + default: + wxFAIL_MSG(_T("unexpected GtkMessageDialog return code")); + // fall through + + case GTK_RESPONSE_CANCEL: + return wxID_CANCEL; + case GTK_RESPONSE_OK: + return wxID_OK; + case GTK_RESPONSE_YES: + return wxID_YES; + case GTK_RESPONSE_NO: + return wxID_NO; + } +} + +#endif // wxUSE_MSGDLG && defined(__WXGTK20__) + diff --git a/src/gtk1/app.cpp b/src/gtk1/app.cpp index c3f805327c..704c36a921 100644 --- a/src/gtk1/app.cpp +++ b/src/gtk1/app.cpp @@ -239,7 +239,11 @@ static gint wxapp_idle_callback( gpointer WXUNUSED(data) ) if (wxTopLevelWindows.GetCount() > 0) { wxWindow* win = (wxWindow*) wxTopLevelWindows.GetLast()->GetData(); +#ifdef __WXGTK20__ + if (win->IsKindOf(CLASSINFO(wxMessageDialog))) +#else if (win->IsKindOf(CLASSINFO(wxGenericMessageDialog))) +#endif win->OnInternalIdle(); } return TRUE; diff --git a/src/gtk1/files.lst b/src/gtk1/files.lst index a1e231bd91..eaae85b72a 100644 --- a/src/gtk1/files.lst +++ b/src/gtk1/files.lst @@ -48,6 +48,7 @@ ALL_SOURCES = \ generic/treectlg.cpp \ generic/treelay.cpp \ generic/wizard.cpp \ + common/accesscmn.cpp \ common/appcmn.cpp \ common/artprov.cpp \ common/artstd.cpp \ @@ -212,6 +213,7 @@ ALL_SOURCES = \ gtk/mdi.cpp \ gtk/menu.cpp \ gtk/minifram.cpp \ + gtk/msgdlg.cpp \ gtk/notebook.cpp \ gtk/pen.cpp \ gtk/popupwin.cpp \ @@ -272,6 +274,7 @@ ALL_SOURCES = \ ALL_HEADERS = \ accel.h \ + access.h \ app.h \ arrimpl.cpp \ artprov.h \ @@ -637,6 +640,7 @@ ALL_HEADERS = \ protocol/protocol.h COMMONOBJS = \ + accesscmn.o \ appcmn.o \ artprov.o \ artstd.o \ @@ -850,6 +854,7 @@ GUIOBJS = \ mdi.o \ menu.o \ minifram.o \ + msgdlg.o \ notebook.o \ pen.o \ popupwin.o \ diff --git a/src/gtk1/msgdlg.cpp b/src/gtk1/msgdlg.cpp new file mode 100644 index 0000000000..85ac15e5eb --- /dev/null +++ b/src/gtk1/msgdlg.cpp @@ -0,0 +1,113 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: msgdlg.cpp +// Purpose: wxMessageDialog for GTK+2 +// Author: Vaclav Slavik +// Modified by: +// Created: 2003/02/28 +// RCS-ID: $Id$ +// Copyright: (c) Vaclav Slavik, 2003 +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "msgdlg.h" +#endif + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#if wxUSE_MSGDLG && defined(__WXGTK20__) + +#include "wx/gtk/private.h" +#include + +#include "wx/msgdlg.h" +#include "wx/intl.h" + +IMPLEMENT_CLASS(wxMessageDialog, wxDialog) + +wxMessageDialog::wxMessageDialog(wxWindow *parent, + const wxString& message, + const wxString& caption, + long style, + const wxPoint& WXUNUSED(pos)) +{ + m_caption = caption; + m_message = message; + m_dialogStyle = style; + m_parent = parent; +} + +int wxMessageDialog::ShowModal() +{ + GtkWidget *dlg; + GtkMessageType type; + GtkButtonsType buttons = GTK_BUTTONS_OK; + + if (m_dialogStyle & wxYES_NO) + { + buttons = GTK_BUTTONS_YES_NO; + } + + if (m_dialogStyle & wxOK) + { + if (m_dialogStyle & wxCANCEL) + buttons = GTK_BUTTONS_OK_CANCEL; + else + buttons = GTK_BUTTONS_OK; + } + + if (m_dialogStyle & wxICON_EXCLAMATION) + type = GTK_MESSAGE_WARNING; + else if (m_dialogStyle & wxICON_ERROR) + type = GTK_MESSAGE_ERROR; + else if (m_dialogStyle & wxICON_INFORMATION) + type = GTK_MESSAGE_INFO; + else if (m_dialogStyle & wxICON_QUESTION) + type = GTK_MESSAGE_QUESTION; + + dlg = gtk_message_dialog_new(m_parent ? + GTK_WINDOW(m_parent->m_widget) : NULL, + GTK_DIALOG_MODAL, + type, buttons, + "%s", (const char*)wxGTK_CONV(m_message)); + if (m_caption != wxMessageBoxCaptionStr) + gtk_window_set_title(GTK_WINDOW(dlg), wxGTK_CONV(m_caption)); + + if (m_dialogStyle & wxYES_NO) + { + if (m_dialogStyle & wxCANCEL) + gtk_dialog_add_button(GTK_DIALOG(dlg), GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL); + if (m_dialogStyle & wxNO_DEFAULT) + gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_NO); + else + gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_YES); + } + + gint result = gtk_dialog_run(GTK_DIALOG(dlg)); + gtk_widget_destroy(dlg); + + switch (result) + { + default: + wxFAIL_MSG(_T("unexpected GtkMessageDialog return code")); + // fall through + + case GTK_RESPONSE_CANCEL: + return wxID_CANCEL; + case GTK_RESPONSE_OK: + return wxID_OK; + case GTK_RESPONSE_YES: + return wxID_YES; + case GTK_RESPONSE_NO: + return wxID_NO; + } +} + +#endif // wxUSE_MSGDLG && defined(__WXGTK20__) + -- 2.45.2