diff options
author | Arturo Espinosa <unammx@src.gnome.org> | 1997-12-23 00:35:48 +0000 |
---|---|---|
committer | Arturo Espinosa <unammx@src.gnome.org> | 1997-12-23 00:35:48 +0000 |
commit | b44565f3e4730ada4d9d238707fc0d882d197092 (patch) | |
tree | e381d0e26a433ffb582f607a021a8ba1fb7793d4 | |
parent | 4da7b2f2efee93706132eb79a886fd78126787bf (diff) | |
download | gtk+-b44565f3e4730ada4d9d238707fc0d882d197092.tar.gz |
Demo works fine. I have to add the missing functions for setting the toolbar's
parameters on the fly. - Federico
-rw-r--r-- | gtk/gtktoolbar.c | 51 | ||||
-rw-r--r-- | gtk/gtktoolbar.h | 14 | ||||
-rw-r--r-- | gtk/testgtk.c | 76 | ||||
-rw-r--r-- | tests/testgtk.c | 76 |
4 files changed, 211 insertions, 6 deletions
diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c index b295c0ce41..55c20480a1 100644 --- a/gtk/gtktoolbar.c +++ b/gtk/gtktoolbar.c @@ -46,6 +46,9 @@ static void gtk_toolbar_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static void gtk_toolbar_add (GtkContainer *container, GtkWidget *widget); +static void gtk_toolbar_foreach (GtkContainer *container, + GtkCallback callback, + gpointer callback_data); static GtkContainerClass *parent_class; @@ -93,6 +96,7 @@ gtk_toolbar_class_init(GtkToolbarClass *class) widget_class->size_allocate = gtk_toolbar_size_allocate; container_class->add = gtk_toolbar_add; + container_class->foreach = gtk_toolbar_foreach; } static void @@ -105,6 +109,7 @@ gtk_toolbar_init(GtkToolbar *toolbar) toolbar->orientation = GTK_ORIENTATION_HORIZONTAL; toolbar->style = GTK_TOOLBAR_ICONS; toolbar->space_size = DEFAULT_SPACE_SIZE; + toolbar->tooltips = gtk_tooltips_new(); } GtkWidget * @@ -134,6 +139,8 @@ gtk_toolbar_destroy(GtkObject *object) toolbar = GTK_TOOLBAR(object); + gtk_tooltips_unref(toolbar->tooltips); /* XXX: do I have to unref the tooltips? */ + for (children = toolbar->children; children; children = children->next) { child = children->data; @@ -313,22 +320,51 @@ gtk_toolbar_add(GtkContainer *container, g_warning("gtk_toolbar_add: use gtk_toolbar_add_item() instead!"); } +static void +gtk_toolbar_foreach(GtkContainer *container, + GtkCallback callback, + gpointer callback_data) +{ + GtkToolbar *toolbar; + GList *children; + Child *child; + + g_return_if_fail(container != NULL); + g_return_if_fail(GTK_IS_TOOLBAR(container)); + g_return_if_fail(callback != NULL); + + toolbar = GTK_TOOLBAR(container); + + for (children = toolbar->children; children; children = children->next) { + child = children->data; + + if (child) + (*callback) (child->button, callback_data); + } +} + void gtk_toolbar_append_item(GtkToolbar *toolbar, const char *text, const char *tooltip_text, - GtkPixmap *icon) + GtkPixmap *icon, + GtkSignalFunc callback, + gpointer user_data) { - gtk_toolbar_insert_item(toolbar, text, tooltip_text, icon, toolbar->num_children); + gtk_toolbar_insert_item(toolbar, text, tooltip_text, icon, + callback, user_data, toolbar->num_children); } void gtk_toolbar_prepend_item(GtkToolbar *toolbar, const char *text, const char *tooltip_text, - GtkPixmap *icon) + GtkPixmap *icon, + GtkSignalFunc callback, + gpointer user_data) { - gtk_toolbar_insert_item(toolbar, text, tooltip_text, icon, 0); + gtk_toolbar_insert_item(toolbar, text, tooltip_text, icon, + callback, user_data, 0); } void @@ -336,6 +372,8 @@ gtk_toolbar_insert_item(GtkToolbar *toolbar, const char *text, const char *tooltip_text, GtkPixmap *icon, + GtkSignalFunc callback, + gpointer user_data, gint position) { Child *child; @@ -348,6 +386,10 @@ gtk_toolbar_insert_item(GtkToolbar *toolbar, child->button = gtk_button_new(); + if (callback) + gtk_signal_connect(GTK_OBJECT(child->button), "clicked", + callback, user_data); + if (text) child->label = gtk_label_new(text); else @@ -432,6 +474,7 @@ gtk_toolbar_insert_space(GtkToolbar *toolbar, /* NULL child means it is a space in the toolbar, rather than a button */ toolbar->children = g_list_insert(toolbar->children, NULL, position); + toolbar->num_children++; if (GTK_WIDGET_VISIBLE(toolbar)) gtk_widget_queue_resize(GTK_WIDGET(toolbar)); diff --git a/gtk/gtktoolbar.h b/gtk/gtktoolbar.h index abd7fcf21a..5b4bbf34e5 100644 --- a/gtk/gtktoolbar.h +++ b/gtk/gtktoolbar.h @@ -25,6 +25,8 @@ #include <gtk/gtkcontainer.h> #include <gtk/gtkenums.h> #include <gtk/gtkpixmap.h> +#include <gtk/gtksignal.h> +#include <gtk/gtktooltips.h> #ifdef __cplusplus @@ -50,6 +52,8 @@ struct _GtkToolbar GtkToolbarStyle style; gint space_size; /* big optional space between buttons */ + GtkTooltips *tooltips; + gint child_maxw; gint child_maxh; }; @@ -67,15 +71,21 @@ GtkWidget *gtk_toolbar_new (GtkOrientation orientation, void gtk_toolbar_append_item (GtkToolbar *toolbar, const char *text, const char *tooltip_text, - GtkPixmap *icon); + GtkPixmap *icon, + GtkSignalFunc callback, + gpointer user_data); void gtk_toolbar_prepend_item (GtkToolbar *toolbar, const char *text, const char *tooltip_text, - GtkPixmap *icon); + GtkPixmap *icon, + GtkSignalFunc callback, + gpointer user_data); void gtk_toolbar_insert_item (GtkToolbar *toolbar, const char *text, const char *tooltip_text, GtkPixmap *icon, + GtkSignalFunc callback, + gpointer user_data, gint position); void gtk_toolbar_append_space (GtkToolbar *toolbar); void gtk_toolbar_prepend_space (GtkToolbar *toolbar); diff --git a/gtk/testgtk.c b/gtk/testgtk.c index dfb7958c34..98ae0ad686 100644 --- a/gtk/testgtk.c +++ b/gtk/testgtk.c @@ -548,6 +548,81 @@ create_button_box () gtk_widget_destroy (window); } +GtkWidget * +new_pixmap (char *filename, GdkWindow *window, GdkColor *background) +{ + GtkWidget *wpixmap; + GdkPixmap *pixmap; + GdkBitmap *mask; + + pixmap = gdk_pixmap_create_from_xpm (window, &mask, + background, + "test.xpm"); + wpixmap = gtk_pixmap_new (pixmap, mask); + + return wpixmap; +} + +void +create_toolbar (void) +{ + static GtkWidget *window = NULL; + GtkWidget *toolbar; + + if (!window) + { + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "Toolbar test"); + + gtk_signal_connect (GTK_OBJECT (window), "destroy", + GTK_SIGNAL_FUNC (destroy_window), + &window); + gtk_signal_connect (GTK_OBJECT (window), "delete_event", + GTK_SIGNAL_FUNC (destroy_window), + &window); + + gtk_container_border_width (GTK_CONTAINER (window), 0); + gtk_widget_realize (window); + + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + "New", "New document", + GTK_PIXMAP (new_pixmap ("test.xpm", window->window, + &window->style->bg[GTK_STATE_NORMAL])), + NULL, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + "Open", "Open existing", + GTK_PIXMAP (new_pixmap ("test.xpm", window->window, + &window->style->bg[GTK_STATE_NORMAL])), + NULL, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + "Close", "Close current document", + GTK_PIXMAP (new_pixmap ("test.xpm", window->window, + &window->style->bg[GTK_STATE_NORMAL])), + NULL, NULL); + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + "Undo", "Undo screw-up", + GTK_PIXMAP (new_pixmap ("test.xpm", window->window, + &window->style->bg[GTK_STATE_NORMAL])), + NULL, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + "Redo", "Redo not-screwup-after-all", + GTK_PIXMAP (new_pixmap ("test.xpm", window->window, + &window->style->bg[GTK_STATE_NORMAL])), + NULL, NULL); + + gtk_container_add (GTK_CONTAINER (window), toolbar); + gtk_widget_show (toolbar); + } + + if (!GTK_WIDGET_VISIBLE (window)) + gtk_widget_show (window); + else + gtk_widget_destroy (window); +} + void create_handle_box () { @@ -3278,6 +3353,7 @@ create_main_window () { "check buttons", create_check_buttons }, { "radio buttons", create_radio_buttons }, { "button box", create_button_box }, + { "toolbar", create_toolbar }, { "handle box", create_handle_box }, { "reparent", create_reparent }, { "pixmap", create_pixmap }, diff --git a/tests/testgtk.c b/tests/testgtk.c index dfb7958c34..98ae0ad686 100644 --- a/tests/testgtk.c +++ b/tests/testgtk.c @@ -548,6 +548,81 @@ create_button_box () gtk_widget_destroy (window); } +GtkWidget * +new_pixmap (char *filename, GdkWindow *window, GdkColor *background) +{ + GtkWidget *wpixmap; + GdkPixmap *pixmap; + GdkBitmap *mask; + + pixmap = gdk_pixmap_create_from_xpm (window, &mask, + background, + "test.xpm"); + wpixmap = gtk_pixmap_new (pixmap, mask); + + return wpixmap; +} + +void +create_toolbar (void) +{ + static GtkWidget *window = NULL; + GtkWidget *toolbar; + + if (!window) + { + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "Toolbar test"); + + gtk_signal_connect (GTK_OBJECT (window), "destroy", + GTK_SIGNAL_FUNC (destroy_window), + &window); + gtk_signal_connect (GTK_OBJECT (window), "delete_event", + GTK_SIGNAL_FUNC (destroy_window), + &window); + + gtk_container_border_width (GTK_CONTAINER (window), 0); + gtk_widget_realize (window); + + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + "New", "New document", + GTK_PIXMAP (new_pixmap ("test.xpm", window->window, + &window->style->bg[GTK_STATE_NORMAL])), + NULL, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + "Open", "Open existing", + GTK_PIXMAP (new_pixmap ("test.xpm", window->window, + &window->style->bg[GTK_STATE_NORMAL])), + NULL, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + "Close", "Close current document", + GTK_PIXMAP (new_pixmap ("test.xpm", window->window, + &window->style->bg[GTK_STATE_NORMAL])), + NULL, NULL); + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + "Undo", "Undo screw-up", + GTK_PIXMAP (new_pixmap ("test.xpm", window->window, + &window->style->bg[GTK_STATE_NORMAL])), + NULL, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + "Redo", "Redo not-screwup-after-all", + GTK_PIXMAP (new_pixmap ("test.xpm", window->window, + &window->style->bg[GTK_STATE_NORMAL])), + NULL, NULL); + + gtk_container_add (GTK_CONTAINER (window), toolbar); + gtk_widget_show (toolbar); + } + + if (!GTK_WIDGET_VISIBLE (window)) + gtk_widget_show (window); + else + gtk_widget_destroy (window); +} + void create_handle_box () { @@ -3278,6 +3353,7 @@ create_main_window () { "check buttons", create_check_buttons }, { "radio buttons", create_radio_buttons }, { "button box", create_button_box }, + { "toolbar", create_toolbar }, { "handle box", create_handle_box }, { "reparent", create_reparent }, { "pixmap", create_pixmap }, |