From ba04930133cf67af588c5dcefa91acc58b67190e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mo=C5=84?= Date: Sun, 21 Jun 2009 20:05:42 +0200 Subject: [PATCH] display GNX3000 settings in tabs --- effects.c | 42 +++++++++++++++++++++++++++++++----------- effects.h | 11 +++++++++-- gui.c | 28 ++++++++++++++++++++-------- 3 files changed, 60 insertions(+), 21 deletions(-) diff --git a/effects.c b/effects.c index 60c9cc9..5648dab 100644 --- a/effects.c +++ b/effects.c @@ -1956,9 +1956,6 @@ static EffectList gnx4_effects[] = { }; static EffectList gnx3000_effects[] = { - {"Channel 1", gnx3k_channel_1_effect, G_N_ELEMENTS(gnx3k_channel_1_effect)}, - {"Channel 2", gnx3k_channel_2_effect, G_N_ELEMENTS(gnx3k_channel_2_effect)}, - {"Amp Channel", gnx3k_amp_channel_effect, G_N_ELEMENTS(gnx3k_amp_channel_effect)}, {"Pickup", pickup_effect, G_N_ELEMENTS(pickup_effect)}, {"Wah", gnx3k_wah_effect, G_N_ELEMENTS(gnx3k_wah_effect)}, {"Whammy/IPS", gnx3k_whammy_effect, G_N_ELEMENTS(gnx3k_whammy_effect)}, @@ -1971,6 +1968,12 @@ static EffectList gnx3000_effects[] = { {"Reverb", gnx3k_reverb_effect, G_N_ELEMENTS(gnx3k_reverb_effect)}, }; +static EffectList gnx3000_genetx[] = { + {"Channel 1", gnx3k_channel_1_effect, G_N_ELEMENTS(gnx3k_channel_1_effect)}, + {"Channel 2", gnx3k_channel_2_effect, G_N_ELEMENTS(gnx3k_channel_2_effect)}, + {"Amp Channel", gnx3k_amp_channel_effect, G_N_ELEMENTS(gnx3k_amp_channel_effect)}, +}; + static Banks rp_banks[] = { {"User Presets", PRESETS_USER}, {"System Presets", PRESETS_SYSTEM}, @@ -1988,12 +1991,29 @@ static Banks gnx3k_banks[] = { {"Factory 2", PRESETS_FACTORY2}, }; +static EffectPage rp250_pages[] = { + {"Effects", rp250_effects, G_N_ELEMENTS(rp250_effects), 2}, +}; + +static EffectPage rp500_pages[] = { + {"Effects", rp500_effects, G_N_ELEMENTS(rp500_effects), 2}, +}; + +static EffectPage gnx4_pages[] = { + {"Effects", gnx4_effects, G_N_ELEMENTS(gnx4_effects), 2}, +}; + +static EffectPage gnx3000_pages[] = { + {"Effects", gnx3000_effects, G_N_ELEMENTS(gnx3000_effects), 2}, + {"Amp/GeNetX", gnx3000_genetx, G_N_ELEMENTS(gnx3000_genetx), 1}, +}; + static Device rp250 = { .name = "DigiTech RP250", .family_id = 0x5E, .product_id = 0x02, - .effects = rp250_effects, - .n_effects = G_N_ELEMENTS(rp250_effects), + .pages = rp250_pages, + .n_pages = G_N_ELEMENTS(rp250_pages), .banks = rp_banks, .n_banks = G_N_ELEMENTS(rp_banks), }; @@ -2002,8 +2022,8 @@ static Device rp500 = { .name = "DigiTech RP500", .family_id = 0x5E, .product_id = 0x05, - .effects = rp500_effects, - .n_effects = G_N_ELEMENTS(rp500_effects), + .pages = rp500_pages, + .n_pages = G_N_ELEMENTS(rp500_pages), .banks = rp_banks, .n_banks = G_N_ELEMENTS(rp_banks), }; @@ -2012,8 +2032,8 @@ static Device gnx4 = { .name = "DigiTech GNX4", .family_id = 0x5C, .product_id = 0x03, - .effects = gnx4_effects, - .n_effects = G_N_ELEMENTS(gnx4_effects), + .pages = gnx4_pages, + .n_pages = G_N_ELEMENTS(gnx4_pages), .banks = gnx4_banks, .n_banks = G_N_ELEMENTS(gnx4_banks), }; @@ -2022,8 +2042,8 @@ static Device gnx3000 = { .name = "DigiTech GNX3000", .family_id = 0x5C, .product_id = 0x04, - .effects = gnx3000_effects, - .n_effects = G_N_ELEMENTS(gnx3000_effects), + .pages = gnx3000_pages, + .n_pages = G_N_ELEMENTS(gnx3000_pages), .banks = gnx3k_banks, .n_banks = G_N_ELEMENTS(gnx3k_banks), }; diff --git a/effects.h b/effects.h index 1ce8dc6..5ae2faf 100644 --- a/effects.h +++ b/effects.h @@ -61,6 +61,13 @@ typedef struct { gint group_amt; } ModifierGroup; +typedef struct { + gchar *name; + EffectList *effects; + gint n_effects; + gint n_rows; +} EffectPage; + typedef struct { gchar *name; PresetBank bank; @@ -70,8 +77,8 @@ typedef struct { gchar *name; unsigned char family_id; unsigned char product_id; - EffectList *effects; - gint n_effects; + EffectPage *pages; + gint n_pages; Banks *banks; gint n_banks; } Device; diff --git a/gui.c b/gui.c index 010d3b1..2461499 100644 --- a/gui.c +++ b/gui.c @@ -940,8 +940,10 @@ void gui_create(Device *device) GtkWidget *vbox; GtkWidget *hbox; GtkWidget *widget; + GtkWidget *notebook; GtkWidget *sw; /* scrolled window to carry preset treeview */ gint x; + gint i; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "gdigi"); @@ -961,8 +963,8 @@ void gui_create(Device *device) widget = create_preset_tree(device); gtk_container_add(GTK_CONTAINER(sw), widget); - vbox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 2); + notebook = gtk_notebook_new(); + gtk_box_pack_start(GTK_BOX(hbox), notebook, TRUE, TRUE, 2); knob_anim = gtk_knob_animation_new_from_inline(knob_pixbuf); @@ -971,13 +973,23 @@ void gui_create(Device *device) NULL, /* key destroy func */ (GDestroyNotify) widget_tree_elem_free); - for (x = 0; xn_effects; x++) { - if ((x % ((device->n_effects+1)/2)) == 0) { - hbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 2); + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), device->n_pages > 1 ? TRUE : FALSE); + + for (i = 0; in_pages; i++) { + GtkWidget *label = NULL; + vbox = gtk_vbox_new(FALSE, 0); + label = gtk_label_new(device->pages[i].name); + + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label); + + for (x = 0; xpages[i].n_effects; x++) { + if ((x % ((device->pages[i].n_effects+1)/device->pages[i].n_rows)) == 0) { + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 2); + } + widget = create_vbox(device->pages[i].effects[x].effect, device->pages[i].effects[x].amt, device->pages[i].effects[x].label); + gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 2); } - widget = create_vbox(device->effects[x].effect, device->effects[x].amt, device->effects[x].label); - gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 2); } apply_current_preset();