summaryrefslogtreecommitdiff
path: root/plugins/gtkui/widgets.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <waker@users.sourceforge.net>2014-02-13 21:46:36 +0100
committerGravatar Alexey Yakovenko <waker@users.sourceforge.net>2014-02-13 21:46:36 +0100
commit7a6f3f9e8b016c4c2b0fd2a5e30e8850465e3742 (patch)
tree6e6adffa1fb595574ddf2e95b88a590c9d9ef84a /plugins/gtkui/widgets.c
parentd0b409c2a46e54f8c600377eb5fbee31a7c070da (diff)
gtkui, sid, gme: added widget controlling chiptune voices
Diffstat (limited to 'plugins/gtkui/widgets.c')
-rw-r--r--plugins/gtkui/widgets.c44
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;
+}