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 + -
显示快捷键?