printers: Show supply levels
Shows supply levels for printers which return marker-levels, marker-colors and marker-names attributes. There are 2 things to finish here: - set properly background color of the drawing area - remove backslashes from names of marker-names
This commit is contained in:
parent
b9b2de1e0e
commit
1ea42cc212
2 changed files with 168 additions and 2 deletions
|
@ -34,6 +34,10 @@ G_DEFINE_DYNAMIC_TYPE (CcPrintersPanel, cc_printers_panel, CC_TYPE_PANEL)
|
||||||
|
|
||||||
#define MECHANISM_BUS "org.opensuse.CupsPkHelper.Mechanism"
|
#define MECHANISM_BUS "org.opensuse.CupsPkHelper.Mechanism"
|
||||||
|
|
||||||
|
#define SUPPLY_BAR_WIDTH 140
|
||||||
|
#define SUPPLY_BAR_HEIGHT 10
|
||||||
|
#define SUPPLY_BAR_SPACE 5
|
||||||
|
|
||||||
struct _CcPrintersPanelPrivate
|
struct _CcPrintersPanelPrivate
|
||||||
{
|
{
|
||||||
GtkBuilder *builder;
|
GtkBuilder *builder;
|
||||||
|
@ -134,9 +138,11 @@ printer_selection_changed_cb (GtkTreeSelection *selection,
|
||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
gchar *reason = NULL;
|
gchar *reason = NULL;
|
||||||
gchar **printer_reasons = NULL;
|
gchar **printer_reasons = NULL;
|
||||||
|
gchar *marker_levels = NULL;
|
||||||
gchar *description = NULL;
|
gchar *description = NULL;
|
||||||
gchar *location = NULL;
|
gchar *location = NULL;
|
||||||
gchar *status = NULL;
|
gchar *status = NULL;
|
||||||
|
gint width, height;
|
||||||
int printer_state = 3;
|
int printer_state = 3;
|
||||||
int id, i, j;
|
int id, i, j;
|
||||||
static const char * const reasons[] =
|
static const char * const reasons[] =
|
||||||
|
@ -210,6 +216,8 @@ printer_selection_changed_cb (GtkTreeSelection *selection,
|
||||||
description = g_strdup (priv->dests[id].options[i].value);
|
description = g_strdup (priv->dests[id].options[i].value);
|
||||||
else if (g_strcmp0 (priv->dests[id].options[i].name, "printer-state-reasons") == 0)
|
else if (g_strcmp0 (priv->dests[id].options[i].name, "printer-state-reasons") == 0)
|
||||||
reason = priv->dests[id].options[i].value;
|
reason = priv->dests[id].options[i].value;
|
||||||
|
else if (g_strcmp0 (priv->dests[priv->current_dest].options[i].name, "marker-levels") == 0)
|
||||||
|
marker_levels = priv->dests[priv->current_dest].options[i].value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find the first of the most severe reasons
|
/* Find the first of the most severe reasons
|
||||||
|
@ -317,6 +325,33 @@ printer_selection_changed_cb (GtkTreeSelection *selection,
|
||||||
g_signal_handlers_block_by_func (G_OBJECT (widget), printer_disable_cb, self);
|
g_signal_handlers_block_by_func (G_OBJECT (widget), printer_disable_cb, self);
|
||||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), printer_state == 5);
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), printer_state == 5);
|
||||||
g_signal_handlers_unblock_by_func (G_OBJECT (widget), printer_disable_cb, self);
|
g_signal_handlers_unblock_by_func (G_OBJECT (widget), printer_disable_cb, self);
|
||||||
|
|
||||||
|
|
||||||
|
widget = (GtkWidget*)
|
||||||
|
gtk_builder_get_object (priv->builder, "supply-drawing-area");
|
||||||
|
|
||||||
|
width = gtk_widget_get_allocated_width (widget);
|
||||||
|
|
||||||
|
if (marker_levels)
|
||||||
|
{
|
||||||
|
gchar **marker_levelsv = NULL;
|
||||||
|
|
||||||
|
widget = (GtkWidget*)
|
||||||
|
gtk_builder_get_object (priv->builder, "supply-drawing-area");
|
||||||
|
|
||||||
|
marker_levelsv = g_strsplit (marker_levels, ",", -1);
|
||||||
|
gtk_widget_set_size_request (widget,
|
||||||
|
width,
|
||||||
|
((g_strv_length (marker_levelsv) - 1) * SUPPLY_BAR_SPACE
|
||||||
|
+ g_strv_length (marker_levelsv) * SUPPLY_BAR_HEIGHT));
|
||||||
|
g_strfreev (marker_levelsv);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
gtk_widget_set_size_request (widget, 0, 0);
|
||||||
|
|
||||||
|
width = gtk_widget_get_allocated_width (widget);
|
||||||
|
height = gtk_widget_get_allocated_height (widget);
|
||||||
|
gtk_widget_queue_draw_area (widget, 0, 0, width, height);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1097,6 +1132,132 @@ printer_delete_cb (GtkToolButton *toolbutton,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
supply_levels_draw_cb (GtkWidget *widget,
|
||||||
|
cairo_t *cr,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
CcPrintersPanelPrivate *priv;
|
||||||
|
CcPrintersPanel *self = (CcPrintersPanel*) user_data;
|
||||||
|
gchar *marker_levels = NULL;
|
||||||
|
gchar *marker_colors = NULL;
|
||||||
|
gchar *marker_names = NULL;
|
||||||
|
gchar *tooltip_text = NULL;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
priv = PRINTERS_PANEL_PRIVATE (self);
|
||||||
|
|
||||||
|
if (priv->current_dest >= 0 &&
|
||||||
|
priv->current_dest < priv->num_dests &&
|
||||||
|
priv->dests != NULL)
|
||||||
|
{
|
||||||
|
for (i = 0; i < priv->dests[priv->current_dest].num_options; i++)
|
||||||
|
{
|
||||||
|
if (g_strcmp0 (priv->dests[priv->current_dest].options[i].name, "marker-names") == 0)
|
||||||
|
marker_names = priv->dests[priv->current_dest].options[i].value;
|
||||||
|
else if (g_strcmp0 (priv->dests[priv->current_dest].options[i].name, "marker-levels") == 0)
|
||||||
|
marker_levels = priv->dests[priv->current_dest].options[i].value;
|
||||||
|
else if (g_strcmp0 (priv->dests[priv->current_dest].options[i].name, "marker-colors") == 0)
|
||||||
|
marker_colors = priv->dests[priv->current_dest].options[i].value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (marker_levels && marker_colors && marker_names)
|
||||||
|
{
|
||||||
|
gchar **marker_levelsv = NULL;
|
||||||
|
gchar **marker_colorsv = NULL;
|
||||||
|
gchar **marker_namesv = NULL;
|
||||||
|
gchar *tmp = NULL;
|
||||||
|
gint width;
|
||||||
|
gint height;
|
||||||
|
|
||||||
|
widget = (GtkWidget*)
|
||||||
|
gtk_builder_get_object (priv->builder, "supply-drawing-area");
|
||||||
|
|
||||||
|
marker_levelsv = g_strsplit (marker_levels, ",", -1);
|
||||||
|
marker_colorsv = g_strsplit (marker_colors, ",", -1);
|
||||||
|
marker_namesv = g_strsplit (marker_names, ",", -1);
|
||||||
|
|
||||||
|
width = gtk_widget_get_allocated_width (widget);
|
||||||
|
height = gtk_widget_get_allocated_height (widget);
|
||||||
|
|
||||||
|
width = width < SUPPLY_BAR_WIDTH ? width : SUPPLY_BAR_WIDTH;
|
||||||
|
for (i = 0; i < g_strv_length (marker_levelsv); i++)
|
||||||
|
{
|
||||||
|
GdkRGBA color = {0.0, 0.0, 0.0, 1.0};
|
||||||
|
GdkRGBA light_color;
|
||||||
|
double display_value;
|
||||||
|
int value;
|
||||||
|
|
||||||
|
value = atoi (marker_levelsv[i]);
|
||||||
|
|
||||||
|
gdk_rgba_parse (&color, marker_colorsv[i]);
|
||||||
|
light_color.red = color.red < 0.8 ? color.red + 0.8 : 1.0;
|
||||||
|
light_color.green = color.green < 0.8 ? color.green + 0.8 : 1.0;
|
||||||
|
light_color.blue = color.blue < 0.8 ? color.blue + 0.8 : 1.0;
|
||||||
|
light_color.alpha = 1.0;
|
||||||
|
|
||||||
|
if (value >= 0)
|
||||||
|
{
|
||||||
|
display_value = value / 100.0 * width;
|
||||||
|
|
||||||
|
cairo_rectangle (cr,
|
||||||
|
0.0,
|
||||||
|
i * (SUPPLY_BAR_HEIGHT + SUPPLY_BAR_SPACE),
|
||||||
|
display_value,
|
||||||
|
SUPPLY_BAR_HEIGHT);
|
||||||
|
gdk_cairo_set_source_rgba (cr, &color);
|
||||||
|
cairo_fill (cr);
|
||||||
|
|
||||||
|
cairo_rectangle (cr,
|
||||||
|
display_value,
|
||||||
|
i * (SUPPLY_BAR_HEIGHT + SUPPLY_BAR_SPACE),
|
||||||
|
width - display_value,
|
||||||
|
SUPPLY_BAR_HEIGHT);
|
||||||
|
gdk_cairo_set_source_rgba (cr, &light_color);
|
||||||
|
cairo_fill (cr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cairo_rectangle (cr,
|
||||||
|
0.0,
|
||||||
|
i * (SUPPLY_BAR_HEIGHT + SUPPLY_BAR_SPACE),
|
||||||
|
width,
|
||||||
|
SUPPLY_BAR_HEIGHT);
|
||||||
|
gdk_cairo_set_source_rgba (cr, &light_color);
|
||||||
|
cairo_fill (cr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tooltip_text)
|
||||||
|
{
|
||||||
|
tmp = g_strdup_printf ("%s%s\n", tooltip_text, marker_namesv[i]);
|
||||||
|
g_free (tooltip_text);
|
||||||
|
tooltip_text = tmp;
|
||||||
|
tmp = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tooltip_text = g_strdup_printf ("%s\n", marker_namesv[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_strfreev (marker_levelsv);
|
||||||
|
g_strfreev (marker_colorsv);
|
||||||
|
g_strfreev (marker_namesv);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tooltip_text)
|
||||||
|
{
|
||||||
|
gtk_widget_set_tooltip_text (widget, tooltip_text);
|
||||||
|
g_free (tooltip_text);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gtk_widget_set_tooltip_text (widget, NULL);
|
||||||
|
gtk_widget_set_has_tooltip (widget, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
allowed_user_remove_cb (GtkToolButton *toolbutton,
|
allowed_user_remove_cb (GtkToolButton *toolbutton,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
|
@ -1280,6 +1441,10 @@ cc_printers_panel_init (CcPrintersPanel *self)
|
||||||
gtk_builder_get_object (priv->builder, "clean-print-heads-button");
|
gtk_builder_get_object (priv->builder, "clean-print-heads-button");
|
||||||
gtk_widget_set_sensitive (widget, FALSE);
|
gtk_widget_set_sensitive (widget, FALSE);
|
||||||
|
|
||||||
|
widget = (GtkWidget*)
|
||||||
|
gtk_builder_get_object (priv->builder, "supply-drawing-area");
|
||||||
|
g_signal_connect (widget, "draw", G_CALLBACK (supply_levels_draw_cb), self);
|
||||||
|
|
||||||
populate_printers_list (self);
|
populate_printers_list (self);
|
||||||
populate_jobs_list (self);
|
populate_jobs_list (self);
|
||||||
populate_allowed_users_list (self);
|
populate_allowed_users_list (self);
|
||||||
|
|
|
@ -155,7 +155,8 @@
|
||||||
<object class="GtkLabel" id="label9">
|
<object class="GtkLabel" id="label9">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="xalign">1</property>
|
<property name="xalign">1</property>
|
||||||
<property name="label" translatable="yes">Ink:</property>
|
<property name="yalign">0</property>
|
||||||
|
<property name="label" translatable="yes">Supply:</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
|
@ -189,7 +190,7 @@
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDrawingArea" id="drawingarea1">
|
<object class="GtkDrawingArea" id="supply-drawing-area">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue