📄 alerts.c
字号:
if (alarm < warn) gtk_spin_button_set_value(spin, alarm); alert->config_modified = TRUE; gtk_widget_set_sensitive(alert->icon_box, TRUE); }static voidcb_high_warn_spin_changed(GtkWidget *adjustment, GkrellmAlert *alert) { GtkSpinButton *spin; gfloat alarm, warn, low_warn; spin = GTK_SPIN_BUTTON(alert->high.warn_limit_spin_button); warn = gtk_spin_button_get_value(spin); spin = GTK_SPIN_BUTTON(alert->high.alarm_limit_spin_button); alarm = gtk_spin_button_get_value(spin); if (alarm < warn) gtk_spin_button_set_value(spin, warn); if (alert->check_low) { spin = GTK_SPIN_BUTTON(alert->low.warn_limit_spin_button); low_warn = gtk_spin_button_get_value(spin); if (low_warn > warn) gtk_spin_button_set_value(spin, warn); } alert->config_modified = TRUE; gtk_widget_set_sensitive(alert->icon_box, TRUE); }static voidcb_low_warn_spin_changed(GtkWidget *adjustment, GkrellmAlert *alert) { GtkSpinButton *spin; gfloat alarm, warn, high_warn; spin = GTK_SPIN_BUTTON(alert->low.warn_limit_spin_button); warn = gtk_spin_button_get_value(spin); spin = GTK_SPIN_BUTTON(alert->low.alarm_limit_spin_button); alarm = gtk_spin_button_get_value(spin); if (alarm > warn) gtk_spin_button_set_value(spin, warn); if (alert->check_high) { spin = GTK_SPIN_BUTTON(alert->high.warn_limit_spin_button); high_warn = gtk_spin_button_get_value(spin); if (high_warn < warn) gtk_spin_button_set_value(spin, warn); } alert->config_modified = TRUE; gtk_widget_set_sensitive(alert->icon_box, TRUE); }static voidcb_low_alarm_spin_changed(GtkWidget *adjustment, GkrellmAlert *alert) { GtkSpinButton *spin; gfloat alarm, warn; spin = GTK_SPIN_BUTTON(alert->low.alarm_limit_spin_button); alarm = gtk_spin_button_get_value(spin); spin = GTK_SPIN_BUTTON(alert->low.warn_limit_spin_button); warn = gtk_spin_button_get_value(spin); if (alarm > warn) gtk_spin_button_set_value(spin, alarm); alert->config_modified = TRUE; gtk_widget_set_sensitive(alert->icon_box, TRUE); }voidgkrellm_alert_config_window(GkrellmAlert **ap) { GtkWidget *tabs; GtkWidget *main_vbox, *tab_vbox, *vbox, *vbox1 = NULL; GtkWidget *hbox, *hbox1, *image; GtkWidget *table = NULL; GtkWidget *button; GtkWidget *label; GtkWidget *separator; GList *plist, *list; GkrellmAlert *alert; GkrellmAlertPlugin *gap; GkrellmAlertPluginLink *apl; gpointer data; gchar *title; gint w, n_tabs = 1; if (!ap || !*ap) return; alert = *ap; if (!alert->config_window) { alert->config_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(alert->config_window), "delete_event", G_CALLBACK(alert_config_window_delete_event), ap); gtk_window_set_title(GTK_WINDOW(alert->config_window), _("GKrellM Set Alerts")); gtk_window_set_wmclass(GTK_WINDOW(alert->config_window), "Gkrellm_conf", "Gkrellm"); gtk_container_set_border_width(GTK_CONTAINER(alert->config_window), 4); main_vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(alert->config_window), main_vbox); tabs = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(main_vbox), tabs, TRUE, TRUE, 0); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tabs), GTK_POS_TOP); tab_vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Alerts")); if (alert->name && alert->unit_string) title = g_strdup_printf("%s - %s", alert->name, alert->unit_string); else if (alert->name) title = g_strdup_printf("%s", alert->name); else title = g_strdup_printf("%s", alert->unit_string); vbox = gkrellm_gtk_framed_vbox(tab_vbox, title, 4, FALSE, 4, 3); g_free(title); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); w = 70; if (alert->max_high > 100000) w += log(alert->max_high / 100000) * 5; alert->high.alarm_limit_spin_button = NULL; alert->high.warn_limit_spin_button = NULL; if (alert->check_high && !alert->check_hardwired) { vbox1 = gkrellm_gtk_framed_vbox(hbox, _("High Limits"), 2, FALSE, 2,2); gkrellm_gtk_spin_button(vbox1, &alert->high.alarm_limit_spin_button, alert->high.alarm_limit, alert->min_low, alert->max_high, alert->step0, alert->step1, alert->digits, w, cb_high_alarm_spin_changed, alert, FALSE, _("High alarm limit")); gkrellm_gtk_spin_button(vbox1, &alert->high.warn_limit_spin_button, alert->high.warn_limit, alert->min_low, alert->max_high, alert->step0, alert->step1, alert->digits, w, cb_high_warn_spin_changed, alert, FALSE, _("High warn limit")); } alert->low.alarm_limit_spin_button = NULL; alert->low.warn_limit_spin_button = NULL; if (alert->check_low && !alert->check_hardwired) { vbox1 = gkrellm_gtk_framed_vbox_end(hbox, _("Low Limits"), 2, FALSE, 2, 2); gkrellm_gtk_spin_button(vbox1, &alert->low.warn_limit_spin_button, alert->low.warn_limit, alert->min_low, alert->max_high, alert->step0, alert->step1, alert->digits, w, cb_low_warn_spin_changed, alert, FALSE, _("Low warn limit")); gkrellm_gtk_spin_button(vbox1, &alert->low.alarm_limit_spin_button, alert->low.alarm_limit, alert->min_low, alert->max_high, alert->step0, alert->step1, alert->digits, w, cb_low_alarm_spin_changed, alert, FALSE, _("Low alarm limit")); } if (alert->delay_step > 0) { vbox1 = gkrellm_gtk_framed_vbox(vbox, NULL, 2, FALSE, 2, 2); gkrellm_gtk_spin_button(vbox1, &alert->delay_spin_button, alert->delay * alert->delay_step, alert->delay_low, alert->delay_high, alert->delay_step, alert->delay_step, 0, 70, cb_delay_spin_changed, alert, FALSE, _("Seconds limit conditions must exist to have an alert")); } if (alert->cb_config_create) { vbox1 = gkrellm_gtk_framed_vbox(vbox, NULL, 2, FALSE, 2, 2); (*alert->cb_config_create)(alert, vbox1, alert->cb_config_create_data); } if (alert->do_alarm_command || alert->do_warn_command) { vbox1 = gkrellm_gtk_framed_vbox(vbox, _("Commands - with repeat intervals in seconds"), 2, FALSE, 2, 2); table = gtk_table_new(3 /* across */, 3 /* down */, FALSE); gtk_table_set_col_spacings(GTK_TABLE(table), 4); gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0); } alert->alarm_command_entry = alert->alarm_repeat_spin_button = NULL; if (alert->do_alarm_command) { label = gtk_label_new(_("Alarm command:")); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); alert->alarm_command_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(alert->alarm_command_entry), 255); gtk_table_attach_defaults(GTK_TABLE(table), alert->alarm_command_entry, 1, 2, 0, 1); gtk_entry_set_text(GTK_ENTRY(alert->alarm_command_entry), alert->alarm_command); gkrellm_gtk_spin_button(NULL, &alert->alarm_repeat_spin_button, alert->alarm_repeat_set, 0, 1000, 1, 10, 0, 60, NULL, NULL, FALSE, NULL); gtk_table_attach_defaults(GTK_TABLE(table), alert->alarm_repeat_spin_button, 2, 3, 0, 1); } alert->warn_command_entry = alert->warn_repeat_spin_button = NULL; if (alert->do_warn_command) { label = gtk_label_new(_("Warn command:")); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); alert->warn_command_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(alert->warn_command_entry), 255); gtk_table_attach_defaults(GTK_TABLE(table), alert->warn_command_entry, 1, 2, 1, 2); gtk_entry_set_text(GTK_ENTRY(alert->warn_command_entry), alert->warn_command); gtk_widget_set_size_request(alert->warn_command_entry, 300, -1); gkrellm_gtk_spin_button(NULL, &alert->warn_repeat_spin_button, alert->warn_repeat_set, 0, 1000, 1, 10, 0, 60, NULL, NULL, FALSE, NULL); gtk_table_attach_defaults(GTK_TABLE(table), alert->warn_repeat_spin_button, 2, 3, 1, 2); } if (alert->do_alarm_command || alert->do_warn_command) { separator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox1), separator, FALSE, FALSE, 4); label = gtk_label_new( _("A repeat of zero seconds executes the command once per alert.")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(vbox1), label, FALSE, FALSE, 0); } for (plist = alert_plugin_list; plist; plist = plist->next) { data = NULL; gap = (GkrellmAlertPlugin *) plist->data; for (list = alert->plugin_list; list; list = list->next) { apl = (GkrellmAlertPluginLink *) list->data; if (apl->alert_plugin == gap) { data = apl->data; break; } } if (MONITOR_ENABLED(gap->mon) && gap->config_create_func) { tab_vbox = gkrellm_gtk_framed_notebook_page(tabs, gap->tab_name); (*gap->config_create_func)(tab_vbox, alert, data); ++n_tabs; } } if (n_tabs == 1) gtk_notebook_set_show_tabs(GTK_NOTEBOOK(tabs), FALSE); alert->icon_box = gtk_event_box_new(); hbox1 = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(main_vbox), hbox1, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox1), alert->icon_box, TRUE, FALSE, 0); image = gtk_image_new_from_pixbuf(gkrellm_alert_pixbuf()); gtk_container_add(GTK_CONTAINER(alert->icon_box), image); gtk_widget_set_sensitive(alert->icon_box, alert->activated); hbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END); gtk_box_set_spacing(GTK_BOX(hbox), 5); gtk_box_pack_end(GTK_BOX(hbox1), hbox, FALSE, FALSE, 0); alert->delete_button = gtk_button_new_from_stock(GTK_STOCK_DELETE); GTK_WIDGET_SET_FLAGS(alert->delete_button, GTK_CAN_DEFAULT); g_signal_connect(G_OBJECT(alert->delete_button), "clicked", G_CALLBACK(alert_delete), ap); gtk_box_pack_start(GTK_BOX(hbox), alert->delete_button, TRUE, TRUE, 0); gtk_widget_set_sensitive(alert->delete_button, alert->activated); button = gtk_button_new_from_stock(GTK_STOCK_APPLY); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(alert_apply), ap); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(alert_close), ap); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); button = gtk_button_new_from_stock(GTK_STOCK_OK); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(alert_ok), ap); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); gtk_widget_grab_default(button); gtk_widget_show_all(alert->config_window); } else gtk_window_present(GTK_WINDOW(alert->config_window)); alert->config_closing = FALSE; }voidgkrellm_save_alertconfig(FILE *f, GkrellmAlert *alert, gchar *mon_keyword, gchar *name) { GList *list; GkrellmAlertPlugin *gap; GkrellmAlertPluginLink *apl; gchar *s, *p; if (!f || !alert || !mon_keyword) return; if (name) s = g_strdup_printf("%s %s %s ", mon_keyword, GKRELLM_ALERTCONFIG_KEYWORD, name); else s = g_strdup_printf("%s %s ", mon_keyword,GKRELLM_ALERTCONFIG_KEYWORD); if (alert->alarm_command && *alert->alarm_command) fprintf(f, "%s alarm_command %s\n", s, alert->alarm_command); if (alert->warn_command && *alert->warn_command) fprintf(f, "%s warn_command %s\n", s, alert->warn_command); fprintf(f, "%s values %d %d %d %d\n", s, alert->do_panel_updates, alert->check_high, alert->check_low, alert->check_hardwired); fprintf(f, "%s repeat %d %d\n", s, alert->alarm_repeat_set, alert->warn_repeat_set); /* 2.1.15: scale saved float values to avoid decimal points in the config | because of locale breakage if decimal point changes '.' <-> '," */ fprintf(f, "%s limits %.0f %.0f %.0f %.0f\n", s, alert->high.alarm_limit * GKRELLM_FLOAT_FACTOR, alert->high.warn_limit * GKRELLM_FLOAT_FACTOR, alert->low.warn_limit * GKRELLM_FLOAT_FACTOR, alert->low.alarm_limit * GKRELLM_FLOAT_FACTOR); if (alert->delay_step > 0) fprintf(f, "%s delay %d %d %d %d\n", s, alert->delay, alert->delay_high, alert->delay_low, alert->delay_step); /* name can be quoted, but the id_string should not have embedded quotes. | id_string is so a plugin can get a unique config name for an alert */ g_free(alert->id_string); p = name; if (p && *p == '"') ++p; alert->id_string = g_strconcat(mon_keyword, p ? "-" : NULL, p, NULL); if ((p = strrchr(alert->id_string, '"')) != NULL) *p = '\0'; for (p = alert->id_string; *p; ++p) if (*p == '/' || *p == ' ') *p = '-'; fprintf(f, "%s id_string %s\n", s, alert->id_string); for (list = alert->plugin_list; list; list = list->next) { apl = (GkrellmAlertPluginLink *) list->data; gap = apl->alert_plugin; if (MONITOR_ENABLED(gap->mon) && gap->config_save_func) { p = g_strconcat(s, "plugin ", gap->name, NULL); (*gap->config_save_func)(alert, apl->data, f, p, alert->id_string); g_free(p); } } g_free(s); }voidgkrellm_load_alertconfig(GkrellmAlert **ap, gchar *config_line) { GList *list; GkrellmAlert *alert; GkrellmAlertPlugin *gap; gchar config[32], item[CFG_BUFSIZE]; gchar name[64], item1[CFG_BUFSIZE]; gint n; if (!ap || !config_line) return; if (!*ap) *ap = g_new0(GkrellmAlert, 1); alert = *ap; n = sscanf(config_line, "%31s %[^\n]", config, item); if (n != 2) return; if (!strcmp(config, "alarm_command")) gkrellm_dup_string(&alert->alarm_command, item); else if (!strcmp(config, "warn_command")) gkrellm_dup_string(&alert->warn_command, item); else if (!strcmp(config, "values")) sscanf(item, "%d %d %d %d", &alert->do_panel_updates, &alert->check_high, &alert->check_low, &alert->check_hardwired); else if (!strcmp(config, "delay")) { sscanf(item, "%d %d %d %d", &n, &alert->delay_high, &alert->delay_low, &alert->delay_step); gkrellm_alert_set_delay(alert, n); } else if (!strcmp(config, "repeat")) sscanf(item, "%d %d", &alert->alarm_repeat_set, &alert->warn_repeat_set); else if (!strcmp(config, "limits")) { sscanf(item, "%f %f %f %f", &alert->high.alarm_limit, &alert->high.warn_limit, &alert->low.warn_limit, &alert->low.alarm_limit); alert->high.alarm_limit /= _GK.float_factor; alert->high.warn_limit /= _GK.float_factor; alert->low.warn_limit /= _GK.float_factor; alert->low.alarm_limit /= _GK.float_factor; } else if (!strcmp(config, "id_string")) { gkrellm_dup_string(&alert->id_string, item); for (list = alert_plugin_list; list; list = list->next) { gap = (GkrellmAlertPlugin *) list->data; if (MONITOR_ENABLED(gap->mon) && gap->config_load_func) (*gap->config_load_func)(alert, "id_string", alert->id_string); } } else if (!strcmp(config, "plugin")) { if (sscanf(item, "%63s %[^\n]", name, item1) == 2) { for (list = alert_plugin_list; list; list = list->next) { gap = (GkrellmAlertPlugin *) list->data; if (!strcmp(name, gap->name)) { if (MONITOR_ENABLED(gap->mon) && gap->config_load_func) (*gap->config_load_func)(alert, item1, alert->id_string); break; } } } } alert->activated = TRUE; }/* ------------------------------------------------------------------- *//* gdk-pixbuf-csource --static alert_inline.png *//* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */static const guint8 alert_inline[] = { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (925) */ "\0\0\3\265" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (72) */ "\0\0\0H" /* width (18) */ "\0\0\0\22" /* height (18) */ "\0\0\0\22" /* pixel_data: */ "\227\0\0\0\0\10\204}{\377B89\377\20\24\20\377\10\2\10\377\0\2\0\377\30" "\24\20\3779<9\377\214\212\204\377\211\0\0\0\0\12e`T\37732*\377\202]@" "\377\251eF\377\267g?\377\265cF\377\243eG\377\202VG\37773$\377io`\377" "\207\0\0\0\0\14PVG\377a<*\377\257^?\377\310\211q\377\333\262\241\377" "\222\202t\377\311\254\234\377\333\262\233\377\310\211q\377\257^?\377" "Z=+\377\\bM\377\205\0\0\0\0\16cfS\377Z=+\377\257^?\377\320\234\203\377" "\333\270\241\377\252\217}\377\31\25\23\3772*%\377\342\274\251\377\333" "\270\241\377\320\234\203\377\257^?\377Z=+\377|~k\377\203\0\0\0\0\17\204" "\206{\37773$\377\251_?\377\301\202b\377\325\253\222\377\341\255\233\377" "aNE\377\222tb\377\0\0\0\377\310\232\211\377\333\257\233\377\325\253\222" "\377\302{h\377\251Z?\37773$\377\203\0\0\0\0\12JAB\377xQ1\377\257[?\377" "\320\234\203\377\325\234\203\377\333\236\205\3770#\35\377\333\236\205" "\377\30\21\17\377aF;\377\202\325\234\203\377\4\310\222u\377\257[?\377" "tJ1\377kik\377\202\0\0\0\0\5\20\24\20\377\235[G\377\257[?\377\317\212" "p\377\325\215u\377\202vOA\377\11\325\215u\377vM>\377\0\0\0\377\325\213" "q\377\317\212p\377\317\213v\377\260T8\377\235[G\377)$)\377\202\0\0\0" "\0\20\0\2\0\377\251Z?\377\267X?\377\310q\\\377\310{c\377.\32\25\377\270" "lW\377\316z\\\377sA6\377\0\0\0\377sA6\377\317vb\377\301mV\377\257Q?\377" "\245R8\377\10\2\10\377\202\0\0\0\0\6\0\2\0\377\251S?\377\260T8\377\277" "N9\377\226M9\377,\25\21\377\202\205@4\377\10\200B4\377,\25\21\377+\26" "\20\377\277N9\377\270K9\377\252M8\377\237N8\377\10\2\10\377\202\0\0\0" "\0\20\30\24\30\377\230Y@\377\252S8\377\267R?\377T)\34\377\200>.\377\300" "]F\377\307[F\377\300]F\377\200<.\377\0\0\0\377\221J<\377\260L8\377\245" "J8\377\230VG\377!(!\377\202\0\0\0\0\7""9<1\377xO@\377\245J8\377\227D" "1\377\0\0\0\377\266S8\377\302Q?\377\203\274S?\377\6\0\0\0\377N\37\31" "\377\252F8\377\236F2\377~N@\377cic\377\202\0\0\0\0\12\234\216\224\377" "73$\377\237G8\377\22\10\6\377\0\0\0\377N\40\26\377\242?1\377\257I2\377" "\266G8\377N\40\26\377\202\0\0\0\377\3F\37\26\377\231D9\37773$\377\204" "\0\0\0\0\5ii`\377T3#\377\231E2\377\237G8\377\252F8\377\203\251B2\377" "\6\252F8\377\236@2\377\231@2\377\231E2\377N6#\377{\204q\377\205\0\0\0" "\0\4baY\377T3#\377\223D2\377\231E2\377\202\236@2\377\6\237<6\377\231" "E2\377\231@2\377\223@2\377T3#\377ii`\377\207\0\0\0\0\4t}j\377-4#\377" "~N@\377\216K9\377\202\223@2\377\4\222K@\377xO@\37773$\377{\204q\377\212" "\0\0\0\0\6kik\377!(!\377\10\2\10\377\0\2\0\377)$)\377kik\377\230\0\0" "\0\0"};static GdkPixbuf *alert_pixbuf;GdkPixbuf *gkrellm_alert_pixbuf(void) { if (!alert_pixbuf) alert_pixbuf = gdk_pixbuf_new_from_inline(-1, alert_inline, FALSE, NULL); return alert_pixbuf; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -