📄 proc.c
字号:
GkrellmChartdata *cd; GkrellmChartconfig *cf; GkrellmPanel *p; GkrellmStyle *style; if (first_create) { proc.chart = gkrellm_chart_new0(); proc.chart->panel = gkrellm_panel_new0(); } cp = proc.chart; p = cp->panel; style = gkrellm_panel_style(style_id); gkrellm_create_krell(p, gkrellm_krell_panel_piximage(style_id), style); gkrellm_chart_create(proc.vbox, mon_proc, cp, &proc.chart_config); gkrellm_set_draw_chart_function(cp, refresh_proc_chart, proc.chart); cd = gkrellm_add_default_chartdata(cp, _("Load")); gkrellm_monotonic_chartdata(cd, FALSE); gkrellm_set_chartdata_draw_style_default(cd, CHARTDATA_LINE); proc.forks_cd = gkrellm_add_default_chartdata(cp, _("Forks")); gkrellm_set_chartdata_flags(proc.forks_cd, CHARTDATA_ALLOW_HIDE); cf = cp->config; gkrellm_chartconfig_fixed_grids_connect(cf, setup_proc_scaling, NULL); gkrellm_chartconfig_grid_resolution_connect(cf, setup_proc_scaling, NULL); gkrellm_chartconfig_grid_resolution_adjustment(cf, FALSE, LOAD_SCALING, 0.5, 5.0, 0.5, 0.5, 1, 50); gkrellm_chartconfig_grid_resolution_label(cf, _("Average process load per minute")); gkrellm_alloc_chartdata(cp); setup_proc_scaling(); /* I put motherboard temp on Proc panel (if temperature sensors found) */ gkrellm_sensors_create_decals(p, style_id, &proc.sensor_decal, &proc.fan_decal); gkrellm_panel_configure(p, proc.panel_label, style); gkrellm_panel_create(proc.vbox, mon_proc, p); proc.save_label_position = p->label->position; if (proc.sensor_decal) adjust_sensors_display(TRUE); new_text_format = TRUE; if (first_create) { g_signal_connect(G_OBJECT(cp->drawing_area), "expose_event", G_CALLBACK(proc_expose_event), NULL); g_signal_connect(G_OBJECT(p->drawing_area), "expose_event", G_CALLBACK(proc_expose_event), NULL); g_signal_connect(G_OBJECT(cp->drawing_area),"button_press_event", G_CALLBACK(cb_proc_extra), NULL); g_signal_connect(G_OBJECT(p->drawing_area), "button_press_event", G_CALLBACK(cb_panel_press), NULL); } else refresh_proc_chart(cp); gkrellm_setup_launcher(p, &proc_launch, CHART_PANEL_TYPE, 4); }static voidcreate_proc(GtkWidget *vbox, gint first_create) { proc.vbox = vbox; if (proc.enabled) { create_proc_monitor(proc.vbox, first_create); gkrellm_spacers_show(mon_proc); } else gkrellm_spacers_hide(mon_proc); }#define PROC_CONFIG_KEYWORD "proc"static voidcb_alert_trigger(GkrellmAlert *alert, gpointer data) { GkrellmPanel *p; GkrellmAlertdecal *ad; GkrellmDecal *ds, *df; gint x, w; p = proc.chart->panel; alert->panel = p; ds = proc.sensor_decal; df = proc.fan_decal; ad = &alert->ad; if (gkrellm_is_decal_visible(ds) && !gkrellm_is_decal_visible(df)) w = ds->x - 1; else w = p->w; w /= 3; if (w < 2) w = 2; if (alert == load_alert) x = 0; else if (alert == users_alert) x = w; else x = 2 * w; ad->x = x; ad->y = 0; ad->w = w; ad->h = p->h; gkrellm_render_default_alert_decal(alert); }static voidcreate_load_alert(void) { load_alert = gkrellm_alert_create(NULL, _("Load"), NULL, TRUE, FALSE, TRUE, 20, 1, 0.5, 1, 2); gkrellm_alert_delay_config(load_alert, 1, 10000, 0); gkrellm_alert_trigger_connect(load_alert, cb_alert_trigger, NULL); gkrellm_alert_command_process_connect(load_alert, cb_command_process, NULL); }static voidcreate_users_alert(void) { users_alert = gkrellm_alert_create(NULL, _("Users"), NULL, TRUE, FALSE, TRUE, 100000, 2, 1, 10, 0); gkrellm_alert_trigger_connect(users_alert, cb_alert_trigger, NULL); gkrellm_alert_command_process_connect(users_alert, cb_command_process, NULL); }static voidcreate_processes_alert(void) { processes_alert = gkrellm_alert_create(NULL, _("Processes"), NULL, TRUE, FALSE, TRUE, 100000, 10, 1, 10, 0); gkrellm_alert_trigger_connect(processes_alert, cb_alert_trigger, NULL); gkrellm_alert_command_process_connect(processes_alert, cb_command_process, NULL); }static voidsave_proc_config(FILE *f) { fprintf(f, "%s enable %d %d\n", PROC_CONFIG_KEYWORD, proc.enabled, proc.extra_info); fprintf(f, "%s launch %s\n", PROC_CONFIG_KEYWORD, proc_launch.command); fprintf(f, "%s tooltip_comment %s\n", PROC_CONFIG_KEYWORD, proc_launch.tooltip_comment); fprintf(f, "%s sensor_mode %d\n", PROC_CONFIG_KEYWORD, sensor_separate_mode); fprintf(f, "%s text_format %s\n", PROC_CONFIG_KEYWORD, text_format); gkrellm_save_chartconfig(f, proc.chart_config, PROC_CONFIG_KEYWORD, NULL); if (load_alert) gkrellm_save_alertconfig(f, load_alert, PROC_CONFIG_KEYWORD, "load"); if (users_alert) gkrellm_save_alertconfig(f, users_alert, PROC_CONFIG_KEYWORD, "users"); if (processes_alert) gkrellm_save_alertconfig(f, processes_alert, PROC_CONFIG_KEYWORD, "processes"); }static voidload_proc_config(gchar *arg) { gchar config[32], name[16], item[CFG_BUFSIZE], item1[CFG_BUFSIZE]; gint n; n = sscanf(arg, "%31s %[^\n]", config, item); if (n == 2) { if (!strcmp(config, "enable")) sscanf(item, "%d %d\n", &proc.enabled, &proc.extra_info); else if (!strcmp(config, "launch")) proc_launch.command = g_strdup(item); else if (!strcmp(config, "tooltip_comment")) proc_launch.tooltip_comment = g_strdup(item); else if (!strcmp(config, "sensor_mode")) sscanf(item, "%d\n", &sensor_separate_mode); else if (!strcmp(config, "text_format")) { gkrellm_locale_dup_string(&text_format, item, &text_format_locale); new_text_format = TRUE; } else if (!strcmp(config, GKRELLM_CHARTCONFIG_KEYWORD)) gkrellm_load_chartconfig(&proc.chart_config, item, 2); else if (!strcmp(config, GKRELLM_ALERTCONFIG_KEYWORD)) { if (sscanf(item, "%15s %[^\n]", name, item1) == 2) { if (!strcmp(name, "load")) { if (!load_alert) create_load_alert(); gkrellm_load_alertconfig(&load_alert, item1); } else if (!strcmp(name, "users")) { if (!users_alert) create_users_alert(); gkrellm_load_alertconfig(&users_alert, item1); } else if (!strcmp(name, "processes")) { if (!processes_alert) create_processes_alert(); gkrellm_load_alertconfig(&processes_alert, item1); } } } } }/* ---------------------------------------------------------------------- */#define DEFAULT_TEXT_FORMAT "\\w88\\a$p\\f procs\\n\\e$u\\f users"static GtkWidget *proc_launch_entry, *proc_tooltip_entry;static GtkWidget *text_format_combo;static GtkWidget *load_alert_button, *users_alert_button, *processes_alert_button;static gbooleanfix_panel(void) { gboolean result; if (!proc.enabled) return FALSE; if ((result = adjust_sensors_display(FALSE)) && proc_launch.button) { gkrellm_destroy_button(proc_launch.button); proc_launch.button = gkrellm_put_label_in_panel_button(proc.chart->panel, gkrellm_launch_button_cb, &proc_launch, proc_launch.pad); } return result; }gbooleangkrellm_proc_set_sensor(gpointer sr, gint type) { if (type == SENSOR_TEMPERATURE) proc.sensor_temp = sr; else if (type == SENSOR_FAN) proc.sensor_fan = sr; else return FALSE; return fix_panel(); }static voidcb_sensor_separate(GtkWidget *button, gpointer data) { sensor_separate_mode = GTK_TOGGLE_BUTTON(button)->active; fix_panel(); }static voidcb_text_format(GtkWidget *widget, gpointer data) { gchar *s; s = gkrellm_gtk_entry_get_text(&(GTK_COMBO(text_format_combo)->entry)); gkrellm_locale_dup_string(&text_format, s, &text_format_locale); new_text_format = TRUE; refresh_proc_chart(proc.chart); }static voidcb_enable(GtkWidget *button, gpointer data) { gboolean enabled; enabled = GTK_TOGGLE_BUTTON(button)->active; if (enabled && ! proc.enabled) { create_proc_monitor(proc.vbox, TRUE); gkrellm_spacers_show(mon_proc); } else if (!enabled && proc.enabled) { destroy_proc_monitor(); gkrellm_spacers_hide(mon_proc); } proc.enabled = enabled; gtk_widget_set_sensitive(load_alert_button, enabled); gtk_widget_set_sensitive(users_alert_button, enabled); gtk_widget_set_sensitive(processes_alert_button, enabled); }static voidcb_load_alert(GtkWidget *button, gpointer data) { if (!load_alert) create_load_alert(); gkrellm_alert_config_window(&load_alert); }static voidcb_users_alert(GtkWidget *button, gpointer data) { if (!users_alert) create_users_alert(); gkrellm_alert_config_window(&users_alert); }static voidcb_processes_alert(GtkWidget *button, gpointer data) { if (!processes_alert) create_processes_alert(); gkrellm_alert_config_window(&processes_alert); }static voidcb_launch_entry(GtkWidget *widget, gpointer data) { if (proc.enabled) { gkrellm_apply_launcher(&proc_launch_entry, &proc_tooltip_entry, proc.chart->panel, &proc_launch, gkrellm_launch_button_cb); } }static gchar *proc_info_text[] ={N_("<h>Proc Chart"),"\n",N_("The krell shows process forks with a full scale value of 10 forks.\n"),N_("While both load and fork data are drawn on the chart, the grid\n""resolution can be set for load only. The resolution per grid for forks is\n""fixed at 10 when using the auto number of grids mode, and at 50 divided by\n""the number of grids when using a fixed number of grids mode.\n"),"\n",N_("<h>Chart Labels\n"),N_("Substitution variables for the format string for chart labels:\n"),N_("\t$L maximum chart value (load)\n"),N_("\t$F maximum chart value (forks)\n"),N_("\t$l load\n"),N_("\t$f forks\n"),N_("\t$p processes\n"),N_("\t$u users\n"),"\n",N_("Substitution variables may be used in alert commands.\n")};static voidcreate_proc_tab(GtkWidget *tab_vbox) { GtkWidget *tabs, *table, *vbox, *vbox1, *hbox, *text, *label; GList *list; gint i; tabs = gtk_notebook_new(); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tabs), GTK_POS_TOP); gtk_box_pack_start(GTK_BOX(tab_vbox), tabs, TRUE, TRUE, 0);/* ---Options tab */ vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Options")); gkrellm_gtk_check_button_connected(vbox, NULL, proc.enabled, FALSE, FALSE, 4, cb_enable, NULL, _("Enable Proc chart")); if (gkrellm_sensors_available()) gkrellm_gtk_check_button_connected(vbox, NULL, sensor_separate_mode, FALSE, FALSE, 0, cb_sensor_separate, NULL, _("Draw fan and temperature values separately (not alternating).")); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, TRUE, 5); gkrellm_gtk_alert_button(hbox, &processes_alert_button, FALSE, FALSE, 4, TRUE, cb_processes_alert, NULL); label = gtk_label_new(_("Processes")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 4); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, TRUE, 5); gkrellm_gtk_alert_button(hbox, &users_alert_button, FALSE, FALSE, 4, TRUE, cb_users_alert, NULL); label = gtk_label_new(_("Users")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 4); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, TRUE, 5); gkrellm_gtk_alert_button(hbox, &load_alert_button, FALSE, FALSE, 4, TRUE, cb_load_alert, NULL); label = gtk_label_new(_("Load")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 4); if (!proc.enabled) { gtk_widget_set_sensitive(load_alert_button, FALSE); gtk_widget_set_sensitive(users_alert_button, FALSE); gtk_widget_set_sensitive(processes_alert_button, FALSE); } vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Setup")); vbox1 = gkrellm_gtk_framed_vbox(vbox, _("Format String for Chart Labels"), 4, FALSE, 0, 2); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, TRUE, 5); text_format_combo = gtk_combo_new(); gtk_widget_set_size_request (GTK_WIDGET(text_format_combo), 350, -1); gtk_box_pack_start(GTK_BOX(hbox), text_format_combo, FALSE, TRUE, 0); list = NULL; list = g_list_append(list, text_format); list = g_list_append(list, _(DEFAULT_TEXT_FORMAT)); list = g_list_append(list, _("\\f$L\\r\\f$F \\w88\\b\\p\\a$p\\f procs\\n\\e$u\\f users")); gtk_combo_set_popdown_strings(GTK_COMBO(text_format_combo), list); gtk_combo_set_case_sensitive(GTK_COMBO(text_format_combo), TRUE); g_list_free(list); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(text_format_combo)->entry), text_format); g_signal_connect(G_OBJECT(GTK_COMBO(text_format_combo)->entry), "changed", G_CALLBACK(cb_text_format), NULL); vbox1 = gkrellm_gtk_framed_vbox_end(vbox, _("Launch Commands"), 4, FALSE, 0, 2); table = gkrellm_gtk_launcher_table_new(vbox1, 1); gkrellm_gtk_config_launcher(table, 0, &proc_launch_entry, &proc_tooltip_entry, _("Proc"), &proc_launch); g_signal_connect(G_OBJECT(proc_launch_entry), "changed", G_CALLBACK(cb_launch_entry), NULL); g_signal_connect(G_OBJECT(proc_tooltip_entry), "changed", G_CALLBACK(cb_launch_entry), NULL);/* --Info tab */ vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Info")); text = gkrellm_gtk_scrolled_text_view(vbox, NULL, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); for (i = 0; i < sizeof(proc_info_text)/sizeof(gchar *); ++i) gkrellm_gtk_text_view_append(text, _(proc_info_text[i])); }gchar *gkrellm_proc_get_sensor_panel_label(void) { return proc.panel_label; }GkrellmMonitor *gkrellm_get_proc_mon(void) { return mon_proc; }static GkrellmMonitor monitor_proc = { N_("Proc"), /* Name, for config tab. */ MON_PROC, /* Id, 0 if a plugin */ create_proc, /* The create function */ update_proc, /* The update function */ create_proc_tab, /* The config tab create function */ NULL, /* Instant apply */ save_proc_config, /* Save user conifg */ load_proc_config, /* Load user config */ PROC_CONFIG_KEYWORD, /* config keyword */ NULL, /* Undef 2 */ NULL, /* Undef 1 */ NULL, /* Undef 0 */ 0, /* insert_before_id - place plugin before this mon */ NULL, /* Handle if a plugin, filled in by GKrellM */ NULL /* path if a plugin, filled in by GKrellM */ };GkrellmMonitor *gkrellm_init_proc_monitor(void) { GkrellmChartconfig *cf; monitor_proc.name = _(monitor_proc.name); proc.panel_label = g_strdup(_("Proc")); proc.enabled = TRUE; proc.extra_info = TRUE; style_id = gkrellm_add_chart_style(&monitor_proc, PROC_STYLE_NAME); gkrellm_locale_dup_string(&text_format, _(DEFAULT_TEXT_FORMAT), &text_format_locale); mon_proc = &monitor_proc; if (setup_proc_interface()) { /* Set chart config defaults. Turn off auto grid resolution and | don't let user config it back on. */ cf = proc.chart_config = gkrellm_chartconfig_new0(); gkrellm_set_chartconfig_grid_resolution(cf, 100); gkrellm_set_chartconfig_auto_grid_resolution(cf, FALSE); gkrellm_set_chartconfig_flags(cf, NO_CONFIG_AUTO_GRID_RESOLUTION); return &monitor_proc; } return NULL; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -