📄 gtk.c
字号:
valuesvisible = TRUE; viewmenuitems[SOUND_MIXER_NRDEVICES] = gtk_check_menu_item_new_with_label(LOCAL_TEXT("Menu")); viewmenuitems[SOUND_MIXER_NRDEVICES + 1] = gtk_check_menu_item_new_with_label(LOCAL_TEXT("Balance")); viewmenuitems[SOUND_MIXER_NRDEVICES + 2] = gtk_check_menu_item_new_with_label(LOCAL_TEXT("Numbers")); gtk_menu_append(GTK_MENU(viewmenu), viewmenuitems[SOUND_MIXER_NRDEVICES]); gtk_menu_append(GTK_MENU(viewmenu), viewmenuitems[SOUND_MIXER_NRDEVICES + 1]); gtk_menu_append(GTK_MENU(viewmenu), viewmenuitems[SOUND_MIXER_NRDEVICES + 2]); gtk_widget_add_accelerator(viewmenuitems[SOUND_MIXER_NRDEVICES], "activate", accel, *LOCAL_TEXT("v"), 0, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator(viewmenuitems[SOUND_MIXER_NRDEVICES + 1], "activate", accel, *LOCAL_TEXT("b"), 0, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator(viewmenuitems[SOUND_MIXER_NRDEVICES + 2], "activate", accel, *LOCAL_TEXT("n"), 0, GTK_ACCEL_VISIBLE); gtk_widget_show(viewmenuitems[SOUND_MIXER_NRDEVICES]); gtk_widget_show(viewmenuitems[SOUND_MIXER_NRDEVICES + 1]); gtk_widget_show(viewmenuitems[SOUND_MIXER_NRDEVICES + 2]); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[SOUND_MIXER_NRDEVICES]), TRUE); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[SOUND_MIXER_NRDEVICES + 1]), TRUE); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[SOUND_MIXER_NRDEVICES + 2]), TRUE); muteallitem = gtk_check_menu_item_new_with_label(LOCAL_TEXT("Mute All")); gtk_menu_append(GTK_MENU(mutemenu), muteallitem);/* XXX The "m" needs to get translated. */ gtk_widget_add_accelerator(muteallitem, "activate", accel, 'm', 0, GTK_ACCEL_VISIBLE); gtk_widget_show(muteallitem); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(muteallitem), FALSE); menubarlabel = gtk_menu_item_new_with_label(LOCAL_TEXT("File")); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menubarlabel), filemenu); gtk_menu_bar_append(GTK_MENU_BAR(menubar), menubarlabel); gtk_widget_show(menubarlabel); menubarlabel = gtk_menu_item_new_with_label(LOCAL_TEXT("View")); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menubarlabel), viewmenu); gtk_menu_bar_append(GTK_MENU_BAR(menubar), menubarlabel); gtk_widget_show(menubarlabel); menubarlabel = gtk_menu_item_new_with_label(LOCAL_TEXT("Mute")); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menubarlabel), mutemenu); gtk_menu_bar_append(GTK_MENU_BAR(menubar), menubarlabel); gtk_widget_show(menubarlabel); gtk_signal_connect(GTK_OBJECT(muteallitem), "activate", GTK_SIGNAL_FUNC(ToggleMuting), NULL); maintable = gtk_table_new(CountChannels(SOUND_MIXER_NRDEVICES) + 2, /* 1 row per mixing channel and two for headings */ 8, /* 8 columns: record/play, "0", "Level", "100", channel names, "L", "balance", and "R" */ FALSE); /* not homogeneous: all cells not same size */ gtk_widget_show(maintable); gtk_container_add(GTK_CONTAINER(mainbox), maintable); style = gtk_widget_get_style(window); for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) { if ((1 << ii) & devmask) { /* Try to read mixer. */ if (SOUND_IOCTL(mixer_fd, MIXER_READ(ii), &tmp) == -1) gtk_exit(EREADMIX); right = tmp >> 8; left = tmp & 0xFF; max = (left > right) ? left : right; /* See rangewidgets example. */ adjustment[ii] = GTK_ADJUSTMENT(gtk_adjustment_new(((right + left) / 2), 0, MAXLEVEL, 1, 1, 0)); if ((1 << ii) & stereodevs) { if (tmp) { balset = (left > right) ? (MAXLEVEL / 2) * right / max : MAXLEVEL - ((MAXLEVEL / 2) * left / max); } else { balset = (MAXLEVEL / 2); } balance[ii] = GTK_ADJUSTMENT(gtk_adjustment_new(balset, 0, MAXLEVEL, 1, 1, 0)); balcallback[ii] = gtk_signal_connect_object(GTK_OBJECT(balance[ii]), "value_changed", GTK_SIGNAL_FUNC(AdjustBalanceGTK), (gpointer) ii); baltracks[ii] = gtk_hscale_new(balance[ii]); gtk_scale_set_value_pos(GTK_SCALE(baltracks[ii]), GTK_POS_RIGHT); gtk_scale_set_digits(GTK_SCALE(baltracks[ii]), 0);#ifdef HAVE_GTK gtk_widget_set_size_request(GTK_WIDGET (baltracks[ii]), 84, -1);#endif gtk_widget_show(baltracks[ii]); gtk_range_set_update_policy(GTK_RANGE(baltracks[ii]), GTK_UPDATE_CONTINUOUS); } lvlcallback[ii] = gtk_signal_connect_object(GTK_OBJECT(adjustment[ii]), "value_changed", GTK_SIGNAL_FUNC(AdjustLevelGTK), (gpointer) ii); levels[ii] = gtk_hscale_new(GTK_ADJUSTMENT(adjustment[ii])); gtk_signal_connect_object(GTK_OBJECT(viewmenuitems[ii]), "activate", GTK_SIGNAL_FUNC(HideShowChannelGTK), (gpointer) ii); gtk_scale_set_value_pos(GTK_SCALE(levels[ii]), GTK_POS_LEFT); gtk_scale_set_digits(GTK_SCALE(levels[ii]), 0);#ifdef HAVE_GTK gtk_widget_set_size_request(GTK_WIDGET (levels[ii]), 84, -1);#endif gtk_widget_show(GTK_WIDGET(levels[ii])); gtk_range_set_update_policy(GTK_RANGE(levels[ii]), GTK_UPDATE_CONTINUOUS); } if ((1 << ii) & recmask) { colormap = gtk_widget_get_colormap(window); record_pixmap = gdk_pixmap_colormap_create_from_xpm_d(window->window, colormap, &rmask, &style->bg[GTK_STATE_NORMAL], (gchar **) record_xpm); play_pixmap = gdk_pixmap_colormap_create_from_xpm_d(window->window, colormap, &pmask, &style->bg[GTK_STATE_NORMAL], (gchar **) play_xpm); ErrorExitWarn(ReadRecSrc(), 'e'); /* a pixmap widget to contain the pixmap */ pixmapwid[ii] = gtk_pixmap_new((1 << ii) & recsrc ? record_pixmap : play_pixmap, (1 << ii) & recsrc ? rmask : pmask); gtk_widget_show(pixmapwid[ii]); rpbuttons[ii] = GTK_TOGGLE_BUTTON(gtk_toggle_button_new()); gtk_container_add(GTK_CONTAINER(rpbuttons[ii]), pixmapwid[ii]); gtk_widget_show(GTK_WIDGET(rpbuttons[ii])); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rpbuttons[ii]), (1 << ii) & recsrc ? TRUE : FALSE); rpcallback[ii] = gtk_signal_connect_object(GTK_OBJECT(rpbuttons[ii]), "clicked", GTK_SIGNAL_FUNC(SwitchRecordPlay), (gpointer) ii); } } gtk_signal_connect_object(GTK_OBJECT(viewmenuitems[SOUND_MIXER_NRDEVICES]), "activate", GTK_SIGNAL_FUNC(HideShowMenuGTK), GTK_OBJECT(menubar)); gtk_signal_connect_object(GTK_OBJECT(viewmenuitems[SOUND_MIXER_NRDEVICES + 1]), "activate", GTK_SIGNAL_FUNC(HideShowBalancesGTK), 0); gtk_signal_connect_object(GTK_OBJECT(viewmenuitems[SOUND_MIXER_NRDEVICES + 2]), "activate", GTK_SIGNAL_FUNC(HideShowNumbersGTK), 0); control_box = gtk_hbox_new(FALSE, BORDER); gtk_widget_show(control_box); labelrec = gtk_label_new(LOCAL_TEXT("Rec")); gtk_widget_show(labelrec); gtk_table_attach_defaults(GTK_TABLE(maintable), labelrec, 0, 1, 0, 1); labellevel = gtk_label_new(LOCAL_TEXT("Level")); gtk_widget_show(labellevel); gtk_table_attach_defaults(GTK_TABLE(maintable), labellevel, 2, 3, 0, 1); labelbalance = gtk_label_new(LOCAL_TEXT("Balance")); gtk_widget_show(labelbalance); gtk_table_attach_defaults(GTK_TABLE(maintable), labelbalance, 6, 7, 0, 1); y = 0; for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) { if ((1 << ii) & (devmask | recmask)) { if ((1 << ii) & recmask) gtk_table_attach_defaults(GTK_TABLE(maintable), GTK_WIDGET(rpbuttons[ii]), 0, 1, y + 1, y + 2); channellabel[ii] = gtk_label_new(LOCAL_TEXT(dev_label[ii])); gtk_widget_show(channellabel[ii]); gtk_table_attach_defaults(GTK_TABLE(maintable), channellabel[ii], 4, 5, y + 1, y + 2); if ((1 << ii) & devmask) { gtk_table_attach_defaults(GTK_TABLE(maintable), GTK_WIDGET(levels[ii]), 1, 4, y + 1, y + 2); if ((1 << ii) & stereodevs) gtk_table_attach_defaults(GTK_TABLE(maintable), baltracks[ii], 5, 8, y + 1, y + 2); } y++; } } labelleft = gtk_label_new(LOCAL_TEXT("L")); gtk_widget_show(labelleft); gtk_table_attach_defaults(GTK_TABLE(maintable), labelleft, 5, 6, y + 1, y + 2); labelright = gtk_label_new(LOCAL_TEXT("R")); gtk_widget_show(labelright); gtk_table_attach_defaults(GTK_TABLE(maintable), labelright, 7, 8, y + 1, y + 2); labelzero = gtk_label_new(LOCAL_TEXT("0")); gtk_widget_show(labelzero); gtk_table_attach_defaults(GTK_TABLE(maintable), labelzero, 1, 2, y + 1, y + 2); labelcent = gtk_label_new(LOCAL_TEXT("100")); gtk_widget_show(labelcent); gtk_table_attach_defaults(GTK_TABLE(maintable), labelcent, 3, 4, y + 1, y + 2); gtk_box_pack_start(GTK_BOX(mainbox), control_box, TRUE, TRUE, 0); gtk_widget_realize(window); icon_pixmap = gdk_pixmap_create_from_xpm_d(window->window, &bitmap, &style->bg[GTK_STATE_NORMAL], aumix_xpm); gdk_window_set_icon(window->window, NULL, icon_pixmap, bitmap); gtk_widget_show(window); signal(SIGALRM, AumixSignalHandler); alarm(REFRESH_PERIOD);}void CloseScreenGTK(void){ gtk_exit(0); return;}void WakeUpGTK(void){ /* things to do on SIGALRM */ int max, balset, ii, tmp, left, right; for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) { if ((1 << ii) & devmask) { /* Try to read mixer. */ if (SOUND_IOCTL(mixer_fd, MIXER_READ(ii), &tmp) == -1) gtk_exit(EREADMIX); right = tmp >> 8; left = tmp & 0xFF; gtk_signal_handler_block(GTK_OBJECT(adjustment[ii]), lvlcallback[ii]); gtk_adjustment_set_value(adjustment[ii], (right + left) / 2); gtk_signal_handler_unblock(GTK_OBJECT(adjustment[ii]), lvlcallback[ii]); max = (left > right) ? left : right; if ((1 << ii) & stereodevs) { if (tmp) { balset = (left > right) ? (MAXLEVEL / 2) * right / max : MAXLEVEL - ((MAXLEVEL / 2) * left / max); } else { balset = (MAXLEVEL / 2); } gtk_signal_handler_block(GTK_OBJECT(balance[ii]), balcallback[ii]); gtk_adjustment_set_value(balance[ii], balset); gtk_signal_handler_unblock(GTK_OBJECT(balance[ii]), balcallback[ii]); } } if ((1 << ii) & recmask) { gtk_signal_handler_block(GTK_OBJECT(rpbuttons[ii]), rpcallback[ii]); ErrorExitWarn(ReadRecSrc(), 'e'); gtk_widget_show(pixmapwid[ii]); gtk_pixmap_set(GTK_PIXMAP(pixmapwid[ii]), (1 << ii) & recsrc ? record_pixmap : play_pixmap, NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rpbuttons[ii]), (1 << ii) & recsrc ? TRUE : FALSE); gtk_widget_show(pixmapwid[ii]); gtk_signal_handler_unblock(GTK_OBJECT(rpbuttons[ii]), rpcallback[ii]); } }}void FileOKLoad(GtkWidget * w, GtkFileSelection * fs)/* Get the selected filename and copy it into the global save_filename. */{ save_filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs))); ErrorExitWarn(LoadSettings(), 'w');}void FileOKSave(GtkWidget * w, GtkFileSelection * fs)/* Get the selected filename and copy it into the global save_filename. */{ save_filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs))); ErrorExitWarn(SaveSettings(), 'e');}void LoadDialog(void){ GtkWidget *filew; /* Create a new file selection widget */ filew = gtk_file_selection_new("File selection"); gtk_signal_connect(GTK_OBJECT(filew), "destroy", (GtkSignalFunc) gtk_widget_destroy, &filew); /* Connect the ok_button to FileOKLoad function */ gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filew)->ok_button), "clicked", (GtkSignalFunc) FileOKLoad, filew); /* Connect the cancel_button to destroy the widget */ gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(filew)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT(filew)); /* Let's set the filename, as a default. */ gtk_file_selection_set_filename(GTK_FILE_SELECTION(filew), ".aumixrc"); gtk_widget_show(filew);}void SaveDialog(void){ GtkWidget *filew; /* Create a new file selection widget */ filew = gtk_file_selection_new("File selection"); gtk_signal_connect(GTK_OBJECT(filew), "destroy", (GtkSignalFunc) gtk_widget_destroy, &filew); /* Connect the ok_button to FileOKSave function */ gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filew)->ok_button), "clicked", (GtkSignalFunc) FileOKSave, filew); /* Connect the cancel_button to destroy the widget */ gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(filew)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT(filew)); /* Let's set the filename, as a default. */ gtk_file_selection_set_filename(GTK_FILE_SELECTION(filew), ".aumixrc"); gtk_widget_show(filew);}#endif /* HAVE_GTK1 || HAVE_GTK */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -