]> git.saurik.com Git - wxWidgets.git/commitdiff
added native wxMessageDialog implementation for GTK+2
authorVáclav Slavík <vslavik@fastmail.fm>
Fri, 28 Feb 2003 23:37:46 +0000 (23:37 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Fri, 28 Feb 2003 23:37:46 +0000 (23:37 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19392 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/msgdlg.h [new file with mode: 0644]
include/wx/gtk1/msgdlg.h [new file with mode: 0644]
include/wx/msgdlg.h
src/gtk/app.cpp
src/gtk/files.lst
src/gtk/msgdlg.cpp [new file with mode: 0644]
src/gtk1/app.cpp
src/gtk1/files.lst
src/gtk1/msgdlg.cpp [new file with mode: 0644]

diff --git a/include/wx/gtk/msgdlg.h b/include/wx/gtk/msgdlg.h
new file mode 100644 (file)
index 0000000..8d31015
--- /dev/null
@@ -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 (file)
index 0000000..8d31015
--- /dev/null
@@ -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
index c24fb85873e5e40f60f5af4da2e9169227307340..2b0ba33db276379958debc6bfe08405122eaf920 100644 (file)
@@ -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__)
index c3f805327cf42b6c04b3becdda81b1cb03083523..704c36a9210a81e2a6c3c22f2907569b305d1e1f 100644 (file)
@@ -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;
index a1e231bd910c7c3160b1970693b710eb1cdcee98..eaae85b72a132b4d65994f75d569b2ad1daf07c9 100644 (file)
@@ -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 (file)
index 0000000..85ac15e
--- /dev/null
@@ -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 <gtk/gtk.h>
+
+#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__)
+
index c3f805327cf42b6c04b3becdda81b1cb03083523..704c36a9210a81e2a6c3c22f2907569b305d1e1f 100644 (file)
@@ -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;
index a1e231bd910c7c3160b1970693b710eb1cdcee98..eaae85b72a132b4d65994f75d569b2ad1daf07c9 100644 (file)
@@ -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 (file)
index 0000000..85ac15e
--- /dev/null
@@ -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 <gtk/gtk.h>
+
+#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__)
+