From 74583e9a7ca23db6bb95b3f87aca7d2165f07df8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mo=C5=84?= Date: Sun, 15 Mar 2009 20:06:18 +0100 Subject: [PATCH] make GUI more compact --- effects.c | 37 +++++++++++++++--------------- effects.h | 5 ++-- gui.c | 68 +++++++++++++++++++++++++++++++++++-------------------- 3 files changed, 66 insertions(+), 44 deletions(-) diff --git a/effects.c b/effects.c index cdf6ce4..287f51e 100644 --- a/effects.c +++ b/effects.c @@ -686,51 +686,52 @@ static EffectGroup effects_lib_group[] = { }; static Effect wah_effect[] = { - {"Wah", WAH_ON_OFF, WAH_POSITION, wah_group, G_N_ELEMENTS(wah_group)}, + {NULL, WAH_ON_OFF, WAH_POSITION, wah_group, G_N_ELEMENTS(wah_group)}, }; static Effect comp_effect[] = { - {"Compressor", COMP_ON_OFF, COMP_POSITION, comp_group, G_N_ELEMENTS(comp_group)}, + {NULL, COMP_ON_OFF, COMP_POSITION, comp_group, G_N_ELEMENTS(comp_group)}, }; static Effect dist_effect[] = { - {"Distortion", DIST_ON_OFF, DIST_POSITION, dist_group, G_N_ELEMENTS(dist_group)}, + {NULL, DIST_ON_OFF, DIST_POSITION, dist_group, G_N_ELEMENTS(dist_group)}, }; static Effect noisegate_effect[] = { - {"Noisegate", NOISEGATE_ON_OFF, NOISEGATE_POSITION, noisegate_group, G_N_ELEMENTS(noisegate_group)}, + {NULL, NOISEGATE_ON_OFF, NOISEGATE_POSITION, noisegate_group, G_N_ELEMENTS(noisegate_group)}, }; static Effect chorusfx_effect[] = { - {"Chorus/FX", CHORUSFX_ON_OFF, CHORUSFX_POSITION, chorusfx_group, G_N_ELEMENTS(chorusfx_group)}, + {NULL, CHORUSFX_ON_OFF, CHORUSFX_POSITION, chorusfx_group, G_N_ELEMENTS(chorusfx_group)}, }; static Effect delay_effect[] = { - {"Delay", DELAY_ON_OFF, DELAY_POSITION, delay_group, G_N_ELEMENTS(delay_group)}, + {NULL, DELAY_ON_OFF, DELAY_POSITION, delay_group, G_N_ELEMENTS(delay_group)}, }; static Effect reverb_effect[] = { - {"Reverb", REVERB_ON_OFF, REVERB_POSITION, reverb_group, G_N_ELEMENTS(reverb_group)}, + {NULL, REVERB_ON_OFF, REVERB_POSITION, reverb_group, G_N_ELEMENTS(reverb_group)}, }; static Effect amp_effect[] = { - {"Amp", AMP_ON_OFF, AMP_POSITION, amp_group, G_N_ELEMENTS(amp_group)}, + {NULL, AMP_ON_OFF, AMP_POSITION, amp_group, G_N_ELEMENTS(amp_group)}, + {"Cabinet", -1, -1, amp_cab_group, G_N_ELEMENTS(amp_cab_group)}, }; static Effect eq_effect[] = { - {"EQ", EQ_ON_OFF, EQ_POSITION, eq_group, G_N_ELEMENTS(eq_group)}, + {NULL, EQ_ON_OFF, EQ_POSITION, eq_group, G_N_ELEMENTS(eq_group)}, }; EffectList effects[] = { - {wah_effect, G_N_ELEMENTS(wah_effect)}, - {amp_effect, G_N_ELEMENTS(amp_effect)}, - {eq_effect, G_N_ELEMENTS(eq_effect)}, - {comp_effect, G_N_ELEMENTS(comp_effect)}, - {dist_effect, G_N_ELEMENTS(dist_effect)}, - {noisegate_effect, G_N_ELEMENTS(noisegate_effect)}, - {chorusfx_effect, G_N_ELEMENTS(chorusfx_effect)}, - {delay_effect, G_N_ELEMENTS(delay_effect)}, - {reverb_effect, G_N_ELEMENTS(reverb_effect)}, + {"Wah", wah_effect, G_N_ELEMENTS(wah_effect)}, + {"Amplifier", amp_effect, G_N_ELEMENTS(amp_effect)}, + {"Equalizer", eq_effect, G_N_ELEMENTS(eq_effect)}, + {"Compressor", comp_effect, G_N_ELEMENTS(comp_effect)}, + {"Distortion", dist_effect, G_N_ELEMENTS(dist_effect)}, + {"Noisegate", noisegate_effect, G_N_ELEMENTS(noisegate_effect)}, + {"Chorus/FX", chorusfx_effect, G_N_ELEMENTS(chorusfx_effect)}, + {"Delay", delay_effect, G_N_ELEMENTS(delay_effect)}, + {"Reverb", reverb_effect, G_N_ELEMENTS(reverb_effect)}, }; int n_effects = G_N_ELEMENTS(effects); diff --git a/effects.h b/effects.h index 76ff287..5b00b0d 100644 --- a/effects.h +++ b/effects.h @@ -42,14 +42,15 @@ typedef struct { } EffectGroup; typedef struct { - gchar *label; /**< Base effect name */ - guint id; /**< ID (to set effect on/off) */ + gchar *label; /**< Group label */ + guint id; /**< ID to set effect on/off, or if it isn't on/off group then -1 */ guint position; /**< position */ EffectGroup *group; /**< possible effect types */ gint group_amt; /**< possible effect types length */ } Effect; typedef struct { + gchar *label; /**< base effect name */ Effect *effect; /**< list of supported effects */ gint amt; /**< list of supported effects length */ } EffectList; diff --git a/gui.c b/gui.c index 85b1f2c..bcc8064 100644 --- a/gui.c +++ b/gui.c @@ -245,7 +245,7 @@ GtkWidget *create_table(EffectSettings *settings, gint amt) **/ GtkWidget *create_on_off_button(Effect *effect) { - GtkWidget *button = gtk_toggle_button_new_with_label(effect->label); + GtkWidget *button = gtk_check_button_new(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(toggled_cb), effect); widget_list_add(GTK_OBJECT(button), effect->id, effect->position, -1, -1); @@ -266,11 +266,14 @@ typedef struct { **/ void effect_settings_group_free(EffectSettingsGroup *group) { - /* destroy widget without parent */ - if (gtk_widget_get_parent(group->child) == NULL) - gtk_widget_destroy(group->child); + if (group->child != NULL) { + /* destroy widget without parent */ + if (gtk_widget_get_parent(group->child) == NULL) + gtk_widget_destroy(group->child); + + g_object_unref(group->child); + } - g_object_unref(group->child); g_slice_free(EffectSettingsGroup, group); } @@ -303,8 +306,11 @@ void combo_box_changed_cb(GtkComboBox *widget, gpointer data) if (child != NULL) { gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(gtk_widget_get_parent(vbox))), child); } - gtk_container_add(GTK_CONTAINER(gtk_widget_get_parent(gtk_widget_get_parent(vbox))), settings->child); - gtk_widget_show_all(gtk_widget_get_parent(gtk_widget_get_parent(vbox))); + + if (settings->child != NULL) { + gtk_container_add(GTK_CONTAINER(gtk_widget_get_parent(gtk_widget_get_parent(vbox))), settings->child); + gtk_widget_show_all(gtk_widget_get_parent(gtk_widget_get_parent(vbox))); + } g_object_set_data(G_OBJECT(widget), "active_child", settings->child); } } @@ -340,14 +346,18 @@ GtkWidget *create_widget_container(EffectGroup *group, gint amt) gtk_combo_box_append_text(GTK_COMBO_BOX(combo_box), group[x].label); cmbox_no++; - widget = create_table(group[x].settings, group[x].settings_amt); - g_object_ref_sink(widget); + if ((group[x].settings != NULL) && (group[x].settings > 0)) { + widget = create_table(group[x].settings, group[x].settings_amt); + g_object_ref_sink(widget); + } else + widget = NULL; settings = g_slice_new(EffectSettingsGroup); settings->id = group[x].id; settings->type = group[x].type; settings->position = group[x].position; settings->child = widget; + widget_list_add(GTK_OBJECT(combo_box), group[x].id, group[x].position, group[x].type, x); name = g_strdup_printf("SettingsGroup%d", cmbox_no); @@ -365,34 +375,44 @@ GtkWidget *create_widget_container(EffectGroup *group, gint amt) /** * \param widgets Effect descriptions * \param amt amount of effect descriptions + * \param label frame label (can be NULL) * - * Creates vbox containing widgets allowing user to set effect options. + * Creates frame (with optional label) containing widgets allowing user to set effect options. * * \return widget that allow user to set effect options. **/ -GtkWidget *create_vbox(Effect *widgets, gint amt) +GtkWidget *create_vbox(Effect *widgets, gint amt, gchar *label) { GtkWidget *vbox; - GtkWidget *hbox; GtkWidget *widget; GtkWidget *table; + GtkWidget *container; + GtkWidget *frame; int x; - vbox = gtk_vbox_new(FALSE, 0); - hbox = gtk_hbox_new(FALSE, 0); + frame = gtk_frame_new(label); - gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE); + vbox = gtk_vbox_new(FALSE, 0); + + table = gtk_table_new(2, amt, FALSE); + gtk_table_set_col_spacings(GTK_TABLE(table), 2); for (x = 0; x