static void create_panel(GtkWidget *vbox, Reader *reader, gint first_create) { // GkrellmKrell *k; GkrellmStyle *style; // GkrellmPiximage *krell_piximage; gchar *text; if (first_create) reader->panel = gkrellm_panel_new0(); else gkrellm_destroy_krell_list(reader->panel); /* Create a krell. A Krell structure is allocated and linked into | the list of krells pointed to by panel->krell. */ style = gkrellm_meter_style(DEFAULT_STYLE_ID); //GTK2 style->label_position = LABEL_CENTER; // krell_piximage = gkrellm_krell_meter_piximage(DEFAULT_STYLE_ID); // k = gkrellm_create_krell(panel, krell_piximage, style); // k->full_scale = 30; /* Configure panel calculates the panel height needed for the "Plugin" label. | and the krell. */ reader->panel->textstyle = gkrellm_meter_textstyle(DEFAULT_STYLE_ID); gkrellm_panel_configure(reader->panel, "SNMP", style); // reader->panel->textstyle = gkrellm_panel_alt_textstyle(DEFAULT_STYLE_ID); /* Build the configured panel with a background image and pack it into | the vbox assigned to this monitor. */ //dep: gkrellm_create_panel(vbox, reader->panel, gkrellm_bg_meter_piximage(DEFAULT_STYLE_ID)); gkrellm_panel_create(vbox, mon, reader->panel); gkrellm_monitor_height_adjust(reader->panel->h); if (first_create) { gtk_signal_connect(GTK_OBJECT (reader->panel->drawing_area), "expose_event", (GtkSignalFunc) panel_expose_event, NULL); reader->tooltip=gtk_tooltips_new(); } /* refresh the display */ text = render_label(reader); gkrellm_dup_string(&reader->panel->label->string, text); g_free(text); }
static void update_plugin() { Reader *reader; gchar *text; u_long val, since_last; gint clock_style_id; // GkrellmKrell *k; // gint i; /* See if we recieved SNMP responses */ simpleSNMPupdate(); /* Send new SNMP requests */ for (reader = readers; reader ; reader = reader->next) { // k = KRELL(panel); // k->previous = 0; if ( (! reader->session) && (! reader->old_error) ) { reader->session = simpleSNMPopen(reader->peer, reader->port, reader->community, reader); if (! reader->session) { text = reader->old_error; reader->old_error = render_error(reader); g_free(text); } } /* Send new SNMP requests */ if ( (reader->session) && ((GK.timer_ticks % reader->delay) == 0)) simpleSNMPsend(reader->session, reader->objid, reader->objid_length); if ( (reader->session) && (reader->sample) ) { if ((reader->error) && (reader->panel != NULL)) { if (!reader->old_error || strcmp(reader->error, reader->old_error) ) { text = reader->old_error; reader->old_error = g_strdup(reader->error); g_free(text); reader->panel->textstyle = gkrellm_panel_alt_textstyle(DEFAULT_STYLE_ID); text = render_error(reader); gtk_tooltips_set_tip(reader->tooltip, reader->panel->drawing_area, text, ""); gtk_tooltips_enable(reader->tooltip); g_free(text); } } else { if ((GK.timer_ticks % reader->delay) == 0) if (reader->chart != NULL) { /* 100: turn TimeTicks into seconds */ since_last = (reader->sample_time - reader->old_sample_time) / 100; if (reader->delta) val = (reader->sample_n - reader->old_sample_n) / ( (since_last < 1) ? 1 : since_last ) / ( (reader->divisor == 0) ? 1 : reader->divisor ); else val = reader->sample_n / ( (reader->divisor == 0) ? 1 : reader->divisor ); gkrellm_store_chartdata(reader->chart, 0, val); cb_draw_chart(reader); text = render_info(reader); gtk_tooltips_set_tip(reader->tooltip, reader->chart->drawing_area, text, ""); gtk_tooltips_enable(reader->tooltip); g_free(text); reader->old_sample_n = reader->sample_n; reader->old_sample_time = reader->sample_time; } /* if there are changes update label */ if (reader->panel != NULL) { reader->panel->textstyle = gkrellm_panel_textstyle(DEFAULT_STYLE_ID); if ( !reader->old_sample || strcmp(reader->sample, reader->old_sample) || (reader->sample_n != reader->old_sample_n) ) { g_free(reader->old_sample); reader->old_sample = g_strdup(reader->sample); text = render_label(reader); gkrellm_dup_string(&reader->panel->label->string, text); g_free(text); // i = atoi(text); text = render_info(reader); gtk_tooltips_set_tip(reader->tooltip, reader->panel->drawing_area, text, ""); gtk_tooltips_enable(reader->tooltip); g_free(text); reader->old_sample_n = reader->sample_n; reader->old_sample_time = reader->sample_time; } } } } else { if (reader->panel != NULL) reader->panel->textstyle = gkrellm_panel_alt_textstyle(DEFAULT_STYLE_ID); if (reader->panel != NULL) gtk_tooltips_disable(reader->tooltip); // i = -1; } // gkrellm_update_krell(panel, k, i); clock_style_id = gkrellm_lookup_meter_style_id(CLOCK_STYLE_NAME); if (reader->panel != NULL) gkrellm_draw_panel_label( reader->panel ); //GTK2 gkrellm_bg_panel_piximage(clock_style_id) ); if (reader->panel != NULL) gkrellm_draw_panel_layers(reader->panel); } }
static void load_plugin_config(gchar *config_line) { Reader *reader, *nreader = NULL; gchar proto[CFG_BUFSIZE], bufl[CFG_BUFSIZE]; gchar bufc[CFG_BUFSIZE], bufp[CFG_BUFSIZE]; gchar bufo[CFG_BUFSIZE], bufu[CFG_BUFSIZE]; gchar buft[CFG_BUFSIZE], peer[CFG_BUFSIZE]; gint n; if (sscanf(config_line, GKRELLM_CHARTCONFIG_KEYWORD " %s %[^\n]", bufl, bufc) == 2) { g_strdelimit(bufl, "_", ' '); /* look for any such reader */ for (reader = readers; reader ; reader = reader->next) { if (!strcmp(reader->label, bufl)) { nreader = reader; break; } } /* look for unconf'd reader */ for (reader = readers; reader ; reader = reader->next) { if (!strcmp(reader->label, bufl) && !reader->chart_config) { nreader = reader; break; } } if (!nreader) {/* well... */ fprintf(stderr, "chart_config appeared before chart, this isn't handled\n%s\n", config_line); return; } //"chart_config in " gkrellm_load_chartconfig(&nreader->chart_config, bufc, /*max_cd*/1); return; } reader = g_new0(Reader, 1); n = sscanf(config_line, "%s %[^:]://%[^@]@%[^:]:%[^:]:%d/%s %s %d %d %d %d", bufl, proto, bufc, buft, bufp, &reader->port, bufo, bufu, &reader->delay, &reader->delta, &reader->divisor, &reader->scale); if (n >= 6) { g_snprintf(peer, CFG_BUFSIZE, "%s:%s", buft, bufp); peer[CFG_BUFSIZE-1] = '\0'; } else n = sscanf(config_line, "%s %[^:]://%[^@]@%[^:]:%d/%s %s %d %d %d %d", bufl, proto, bufc, peer, &reader->port, bufo, bufu, &reader->delay, &reader->delta, &reader->divisor, &reader->scale); if (n >= 7) { if (g_strcasecmp(proto, "snmp") == 0) { gkrellm_dup_string(&reader->label, bufl); gkrellm_dup_string(&reader->community, bufc); gkrellm_dup_string(&reader->peer, peer); if (reader->delay < 10) reader->delay = 100; if (reader->divisor == 0) reader->divisor = 1; gkrellm_dup_string(&reader->oid_str, bufo); reader->objid_length = MAX_OID_LEN; if (!snmp_parse_oid(reader->oid_str, reader->objid, &reader->objid_length)) { //FIXME: printf("error parsing oid: %s\n", reader->oid_str); } if (n > 7) { gkrellm_dup_string(&reader->unit, bufu); } else { gkrellm_dup_string(&reader->unit, ""); } g_strdelimit(reader->label, "_", ' '); g_strdelimit(reader->unit, "_", ' '); // reader->old_sample = "SNMP"; // be nice. } if (!readers) readers = reader; else { for (nreader = readers; nreader->next ; nreader = nreader->next); nreader->next = reader; } } }
static void apply_plugin_config() { Reader *reader, *nreader; gchar *name; gint row; if (!list_modified) return; for (reader = readers; reader; reader = readers) { readers = reader->next; destroy_reader(reader); } for (row = 0; row < GTK_CLIST(reader_clist)->rows; ++row) { gint i; i = 0; reader = g_new0(Reader, 1); gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); gkrellm_dup_string(&reader->label, name); gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); gkrellm_dup_string(&reader->peer, name); gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); reader->port = atoi(name); gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); gkrellm_dup_string(&reader->community, name); gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); gkrellm_dup_string(&reader->oid_str, name); reader->objid_length = MAX_OID_LEN; if (!snmp_parse_oid(reader->oid_str, reader->objid, &reader->objid_length)) { //FIXME: printf("error parsing oid: %s\n", reader->oid_str); } gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); gkrellm_dup_string(&reader->unit, name); gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); reader->delay = atoi(name); gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); reader->divisor = atoi(name); gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); reader->delta = (strcmp(name, "yes") == 0) ? TRUE : FALSE; gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); reader->scale = (strcmp(name, "yes") == 0) ? TRUE : FALSE; gtk_clist_get_text(GTK_CLIST(reader_clist), row, i++, &name); reader->active = (strcmp(name, "yes") == 0) ? TRUE : FALSE; if (!readers) readers = reader; else { for (nreader = readers; nreader->next ; nreader = nreader->next); nreader->next = reader; } create_reader(main_vbox, reader, 1); } list_modified = 0; }
/* Calculate panel height required for given border, label height, | krell heights, and decal heights. Also calculate label extents | and load all this info into a GkrellmLabel structure. | After panel height is calculated, calling routine may want to adjust | krell or decal y offsets for centering. */ void gkrellm_panel_configure(GkrellmPanel *p, gchar *string, GkrellmStyle *style) { GList *list; GkrellmKrell *k; GkrellmDecal *d; GkrellmLabel *lbl; GkrellmTextstyle *ts = NULL; gint y, h_panel, h, baseline; gint top_margin = 0, bottom_margin = 0; if (!p) return; p->style = style; lbl = p->label; lbl->position = GKRELLM_LABEL_CENTER; setup_panel_style(p, style); gkrellm_get_top_bottom_margins(style, &top_margin, &bottom_margin); ts = p->textstyle; if (string) { if (g_utf8_validate(string, -1, NULL)) gkrellm_dup_string(&lbl->string, string); else lbl->string = g_locale_to_utf8(string, -1, NULL, NULL, NULL); } else gkrellm_dup_string(&lbl->string, string); if (lbl->string && ts && lbl->position >= 0) gkrellm_text_extents(ts->font, string, strlen(string), &lbl->width, &lbl->height, &baseline, NULL); else { lbl->width = 0; lbl->height = 0; baseline = 0; } if (style && style->label_yoff > 0) h_panel = style->label_yoff + bottom_margin; else h_panel = top_margin + bottom_margin; h_panel += lbl->height + (ts ? ts->effect : 0); /* If krell_yoff is -1, then in gkrellm_create_krell() k->y0 was put | at the top margin. If krell_yoff is < -1, then here I will bottom | justify the krell (so must go through krell list twice). | GkrellmDecals are assumed to fit inside of margins (unless they are | overlays). Caller must subtract off bottom_margin if this is not so. */ for (list = p->decal_list; list; list = list->next) { d = (GkrellmDecal *) list->data; if (d->flags & DF_OVERLAY_PIXMAPS) continue; h = d->y + d->h + bottom_margin; if (h > h_panel) h_panel = h; } for (list = p->krell_list; list; list = list->next) { k = (GkrellmKrell *) list->data; if (k->y0 == -2) /* Will bottom justify */ y = 0; else if (k->y0 == -3) /* Will bottom margin justify */ y = top_margin; else y = k->y0; h = y + k->h_frame; if (k->flags & KRELL_FLAG_BOTTOM_MARGIN) h += bottom_margin; if (h > h_panel) h_panel = h; } for (list = p->krell_list; list; list = list->next) { k = (GkrellmKrell *) list->data; if (k->y0 < 0) { k->y0 = h_panel - k->h_frame; /* Bottom justify */ if (k->flags & KRELL_FLAG_BOTTOM_MARGIN) /* or y0 == -3 */ k->y0 -= bottom_margin; } } if (h_panel <= 0) h_panel = 1; if (style && style->label_yoff > 0) lbl->y_panel = style->label_yoff - (baseline - lbl->height); else lbl->y_panel = top_margin - (baseline - lbl->height); p->h_configure = h_panel; }