From ba810bf4f85fe285b6a89d905b4f5f8aef704fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mo=C5=84?= Date: Fri, 1 May 2009 16:12:58 +0200 Subject: [PATCH] reuse widget table if possible --- gui.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/gui.c b/gui.c index 7671027..56039f2 100644 --- a/gui.c +++ b/gui.c @@ -188,17 +188,24 @@ static void apply_current_preset() /** * \param settings effect parameters * \param amt amount of effect parameters + * \param widget_table hash table matching settings pointer with created table (may be NULL) * * Creates knobs that allow user to set effect parameters. * * \return GtkTable containing necessary widgets to set effect parameters. **/ -GtkWidget *create_table(EffectSettings *settings, gint amt) +GtkWidget *create_table(EffectSettings *settings, gint amt, GHashTable *widget_table) { GtkWidget *table, *label, *widget, *knob; GtkObject *adj; int x; + if (widget_table != NULL) { + table = g_hash_table_lookup(widget_table, settings); + if (table != NULL) + return table; + } + table = gtk_table_new(3, amt, FALSE); for (x = 0; xid, settings->position, settings->type); child = g_object_get_data(G_OBJECT(widget), "active_child"); + if (child == settings->child) { + return; + } + if (child != NULL) { gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(gtk_widget_get_parent(vbox))), child); } @@ -325,6 +340,7 @@ GtkWidget *create_widget_container(EffectGroup *group, gint amt) GtkWidget *vbox; GtkWidget *widget; GtkWidget *combo_box = NULL; + GHashTable *widget_table; EffectSettingsGroup *settings = NULL; gchar *name = NULL; gint x; @@ -332,6 +348,8 @@ GtkWidget *create_widget_container(EffectGroup *group, gint amt) vbox = gtk_vbox_new(FALSE, 0); + widget_table = g_hash_table_new(g_direct_hash, g_direct_equal); + for (x = 0; x 0)) { - widget = create_table(group[x].settings, group[x].settings_amt); + widget = create_table(group[x].settings, group[x].settings_amt, widget_table); g_object_ref_sink(widget); } else widget = NULL; @@ -361,11 +379,13 @@ GtkWidget *create_widget_container(EffectGroup *group, gint amt) g_object_set_data_full(G_OBJECT(combo_box), name, settings, ((GDestroyNotify)effect_settings_group_free)); g_free(name); } else { - widget = create_table(group[x].settings, group[x].settings_amt); + widget = create_table(group[x].settings, group[x].settings_amt, widget_table); gtk_container_add(GTK_CONTAINER(vbox), widget); } } + g_hash_table_destroy(widget_table); + return vbox; }