diff options
author | waker <wakeroid@gmail.com> | 2012-11-28 22:54:14 +0100 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2012-11-28 22:54:14 +0100 |
commit | e6aba00b754a511a355bb63bcd0966551e6fe70d (patch) | |
tree | afa188bb03eb4cec1c4316bbf0d7e648e66a353a /plugins | |
parent | 82e3b823e1b42d7c5c04c4ec54ab60068311a598 (diff) |
gtkui: added vbox and hbox widgets
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/gtkui/gtkui.c | 2 | ||||
-rw-r--r-- | plugins/gtkui/widgets.c | 126 | ||||
-rw-r--r-- | plugins/gtkui/widgets.h | 6 |
3 files changed, 134 insertions, 0 deletions
diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c index f003be37..9de69b08 100644 --- a/plugins/gtkui/gtkui.c +++ b/plugins/gtkui/gtkui.c @@ -925,6 +925,8 @@ gtkui_thread (void *ctx) { w_reg_widget ("coverart", _("Album art display"), w_coverart_create); w_reg_widget ("scope", _("Scope"), w_scope_create); w_reg_widget ("spectrum", _("Spectrum"), w_spectrum_create); + w_reg_widget ("hbox", _("HBox"), w_hbox_create); + w_reg_widget ("vbox", _("VBox"), w_vbox_create); mainwin = create_mainwin (); diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c index d9fdc706..f2d13d7b 100644 --- a/plugins/gtkui/widgets.c +++ b/plugins/gtkui/widgets.c @@ -104,6 +104,11 @@ typedef struct { GdkGLContext *glcontext; } w_spectrum_t; +typedef struct { + ddb_gtkui_widget_t base; + GtkWidget *box; +} w_hvbox_t; + static int design_mode; static ddb_gtkui_widget_t *rootwidget; @@ -2234,3 +2239,124 @@ w_spectrum_create (void) { return (ddb_gtkui_widget_t *)w; } +// hbox and vbox +static void +w_hvbox_append (struct ddb_gtkui_widget_s *container, struct ddb_gtkui_widget_s *child) { + w_hvbox_t *b = (w_hvbox_t *)container; + gtk_box_pack_start (GTK_BOX (b->box), child->widget, TRUE, TRUE, 0); + gtk_widget_show (child->widget); +} + +static void +w_hvbox_remove (struct ddb_gtkui_widget_s *container, struct ddb_gtkui_widget_s *child) { + w_hvbox_t *b = (w_hvbox_t *)container; + gtk_container_remove (GTK_CONTAINER (b->box), child->widget); +} + +static void +w_hvbox_replace (struct ddb_gtkui_widget_s *container, struct ddb_gtkui_widget_s *child, struct ddb_gtkui_widget_s *newchild) { + w_hvbox_t *b = (w_hvbox_t *)container; + ddb_gtkui_widget_t *c; + ddb_gtkui_widget_t *prev = NULL; + int n = 0; + for (c = container->children; c; prev = c, c = c->next, n++) { + if (c == child) { + break; + } + } + + if (!c) { + return; + } + + if (prev) { + prev->next = newchild; + } + else { + container->children = newchild; + } + newchild->next = c->next; + + gtk_container_remove (GTK_CONTAINER(b->box), c->widget); + c->widget = NULL; + w_destroy (c); + + gtk_box_pack_start (GTK_BOX (b->box), newchild->widget, TRUE, TRUE, 0); + gtk_widget_show (newchild->widget); + gtk_box_reorder_child (GTK_BOX (b->box), newchild->widget, n); + +} + +static void +on_hvbox_expand (GtkMenuItem *menuitem, gpointer user_data) { + w_append ((ddb_gtkui_widget_t*)user_data, w_create ("placeholder")); +} + +static void +on_hvbox_shrink (GtkMenuItem *menuitem, gpointer user_data) { + ddb_gtkui_widget_t *w = (ddb_gtkui_widget_t *)user_data; + ddb_gtkui_widget_t *c; + for (c = w->children; c && c->next; c = c->next); + if (c) { + w_remove (w, c); + } + if (!w->children) { + w_append (w, w_create ("placeholder")); + } +} + +static void +w_hvbox_initmenu (struct ddb_gtkui_widget_s *w, GtkWidget *menu) { + GtkWidget *item; + item = gtk_menu_item_new_with_mnemonic (_("Expand the box by 1 item")); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + g_signal_connect ((gpointer) item, "activate", G_CALLBACK (on_hvbox_expand), w); + + item = gtk_menu_item_new_with_mnemonic (_("Shrink the box by 1 item")); + gtk_widget_show (item); + gtk_container_add (GTK_CONTAINER (menu), item); + g_signal_connect ((gpointer) item, "activate", G_CALLBACK (on_hvbox_shrink), w); +} + +ddb_gtkui_widget_t * +w_hbox_create (void) { + w_hvbox_t *w = malloc (sizeof (w_hvbox_t)); + memset (w, 0, sizeof (w_hvbox_t)); + w->base.widget = gtk_event_box_new (); + w->base.append = w_hvbox_append; + w->base.remove = w_hvbox_remove; + w->base.replace = w_hvbox_replace; + w->base.initmenu = w_hvbox_initmenu; + w->box = gtk_hbox_new (TRUE, 3); + gtk_widget_show (w->box); + gtk_container_add (GTK_CONTAINER (w->base.widget), w->box); + + w_append ((ddb_gtkui_widget_t*)w, w_create ("placeholder")); + w_append ((ddb_gtkui_widget_t*)w, w_create ("placeholder")); + w_append ((ddb_gtkui_widget_t*)w, w_create ("placeholder")); + + w_override_signals (w->base.widget, w); + return (ddb_gtkui_widget_t *)w; +} + +ddb_gtkui_widget_t * +w_vbox_create (void) { + w_hvbox_t *w = malloc (sizeof (w_hvbox_t)); + memset (w, 0, sizeof (w_hvbox_t)); + w->base.widget = gtk_event_box_new (); + w->base.append = w_hvbox_append; + w->base.remove = w_hvbox_remove; + w->base.replace = w_hvbox_replace; + w->base.initmenu = w_hvbox_initmenu; + w->box = gtk_vbox_new (TRUE, 3); + gtk_widget_show (w->box); + gtk_container_add (GTK_CONTAINER (w->base.widget), w->box); + + w_append ((ddb_gtkui_widget_t*)w, w_create ("placeholder")); + w_append ((ddb_gtkui_widget_t*)w, w_create ("placeholder")); + w_append ((ddb_gtkui_widget_t*)w, w_create ("placeholder")); + + w_override_signals (w->base.widget, w); + return (ddb_gtkui_widget_t *)w; +} diff --git a/plugins/gtkui/widgets.h b/plugins/gtkui/widgets.h index 56a3672d..6573a3df 100644 --- a/plugins/gtkui/widgets.h +++ b/plugins/gtkui/widgets.h @@ -102,4 +102,10 @@ w_scope_create (void); ddb_gtkui_widget_t * w_spectrum_create (void); +ddb_gtkui_widget_t * +w_hbox_create (void); + +ddb_gtkui_widget_t * +w_vbox_create (void); + #endif |