diff options
author | 2014-02-13 21:46:36 +0100 | |
---|---|---|
committer | 2014-02-13 21:46:36 +0100 | |
commit | 7a6f3f9e8b016c4c2b0fd2a5e30e8850465e3742 (patch) | |
tree | 6e6adffa1fb595574ddf2e95b88a590c9d9ef84a /plugins/gtkui/widgets.c | |
parent | d0b409c2a46e54f8c600377eb5fbee31a7c070da (diff) |
gtkui, sid, gme: added widget controlling chiptune voices
Diffstat (limited to 'plugins/gtkui/widgets.c')
-rw-r--r-- | plugins/gtkui/widgets.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c index ea41174b..8e12e9bd 100644 --- a/plugins/gtkui/widgets.c +++ b/plugins/gtkui/widgets.c @@ -212,6 +212,11 @@ typedef struct { GtkWidget *volumebar; } w_volumebar_t; +typedef struct { + ddb_gtkui_widget_t base; + GtkWidget *voices[8]; +} w_ctvoices_t; + static int design_mode; static ddb_gtkui_widget_t *rootwidget; @@ -3674,3 +3679,42 @@ w_volumebar_create (void) { w_override_signals (w->base.widget, w); return (ddb_gtkui_widget_t*)w; } + +// chiptune voice ctl +static void +on_voice_toggled (GtkToggleButton *togglebutton, gpointer user_data) { + w_ctvoices_t *w = user_data; + int voices = 0; + for (int i = 0; i < 8; i++) { + int active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w->voices[i])); + voices |= active << i; + } + deadbeef->conf_set_int ("chip.voices", voices); + deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0); +} + +ddb_gtkui_widget_t * +w_ctvoices_create (void) { + w_ctvoices_t *w = malloc (sizeof (w_ctvoices_t)); + memset (w, 0, sizeof (w_ctvoices_t)); + w->base.widget = gtk_event_box_new (); + GtkWidget *hbox = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox); + gtk_container_add (GTK_CONTAINER (w->base.widget), hbox); + + GtkWidget *label = gtk_label_new_with_mnemonic (_("Voices:")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + int voices = deadbeef->conf_get_int ("chip.voices", 0xff); + for (int i = 0; i < 8; i++) { + w->voices[i] = gtk_check_button_new (); + gtk_widget_show (w->voices[i]); + gtk_box_pack_start (GTK_BOX (hbox), w->voices[i], FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w->voices[i]), voices & (1<<i)); + g_signal_connect ((gpointer) w->voices[i], "toggled", G_CALLBACK (on_voice_toggled), w); + } + + w_override_signals (w->base.widget, w); + return (ddb_gtkui_widget_t*)w; +} |