Index: trunk/src_plugins/lib_gtk_common/bu_status_line.c =================================================================== --- trunk/src_plugins/lib_gtk_common/bu_status_line.c (revision 11792) +++ trunk/src_plugins/lib_gtk_common/bu_status_line.c (revision 11793) @@ -42,13 +42,12 @@ gtk_label_set_markup(GTK_LABEL(status_line_label), text ? text : ""); } -void pcb_gtk_status_line_update(GtkWidget *status_line_label, int compat_horiz) +static inline void gen_status_long(char *text, size_t text_size, int compat_horiz, const pcb_unit_t *unit) { const gchar *flag = conf_core.editor.all_direction_lines ? "*" : (conf_core.editor.line_refraction == 0 ? "X" : (conf_core.editor.line_refraction == 1 ? "_/" : "\\_")); - char text[1024]; - pcb_snprintf(text, sizeof(text), _( + pcb_snprintf(text, text_size, _( "%m+view=%s " "grid=%$mS " "line=%mS (%s%s)%s" @@ -56,7 +55,7 @@ "clearance=%mS " "text=%i%% " "buffer=#%i"), - conf_core.editor.grid_unit->allow, conf_core.editor.show_solder_side ? _("solder") : _("component"), + unit->allow, conf_core.editor.show_solder_side ? _("solder") : _("component"), PCB->Grid, conf_core.design.line_thickness, flag, conf_core.editor.rubber_band_mode ? ",R" : "", compat_horiz ? "\n" : "", conf_core.design.via_thickness, conf_core.design.via_drilling_hole, @@ -63,7 +62,46 @@ conf_core.design.clearance, conf_core.design.text_scale, conf_core.editor.buffer_number + 1); +} +static inline void gen_status_short(char *text, size_t text_size, int compat_horiz, const pcb_unit_t *unit) +{ + pcb_snprintf(text, text_size, _( + "%m+" + "grid=%$mS " + "line=%mS " + "via=%mS (%mS) " + "clearance=%mS"), + unit->allow, + PCB->Grid, + conf_core.design.line_thickness, + conf_core.design.via_thickness, conf_core.design.via_drilling_hole, + conf_core.design.clearance); +} + +void pcb_gtk_status_line_update(GtkWidget *status_line_label, int compat_horiz) +{ + char text[1024]; + static const pcb_unit_t *unit_mm = NULL, *unit_mil; + pcb_unit_t *unit_inv; + + if (status_line_label == NULL) + return; + + if (unit_mm == NULL) { /* cache mm and mil units to save on the lookups */ + unit_mm = get_unit_struct("mm"); + unit_mil = get_unit_struct("mil"); + } + + gen_status_long(text, sizeof(text), compat_horiz, conf_core.editor.grid_unit); pcb_gtk_status_line_set_text(status_line_label, text); + + if (conf_core.editor.grid_unit == unit_mm) + unit_inv = unit_mil; + else + unit_inv = unit_mm; + + gen_status_short(text, sizeof(text), compat_horiz, unit_inv); + gtk_widget_set_tooltip_text(GTK_WIDGET(status_line_label), text); }