From f9a73f52978ec54dee4ed05bd20088d83fbe3ea4 Mon Sep 17 00:00:00 2001 From: leo Date: Sun, 23 Jul 2000 20:17:56 +0000 Subject: Functions to help using GTK git-svn-id: http://svn.leocad.org/trunk@94 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- linux/gtkmisc.cpp | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ linux/gtkmisc.h | 24 ++++++ 2 files changed, 248 insertions(+) create mode 100755 linux/gtkmisc.cpp create mode 100755 linux/gtkmisc.h diff --git a/linux/gtkmisc.cpp b/linux/gtkmisc.cpp new file mode 100755 index 0000000..436f4e3 --- /dev/null +++ b/linux/gtkmisc.cpp @@ -0,0 +1,224 @@ +// +// Small functions to help with GTK +// + +#include +#include +#include "gtkmisc.h" +#include "globals.h" +#include "project.h" + +// ============================================================================= +// Pixmap functions + +#include "pixmaps/vports01.xpm" +#include "pixmaps/vports02.xpm" +#include "pixmaps/vports03.xpm" +#include "pixmaps/vports04.xpm" +#include "pixmaps/vports05.xpm" +#include "pixmaps/vports06.xpm" +#include "pixmaps/vports07.xpm" +#include "pixmaps/vports08.xpm" +#include "pixmaps/vports09.xpm" +#include "pixmaps/vports10.xpm" +#include "pixmaps/vports11.xpm" +#include "pixmaps/vports12.xpm" +#include "pixmaps/vports13.xpm" +#include "pixmaps/vports14.xpm" + +// Load a pixmap file from the disk +void load_pixmap (const char* filename, GdkPixmap **gdkpixmap, GdkBitmap **mask) +{ + struct { char* name; char** data; } table[14] = + { + { "vports01.xpm", vports01 }, + { "vports02.xpm", vports02 }, + { "vports03.xpm", vports03 }, + { "vports04.xpm", vports04 }, + { "vports05.xpm", vports05 }, + { "vports06.xpm", vports06 }, + { "vports07.xpm", vports07 }, + { "vports08.xpm", vports08 }, + { "vports09.xpm", vports09 }, + { "vports10.xpm", vports10 }, + { "vports11.xpm", vports11 }, + { "vports12.xpm", vports12 }, + { "vports13.xpm", vports13 }, + { "vports14.xpm", vports14 }, + }; + + *gdkpixmap = NULL; + for (int i = 0; i < 14; i++) + if (strcmp (table[i].name, filename) == 0) + { + *gdkpixmap = gdk_pixmap_create_from_xpm_d (GDK_ROOT_PARENT(), mask, NULL, table[i].data); + break; + } + + if (*gdkpixmap == NULL) + { + char *dummy[] = { "1 1 1 1", " c None", " " }; + *gdkpixmap = gdk_pixmap_create_from_xpm_d (GDK_ROOT_PARENT(), mask, NULL, dummy); + } +} + +// Load a xpm file and return a pixmap widget +GtkWidget* create_pixmap (char* filename) +{ + GdkPixmap *gdkpixmap; + GdkBitmap *mask; + GtkWidget *pixmap; + + load_pixmap (filename, &gdkpixmap, &mask); + pixmap = gtk_pixmap_new (gdkpixmap, mask); + gtk_widget_show (pixmap); + + gdk_pixmap_unref (gdkpixmap); + gdk_pixmap_unref (mask); + + return pixmap; +} + +// ============================================================================= +// Menu stuff + +GtkWidget* menu_separator (GtkWidget *menu) +{ + GtkWidget *menu_item = gtk_menu_item_new (); + gtk_menu_append (GTK_MENU (menu), menu_item); + gtk_widget_set_sensitive (menu_item, FALSE); + gtk_widget_show (menu_item); + return menu_item; +} + +GtkWidget* menu_tearoff (GtkWidget *menu) +{ + GtkWidget *menu_item = gtk_tearoff_menu_item_new (); + gtk_menu_append (GTK_MENU (menu), menu_item); + // gtk_widget_set_sensitive (menu_item, FALSE); + gtk_widget_show (menu_item); + return menu_item; +} + +GtkWidget* create_sub_menu (GtkWidget *bar, char *label, GtkAccelGroup *accel, GtkAccelGroup **menu_accel) +{ + GtkWidget *item, *menu; + guint tmp_key; + + item = gtk_menu_item_new_with_label (""); + tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (item)->child), label); + gtk_widget_add_accelerator (item, "activate_item", accel, tmp_key, GDK_MOD1_MASK, (GtkAccelFlags)0); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (bar), item); + + menu = gtk_menu_new (); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu); + *menu_accel = gtk_menu_ensure_uline_accel_group (GTK_MENU (menu)); + + return menu; +} + +GtkWidget* create_menu_in_menu (GtkWidget *menu, gchar *label, GtkAccelGroup *menu_accel, + GtkAccelGroup **submenu_accel) +{ + GtkWidget *item, *submenu; + guint tmp_key; + + item = gtk_menu_item_new_with_label (""); + tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (item)->child), label); + gtk_widget_add_accelerator (item, "activate_item", menu_accel, tmp_key, 0, (GtkAccelFlags)0); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + + submenu = gtk_menu_new (); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu); + *submenu_accel = gtk_menu_ensure_uline_accel_group (GTK_MENU (submenu)); + + return submenu; +} + +GtkWidget* create_menu_item (GtkWidget *menu, gchar *label, GtkAccelGroup *menu_accel, + GtkSignalFunc func, GtkObject *window, int id, const char* data) +{ + GtkWidget *item; + guint tmp_key; + + item = gtk_menu_item_new_with_label (""); + tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (item)->child), label); + gtk_widget_add_accelerator (item, "activate_item", menu_accel, tmp_key, 0, (GtkAccelFlags)0); + + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + gtk_signal_connect (GTK_OBJECT (item), "activate", GTK_SIGNAL_FUNC (func), GINT_TO_POINTER (id)); + + if (data != NULL) + gtk_object_set_data (window, data, item); + + return item; +} + +GtkWidget* create_check_menu_item (GtkWidget *menu, gchar *label, GtkAccelGroup *menu_accel, + GtkSignalFunc func, GtkObject *window, int id, const char* data) +{ + GtkWidget *item; + guint tmp_key; + + item = gtk_check_menu_item_new_with_label (""); + tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (item)->child), label); + gtk_widget_add_accelerator (item, "activate_item", menu_accel, tmp_key, 0, (GtkAccelFlags)0); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + gtk_signal_connect (GTK_OBJECT (item), "activate", GTK_SIGNAL_FUNC (func), GINT_TO_POINTER (id)); + + if (data != NULL) + gtk_object_set_data (window, data, item); + + return item; +} + +GtkWidget* create_radio_menu_item (GtkWidget *menu, GtkWidget *last, gchar *label, + GtkAccelGroup *menu_accel, GtkSignalFunc func, + GtkObject *window, int id, const char* data) +{ + GtkWidget *item; + guint tmp_key; + GSList *group = NULL; + + if (last != NULL) + group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (last)); + item = gtk_radio_menu_item_new_with_label (group, ""); + tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (item)->child), label); + gtk_widget_add_accelerator (item, "activate_item", menu_accel, tmp_key, 0, (GtkAccelFlags)0); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + gtk_signal_connect (GTK_OBJECT (item), "activate", GTK_SIGNAL_FUNC (func), GINT_TO_POINTER (id)); + + if (data != NULL) + gtk_object_set_data (window, data, item); + + return item; +} + +GtkWidget* create_radio_menu_pixmap (GtkWidget *menu, GtkWidget *last, gchar *filename, + GtkAccelGroup *menu_accel, GtkSignalFunc func, + GtkObject *window, int id, const char* data) +{ + GtkWidget *item, *pixmap; + GSList *group = NULL; + + if (last != NULL) + group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (last)); + + item = gtk_radio_menu_item_new (group); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + gtk_signal_connect (GTK_OBJECT (item), "activate", GTK_SIGNAL_FUNC (func), GINT_TO_POINTER (id)); + + pixmap = create_pixmap (filename); + gtk_container_add (GTK_CONTAINER (item), pixmap); + + if (data != NULL) + gtk_object_set_data (window, data, item); + + return item; +} diff --git a/linux/gtkmisc.h b/linux/gtkmisc.h new file mode 100755 index 0000000..155a37c --- /dev/null +++ b/linux/gtkmisc.h @@ -0,0 +1,24 @@ +#ifndef _GTK_MISC_H_ +#define _GTK_MISC_H_ + +GtkWidget* create_pixmap (char* filename); +void load_pixmap (const char* filename, GdkPixmap **gdkpixmap, GdkBitmap **mask); + +GtkWidget* menu_separator (GtkWidget *menu); +GtkWidget* menu_tearoff (GtkWidget *menu); +GtkWidget* create_sub_menu (GtkWidget *bar, char *label, GtkAccelGroup *accel, GtkAccelGroup **menu_accel); +GtkWidget* create_menu_in_menu (GtkWidget *menu, gchar *label, GtkAccelGroup *menu_accel, + GtkAccelGroup **submenu_accel); +GtkWidget* create_menu_item (GtkWidget *menu, gchar *label, GtkAccelGroup *menu_accel, + GtkSignalFunc func, GtkObject *window, int id, const char* data); +GtkWidget* create_check_menu_item (GtkWidget *menu, gchar *label, GtkAccelGroup *menu_accel, + GtkSignalFunc func, GtkObject *window, int id, const char* data); +GtkWidget* create_radio_menu_item (GtkWidget *menu, GtkWidget *last, gchar *label, + GtkAccelGroup *menu_accel, GtkSignalFunc func, + GtkObject *window, int id, const char* data); +GtkWidget* create_radio_menu_pixmap (GtkWidget *menu, GtkWidget *last, gchar *filename, + GtkAccelGroup *menu_accel, GtkSignalFunc func, + GtkObject *window, int id, const char* data); + + +#endif // _GTKMISC_H_ -- cgit v1.2.3