[monkey-bubble: 24/753] GnomeApp widget at least compiles. Try it, it might even not segv :)
- From: Sven Herzberg <herzi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [monkey-bubble: 24/753] GnomeApp widget at least compiles. Try it, it might even not segv :)
- Date: Wed, 14 Jul 2010 21:57:42 +0000 (UTC)
commit 26de526e10651c7c72dfd791c85c17f606809ce1
Author: Elliot Lee <sopwith src gnome org>
Date: Mon Dec 29 21:51:06 1997 +0000
GnomeApp widget at least compiles. Try it, it might even not segv :)
libgnomeui/Makefile.am | 10 +-
libgnomeui/gnome-app.c | 254 ++++++++++++++++++++++++++++++++++++++++++++++++
libgnomeui/gnome-app.h | 99 +++++++++++++++++++
3 files changed, 359 insertions(+), 4 deletions(-)
---
diff --git a/libgnomeui/Makefile.am b/libgnomeui/Makefile.am
index b00a649..d7caf42 100644
--- a/libgnomeui/Makefile.am
+++ b/libgnomeui/Makefile.am
@@ -7,20 +7,22 @@ INCLUDES = -I.. -I$(srcdir)/.. -I$(includedir)
lib_LTLIBRARIES = libgnomeui.la
libgnomeui_la_SOURCES = \
+ gnome-actionarea.c \
+ gnome-app.c \
gnome-color-selector.c \
- gnome-properties.c \
+ gnome-colors.c \
gnome-ice.c \
gnome-init.c \
- gnome-actionarea.c \
gnome-messagebox.c \
gnome-pixmap.c \
- gnome-toolbar.c \
- gnome-colors.c \
+ gnome-properties.c \
gnome-session.c \
+ gnome-toolbar.c \
gtk-clock.c
libgnomeuiinclude_HEADERS = \
gnome-actionarea.h \
+ gnome-app.h \
gnome-color-selector.h \
gnome-colors.h \
gnome-ice.h \
diff --git a/libgnomeui/gnome-app.c b/libgnomeui/gnome-app.c
new file mode 100644
index 0000000..ef8b911
--- /dev/null
+++ b/libgnomeui/gnome-app.c
@@ -0,0 +1,254 @@
+#include "libgnome/gnome-defs.h"
+#include "gnome-app.h"
+#include "gnome-pixmap.h"
+
+static void gnome_app_class_init(GnomeAppClass *klass);
+static void gnome_app_init(GnomeApp *app);
+static void gnome_app_do_menu_creation(GtkWidget *parent_widget,
+ GnomeMenuInfo *menuinfo);
+static void gnome_app_do_toolbar_creation(GnomeApp *app,
+ GtkWidget *parent_widget,
+ GnomeToolbarInfo *tbinfo);
+
+guint
+gnome_app_get_type(void)
+{
+ static guint gnomeapp_type = 0;
+ if(!gnomeapp_type) {
+ GtkTypeInfo gnomeapp_info = {
+ "GnomeApp",
+ sizeof(GnomeApp),
+ sizeof(GnomeAppClass),
+ (GtkClassInitFunc) gnome_app_class_init,
+ (GtkObjectInitFunc) gnome_app_init,
+ (GtkArgFunc) NULL,
+ };
+ gnomeapp_type = gtk_type_unique(gtk_window_get_type(), &gnomeapp_info);
+ }
+ return gnomeapp_type;
+}
+
+static void
+gnome_app_class_init(GnomeAppClass *klass)
+{
+}
+
+static void
+gnome_app_init(GnomeApp *app)
+{
+ app->menubar = app->toolbar = app->contents = NULL;
+
+ app->vtable = gtk_table_new(3, 1, FALSE);
+ gtk_widget_show(app->vtable);
+ app->htable = gtk_table_new(1, 3, FALSE);
+ gtk_widget_show(app->htable);
+}
+
+GtkWidget *
+gnome_app_new(gchar *appname)
+{
+ GtkWidget *retval;
+
+ retval = gtk_type_new(gnome_app_get_type());
+ if(appname)
+ gtk_window_set_title(GTK_WINDOW(retval), appname);
+
+ return retval;
+}
+
+static void
+gnome_app_do_menu_creation(GtkWidget *parent_widget,
+ GnomeMenuInfo *menuinfo)
+{
+ int i;
+ for(i = 0; menuinfo[i].type != MI_ENDOFINFO; i++)
+ {
+ menuinfo[i].widget = gtk_menu_item_new_with_label(menuinfo[i].label);
+ gtk_widget_show(menuinfo[i].widget);
+ gtk_menu_shell_append(GTK_MENU_SHELL(parent_widget),
+ menuinfo[i].widget);
+
+ if(menuinfo[i].type == MI_ITEM)
+ {
+ gtk_signal_connect(GTK_OBJECT(menuinfo[i].widget), "activate",
+ menuinfo[i].moreinfo, NULL);
+ }
+ else if(menuinfo[i].type == MI_SUBMENU)
+ {
+ GtkWidget *submenu;
+ submenu = gtk_menu_new();
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuinfo[i].widget),
+ submenu);
+ gtk_widget_show(submenu);
+ gnome_app_do_menu_creation(submenu, menuinfo[i].moreinfo);
+ }
+ }
+}
+
+void
+gnome_app_create_menu(GnomeApp *app,
+ GnomeMenuInfo *menuinfo)
+{
+ GtkWidget *hb;
+ int i;
+
+ g_return_if_fail(app != NULL);
+ g_return_if_fail(GNOME_IS_APP(app));
+ g_return_if_fail(app->menubar == NULL);
+
+ hb = gtk_handle_box_new();
+ gtk_widget_show(hb);
+ app->menubar = gtk_menu_bar_new();
+ gtk_widget_show(app->menubar);
+ gtk_container_add(GTK_CONTAINER(hb), app->menubar);
+
+ if(menuinfo)
+ gnome_app_do_menu_creation(app->menubar, menuinfo);
+
+ gnome_app_set_positions(app,
+ POS_TOP,
+ POS_NOCHANGE);
+}
+
+static void
+gnome_app_do_toolbar_creation(GnomeApp *app,
+ GtkWidget *parent_widget,
+ GnomeToolbarInfo *tbinfo)
+{
+ int i;
+ GtkWidget *pmap;
+
+ if(!GTK_WIDGET(app)->window)
+ gtk_widget_realize(GTK_WIDGET(app));
+
+ for(i = 0; tbinfo[i].type != TBI_ENDOFINFO; i++)
+ {
+ if(tbinfo[i].type == TBI_ITEM)
+ {
+ if(tbinfo[i].pixmap_type == PMAP_DATA)
+ pmap = gnome_create_pixmap_widget_d(GTK_WIDGET(app),
+ parent_widget,
+ (char **)tbinfo[i].pixmap_info);
+ else if(tbinfo[i].pixmap_type == PMAP_FILENAME)
+ pmap = gnome_create_pixmap_widget(GTK_WIDGET(app),
+ parent_widget,
+ (char *)tbinfo[i].pixmap_info);
+ else
+ pmap = NULL;
+ gtk_toolbar_append_item(GTK_TOOLBAR(parent_widget),
+ tbinfo[i].text,
+ tbinfo[i].tooltip_text,
+ GTK_PIXMAP(pmap),
+ tbinfo[i].clicked_callback,
+ NULL);
+ }
+ else if(tbinfo[i].type == TBI_SPACE)
+ {
+ gtk_toolbar_append_space(GTK_TOOLBAR(parent_widget));
+ }
+ }
+}
+
+void gnome_app_create_toolbar(GnomeApp *app,
+ GnomeToolbarInfo *toolbarinfo)
+{
+ GtkWidget *hb;
+
+ g_return_if_fail(app != NULL);
+ g_return_if_fail(GNOME_IS_APP(app));
+ g_return_if_fail(app->toolbar == NULL);
+
+ hb = gtk_handle_box_new();
+ gtk_widget_show(hb);
+ app->toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL,
+ GTK_TOOLBAR_BOTH);
+ gtk_widget_show(app->toolbar);
+ gtk_container_add(GTK_CONTAINER(hb), app->toolbar);
+
+ if(toolbarinfo)
+ gnome_do_toolbar_creation(app, app->toolbar, toolbarinfo);
+
+ gnome_app_set_positions(app,
+ POS_NOCHANGE,
+ POS_BOTTOM);
+}
+
+void
+gnome_app_set_positions(GnomeApp *app,
+ GnomeAppWidgetPositionType pos_menubar,
+ GnomeAppWidgetPositionType pos_toolbar)
+{
+ g_return_if_fail(app != NULL);
+ g_return_if_fail(GNOME_IS_APP(app));
+
+ if(pos_menubar != POS_NOCHANGE)
+ {
+ g_return_if_fail(app->menubar != NULL);
+
+ /* It's ->parent->parent because this is inside a GtkHandleBox */
+ if(app->menubar->parent->parent)
+ gtk_container_remove(GTK_CONTAINER(app->menubar->parent->parent),
+ app->menubar);
+ /* Obviously the menu bar can't have vertical orientation,
+ so we don't support POS_LEFT or POS_RIGHT. */
+ gtk_table_attach_defaults(GTK_TABLE(app->vtable),
+ app->menubar->parent,
+ FALSE,
+ FALSE,
+ pos_menubar==POS_TOP?TRUE:FALSE,
+ pos_menubar==POS_BOTTOM?TRUE:FALSE);
+
+ }
+
+ if(pos_toolbar != POS_NOCHANGE)
+ {
+ g_return_if_fail(app->toolbar != NULL);
+
+ /* It's ->parent->parent because this is inside a GtkHandleBox */
+ if(app->toolbar->parent->parent)
+ gtk_container_remove(GTK_CONTAINER(app->toolbar->parent->parent),
+ app->toolbar);
+ if(pos_toolbar == POS_LEFT
+ || pos_toolbar == POS_RIGHT)
+ {
+ gtk_table_attach_defaults(GTK_TABLE(app->htable),
+ app->toolbar->parent,
+ pos_toolbar==POS_LEFT?TRUE:FALSE,
+ pos_toolbar==POS_RIGHT?TRUE:FALSE,
+ FALSE,
+ FALSE);
+ gtk_toolbar_set_orientation(GTK_TOOLBAR(app->toolbar),
+ GTK_ORIENTATION_VERTICAL);
+ }
+ else
+ {
+ /* assume POS_TOP || POS_BOTTOM */
+ gtk_table_attach_defaults(GTK_TABLE(app->vtable),
+ app->toolbar->parent,
+ FALSE,
+ FALSE,
+ pos_toolbar==POS_TOP?TRUE:FALSE,
+ pos_toolbar==POS_BOTTOM?TRUE:FALSE);
+ gtk_toolbar_set_orientation(GTK_TOOLBAR(app->toolbar),
+ GTK_ORIENTATION_HORIZONTAL);
+ }
+ }
+}
+
+void
+gnome_app_set_contents(GnomeApp *app, GtkWidget *contents)
+{
+ g_return_if_fail(app != NULL);
+ g_return_if_fail(GNOME_IS_APP(app));
+
+ if(app->contents != NULL)
+ gtk_container_remove(GTK_CONTAINER(app->htable), app->contents);
+
+ /* Is this going to work at all? I'll wager not */
+ gtk_table_attach_defaults(GTK_TABLE(app->htable),
+ contents,
+ FALSE, FALSE,
+ FALSE, FALSE);
+ app->contents = contents;
+ gtk_widget_show(contents);
+}
diff --git a/libgnomeui/gnome-app.h b/libgnomeui/gnome-app.h
new file mode 100644
index 0000000..abe3ddf
--- /dev/null
+++ b/libgnomeui/gnome-app.h
@@ -0,0 +1,99 @@
+/* GnomeApp widget */
+
+#ifndef GNOME_APP_H
+#define GNOME_APP_H
+
+#include <gtk/gtk.h>
+
+BEGIN_GNOME_DECLS
+
+#define GNOME_APP(obj) GTK_CHECK_CAST(obj, gnome_app_get_type(), GnomeApp)
+#define GNOME_APP_CLASS(class) GTK_CHECK_CAST_CLASS(class, gnome_app_get_type(), GnomeAppClass)
+#define GNOME_IS_APP(obj) GTK_CHECK_TYPE(obj, gnome_app_get_type())
+
+typedef struct _GnomeApp GnomeApp;
+typedef struct _GnomeAppClass GnomeAppClass;
+
+typedef enum
+{
+ POS_NOCHANGE = -1,
+ POS_LEFT = 0,
+ POS_RIGHT = 1,
+ POS_TOP = 2,
+ POS_BOTTOM = 3,
+} GnomeAppWidgetPositionType;
+
+typedef enum
+{
+ GAPP_MENUBAR = 1,
+ GAPP_TOOLBAR = 2,
+} GnomeAppWidgetType;
+
+struct _GnomeMenuInfo {
+ enum { MI_ENDOFINFO, MI_ITEM, MI_SUBMENU } type;
+ gchar *label;
+ gpointer moreinfo; /* For a menuitem, this should point to the
+ procedure to be called when this menu item is
+ activated.
+
+ For a submenu, it should point to the
+ GnomeMenuInfo array for that menu. */
+ GtkWidget *widget; /* This is filled in by gnome_app_create_menu() */
+};
+
+typedef struct _GnomeMenuInfo GnomeMenuInfo;
+
+struct _GnomeToolbarInfo {
+ enum { TBI_ENDOFINFO, TBI_ITEM, TBI_SPACE } type;
+ /* You can leave the rest of these to NULL or whatever if this is an
+ TBI_SPACE */
+ gchar *text;
+ gchar *tooltip_text;
+ enum { PMAP_NONE, PMAP_DATA, PMAP_FILENAME } pixmap_type;
+ gpointer pixmap_info; /* Either a pointer to the char ** for the pixmap
+ (for PMAP_DATA)
+ or a char * for the filename (PMAP_FILENAME) */
+ GtkSignalFunc clicked_callback; /* Useful for TB_ITEMs only */
+};
+typedef struct _GnomeToolbarInfo GnomeToolbarInfo;
+
+/* Everything gets put into a table that looks like:
+
+ XXX
+ ABC
+ YYY
+
+ There's one table element on top, three in the middle, and one on
+ the bottom.
+
+ Obviously you can change the positions of things as needed
+ using the supplied function.
+ */
+struct _GnomeApp {
+ GtkWindow parent_object;
+ GtkWidget *menubar /* GtkMenuBar */,
+ *toolbar /* GtkToolbar */,
+ *contents /* GtkContainer */;
+ GtkWidget *htable, *vtable; /* The table widgets that hold & pack it all */
+};
+
+struct _GnomeAppClass {
+ GtkWindow parent_class;
+};
+
+guint gnome_app_get_type (void);
+GtkWidget *gnome_app_new (gchar *appname);
+/* You can OR the various enums here to have more than one piece
+ created at once */
+void gnome_app_create_menu (GnomeApp *app,
+ GnomeMenuInfo *menuinfo);
+void gnome_app_create_toolbar(GnomeApp *app,
+ GnomeToolbarInfo *tbinfo);
+void gnome_app_set_contents (GnomeApp *app, GtkWidget *contents);
+void gnome_app_set_positions (GnomeApp *app,
+ GnomeAppWidgetPositionType pos_menubar,
+ GnomeAppWidgetPositionType pos_toolbar);
+
+END_GNOME_DECLS
+
+#endif /* GNOME_APP_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]