📄 gui.c
字号:
gtk_box_pack_start (GTK_BOX (hbox), theme_alt_label, TRUE, TRUE, 4); gtk_misc_set_alignment(GTK_MISC(theme_alt_label), 0, 0.5); gkrellm_set_theme_alternatives_label();/* -- Options tab */ vbox = gkrellm_gtk_notebook_page(tabs, _("Options")); vbox = gkrellm_gtk_framed_vbox(vbox, NULL, 2, TRUE, 10, 4);#if !defined(WIN32) vbox1 = gtk_vbox_new(FALSE, 0); gkrellm_gtk_check_button_connected(vbox, &track_gtk_button, _GK.track_gtk_theme_name, FALSE, FALSE, 0, cb_track_gtk, vbox1, _("Track Gtk theme changes for similarly named themes")); gtk_widget_set_sensitive(vbox1, _GK.track_gtk_theme_name); gtk_box_pack_start(GTK_BOX(vbox), vbox1, FALSE, FALSE, 0); vbox1 = gkrellm_gtk_category_vbox(vbox1, NULL, 0, 0, TRUE); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Default")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); gtk_entry_set_text(GTK_ENTRY(entry), _GK.default_track_theme); g_signal_connect(G_OBJECT(entry), "changed", G_CALLBACK(cb_track_entry_changed), NULL);#endif hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 2); gkrellm_gtk_spin_button(hbox, NULL, (gfloat)_GK.theme_scale, 40.0, 400.0, 10.0, 20.0, 0, 60, cb_theme_scale_changed, NULL, FALSE, NULL); label = gtk_label_new(_("Scale")); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 4); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);/* --Fonts tab */ vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Fonts")); vbox1 = gkrellm_gtk_framed_vbox(vbox, NULL, 2, FALSE, 0, 2); vbox2 = gkrellm_gtk_framed_vbox(vbox1, _("Large font"), 4, FALSE, 0, 3); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, TRUE, 0); large_font.entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), large_font.entry, TRUE, TRUE, 0); gtk_entry_set_text(GTK_ENTRY(large_font.entry), large_font.string); g_signal_connect(G_OBJECT(large_font.entry), "changed", G_CALLBACK(cb_font_entry_changed), NULL); g_signal_connect(G_OBJECT(large_font.entry), "activate", G_CALLBACK(cb_font_entry_activate), NULL); gkrellm_gtk_button_connected(hbox, &large_font.browse_button, FALSE, FALSE, 0, cb_font_dialog, &large_font, _("Browse")); vbox2 = gkrellm_gtk_framed_vbox(vbox1, _("Normal font"), 4, FALSE, 0, 3); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, TRUE, 0); normal_font.entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), normal_font.entry, TRUE, TRUE, 0); gtk_entry_set_text(GTK_ENTRY(normal_font.entry), normal_font.string); g_signal_connect(G_OBJECT(normal_font.entry), "changed", G_CALLBACK(cb_font_entry_changed), NULL); g_signal_connect(G_OBJECT(normal_font.entry), "activate", G_CALLBACK(cb_font_entry_activate), NULL); gkrellm_gtk_button_connected(hbox, &normal_font.browse_button, FALSE, FALSE, 0, cb_font_dialog, &normal_font, _("Browse")); vbox2 = gkrellm_gtk_framed_vbox(vbox1, _("Small font"), 4, FALSE, 0, 3); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, TRUE, 0); small_font.entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), small_font.entry, TRUE, TRUE, 0); gtk_entry_set_text(GTK_ENTRY(small_font.entry), small_font.string); g_signal_connect(G_OBJECT(small_font.entry), "changed", G_CALLBACK(cb_font_entry_changed), NULL); g_signal_connect(G_OBJECT(small_font.entry), "activate", G_CALLBACK(cb_font_entry_activate), NULL); gkrellm_gtk_button_connected(hbox, &small_font.browse_button, FALSE, FALSE, 0, cb_font_dialog, &small_font, _("Browse")); /* --Info tab*/ vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Info")); s = g_strdup_printf(_("Untar your theme tar files in %s/%s"), gkrellm_homedir(), GKRELLM_THEMES_DIR); label = gtk_label_new(s); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); g_free(s); label = gtk_label_new( _("Download themes from the GKrellM theme site at www.muhri.net")); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); }/* ================================================================ *//* A simple tree store model for selecting monitor configs.*/enum { NAME_COLUMN, MONITOR_COLUMN, PAGE_COLUMN, N_COLUMNS };static GtkNotebook *config_notebook;static gboolean expand_builtins, expand_plugins;static GtkTreeView *treeview;static GtkTreeStore *model;static GtkWidget *apply_button, *close_button;static GkrellmMonitor *selected_monitor;static voidclose_config(gpointer data) { GtkTreePath *path; gint from_close = GPOINTER_TO_INT(data); path = gtk_tree_path_new_from_string("1"); expand_builtins = gtk_tree_view_row_expanded(treeview, path); gtk_tree_path_free(path); path = gtk_tree_path_new_from_string("2"); expand_plugins = gtk_tree_view_row_expanded(treeview, path); gtk_tree_path_free(path); g_object_unref(G_OBJECT(model)); gtk_widget_destroy(config_window); config_window = NULL; gkrellm_plugins_config_close(); close_theme_config(from_close); if (_GK.config_modified) gkrellm_save_user_config(); gkrellm_save_theme_config(); }static voidapply_config(void) { GList *list; GkrellmMonitor *mon; gkrellm_freeze_side_frame_packing(); for (list = gkrellm_monitor_list; list; list = list->next) { mon = (GkrellmMonitor *) list->data; if ( mon->apply_config && mon->privat->enabled && (mon->privat->config_created || !mon->create_config) ) { gkrellm_record_state(APPLY_CONFIG, mon); (*(mon->apply_config))(); gkrellm_record_state(INTERNAL, NULL); } } gkrellm_thaw_side_frame_packing(); gkrellm_config_modified(); }static voidOK_config(void) { apply_config(); close_config(GINT_TO_POINTER(0)); }static GtkWidget *create_config_page(GkrellmMonitor *mon, GtkTreeStore *tree, GtkTreeIter *iter, GtkNotebook *notebook) { GtkWidget *vbox; gint page; vbox = gtk_vbox_new(FALSE, 0); gtk_notebook_append_page(notebook, vbox, NULL); page = g_list_length(notebook->children) - 1; if (mon) mon->privat->config_page = page; gtk_tree_store_set(tree, iter, MONITOR_COLUMN, mon, PAGE_COLUMN, page, -1); if (_GK.debug_level & DEBUG_GUI) printf("create_config_page %d: %s\n", page, mon ? mon->name : "--"); return vbox; }static voidreal_create_config(GkrellmMonitor *mon) { if (mon->privat->config_created || !mon->create_config) return; gkrellm_record_state(CREATE_CONFIG, mon); (*(mon->create_config))(mon->privat->config_vbox); gkrellm_record_state(INTERNAL, NULL); gtk_widget_show_all(mon->privat->config_vbox); mon->privat->config_created = TRUE; }voidgkrellm_add_plugin_config_page(GkrellmMonitor *mon) { GtkTreeIter iter, plugin_iter; GtkTreePath *path; if (config_window && mon->create_config) { path = gtk_tree_path_new_from_string("2"); gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &plugin_iter, path); gtk_tree_path_free(path); gtk_tree_store_append(model, &iter, &plugin_iter); gtk_tree_store_set(model, &iter, NAME_COLUMN, mon->name, -1); mon->privat->config_vbox = create_config_page(mon, model, &iter, config_notebook); mon->privat->config_created = FALSE; mon->privat->row_reference = gtk_tree_row_reference_new(GTK_TREE_MODEL(model), gtk_tree_model_get_path(GTK_TREE_MODEL(model), &iter)); } else mon->privat->config_page = -1; }voidgkrellm_remove_plugin_config_page(GkrellmMonitor *mon) { GtkTreePath *path; GtkTreeIter iter; GList *list; GkrellmMonitor *tmon; if (mon->privat->config_page > 0) { path = gtk_tree_row_reference_get_path(mon->privat->row_reference); gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path); gtk_tree_store_remove(model, &iter); gtk_notebook_remove_page(config_notebook, mon->privat->config_page); /* When a config_page is removed, any greater plugin config_page must | be decremented */ for (list = gkrellm_monitor_list; list; list = list->next) { tmon = (GkrellmMonitor *) list->data; if (mon->privat->config_page >= tmon->privat->config_page) continue; tmon->privat->config_page -= 1; if (_GK.debug_level & DEBUG_GUI) printf("config_page %d: %s\n", tmon->privat->config_page, tmon->name); } } mon->privat->config_page = -1; } /* If a config page uses instant apply, hide the APPLY/CLOSE buttons and | assume the config will be modified. */static voidset_apply_mode(gboolean instant) { if (instant) { gtk_widget_hide(apply_button); gtk_widget_hide(close_button); gkrellm_config_modified(); } else { gtk_widget_show(apply_button); gtk_widget_show(close_button); } }static voidcb_tree_selection_changed(GtkTreeSelection *selection, gpointer data) { GtkTreeIter iter; GtkTreeModel *model; gint page; gboolean instant; if (!gtk_tree_selection_get_selected(selection, &model, &iter)) return; if (selected_monitor && selected_monitor->apply_config) { gkrellm_record_state(APPLY_CONFIG, selected_monitor); (*(selected_monitor->apply_config))(); gkrellm_record_state(INTERNAL, NULL); } gtk_tree_model_get(model, &iter, MONITOR_COLUMN, &selected_monitor, PAGE_COLUMN, &page, -1); if (selected_monitor && selected_monitor->privat) { page = selected_monitor->privat->config_page; real_create_config(selected_monitor); if (selected_monitor == gkrellm_get_sensors_mon()) { /* Special case dependencies in the configs */ real_create_config(gkrellm_get_cpu_mon()); real_create_config(gkrellm_get_proc_mon()); } instant = ( selected_monitor->apply_config == NULL || selected_monitor->privat->instant_apply); } else instant = TRUE; set_apply_mode(instant); gtk_notebook_set_current_page(config_notebook, page); if (_GK.debug_level & DEBUG_GUI) printf("tree_selection_changed %d: %s\n", page, selected_monitor ? selected_monitor->name : "--"); } /* Monitors may want to present as instant apply monitors, but still need | their apply function called when changing notebook pages or on OK button. */voidgkrellm_config_instant_apply(GkrellmMonitor *mon) { mon->privat->instant_apply = TRUE; }gbooleangkrellm_config_window_shown(void) { return config_window ? TRUE : FALSE; }voidcreate_config_window(void) { GtkWidget *widget, *vbox, *main_vbox, *config_hbox, *hbox; GtkWidget *scrolled; GtkWidget *button; GtkTreeIter iter, citer; GtkTreePath *path; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; GList *list; GkrellmMonitor *mon; gchar *config_name, *window_title; if (config_window) { gtk_window_present(GTK_WINDOW(config_window)); return; } selected_monitor = NULL; config_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(config_window), "delete_event", G_CALLBACK(close_config), GINT_TO_POINTER(1)); config_name = gkrellm_make_config_file_name(NULL, "GKrellM"); window_title = g_strdup_printf("%s %s", config_name, _("Configuration")); gtk_window_set_title(GTK_WINDOW(config_window), window_title); g_free(config_name); g_free(window_title); gtk_window_set_wmclass(GTK_WINDOW(config_window), "Gkrellm_conf", "Gkrellm"); gtk_container_set_border_width(GTK_CONTAINER(config_window), 2); config_hbox = gtk_hbox_new(FALSE, 4); gtk_container_add(GTK_CONTAINER(config_window), config_hbox); scrolled = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(config_hbox), scrolled, FALSE, FALSE, 0); main_vbox = gtk_vbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(config_hbox), main_vbox, TRUE, TRUE, 0); widget = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(main_vbox), widget, TRUE, TRUE, 0); config_notebook = GTK_NOTEBOOK(widget); gtk_notebook_set_show_tabs(config_notebook, FALSE); model = gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_INT); gtk_tree_store_append(model, &iter, NULL); gtk_tree_store_set(model, &iter, NAME_COLUMN, _("General"), -1); vbox = create_config_page(NULL, model, &iter, config_notebook); create_general_tab(vbox); gtk_tree_store_append(model, &iter, NULL); gtk_tree_store_set(model, &iter, NAME_COLUMN, _("Builtins"), -1); vbox = create_config_page(NULL, model, &iter, config_notebook); for (list = gkrellm_monitor_list; list; list = list->next) { mon = (GkrellmMonitor *) list->data; if (MONITOR_ID(mon) == MON_PLUGIN || ! mon->create_config) continue; gtk_tree_store_append(model, &citer, &iter); gtk_tree_store_set(model, &citer, NAME_COLUMN, mon->name, -1); mon->privat->config_vbox = create_config_page(mon, model, &citer, config_notebook); mon->privat->config_created = FALSE; mon->privat->row_reference = gtk_tree_row_reference_new(GTK_TREE_MODEL(model), gtk_tree_model_get_path(GTK_TREE_MODEL(model), &citer)); } gtk_tree_store_append(model, &iter, NULL); gtk_tree_store_set(model, &iter, NAME_COLUMN, _("Plugins"), -1); vbox = create_config_page(NULL, model, &iter, config_notebook); gkrellm_plugins_config_create(vbox); gtk_tree_store_append(model, &iter, NULL); gtk_tree_store_set(model, &iter, NAME_COLUMN, _("Themes"), -1); vbox = create_config_page(NULL, model, &iter, config_notebook); create_theme_tab(vbox); gtk_tree_store_append(model, &iter, NULL); gtk_tree_store_set(model, &iter, NAME_COLUMN, _("About"), -1); vbox = create_config_page(NULL, model, &iter, config_notebook); create_about_tab(vbox); /* Add plugin notebook pages last since they may need special add/remove | actions as plugins are enabled/disabled. */ for (list = gk
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -