diff src/Input/amidi-plug/i_configure-dummy.c @ 0:13389e613d67 trunk

[svn] - initial import of audacious-plugins tree (lots to do)
author nenolod
date Mon, 18 Sep 2006 01:11:49 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Input/amidi-plug/i_configure-dummy.c	Mon Sep 18 01:11:49 2006 -0700
@@ -0,0 +1,410 @@
+/*
+*
+* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2006
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but
+* WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+* General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program; if not, write to the Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+*
+*/
+
+
+#include "i_configure-dummy.h"
+#include "backend-dummy/b-dummy-config.h"
+#include "backend-dummy/backend-dummy-icon.xpm"
+
+
+void i_configure_ev_logfile_toggle( GtkToggleButton *diflogfiles_radiobt , gpointer logfile_table )
+{
+  GList * tc_list = gtk_container_get_children( GTK_CONTAINER(logfile_table) );
+  if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(diflogfiles_radiobt) ) )
+  {
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,0) , TRUE ); /* dir bbutton */
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,1) , TRUE ); /* dir entry */
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,2) , TRUE ); /* dir label */
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,4) , FALSE ); /* file bbutton */
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,5) , FALSE ); /* file entry */
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,6) , FALSE ); /* file label */
+  }
+  else
+  {
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,0) , FALSE ); /* dir bbutton */
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,1) , FALSE ); /* dir entry */
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,2) , FALSE ); /* dir label */
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,4) , TRUE ); /* file bbutton */
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,5) , TRUE ); /* file entry */
+    gtk_widget_set_sensitive( g_list_nth_data(tc_list,6) , TRUE ); /* file label */
+  }
+}
+
+
+void i_configure_ev_enablelog_toggle( GtkToggleButton *logwithfile_radiobt , gpointer logfile_table )
+{
+  if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(logwithfile_radiobt) ) )
+  {
+    gtk_widget_set_sensitive( GTK_WIDGET(logfile_table) , TRUE );
+    i_configure_ev_logfile_toggle( g_object_get_data(G_OBJECT(logfile_table),"lfstyle-opt2") , logfile_table );
+  }
+  else
+  {
+    gtk_widget_set_sensitive( GTK_WIDGET(logfile_table) , FALSE );
+  }
+}
+
+
+void i_configure_ev_enablelog_commit( gpointer enablelog_radiobt )
+{
+  amidiplug_cfg_dumm_t * dummcfg = amidiplug_cfg_backend->dumm;
+  GSList *group = gtk_radio_button_get_group( GTK_RADIO_BUTTON(enablelog_radiobt) );
+  while ( group != NULL )
+  {
+    if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(group->data) ) )
+    {
+      dummcfg->dumm_logger_enable = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(group->data),"val"));
+      group = NULL; /* do not iterate further */
+    }
+    else
+      group = group->next;
+  }
+}
+
+void i_configure_ev_lfstyle_commit( gpointer lfstyle_radiobt )
+{
+  amidiplug_cfg_dumm_t * dummcfg = amidiplug_cfg_backend->dumm;
+  GSList *group = gtk_radio_button_get_group( GTK_RADIO_BUTTON(lfstyle_radiobt) );
+  while ( group != NULL )
+  {
+    if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(group->data) ) )
+    {
+      dummcfg->dumm_logger_lfstyle = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(group->data),"val"));
+      group = NULL; /* do not iterate further */
+    }
+    else
+      group = group->next;
+  }
+}
+
+
+void i_configure_ev_plspeed_commit( gpointer plspeed_normal_radiobt )
+{
+  amidiplug_cfg_dumm_t * dummcfg = amidiplug_cfg_backend->dumm;
+  if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(plspeed_normal_radiobt) ) )
+    dummcfg->dumm_playback_speed = 0;
+  else
+    dummcfg->dumm_playback_speed = 1;
+}
+
+
+void i_configure_ev_logfname_commit( gpointer logfname_entry )
+{
+  amidiplug_cfg_dumm_t * dummcfg = amidiplug_cfg_backend->dumm;
+  g_free( dummcfg->dumm_logger_logfile ); /* free previous */
+  dummcfg->dumm_logger_logfile = g_strdup( gtk_entry_get_text(GTK_ENTRY(logfname_entry)) );
+}
+
+
+void i_configure_ev_logdir_commit( gpointer logdir_entry )
+{
+  amidiplug_cfg_dumm_t * dummcfg = amidiplug_cfg_backend->dumm;
+  g_free( dummcfg->dumm_logger_logdir ); /* free previous */
+  dummcfg->dumm_logger_logdir = g_strdup( gtk_entry_get_text(GTK_ENTRY(logdir_entry)) );
+}
+
+
+void i_configure_gui_tab_dumm( GtkWidget * dumm_page_alignment ,
+                               gpointer backend_list_p ,
+                               gpointer commit_button )
+{
+  GtkWidget *dumm_page_vbox;
+  GtkWidget *title_widget;
+  GtkWidget *content_vbox;
+  GSList * backend_list = backend_list_p;
+  gboolean dumm_module_ok = FALSE;
+  gchar * dumm_module_pathfilename;
+
+  dumm_page_vbox = gtk_vbox_new( FALSE , 0 );
+
+  title_widget = i_configure_gui_draw_title( _("DUMMY BACKEND CONFIGURATION") );
+  gtk_box_pack_start( GTK_BOX(dumm_page_vbox) , title_widget , FALSE , FALSE , 2 );
+
+  content_vbox = gtk_vbox_new( FALSE , 2 );
+
+  /* check if the dummy module is available */
+  while ( backend_list != NULL )
+  {
+    amidiplug_sequencer_backend_name_t * mn = backend_list->data;
+    if ( !strcmp( mn->name , "dummy" ) )
+    {
+      dumm_module_ok = TRUE;
+      dumm_module_pathfilename = mn->filename;
+      break;
+    }
+    backend_list = backend_list->next;
+  }
+
+  if ( dumm_module_ok )
+  {
+    GtkWidget *midilogger_frame, *midilogger_vbox;
+    GtkWidget *midilogger_enablelog_vbox, *midilogger_enablelog_option[4];
+    GtkWidget *midilogger_logfile_frame, *midilogger_logfile_table, *midilogger_logfile_option[3];
+    GtkWidget *midilogger_logfile_logdir_labelalign, *midilogger_logfile_logdir_label;
+    GtkWidget *midilogger_logfile_logdir_entry, *midilogger_logfile_logdir_bbutton;
+    GtkWidget *midilogger_logfile_logfname_labelalign, *midilogger_logfile_logfname_label;
+    GtkWidget *midilogger_logfile_logfname_entry, *midilogger_logfile_logfname_bbutton;
+    GtkWidget *plspeed_frame, *plspeed_vbox, *plspeed_option[2];
+    GtkTooltips *tips;
+
+    amidiplug_cfg_dumm_t * dummcfg = amidiplug_cfg_backend->dumm;
+
+    tips = gtk_tooltips_new();
+    g_object_set_data_full( G_OBJECT(dumm_page_alignment) , "tt" , tips , g_object_unref );
+
+    /* midilogger settings */
+    midilogger_frame = gtk_frame_new( _("MIDI logger settings") );
+    midilogger_vbox = gtk_vbox_new( FALSE , 4 );
+    gtk_container_set_border_width( GTK_CONTAINER(midilogger_vbox), 4 );
+    gtk_container_add( GTK_CONTAINER(midilogger_frame) , midilogger_vbox );
+
+    /* midilogger settings - enable/disable */
+    midilogger_enablelog_vbox = gtk_vbox_new( FALSE , 0 );
+    midilogger_enablelog_option[0] = gtk_radio_button_new_with_label( NULL ,
+                                       _("Do not log anything") );
+    g_object_set_data( G_OBJECT(midilogger_enablelog_option[0]) , "val" , GINT_TO_POINTER(0) );
+    midilogger_enablelog_option[1] = gtk_radio_button_new_with_label_from_widget(
+                                       GTK_RADIO_BUTTON(midilogger_enablelog_option[0]) ,
+                                       _("Log MIDI events to standard output") );
+    g_object_set_data( G_OBJECT(midilogger_enablelog_option[1]) , "val" , GINT_TO_POINTER(1) );
+    midilogger_enablelog_option[2] = gtk_radio_button_new_with_label_from_widget(
+                                       GTK_RADIO_BUTTON(midilogger_enablelog_option[0]) ,
+                                       _("Log MIDI events to standard error") );
+    g_object_set_data( G_OBJECT(midilogger_enablelog_option[2]) , "val" , GINT_TO_POINTER(2) );
+    midilogger_enablelog_option[3] = gtk_radio_button_new_with_label_from_widget(
+                                       GTK_RADIO_BUTTON(midilogger_enablelog_option[0]) ,
+                                       _("Log MIDI events to file") );
+    g_object_set_data( G_OBJECT(midilogger_enablelog_option[3]) , "val" , GINT_TO_POINTER(3) );
+    gtk_box_pack_start( GTK_BOX(midilogger_enablelog_vbox) , midilogger_enablelog_option[0] , FALSE , FALSE , 0 );
+    gtk_box_pack_start( GTK_BOX(midilogger_enablelog_vbox) , midilogger_enablelog_option[1] , FALSE , FALSE , 0 );
+    gtk_box_pack_start( GTK_BOX(midilogger_enablelog_vbox) , midilogger_enablelog_option[2] , FALSE , FALSE , 0 );
+    gtk_box_pack_start( GTK_BOX(midilogger_enablelog_vbox) , midilogger_enablelog_option[3] , FALSE , FALSE , 0 );
+    gtk_box_pack_start( GTK_BOX(midilogger_vbox) , midilogger_enablelog_vbox , FALSE , FALSE , 0 );
+
+    /* midilogger settings - logfile options */
+    midilogger_logfile_frame = gtk_frame_new( _("Logfile settings") );
+    midilogger_logfile_table = gtk_table_new( 5 , 3 , FALSE );
+    gtk_table_set_col_spacings( GTK_TABLE(midilogger_logfile_table) , 2 );
+    gtk_container_set_border_width( GTK_CONTAINER(midilogger_logfile_table), 4 );
+    gtk_container_add( GTK_CONTAINER(midilogger_logfile_frame) , midilogger_logfile_table );
+    gtk_box_pack_start( GTK_BOX(midilogger_vbox) , midilogger_logfile_frame , FALSE , FALSE , 0 );
+    midilogger_logfile_option[0] = gtk_radio_button_new_with_label( NULL ,
+                                     _("Use a single file to log everything (rewrite)") );
+    g_object_set_data( G_OBJECT(midilogger_logfile_option[0]) , "val" , GINT_TO_POINTER(0) );
+    midilogger_logfile_option[1] = gtk_radio_button_new_with_label_from_widget(
+                                     GTK_RADIO_BUTTON(midilogger_logfile_option[0]) ,
+                                     _("Use a single file to log everything (append)") );
+    g_object_set_data( G_OBJECT(midilogger_logfile_option[1]) , "val" , GINT_TO_POINTER(1) );
+    midilogger_logfile_option[2] = gtk_radio_button_new_with_label_from_widget(
+                                     GTK_RADIO_BUTTON(midilogger_logfile_option[0]) ,
+                                     _("Use a different logfile for each MIDI file") );
+    g_object_set_data( G_OBJECT(midilogger_logfile_option[2]) , "val" , GINT_TO_POINTER(2) );
+    g_object_set_data( G_OBJECT(midilogger_logfile_table) , "lfstyle-opt2" , midilogger_logfile_option[2] );
+    /* midilogger settings - logfile options - dir entry box */
+    midilogger_logfile_logdir_labelalign = gtk_alignment_new( 0.5 , 0.5 , 1 , 1 );
+    gtk_alignment_set_padding( GTK_ALIGNMENT(midilogger_logfile_logdir_labelalign) , 0 , 0 , 15 , 0 );
+    midilogger_logfile_logdir_label = gtk_label_new( _("\302\273 Log dir:") );
+    gtk_container_add( GTK_CONTAINER(midilogger_logfile_logdir_labelalign) , midilogger_logfile_logdir_label );
+    midilogger_logfile_logdir_entry = gtk_entry_new();
+    gtk_entry_set_text( GTK_ENTRY(midilogger_logfile_logdir_entry) , dummcfg->dumm_logger_logdir );
+    g_object_set_data( G_OBJECT(midilogger_logfile_logdir_entry) , "fc-act",
+                       GINT_TO_POINTER(GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) );
+    midilogger_logfile_logdir_bbutton = gtk_button_new_with_label( _("browse") );
+    g_signal_connect_swapped( G_OBJECT(midilogger_logfile_logdir_bbutton) , "clicked" ,
+                              G_CALLBACK(i_configure_ev_browse_for_entry) , midilogger_logfile_logdir_entry );
+    /* midilogger settings - logfile options - file entry box */
+    midilogger_logfile_logfname_labelalign = gtk_alignment_new( 0.5 , 0.5 , 1 , 1 );
+    gtk_alignment_set_padding( GTK_ALIGNMENT(midilogger_logfile_logfname_labelalign) , 0 , 0 , 15 , 0 );
+    midilogger_logfile_logfname_label = gtk_label_new( _("\302\273 Log file:") );
+    gtk_container_add( GTK_CONTAINER(midilogger_logfile_logfname_labelalign) , midilogger_logfile_logfname_label );
+    midilogger_logfile_logfname_entry = gtk_entry_new();
+    gtk_entry_set_text( GTK_ENTRY(midilogger_logfile_logfname_entry) , dummcfg->dumm_logger_logfile );
+    g_object_set_data( G_OBJECT(midilogger_logfile_logfname_entry) , "fc-act",
+                       GINT_TO_POINTER(GTK_FILE_CHOOSER_ACTION_OPEN) );
+    midilogger_logfile_logfname_bbutton = gtk_button_new_with_label( _("browse") );
+    g_signal_connect_swapped( G_OBJECT(midilogger_logfile_logfname_bbutton) , "clicked" ,
+                              G_CALLBACK(i_configure_ev_browse_for_entry) , midilogger_logfile_logfname_entry );
+    /* midilogger settings - logfile options - pack everything in table */
+    gtk_table_attach( GTK_TABLE(midilogger_logfile_table) , midilogger_logfile_option[0] ,
+                      0 , 3 , 0 , 1 , GTK_EXPAND | GTK_FILL , 0 , 0 , 0 );
+    gtk_table_attach( GTK_TABLE(midilogger_logfile_table) , midilogger_logfile_option[1] ,
+                      0 , 3 , 1 , 2 , GTK_EXPAND | GTK_FILL , 0 , 0 , 0 );
+    gtk_table_attach( GTK_TABLE(midilogger_logfile_table) , midilogger_logfile_logfname_labelalign ,
+                      0 , 1 , 2 , 3 , GTK_FILL , 0 , 0 , 0 );
+    gtk_table_attach( GTK_TABLE(midilogger_logfile_table) , midilogger_logfile_logfname_entry ,
+                      1 , 2 , 2 , 3 , GTK_EXPAND | GTK_FILL , 0 , 0 , 0 );
+    gtk_table_attach( GTK_TABLE(midilogger_logfile_table) , midilogger_logfile_logfname_bbutton ,
+                      2 , 3 , 2 , 3 , GTK_FILL , 0 , 0 , 0 );
+    gtk_table_attach( GTK_TABLE(midilogger_logfile_table) , midilogger_logfile_option[2] ,
+                      0 , 3 , 3 , 4 , GTK_EXPAND | GTK_FILL , 0 , 0 , 0 );
+    gtk_table_attach( GTK_TABLE(midilogger_logfile_table) , midilogger_logfile_logdir_labelalign ,
+                      0 , 1 , 4 , 5 , GTK_FILL , 0 , 0 , 0 );
+    gtk_table_attach( GTK_TABLE(midilogger_logfile_table) , midilogger_logfile_logdir_entry ,
+                      1 , 2 , 4 , 5 , GTK_EXPAND | GTK_FILL , 0 , 0 , 0 );
+    gtk_table_attach( GTK_TABLE(midilogger_logfile_table) , midilogger_logfile_logdir_bbutton ,
+                      2 , 3 , 4 , 5 , GTK_FILL , 0 , 0 , 0 );
+
+    gtk_box_pack_start( GTK_BOX(content_vbox) , midilogger_frame , FALSE , FALSE , 0 );
+
+    /* playback speed settings */
+    plspeed_frame = gtk_frame_new( _("Playback speed") );
+    plspeed_vbox = gtk_vbox_new( FALSE , 2 );
+    gtk_container_set_border_width( GTK_CONTAINER(plspeed_vbox), 4 );
+    gtk_container_add( GTK_CONTAINER(plspeed_frame) , plspeed_vbox );
+    plspeed_option[0] = gtk_radio_button_new_with_label( NULL ,
+                          _("Play at normal speed") );
+    plspeed_option[1] = gtk_radio_button_new_with_label_from_widget(
+                          GTK_RADIO_BUTTON(plspeed_option[0]) ,
+                          _("Play as fast as possible") );
+    gtk_box_pack_start( GTK_BOX(plspeed_vbox) , plspeed_option[0] , FALSE , FALSE , 0 );
+    gtk_box_pack_start( GTK_BOX(plspeed_vbox) , plspeed_option[1] , FALSE , FALSE , 0 );
+
+    gtk_box_pack_start( GTK_BOX(content_vbox) , plspeed_frame , FALSE , FALSE , 0 );
+
+    /* set values */
+    /* we check this before connecting signals, it would be a useless work to
+       set/unset widget sensitivity at this time; in fact everything in the table is
+       going to lose sensitivity anyway, until i_configure_ev_enablelog_toggle is called */
+    switch ( dummcfg->dumm_logger_lfstyle )
+    {
+      case 1: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(midilogger_logfile_option[1]) , TRUE ); break;
+      case 2: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(midilogger_logfile_option[2]) , TRUE ); break;
+      case 0:
+      default: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(midilogger_logfile_option[0]) , TRUE ); break;
+    }
+    gtk_widget_set_sensitive( GTK_WIDGET(midilogger_logfile_table) , FALSE );
+    g_signal_connect( G_OBJECT(midilogger_enablelog_option[3]) , "toggled" ,
+                      G_CALLBACK(i_configure_ev_enablelog_toggle) , midilogger_logfile_table );
+    g_signal_connect( G_OBJECT(midilogger_logfile_option[2]) , "toggled" ,
+                      G_CALLBACK(i_configure_ev_logfile_toggle) , midilogger_logfile_table );
+    switch ( dummcfg->dumm_logger_enable )
+    {
+      case 1: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(midilogger_enablelog_option[1]) , TRUE ); break;
+      case 2: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(midilogger_enablelog_option[2]) , TRUE ); break;
+      case 3: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(midilogger_enablelog_option[3]) , TRUE ); break;
+      case 0:
+      default: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(midilogger_enablelog_option[0]) , TRUE ); break;
+    }
+    switch ( dummcfg->dumm_playback_speed )
+    {
+      case 1: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(plspeed_option[1]) , TRUE ); break;
+      case 0:
+      default: gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(plspeed_option[0]) , TRUE ); break;
+    }
+
+    /* commit events */
+    g_signal_connect_swapped( G_OBJECT(commit_button) , "ap-commit" ,
+                              G_CALLBACK(i_configure_ev_enablelog_commit) , midilogger_enablelog_option[0] );
+    g_signal_connect_swapped( G_OBJECT(commit_button) , "ap-commit" ,
+                              G_CALLBACK(i_configure_ev_lfstyle_commit) , midilogger_logfile_option[0] );
+    g_signal_connect_swapped( G_OBJECT(commit_button) , "ap-commit" ,
+                              G_CALLBACK(i_configure_ev_plspeed_commit) , plspeed_option[0] );
+    g_signal_connect_swapped( G_OBJECT(commit_button) , "ap-commit" ,
+                              G_CALLBACK(i_configure_ev_logfname_commit) , midilogger_logfile_logfname_entry );
+    g_signal_connect_swapped( G_OBJECT(commit_button) , "ap-commit" ,
+                              G_CALLBACK(i_configure_ev_logdir_commit) , midilogger_logfile_logdir_entry );
+
+  }
+  else
+  {
+    /* display "not available" information */
+    GtkWidget * info_label;
+    info_label = gtk_label_new( _("Dummy Backend not loaded or not available") );
+    gtk_box_pack_start( GTK_BOX(dumm_page_vbox) , info_label , FALSE , FALSE , 2 );
+  }
+
+  gtk_box_pack_start( GTK_BOX(dumm_page_vbox) , content_vbox , TRUE , TRUE , 2 );
+  gtk_container_add( GTK_CONTAINER(dumm_page_alignment) , dumm_page_vbox );
+}
+
+
+void i_configure_gui_tablabel_dumm( GtkWidget * dumm_page_alignment ,
+                                  gpointer backend_list_p ,
+                                  gpointer commit_button )
+{
+  GtkWidget *pagelabel_vbox, *pagelabel_image, *pagelabel_label;
+  GdkPixbuf *pagelabel_image_pix;
+  pagelabel_vbox = gtk_vbox_new( FALSE , 1 );
+  pagelabel_image_pix = gdk_pixbuf_new_from_xpm_data( (const gchar **)backend_dummy_icon_xpm );
+  pagelabel_image = gtk_image_new_from_pixbuf( pagelabel_image_pix ); g_object_unref( pagelabel_image_pix );
+  pagelabel_label = gtk_label_new( "" );
+  gtk_label_set_markup( GTK_LABEL(pagelabel_label) , "<span size=\"smaller\">Dummy\nbackend</span>" );
+  gtk_label_set_justify( GTK_LABEL(pagelabel_label) , GTK_JUSTIFY_CENTER );
+  gtk_box_pack_start( GTK_BOX(pagelabel_vbox) , pagelabel_image , FALSE , FALSE , 1 );
+  gtk_box_pack_start( GTK_BOX(pagelabel_vbox) , pagelabel_label , FALSE , FALSE , 1 );
+  gtk_container_add( GTK_CONTAINER(dumm_page_alignment) , pagelabel_vbox );
+  gtk_widget_show_all( dumm_page_alignment );
+  return;
+}
+
+
+void i_configure_cfg_dumm_alloc( void )
+{
+  amidiplug_cfg_dumm_t * dummcfg = g_malloc(sizeof(amidiplug_cfg_dumm_t));
+  amidiplug_cfg_backend->dumm = dummcfg;
+}
+
+
+void i_configure_cfg_dumm_free( void )
+{
+  amidiplug_cfg_dumm_t * dummcfg = amidiplug_cfg_backend->dumm;
+  g_free( dummcfg->dumm_logger_logfile );
+  g_free( dummcfg->dumm_logger_logdir );
+}
+
+
+void i_configure_cfg_dumm_read( pcfg_t * cfgfile )
+{
+  amidiplug_cfg_dumm_t * dummcfg = amidiplug_cfg_backend->dumm;
+  gchar * def_logfile = g_strjoin( "" , g_get_home_dir() , "/amidi-plug.log" , NULL );
+  gchar * def_logdir = (gchar*)g_get_home_dir();
+
+  if (!cfgfile)
+  {
+    /* fluidsynth backend defaults */
+    dummcfg->dumm_logger_enable = 0;
+    dummcfg->dumm_logger_lfstyle = 0;
+    dummcfg->dumm_playback_speed = 0;
+    dummcfg->dumm_logger_logfile = g_strdup( def_logfile );
+    dummcfg->dumm_logger_logdir = g_strdup( def_logdir );
+  }
+  else
+  {
+    i_pcfg_read_integer( cfgfile , "dumm" , "dumm_logger_enable" , &dummcfg->dumm_logger_enable , 0 );
+    i_pcfg_read_integer( cfgfile , "dumm" , "dumm_logger_lfstyle" , &dummcfg->dumm_logger_lfstyle , 0 );
+    i_pcfg_read_integer( cfgfile , "dumm" , "dumm_playback_speed" , &dummcfg->dumm_playback_speed , 0 );
+    i_pcfg_read_string( cfgfile , "dumm" , "dumm_logger_logfile" , &dummcfg->dumm_logger_logfile , def_logfile );
+    i_pcfg_read_string( cfgfile , "dumm" , "dumm_logger_logdir" , &dummcfg->dumm_logger_logdir , def_logdir );
+  }
+
+  g_free( def_logfile );
+}
+
+
+void i_configure_cfg_dumm_save( pcfg_t * cfgfile )
+{
+  amidiplug_cfg_dumm_t * dummcfg = amidiplug_cfg_backend->dumm;
+
+  i_pcfg_write_integer( cfgfile , "dumm" , "dumm_logger_enable" , dummcfg->dumm_logger_enable );
+  i_pcfg_write_integer( cfgfile , "dumm" , "dumm_logger_lfstyle" , dummcfg->dumm_logger_lfstyle );
+  i_pcfg_write_integer( cfgfile , "dumm" , "dumm_playback_speed" , dummcfg->dumm_playback_speed );
+  i_pcfg_write_string( cfgfile , "dumm" , "dumm_logger_logfile" , dummcfg->dumm_logger_logfile );
+  i_pcfg_write_string( cfgfile , "dumm" , "dumm_logger_logdir" , dummcfg->dumm_logger_logdir );
+}