uif_sfgen.c
字号:
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), box, label); /* create vbox for second page */ box = gtk_vbox_new (FALSE, 0); gtk_widget_show (box); /* Vol Envelope frame */ frame = gtk_frame_new (_("Volume Envelope")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 2); box1 = gtk_vbox_new (TRUE, 0); gtk_widget_show (box1); gtk_container_add (GTK_CONTAINER (frame), box1); box2 = gtk_hbox_new (TRUE, 0); gtk_widget_show (box2); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_VolEnvDelay); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_VolEnvAttack); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_VolEnvHold); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); box2 = gtk_hbox_new (TRUE, 0); gtk_widget_show (box2); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_VolEnvDecay); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_VolEnvSustain); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_VolEnvRelease); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); box2 = gtk_hbox_new (TRUE, 0); gtk_widget_show (box2); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_Attenuation); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_Key2VolEnvHold); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_Key2VolEnvDecay); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); /* add the box to the notebook with label */ label = gtk_label_new (_("Vol Envelope")); gtk_widget_show (label); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), box, label); /* create vbox for third page */ box = gtk_vbox_new (FALSE, 0); gtk_widget_show (box); /* Mod Envelope frame */ frame = gtk_frame_new (_("Modulation Envelope")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 2); box1 = gtk_vbox_new (TRUE, 0); gtk_widget_show (box1); gtk_container_add (GTK_CONTAINER (frame), box1); box2 = gtk_hbox_new (TRUE, 0); gtk_widget_show (box2); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModEnvDelay); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModEnvAttack); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModEnvHold); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); box2 = gtk_hbox_new (TRUE, 0); gtk_widget_show (box2); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModEnvDecay); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModEnvSustain); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModEnvRelease); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); box2 = gtk_hbox_new (TRUE, 0); gtk_widget_show (box2); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModEnv2Pitch); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModEnv2FilterFc); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); box2 = gtk_hbox_new (TRUE, 0); gtk_widget_show (box2); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_Key2ModEnvHold); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_Key2ModEnvDecay); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); /* add the box to the notebook with label */ label = gtk_label_new (_("Mod Envelope")); gtk_widget_show (label); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), box, label); /* create vbox for fourth page */ box = gtk_vbox_new (FALSE, 0); gtk_widget_show (box); /* LFO frame */ /* LFO stands for Low Frequency Oscillator */ frame = gtk_frame_new (_("Modulation LFO")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 2); box1 = gtk_vbox_new (TRUE, 0); gtk_widget_show (box1); gtk_container_add (GTK_CONTAINER (frame), box1); box2 = gtk_hbox_new (TRUE, 0); gtk_widget_show (box2); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModLFODelay); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModLFOFreq); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); box2 = gtk_hbox_new (TRUE, 0); gtk_widget_show (box2); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModLFO2Pitch); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModLFO2FilterFc); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_ModLFO2Vol); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); frame = gtk_frame_new (_("Vibrato LFO")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 2); box1 = gtk_vbox_new (TRUE, 0); gtk_widget_show (box1); gtk_container_add (GTK_CONTAINER (frame), box1); box2 = gtk_hbox_new (TRUE, 0); gtk_widget_show (box2); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_VibLFODelay); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_VibLFOFreq); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); ctrl = create_gen_control (Gen_VibLFO2Pitch); gtk_box_pack_start (GTK_BOX (box2), ctrl, TRUE, TRUE, 2); /* add the box to the notebook with label */ label = gtk_label_new (_("LFOs")); gtk_widget_show (label); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), box, label); sfgen_ctrl_notebook = notebook; return (scroll_win);}static voidsfgen_set_view_mode (gint mode){ /* set mode for gen view */ GtkWidget *list; static gchar blank[] = "--"; guint16 genid; gint i, i2; switch (mode) { case GENMODE_INACTIVE: for (i = 0; i < CLIST_LAST; i++) { list = sfgen_clists[i]; for (i2 = 0; i2 < GTK_CLIST (list)->rows; i2++) { gtk_clist_set_text (GTK_CLIST (list), i2, 1, blank); gtk_clist_set_text (GTK_CLIST (list), i2, 2, blank); } } break; case GENMODE_ABS: for (i = 0; i < CLIST_LAST; i++) { list = sfgen_clists[i]; for (i2 = 0; i2 < GTK_CLIST (list)->rows; i2++) { genid = GPOINTER_TO_INT (gtk_clist_get_row_data (GTK_CLIST (list), i2)); /* genconv[].unittxt are constant strings, translate them */ gtk_clist_set_text (GTK_CLIST (list), i2, 1, _(genconv[genparms[genid].unit].unittxt)); gtk_clist_set_text (GTK_CLIST (list), i2, 2, blank); } } break; case GENMODE_OFS: for (i = 0; i < CLIST_LAST; i++) { list = sfgen_clists[i]; for (i2 = 0; i2 < GTK_CLIST (list)->rows; i2++) { genid = GPOINTER_TO_INT (gtk_clist_get_row_data (GTK_CLIST (list), i2)); /* genconv[].ofstxt are constant strings, translate them */ gtk_clist_set_text (GTK_CLIST (list), i2, 1, _(genconv[genparms[genid].unit].ofstxt)); gtk_clist_set_text (GTK_CLIST (list), i2, 2, blank); } } break; }}static voidsfgen_view_update (SFGenAmount * garr){ GtkWidget *list; gchar vbuf[20]; gint i, i2, genid; gboolean absval; absval = (sfgen_mode == GENMODE_ABS); for (i = 0; i < CLIST_LAST; i++) { list = sfgen_clists[i]; for (i2 = 0; i2 < GTK_CLIST (list)->rows; i2++) { genid = GPOINTER_TO_INT (gtk_clist_get_row_data (GTK_CLIST (list), i2)); /* convert the generator value to user units */ gen_sf2userstr (genid, garr[genid], vbuf, absval); gtk_clist_set_text (GTK_CLIST (list), i2, 2, vbuf); } }}static voidsfgen_cb_gen_clist_button_pressed (GtkWidget * btn, gint page){ sfgen_set_win (SFGEN_CTRL); gtk_notebook_set_page (GTK_NOTEBOOK (sfgen_ctrl_notebook), page); /* update gen view/ctrl toggle buttons on toolbar and main menu */ tbar_set_lowpane_togbtn (SFGEN_CTRL); sfmenu_set_lowpane_radio_item (SFGEN_CTRL);}static GtkWidget *create_gen_clist (gchar * title, gint page){ GtkWidget *list; gchar *titles[3]; titles[0] = title; titles[1] = _("unit"); titles[2] = _("value"); list = gtk_clist_new_with_titles (3, titles); gtk_widget_show (GTK_WIDGET (list)); gtk_clist_set_column_width (GTK_CLIST (list), 0, (gint) (85)); gtk_clist_set_column_width (GTK_CLIST (list), 1, (gint) (40)); gtk_clist_set_column_width (GTK_CLIST (list), 2, (gint) (60)); gtk_clist_set_column_justification (GTK_CLIST (list), 1, GTK_JUSTIFY_CENTER); gtk_clist_set_column_justification (GTK_CLIST (list), 2, GTK_JUSTIFY_RIGHT); gtk_clist_set_selection_mode (GTK_CLIST (list), GTK_SELECTION_EXTENDED); gtk_clist_column_titles_passive (GTK_CLIST (list)); gtk_clist_column_title_active (GTK_CLIST (list), 0); gtk_signal_connect (GTK_OBJECT (GTK_CLIST (list)->column[0].button), "clicked", GTK_SIGNAL_FUNC (sfgen_cb_gen_clist_button_pressed), GINT_TO_POINTER (page)); return (list);}static voidadd_gen_citem (guint16 genid, GtkWidget * list){ gint row; gchar *data[] = { NULL, "--", "--" }; /* genparms[].label are constant strings, must be translated by gettext */ data[0] = _(genparms[genid].label); row = gtk_clist_append (GTK_CLIST (list), data); gtk_clist_set_row_data (GTK_CLIST (list), row, GINT_TO_POINTER ((gint) genid));}static GtkWidget *sfgen_view_create (void){ GtkWidget *scroll_win; GtkWidget *box, *box2; GtkWidget *list; scroll_win = gtk_scrolled_window_new (NULL, NULL); gtk_container_border_width (GTK_CONTAINER (scroll_win), 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show (scroll_win); box = gtk_hbox_new (TRUE, 0); gtk_widget_show (GTK_WIDGET (box)); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroll_win), box); box2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (GTK_WIDGET (box2)); sfgen_clists[CLIST_PITCH] = list = create_gen_clist (_("Pitch"), 0); add_gen_citem (Gen_CoarseTune, list); add_gen_citem (Gen_FineTune, list); add_gen_citem (Gen_ScaleTune, list); gtk_box_pack_start (GTK_BOX (box2), list, TRUE, TRUE, 0); sfgen_clists[CLIST_EFFECTS] = list = create_gen_clist (_("Effects"), 0); add_gen_citem (Gen_FilterQ, list); add_gen_citem (Gen_FilterFc, list); add_gen_citem (Gen_ReverbSend, list); add_gen_citem (Gen_ChorusSend, list); add_gen_citem (Gen_Pan, list); gtk_box_pack_start (GTK_BOX (box2), list, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), box2, TRUE, TRUE, 0); sfgen_clists[CLIST_VOLENV] = list = create_gen_clist (_("Vol Envelope"), 1); add_gen_citem (Gen_VolEnvDelay, list); add_gen_citem (Gen_VolEnvAttack, list); add_gen_citem (Gen_VolEnvHold, list); add_gen_citem (Gen_VolEnvDecay, list); add_gen_citem (Gen_VolEnvSustain, list); add_gen_citem (Gen_VolEnvRelease, list); add_gen_citem (Gen_Attenuation, list); add_gen_citem (Gen_Key2VolEnvHold, list); add_gen_citem (Gen_Key2VolEnvDecay, list); gtk_box_pack_start (GTK_BOX (box), list, TRUE, TRUE, 0); sfgen_clists[CLIST_MODENV] = list = create_gen_clist (_("Mod Envelope"), 2); add_gen_citem (Gen_ModEnvDelay, list); add_gen_citem (Gen_ModEnvAttack, list); add_gen_citem (Gen_ModEnvHold, list); add_gen_citem (Gen_ModEnvDecay, list); add_gen_citem (Gen_ModEnvSustain, list); add_gen_citem (Gen_ModEnvRelease, list); add_gen_citem (Gen_ModEnv2Pitch, list); add_gen_citem (Gen_ModEnv2FilterFc, list); add_gen_citem (Gen_Key2ModEnvHold, list); add_gen_citem (Gen_Key2ModEnvDecay, list); gtk_box_pack_start (GTK_BOX (box), list, TRUE, TRUE, 0); box2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (GTK_WIDGET (box2)); sfgen_clists[CLIST_MODLFO] = list = create_gen_clist (_("Mod LFO"), 3); add_gen_citem (Gen_ModLFODelay, list); add_gen_citem (Gen_ModLFOFreq, list); add_gen_citem (Gen_ModLFO2Pitch, list); add_gen_citem (Gen_ModLFO2FilterFc, list); add_gen_citem (Gen_ModLFO2Vol, list); gtk_box_pack_start (GTK_BOX (box2), list, TRUE, TRUE, 0); sfgen_clists[CLIST_VIBLFO] = list = create_gen_clist (_("Vibrato LFO"), 3); add_gen_citem (Gen_VibLFODelay, list); add_gen_citem (Gen_VibLFOFreq, list); add_gen_citem (Gen_VibLFO2Pitch, list); gtk_box_pack_start (GTK_BOX (box2), list, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), box2, TRUE, TRUE, 0); return (scroll_win);}/* toggles active generator window between view/control */voidsfgen_set_win (gint wintype){ GtkWidget *new_win, *old_win; if (wintype == sfgen_actv_win) return; switch (wintype) { case SFGEN_VIEW: new_win = sfgen_view; break; case SFGEN_CTRL: new_win = sfgen_ctrl; break; case SFGEN_SAMVIEW: new_win = samview_win; break; default: return; } switch (sfgen_actv_win) { case SFGEN_VIEW: old_win = sfgen_view; break; case SFGEN_CTRL: old_win = sfgen_ctrl; break; case SFGEN_SAMVIEW: old_win = samview_win; break; } gtk_widget_hide (old_win); gtk_widget_show (new_win); /* if view to switch to is gen view or control then update it */ if (wintype != SFGEN_SAMVIEW && uisf_selected_zone) sfgen_update (uisf_selected_zone); sfgen_actv_win = wintype;}GtkWidget *sfgen_win_create (void){ GtkWidget *box; box = gtk_vbox_new (FALSE, 0); gtk_widget_show (box); sfgen_view = sfgen_view_create (); sfgen_ctrl = sfgen_ctrl_create (); samview_win = samview_create (); gtk_widget_hide (sfgen_ctrl); gtk_widget_hide (samview_win); gtk_box_pack_start (GTK_BOX (box), sfgen_view, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), sfgen_ctrl, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), samview_win, TRUE, TRUE, 0); sfgen_actv_win = SFGEN_VIEW; return (box);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -