uif_pref.c

来自「A GTK sound font editor. Sound font file」· C语言 代码 · 共 907 行 · 第 1/2 页

C
907
字号
  if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widg)))    {      widg = gtk_object_get_data (GTK_OBJECT (prefwin), "SPBvkclient");      i = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widg));      widg = gtk_object_get_data (GTK_OBJECT (prefwin), "SPBvkport");      i2 = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widg));    }  else    {      i = 0;      i2 = 0;    }  val.v_int = i;  smurfcfg_set_val (SMURFCFG_SEQ_ALSACLIENT, &val);  val.v_int = i2;  smurfcfg_set_val (SMURFCFG_SEQ_ALSAPORT, &val);  widg = gtk_object_get_data (GTK_OBJECT (prefwin), "OPmidi");  UTIL_OPMENU_INDEX (i, widg);  if (i == 0)    val.v_string = "AUTO";  else    val.v_string = midi_drivers[i - 1].name;  smurfcfg_set_val (SMURFCFG_MIDI_DRIVER, &val);  widg = gtk_object_get_data (GTK_OBJECT (prefwin), "CHKmtinauto");  if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widg)))    {      widg = gtk_object_get_data (GTK_OBJECT (prefwin), "SPBmtinclient");      i = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widg));      widg = gtk_object_get_data (GTK_OBJECT (prefwin), "SPBmtinport");      i2 = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widg));    }  else    {      i = 0;      i2 = 0;    }  val.v_int = i;  smurfcfg_set_val (SMURFCFG_MIDI_ALSA_INCLIENT, &val);  val.v_int = i2;  smurfcfg_set_val (SMURFCFG_MIDI_ALSA_INPORT, &val);  widg = gtk_object_get_data (GTK_OBJECT (prefwin), "CHKmtoutauto");  if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widg)))    {      widg = gtk_object_get_data (GTK_OBJECT (prefwin), "SPBmtoutclient");      i = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widg));      widg = gtk_object_get_data (GTK_OBJECT (prefwin), "SPBmtoutport");      i2 = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widg));    }  else    {      i = 0;      i2 = 0;    }  val.v_int = i;  smurfcfg_set_val (SMURFCFG_MIDI_ALSA_OUTCLIENT, &val);  val.v_int = i2;  smurfcfg_set_val (SMURFCFG_MIDI_ALSA_OUTPORT, &val);  widg = gtk_object_get_data (GTK_OBJECT (prefwin), "SPBmtcard");  val.v_int = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widg));  smurfcfg_set_val (SMURFCFG_MIDI_ALSACARD, &val);  widg = gtk_object_get_data (GTK_OBJECT (prefwin), "SPBmtdev");  val.v_int = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widg));  smurfcfg_set_val (SMURFCFG_MIDI_ALSADEVICE, &val);  /* copy temp keytable to real one */  for (i = 0; i < UIPIANO_TOTAL_NUMKEYS; i++)    uipiano_keytable[i] = pref_temp_keytable[i];  pref_save_piano_keytable ();  gtk_widget_destroy (prefwin);}static voidpref_save_piano_keytable (void){  gint i;  GTokenValue val;  /* check if piano key map is the default */  for (i = 0; i < UIPIANO_TOTAL_NUMKEYS; i++)    if (uipiano_keytable[i] != uipiano_default_keytable[i])      break;  if (i == UIPIANO_TOTAL_NUMKEYS)  /* same as default? */    {      val.v_string = "";  /* write blank strings */      smurfcfg_set_val (SMURFCFG_PIANO_LOWOCTKEYS, &val);      smurfcfg_set_val (SMURFCFG_PIANO_HIOCTKEYS, &val);      return;    }  /* keytable is not the same as the default one */  val.v_string = uipiano_encode_smurfcfg_octkeys (uipiano_keytable,						  UIPIANO_LOW_NUMKEYS);  if (val.v_string)    {      smurfcfg_set_val (SMURFCFG_PIANO_LOWOCTKEYS, &val);      g_free (val.v_string);    }  val.v_string = uipiano_encode_smurfcfg_octkeys (&uipiano_keytable						  [UIPIANO_LOW_NUMKEYS],						  UIPIANO_HI_NUMKEYS);  if (val.v_string)    {      smurfcfg_set_val (SMURFCFG_PIANO_HIOCTKEYS, &val);      g_free (val.v_string);    }}/* (glade) pop browse dialog for default sfont and sample paths */voidpref_cb_path_browse_clicked (GtkWidget * btn, GtkWidget * entry){  GtkWidget *filesel;  gchar *s;#if 0  dirsel = dirbrowse_create (_("Choose directory"));  gtk_object_set_data (GTK_OBJECT (dirsel), "entry", entry);#endif  filesel = gtk_file_selection_new (_("Choose directory"));  gtk_object_set_data (GTK_OBJECT (filesel), "entry", entry);  s = gtk_entry_get_text (GTK_ENTRY (entry));  if (strlen (s))    gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesel), s);  gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->ok_button),    "clicked", (GtkSignalFunc) pref_cb_path_browse_ok, filesel);  gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->      cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy,    GTK_OBJECT (filesel));  gtk_widget_show (filesel);}/* user says Okay to selected path in file dialog */static voidpref_cb_path_browse_ok (GtkWidget * btn, GtkWidget * filesel){  GtkWidget *entry;  gchar *s;  s = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel));  entry = gtk_object_get_data (GTK_OBJECT (filesel), "entry");  gtk_entry_set_text (GTK_ENTRY (entry), s);  gtk_widget_destroy (filesel);}/* (glade) callback for sample restraint option */voidpref_cb_sam_sfspec_toggled (GtkWidget * btn, GtkWidget * prefwin){  GtkWidget *widg;  gboolean actv;  actv = !GTK_TOGGLE_BUTTON (btn)->active;  widg = gtk_object_get_data (GTK_OBJECT (prefwin), "SPBminloop");  gtk_widget_set_sensitive (widg, actv);  widg = gtk_object_get_data (GTK_OBJECT (prefwin), "SPBminpad");  gtk_widget_set_sensitive (widg, actv);}/* callback for virtual keyboard option menu, to hide/show the correct   parameter widgets for the menu option selected */static voidpref_cb_vkeyb_selection_done (GtkWidget * menu, GtkWidget * prefwin){  GtkWidget *widg;  gint i, index;  gchar *s;  widg = gtk_menu_get_active (GTK_MENU (menu));  index = g_list_index (GTK_MENU_SHELL (menu)->children, widg);  index--;  for (i = 0; i < SEQ_COUNT; i++)    {      s = g_strconcat ("vk", seq_drivers[i].name, NULL);      widg = gtk_object_get_data (GTK_OBJECT (prefwin), s);      g_free (s);      if (widg)	{	  if (i == index)	    gtk_widget_show (widg);	  else	    gtk_widget_hide (widg);	}    }}/* for "auto" toggle buttons in driver preferences, sets sensitivity of a   list of widgets */static voidpref_toggle_sensitive_widgets (GtkWidget * btn, GtkWidget * prefwin,			       gchar **names){  GtkWidget *widg;  gboolean actv;  actv = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (btn));  while (*names)    {      widg = gtk_object_get_data (GTK_OBJECT (prefwin), *names);      gtk_widget_set_sensitive (GTK_WIDGET (widg), !actv);      names++;    }}voidpref_cb_vkeyb_auto_toggled (GtkWidget * btn, GtkWidget * prefwin){  gchar *names[] = { "LBLvkclient", "SPBvkclient", "LBLvkport", "SPBvkport",		     "BTNvkselect", NULL };  pref_toggle_sensitive_widgets (btn, prefwin, names);}/* callback for midi thru option menu, to hide/show the correct parameter   widgets for the menu option selected */static voidpref_cb_mthru_selection_done (GtkWidget * menu, GtkWidget * prefwin){  GtkWidget *widg;  gint i, index;  gchar *s;  widg = gtk_menu_get_active (GTK_MENU (menu));  index = g_list_index (GTK_MENU_SHELL (menu)->children, widg);  index--;  for (i = 0; i < MIDI_COUNT; i++)    {      s = g_strconcat ("mt", midi_drivers[i].name, NULL);      widg = gtk_object_get_data (GTK_OBJECT (prefwin), s);      g_free (s);      if (widg)	{	  if (i == index)	    gtk_widget_show (widg);	  else	    gtk_widget_hide (widg);	}    }}voidpref_cb_mthru_inauto_toggled (GtkWidget * btn, GtkWidget * prefwin){  gchar *names[] = { "SPBmtinclient", "SPBmtinport", "BTNmtinselect", NULL };  pref_toggle_sensitive_widgets (btn, prefwin, names);}voidpref_cb_mthru_outauto_toggled (GtkWidget * btn, GtkWidget * prefwin){  gchar *names[] ={ "SPBmtoutclient", "SPBmtoutport", "BTNmtoutselect", NULL };  pref_toggle_sensitive_widgets (btn, prefwin, names);}voidpref_cb_piano_key_change_octave (GtkWidget * radbtn, GtkWidget * prefwin){  GtkWidget *btn, *clist;  btn = gtk_object_get_data (GTK_OBJECT (prefwin), "RADlowoct");  clist = gtk_object_get_data (GTK_OBJECT (prefwin), "CLSTkeys");  pref_load_piano_key_clist (clist,			     gtk_toggle_button_get_active			     (GTK_TOGGLE_BUTTON (btn)));}static voidpref_load_piano_key_clist (GtkWidget * clist, gboolean lowoct){  gint i, c;  guint *keyp;  gchar *coltxt[2];  gchar note[5];  if (lowoct)    {      c = UIPIANO_LOW_NUMKEYS;      keyp = pref_temp_keytable;    }  else    {      c = UIPIANO_HI_NUMKEYS;      keyp = &pref_temp_keytable[UIPIANO_LOW_NUMKEYS];    }  gtk_clist_clear (GTK_CLIST (clist));  coltxt[0] = note;  for (i = 0; i < c; i++)    {      sprintf (note, "%s-%d", keynames[i % 12], i / 12);      if (!(coltxt[1] = gdk_keyval_name (*(keyp++))))	coltxt[1] = _("INVALID");      gtk_clist_append (GTK_CLIST (clist), coltxt);    }  gtk_object_set_data (GTK_OBJECT (clist), "lowoct", GINT_TO_POINTER (lowoct));}static voidpref_update_keycapture_msg (GtkWidget *prefwin){  GtkWidget *lbl;  gchar *s;  lbl = gtk_object_get_data (GTK_OBJECT (prefwin), "LBLkeymsg");  if (pref_keycapture)    s = _("Press a key, click list to cancel");  else    s = "";  gtk_label_set_text (GTK_LABEL (lbl), s);}gbooleanpref_cb_key_pressed (GtkWidget *prefwin, GdkEventKey *event){  GtkWidget *clist;  gint keyndx;  gint lowoct;  gchar *keystr;  if (!pref_keycapture)    return (FALSE);  clist = gtk_object_get_data (GTK_OBJECT (prefwin), "CLSTkeys");  if (!GTK_CLIST (clist)->selection)    return (FALSE);  keyndx = GPOINTER_TO_UINT (GTK_CLIST (clist)->selection->data);  lowoct = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (clist),						 "lowoct"));  if ((lowoct && keyndx >= UIPIANO_LOW_NUMKEYS)      || (!lowoct && keyndx >= UIPIANO_HI_NUMKEYS))    return (FALSE);  keystr = gdk_keyval_name (event->keyval);  if (!keystr) return (FALSE);  pref_temp_keytable[keyndx + (lowoct ? 0 : UIPIANO_LOW_NUMKEYS)]    = event->keyval;  gtk_clist_set_text (GTK_CLIST (clist), keyndx, 1, keystr);  if (pref_change_all_keys && (++keyndx < (lowoct ? UIPIANO_LOW_NUMKEYS :					   UIPIANO_HI_NUMKEYS)))    {      gtk_clist_moveto (GTK_CLIST (clist), keyndx, 0, 0.5, 0.0);      gtk_clist_select_row (GTK_CLIST (clist), keyndx, 0);      return (FALSE);    }  else if (pref_change_all_keys)    pref_change_all_keys = FALSE;  pref_keycapture = FALSE;  pref_update_keycapture_msg (prefwin);  return (FALSE);}voidpref_cb_keymap_change_clicked (GtkWidget *btn, GtkWidget *prefwin){  GtkWidget *clist;  guint keyndx;  gint lowoct;  clist = gtk_object_get_data (GTK_OBJECT (prefwin), "CLSTkeys");  if (!GTK_CLIST (clist)->selection)   /* an item must be selected */    return;  keyndx = GPOINTER_TO_UINT (GTK_CLIST (clist)->selection->data);  lowoct = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (clist),						 "lowoct"));  if ((lowoct && keyndx >= UIPIANO_LOW_NUMKEYS)      || (!lowoct && keyndx >= UIPIANO_HI_NUMKEYS))    return;  pref_keycapture = TRUE;  pref_update_keycapture_msg (prefwin);}voidpref_cb_keymap_change_all_clicked (GtkWidget *btn, GtkWidget *prefwin){  GtkWidget *clist;  clist = gtk_object_get_data (GTK_OBJECT (prefwin), "CLSTkeys");  gtk_clist_select_row (GTK_CLIST (clist), 0, 0);  pref_change_all_keys = TRUE;  pref_cb_keymap_change_clicked (btn, prefwin);}gbooleanpref_cb_pianokey_clist_event (GtkWidget *widget, GdkEvent *event,			      GtkWidget *prefwin){  if (!pref_keycapture)    return (FALSE);  switch (event->type)    {    case GDK_MOTION_NOTIFY:    case GDK_EXPOSE:      /* do nothing */      break;    default:      pref_keycapture = FALSE;      pref_update_keycapture_msg (prefwin);      break;    }  return (FALSE);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?