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);
}