diff -Nur --exclude=CVS tmp/abi/src/af/xap/Makefile abi/src/af/xap/Makefile --- tmp/abi/src/af/xap/Makefile Mon Feb 7 20:23:17 2000 +++ abi/src/af/xap/Makefile Tue Apr 4 00:39:10 2000 @@ -63,6 +63,7 @@ ifdef ABI_OPT_GNOME PLATFORM_OBJS += $(OBJDIR)/xap_$(ABI_FE)$(ABI_GNOME_PREFIX)App.$(OBJ_SUFFIX) \ + $(OBJDIR)/xap_$(ABI_FE)$(ABI_GNOME_PREFIX)Dlg_About.$(OBJ_SUFFIX) \ $(OBJDIR)/xap_$(ABI_FE)$(ABI_GNOME_PREFIX)Dlg_MessageBox.$(OBJ_SUFFIX) \ $(OBJDIR)/xap_$(ABI_FE)$(ABI_GNOME_PREFIX)Dlg_Zoom.$(OBJ_SUFFIX) \ $(OBJDIR)/xap_$(ABI_FE)$(ABI_GNOME_PREFIX)Frame.$(OBJ_SUFFIX) diff -Nur --exclude=CVS tmp/abi/src/af/xap/unix/gnome/Makefile abi/src/af/xap/unix/gnome/Makefile --- tmp/abi/src/af/xap/unix/gnome/Makefile Mon Feb 7 20:23:18 2000 +++ abi/src/af/xap/unix/gnome/Makefile Tue Apr 4 00:06:03 2000 @@ -25,6 +25,7 @@ CPPSRCS= xap_UnixGnomeApp.cpp \ xap_UnixGnomeDlg_MessageBox.cpp \ xap_UnixGnomeDlg_Zoom.cpp \ + xap_UnixGnomeDlg_About.cpp \ xap_UnixGnomeFrame.cpp TARGETS= $(OBJS) diff -Nur --exclude=CVS tmp/abi/src/af/xap/unix/gnome/xap_UnixGnomeDlg_About.cpp abi/src/af/xap/unix/gnome/xap_UnixGnomeDlg_About.cpp --- tmp/abi/src/af/xap/unix/gnome/xap_UnixGnomeDlg_About.cpp Wed Dec 31 19:00:00 1969 +++ abi/src/af/xap/unix/gnome/xap_UnixGnomeDlg_About.cpp Tue Apr 4 01:34:08 2000 @@ -0,0 +1,275 @@ +/* AbiSource Application Framework + * Copyright (C) 1998 AbiSource, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ + +#include +#include +#include +#include +#include "ut_string.h" +#include "ut_assert.h" +#include "ut_debugmsg.h" +#include "ut_dialogHelper.h" + +#include "xap_App.h" +#include "xap_Dialog_Id.h" +#include "xap_UnixApp.h" +#include "xap_UnixFrame.h" + +#include "xap_Dialog_Id.h" +#include "xap_Dlg_About.h" +#include "xap_UnixDlg_About.h" +#include "xap_UnixGnomeDlg_About.h" + +#include "gr_UnixGraphics.h" +#include "gr_UnixImage.h" +#include "ut_bytebuf.h" +#include "ut_png.h" + +/*****************************************************************/ + +extern unsigned char g_pngSidebar[]; // see ap_wp_sidebar.cpp +extern unsigned long g_pngSidebar_sizeof; // see ap_wp_sidebar.cpp + +/*****************************************************************/ + +XAP_Dialog * XAP_UnixGnomeDialog_About::static_constructor(XAP_DialogFactory * pFactory, + XAP_Dialog_Id id) +{ + XAP_UnixGnomeDialog_About * p = new XAP_UnixGnomeDialog_About(pFactory,id); + return p; +} + +XAP_UnixGnomeDialog_About::XAP_UnixGnomeDialog_About(XAP_DialogFactory * pDlgFactory, + XAP_Dialog_Id id) + : XAP_UnixDialog_About(pDlgFactory,id) +{ +} + +XAP_UnixGnomeDialog_About::~XAP_UnixGnomeDialog_About(void) +{ +} + +/*****************************************************************/ + +// These are all static callbacks, bound to GTK or GDK events. + +static void s_ok_clicked(GtkWidget * widget, + XAP_UnixGnomeDialog_About * dlg) +{ + UT_ASSERT(widget && dlg); + + dlg->event_OK(); +} + +static void s_delete_clicked(GtkWidget * /* widget */, + gpointer /* data */, + XAP_UnixGnomeDialog_About * dlg) +{ + UT_ASSERT(dlg); + + dlg->event_WindowDelete(); +} + +static gint s_drawingarea_expose(GtkWidget * /* widget */, + GdkEventExpose * /* pExposeEvent */, + XAP_UnixGnomeDialog_About * dlg) +{ + UT_ASSERT(dlg); + + dlg->event_DrawingAreaExpose(); + + return FALSE; +} + +/*****************************************************************/ + +void XAP_UnixGnomeDialog_About::runModal(XAP_Frame * pFrame) +{ + // stash away the frame + m_pFrame = static_cast(pFrame); + + // Build the window's widgets and arrange them + GtkWidget * mainWindow = _constructWindow(); + UT_ASSERT(mainWindow); + + // assemble an image + _preparePicture(); + + // To center the dialog, we need the frame of its parent. + XAP_UnixFrame * pUnixFrame = static_cast(pFrame); + UT_ASSERT(pUnixFrame); + + // Get the GtkWindow of the parent frame + GtkWidget * parentWindow = pUnixFrame->getTopLevelWindow(); + UT_ASSERT(parentWindow); + + // Center our new dialog in its parent and make it a transient + // so it won't get lost underneath + centerDialog(parentWindow, mainWindow); + gtk_window_set_transient_for(GTK_WINDOW(mainWindow), GTK_WINDOW(parentWindow)); + + // Show the top level dialog, + gtk_widget_show(mainWindow); + + // Make it modal, and stick it up top + gtk_grab_add(mainWindow); + + // attach a new graphics context + m_gc = new GR_UnixGraphics(m_drawingareaGraphic->window, NULL); + + // Run into the GTK event loop for this window. + gtk_main(); + + gtk_widget_destroy(mainWindow); +} + +/*****************************************************************/ + +GtkWidget * XAP_UnixGnomeDialog_About::_constructWindow(void) +{ + GtkWidget *windowAbout; + GtkWidget *hboxAbout; + GtkWidget *drawingareaGraphic; + GtkWidget *vboxInfo; + GtkWidget *labelTitle; + GtkWidget *labelVersion; + GtkWidget *textCopyright; + GtkWidget *hbox2; + GtkWidget *buttonURL; + GtkWidget *buttonOK; + + const XAP_StringSet * pSS = m_pApp->getStringSet(); + + // we use this for all sorts of strings that can't appear in the string sets + char buf[4096]; + + g_snprintf(buf, 4096, XAP_ABOUT_TITLE, m_pApp->getApplicationName()); + + windowAbout = gtk_window_new (GTK_WINDOW_DIALOG); + gtk_object_set_data (GTK_OBJECT (windowAbout), "windowAbout", windowAbout); + gtk_widget_set_usize (windowAbout, 0, 350); + gtk_window_set_title (GTK_WINDOW (windowAbout), buf); + gtk_window_set_policy (GTK_WINDOW (windowAbout), FALSE, FALSE, FALSE); + + hboxAbout = gtk_hbox_new (FALSE, 0); + gtk_object_set_data (GTK_OBJECT (windowAbout), "hboxAbout", hboxAbout); + gtk_widget_show (hboxAbout); + gtk_container_add (GTK_CONTAINER (windowAbout), hboxAbout); + + drawingareaGraphic = gtk_drawing_area_new (); + gtk_object_set_data (GTK_OBJECT (windowAbout), "drawingareaGraphic", drawingareaGraphic); + gtk_widget_set_events(drawingareaGraphic, GDK_EXPOSURE_MASK); + gtk_signal_connect (GTK_OBJECT(drawingareaGraphic), "expose_event", + GTK_SIGNAL_FUNC(s_drawingarea_expose), (gpointer) this); + gtk_widget_show (drawingareaGraphic); + gtk_box_pack_start (GTK_BOX (hboxAbout), drawingareaGraphic, TRUE, TRUE, 0); + // This size is kinda arbitrary, and will need to be adjusted as the graphics change + gtk_widget_set_usize (drawingareaGraphic, 200, 350); + + vboxInfo = gtk_vbox_new (FALSE, 0); + gtk_object_set_data (GTK_OBJECT (windowAbout), "vboxInfo", vboxInfo); + gtk_widget_show (vboxInfo); + gtk_box_pack_start (GTK_BOX (hboxAbout), vboxInfo, TRUE, TRUE, 8); + + labelTitle = gtk_label_new (m_pApp->getApplicationName()); + gtk_object_set_data (GTK_OBJECT (windowAbout), "labelTitle", labelTitle); + gtk_widget_show (labelTitle); + gtk_box_pack_start (GTK_BOX (vboxInfo), labelTitle, FALSE, TRUE, 18); + + // make the font really big + GtkStyle * bigstyle = gtk_style_copy(gtk_widget_get_style(labelTitle)); + UT_ASSERT(bigstyle); + gdk_font_unref(bigstyle->font); + bigstyle->font = gdk_font_load("-*-helvetica-bold-r-*-*-*-240-*-*-*-*-*-*"); + gtk_widget_set_style(labelTitle, bigstyle); + + g_snprintf(buf, 4096, XAP_ABOUT_VERSION, XAP_App::s_szBuild_Version); + + labelVersion = gtk_label_new (buf); + gtk_object_set_data (GTK_OBJECT (windowAbout), "labelVersion", labelVersion); + gtk_widget_show (labelVersion); + gtk_box_pack_start (GTK_BOX (vboxInfo), labelVersion, FALSE, FALSE, 0); + + char buf2[4096]; + g_snprintf(buf2, 4096, XAP_ABOUT_GPL_LONG_LINE_BROKEN, m_pApp->getApplicationName()); + + g_snprintf(buf, 4096, "%s\n\n%s", XAP_ABOUT_COPYRIGHT, buf2); + + textCopyright = gtk_text_new (NULL, NULL); + gtk_object_set_data (GTK_OBJECT (windowAbout), "textCopyright", textCopyright); + gtk_widget_show (textCopyright); + gtk_box_pack_start (GTK_BOX (vboxInfo), textCopyright, TRUE, FALSE, 10); + gtk_widget_set_usize (textCopyright, 290, 200); + gtk_widget_realize (textCopyright); + gtk_text_insert (GTK_TEXT (textCopyright), NULL, NULL, NULL, buf, strlen(buf)); + + // make the font slightly smaller + GtkStyle * smallstyle = gtk_style_copy(gtk_widget_get_style(textCopyright)); + UT_ASSERT(smallstyle); + gdk_font_unref(smallstyle->font); + smallstyle->font = gdk_font_load("-*-helvetica-medium-r-*-*-*-100-*-*-*-*-*-*"); + gtk_widget_set_style(textCopyright, smallstyle); + + hbox2 = gtk_hbox_new (FALSE, 10); + gtk_object_set_data (GTK_OBJECT (windowAbout), "hbox2", hbox2); + gtk_widget_show (hbox2); + gtk_box_pack_start (GTK_BOX (vboxInfo), hbox2, FALSE, TRUE, 10); + + buttonURL = gnome_href_new("http://www.abisource.com", "Abisource Site"); + gtk_object_set_data (GTK_OBJECT (windowAbout), "buttonURL", buttonURL); + gtk_widget_show (buttonURL); + gtk_box_pack_start (GTK_BOX (hbox2), buttonURL, FALSE, TRUE, 0); + gtk_widget_set_usize (buttonURL, 140, 24); + + buttonOK = gnome_stock_button (GNOME_STOCK_BUTTON_OK); + + gtk_object_set_data (GTK_OBJECT (windowAbout), "buttonOK", buttonOK); + gtk_widget_show (buttonOK); + gtk_box_pack_end (GTK_BOX (hbox2), buttonOK, FALSE, TRUE, 0); + gtk_widget_set_usize (buttonOK, 85, 24); + + // Since we do drawing, we need a graphics context which can + // understand PNG data. + + + gtk_signal_connect(GTK_OBJECT(buttonOK), + "clicked", + GTK_SIGNAL_FUNC(s_ok_clicked), + (gpointer) this); + + gtk_signal_connect_after(GTK_OBJECT(windowAbout), + "delete_event", + GTK_SIGNAL_FUNC(s_delete_clicked), + (gpointer) this); + + gtk_signal_connect_after(GTK_OBJECT(windowAbout), + "destroy", + NULL, + NULL); + + // Update member variables with the important widgets that + // might need to be queried or altered later. + + m_windowMain = windowAbout; + m_buttonOK = buttonOK; + m_buttonURL = buttonURL; + m_drawingareaGraphic = drawingareaGraphic; + + return windowAbout; +} diff -Nur --exclude=CVS tmp/abi/src/af/xap/unix/gnome/xap_UnixGnomeDlg_About.h abi/src/af/xap/unix/gnome/xap_UnixGnomeDlg_About.h --- tmp/abi/src/af/xap/unix/gnome/xap_UnixGnomeDlg_About.h Wed Dec 31 19:00:00 1969 +++ abi/src/af/xap/unix/gnome/xap_UnixGnomeDlg_About.h Mon Apr 3 23:50:06 2000 @@ -0,0 +1,45 @@ +/* AbiSource Application Framework + * Copyright (C) 1998 AbiSource, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ + +#ifndef XAP_UNIXGNOMEDIALOG_ABOUT_H +#define XAP_UNIXGNOMEDIALOG_ABOUT_H + +#include "xap_Dlg_About.h" +#include "gr_UnixGraphics.h" +#include "gr_UnixImage.h" + +/*****************************************************************/ + +class XAP_UnixGnomeDialog_About: public XAP_UnixDialog_About +{ +public: + XAP_UnixGnomeDialog_About(XAP_DialogFactory * pDlgFactory, XAP_Dialog_Id id); + virtual ~XAP_UnixGnomeDialog_About(void); + + static XAP_Dialog * static_constructor(XAP_DialogFactory *, XAP_Dialog_Id id); + + virtual void runModal(XAP_Frame * pFrame); + + protected: + + GtkWidget * _constructWindow(void); + void _populateWindowData(void); +}; + +#endif /* XAP_UNIXGNOMEDIALOG_ABOUT_H */ diff -Nur --exclude=CVS tmp/abi/src/wp/ap/unix/ap_UnixDialog_All.h abi/src/wp/ap/unix/ap_UnixDialog_All.h --- tmp/abi/src/wp/ap/unix/ap_UnixDialog_All.h Fri Mar 10 14:08:48 2000 +++ abi/src/wp/ap/unix/ap_UnixDialog_All.h Tue Apr 4 00:58:34 2000 @@ -51,6 +51,7 @@ # include "ap_UnixDialog_WordCount.h" #ifdef HAVE_GNOME +# include "xap_UnixGnomeDlg_About.h" # include "xap_UnixGnomeDlg_MessageBox.h" # include "xap_UnixGnomeDlg_Zoom.h" @@ -73,7 +74,7 @@ DeclareDialog(XAP_DIALOG_ID_FONT, XAP_UnixDialog_FontChooser) DeclareDialog(XAP_DIALOG_ID_WINDOWMORE, XAP_UnixDialog_WindowMore) DeclareDialog(XAP_DIALOG_ID_ZOOM, XAP_UnixGnomeDialog_Zoom) - DeclareDialog(XAP_DIALOG_ID_ABOUT, XAP_UnixDialog_About) + DeclareDialog(XAP_DIALOG_ID_ABOUT, XAP_UnixGnomeDialog_About) DeclareDialog(AP_DIALOG_ID_REPLACE, AP_UnixGnomeDialog_Replace) DeclareDialog(AP_DIALOG_ID_FIND, AP_UnixGnomeDialog_Replace)