[gnome-control-center] power: Use CcBatteryRow for devices section as well



commit f40d4865faaaccf9dec6a493ba4c4d05059d62f5
Author: Ian Douglas Scott <idscott system76 com>
Date:   Mon Oct 12 10:44:31 2020 -0700

    power: Use CcBatteryRow for devices section as well
    
    This had another slightly different version of the same code.

 panels/power/cc-battery-row.c |  91 ++++++++++++++++++++++++---
 panels/power/cc-battery-row.h |   3 +
 panels/power/cc-power-panel.c | 142 +++++-------------------------------------
 3 files changed, 99 insertions(+), 137 deletions(-)
---
diff --git a/panels/power/cc-battery-row.c b/panels/power/cc-battery-row.c
index 1ecf61f62..55d7584d7 100644
--- a/panels/power/cc-battery-row.c
+++ b/panels/power/cc-battery-row.c
@@ -36,6 +36,9 @@ struct _CcBatteryRow {
   GtkLabel     *percentage_label;
   GtkBox       *primary_bottom_box;
   GtkLabel     *primary_percentage_label;
+
+  UpDeviceKind  kind;
+  gboolean      primary;
 };
 
 G_DEFINE_TYPE (CcBatteryRow, cc_battery_row, GTK_TYPE_LIST_BOX_ROW)
@@ -178,6 +181,46 @@ get_details_string (gdouble percentage, UpDeviceState state, guint64 time)
   return g_steal_pointer (&details);
 }
 
+static const char *
+kind_to_description (UpDeviceKind kind)
+{
+  switch (kind)
+    {
+      case UP_DEVICE_KIND_MOUSE:
+        /* TRANSLATORS: secondary battery */
+        return N_("Wireless mouse");
+      case UP_DEVICE_KIND_KEYBOARD:
+        /* TRANSLATORS: secondary battery */
+        return N_("Wireless keyboard");
+      case UP_DEVICE_KIND_UPS:
+        /* TRANSLATORS: secondary battery */
+        return N_("Uninterruptible power supply");
+      case UP_DEVICE_KIND_PDA:
+        /* TRANSLATORS: secondary battery */
+        return N_("Personal digital assistant");
+      case UP_DEVICE_KIND_PHONE:
+        /* TRANSLATORS: secondary battery */
+        return N_("Cellphone");
+      case UP_DEVICE_KIND_MEDIA_PLAYER:
+        /* TRANSLATORS: secondary battery */
+        return N_("Media player");
+      case UP_DEVICE_KIND_TABLET:
+        /* TRANSLATORS: secondary battery */
+        return N_("Tablet");
+      case UP_DEVICE_KIND_COMPUTER:
+        /* TRANSLATORS: secondary battery */
+        return N_("Computer");
+      case UP_DEVICE_KIND_GAMING_INPUT:
+        /* TRANSLATORS: secondary battery */
+        return N_("Gaming input device");
+      default:
+        /* TRANSLATORS: secondary battery, misc */
+        return N_("Battery");
+    }
+
+  g_assert_not_reached ();
+}
+
 CcBatteryRow*
 cc_battery_row_new (UpDevice *device,
                     gboolean  primary)
@@ -192,39 +235,55 @@ cc_battery_row_new (UpDevice *device,
   CcBatteryRow *self;
   guint64 time_empty, time_full, time;
   gdouble energy_full, energy_rate;
+  gboolean is_kind_battery;
+  UpDeviceLevel battery_level;
 
   self = g_object_new (CC_TYPE_BATTERY_ROW, NULL);
 
   g_object_get (device,
                 "kind", &kind,
                 "state", &state,
+                "model", &name,
                 "percentage", &percentage,
                 "icon-name", &icon_name,
                 "time-to-empty", &time_empty,
                 "time-to-full", &time_full,
                 "energy-full", &energy_full,
                 "energy-rate", &energy_rate,
+                "battery-level", &battery_level,
                 NULL);
   if (state == UP_DEVICE_STATE_DISCHARGING)
     time = time_empty;
   else
     time = time_full;
 
+  is_kind_battery = (kind == UP_DEVICE_KIND_BATTERY || kind == UP_DEVICE_KIND_UPS);
+
   /* Name label */
-  if (g_object_get_data (G_OBJECT (device), "is-main-battery") != NULL)
-    name = C_("Battery name", "Main");
-  else
-    name = C_("Battery name", "Extra");
+  if (is_kind_battery)
+    {
+      if (g_object_get_data (G_OBJECT (device), "is-main-battery") != NULL)
+        name = C_("Battery name", "Main");
+      else
+        name = C_("Battery name", "Extra");
+    }
+  else if (name == NULL || name[0] == '\0')
+    {
+      name = _(kind_to_description (kind));
+    }
   gtk_label_set_text (self->name_label, name);
 
   /* Icon */
-  if (icon_name != NULL && *icon_name != '\0')
+  if (is_kind_battery && icon_name != NULL && icon_name[0] != '\0')
     gtk_image_set_from_icon_name (self->icon, icon_name, GTK_ICON_SIZE_BUTTON);
 
   /* Percentage label */
-  s = g_strdup_printf ("%d%%", (int)percentage);
-  gtk_label_set_text (self->percentage_label, s);
-  gtk_label_set_text (self->primary_percentage_label, s);
+  if (battery_level == UP_DEVICE_LEVEL_NONE)
+  {
+    s = g_strdup_printf ("%d%%", (int)percentage);
+    gtk_label_set_text (self->percentage_label, s);
+    gtk_label_set_text (self->primary_percentage_label, s);
+  }
 
   /* Level bar */
   gtk_level_bar_set_value (self->levelbar, percentage / 100.0);
@@ -241,9 +300,9 @@ cc_battery_row_new (UpDevice *device,
                                ATK_RELATION_LABELLED_BY,
                                gtk_widget_get_accessible (GTK_WIDGET (primary ? 
self->primary_percentage_label
                                                                               : self->percentage_label)));
-  g_object_set_data (G_OBJECT (self), "primary", GINT_TO_POINTER (primary));
 
-  g_object_set_data (G_OBJECT (self), "kind", GINT_TO_POINTER (kind));
+  self->kind = kind;
+  self->primary = primary;
 
   return self;
 }
@@ -276,4 +335,16 @@ cc_battery_row_set_battery_sizegroup (CcBatteryRow *self,
                                       GtkSizeGroup *sizegroup)
 {
   gtk_size_group_add_widget (sizegroup, GTK_WIDGET (self->battery_box));
+}
+
+gboolean
+cc_battery_row_get_primary (CcBatteryRow *self)
+{
+  return self->primary;
+}
+
+UpDeviceKind
+cc_battery_row_get_kind (CcBatteryRow *self)
+{
+  return self->kind;
 }
\ No newline at end of file
diff --git a/panels/power/cc-battery-row.h b/panels/power/cc-battery-row.h
index a4c27b629..e3b72feb2 100644
--- a/panels/power/cc-battery-row.h
+++ b/panels/power/cc-battery-row.h
@@ -43,4 +43,7 @@ void          cc_battery_row_set_charge_sizegroup    (CcBatteryRow *self,
 void          cc_battery_row_set_battery_sizegroup   (CcBatteryRow *self,
                                                       GtkSizeGroup *sizegroup);
 
+gboolean      cc_battery_row_get_primary             (CcBatteryRow *self);
+UpDeviceKind  cc_battery_row_get_kind                (CcBatteryRow *self);
+
 G_END_DECLS
\ No newline at end of file
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 079037cae..b9226f803 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -343,128 +343,16 @@ add_battery (CcPowerPanel *panel, UpDevice *device, gboolean primary)
   gtk_widget_set_visible (panel->battery_section, TRUE);
 }
 
-static const char *
-kind_to_description (UpDeviceKind kind)
-{
-  switch (kind)
-    {
-      case UP_DEVICE_KIND_MOUSE:
-        /* TRANSLATORS: secondary battery */
-        return N_("Wireless mouse");
-      case UP_DEVICE_KIND_KEYBOARD:
-        /* TRANSLATORS: secondary battery */
-        return N_("Wireless keyboard");
-      case UP_DEVICE_KIND_UPS:
-        /* TRANSLATORS: secondary battery */
-        return N_("Uninterruptible power supply");
-      case UP_DEVICE_KIND_PDA:
-        /* TRANSLATORS: secondary battery */
-        return N_("Personal digital assistant");
-      case UP_DEVICE_KIND_PHONE:
-        /* TRANSLATORS: secondary battery */
-        return N_("Cellphone");
-      case UP_DEVICE_KIND_MEDIA_PLAYER:
-        /* TRANSLATORS: secondary battery */
-        return N_("Media player");
-      case UP_DEVICE_KIND_TABLET:
-        /* TRANSLATORS: secondary battery */
-        return N_("Tablet");
-      case UP_DEVICE_KIND_COMPUTER:
-        /* TRANSLATORS: secondary battery */
-        return N_("Computer");
-      case UP_DEVICE_KIND_GAMING_INPUT:
-        /* TRANSLATORS: secondary battery */
-        return N_("Gaming input device");
-      default:
-        /* TRANSLATORS: secondary battery, misc */
-        return N_("Battery");
-    }
-
-  g_assert_not_reached ();
-}
-
 static void
 add_device (CcPowerPanel *panel, UpDevice *device)
 {
-  UpDeviceKind kind;
-  UpDeviceState state;
-  GtkWidget *row;
-  GtkWidget *hbox;
-  GtkWidget *box2;
-  GtkWidget *widget;
-  GtkWidget *title;
-  g_autoptr(GString) description = NULL;
-  gdouble percentage;
-  g_autofree gchar *name = NULL;
-  gboolean is_present;
-  UpDeviceLevel battery_level;
-
-  g_object_get (device,
-                "kind", &kind,
-                "percentage", &percentage,
-                "state", &state,
-                "model", &name,
-                "is-present", &is_present,
-                "battery-level", &battery_level,
-                NULL);
-
-  if (!is_present)
-    return;
-
-  if (name == NULL || *name == '\0')
-    description = g_string_new (_(kind_to_description (kind)));
-  else
-    description = g_string_new (name);
-
-  /* create the new widget */
-  row = no_prelight_row_new ();
-  gtk_widget_show (row);
-  hbox = row_box_new ();
-  gtk_container_add (GTK_CONTAINER (row), hbox);
-  title = row_title_new (description->str, NULL, NULL);
-  gtk_box_pack_start (GTK_BOX (hbox), title, FALSE, TRUE, 0);
-  gtk_size_group_add_widget (panel->battery_sizegroup, title);
-
-  box2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
-  gtk_widget_show (box2);
-
-  if (battery_level == UP_DEVICE_LEVEL_NONE)
-    {
-      g_autofree gchar *s = NULL;
-
-      s = g_strdup_printf ("%d%%", (int)(percentage + 0.5));
-      widget = gtk_label_new (s);
-    }
-  else
-    {
-      widget = gtk_label_new ("");
-    }
-
-  gtk_widget_show (widget);
-  gtk_widget_set_halign (widget, GTK_ALIGN_END);
-  gtk_label_set_ellipsize (GTK_LABEL (widget), PANGO_ELLIPSIZE_END);
-  gtk_label_set_xalign (GTK_LABEL (widget), 0.0);
-  gtk_style_context_add_class (gtk_widget_get_style_context (widget), GTK_STYLE_CLASS_DIM_LABEL);
-  gtk_box_pack_start (GTK_BOX (box2), widget, FALSE, TRUE, 0);
-  gtk_size_group_add_widget (panel->charge_sizegroup, widget);
-
-  widget = gtk_level_bar_new ();
-  gtk_widget_show (widget);
-  gtk_widget_set_halign (widget, TRUE);
-  gtk_widget_set_halign (widget, GTK_ALIGN_FILL);
-  gtk_widget_set_valign (widget, GTK_ALIGN_CENTER);
-  gtk_level_bar_set_value (GTK_LEVEL_BAR (widget), percentage / 100.0f);
-  gtk_level_bar_add_offset_value (GTK_LEVEL_BAR (widget), "warning-battery-offset", 0.03);
-  gtk_level_bar_add_offset_value (GTK_LEVEL_BAR (widget), "low-battery-offset", 0.1);
-  gtk_level_bar_add_offset_value (GTK_LEVEL_BAR (widget), "high-battery-offset", 1.0);
-  gtk_box_pack_start (GTK_BOX (box2), widget, TRUE, TRUE, 0);
-  gtk_size_group_add_widget (panel->level_sizegroup, widget);
-  gtk_box_pack_start (GTK_BOX (hbox), box2, TRUE, TRUE, 0);
-
-  gtk_container_add (GTK_CONTAINER (panel->device_list), row);
-  gtk_size_group_add_widget (panel->row_sizegroup, row);
-  g_object_set_data (G_OBJECT (row), "kind", GINT_TO_POINTER (kind));
+  CcBatteryRow *row = cc_battery_row_new (device, FALSE);
+  cc_battery_row_set_level_sizegroup (row, panel->level_sizegroup);
+  cc_battery_row_set_row_sizegroup (row, panel->row_sizegroup);
+  cc_battery_row_set_charge_sizegroup (row, panel->charge_sizegroup);
+  cc_battery_row_set_battery_sizegroup (row, panel->battery_sizegroup);
 
+  gtk_container_add (GTK_CONTAINER (panel->device_list), GTK_WIDGET (row));
   gtk_widget_set_visible (panel->device_section, TRUE);
 }
 
@@ -1887,25 +1775,25 @@ add_general_section (CcPowerPanel *self)
 }
 
 static gint
-battery_sort_func (gconstpointer a, gconstpointer b, gpointer data)
+battery_sort_func (GtkListBoxRow *a, GtkListBoxRow *b, gpointer data)
 {
-  GObject *row_a = (GObject*)a;
-  GObject *row_b = (GObject*)b;
+  CcBatteryRow *row_a = CC_BATTERY_ROW (a);
+  CcBatteryRow *row_b = CC_BATTERY_ROW (b);
   gboolean a_primary;
   gboolean b_primary;
-  gint a_kind;
-  gint b_kind;
+  UpDeviceKind a_kind;
+  UpDeviceKind b_kind;
 
-  a_primary = GPOINTER_TO_INT (g_object_get_data (row_a, "primary"));
-  b_primary = GPOINTER_TO_INT (g_object_get_data (row_b, "primary"));
+  a_primary = cc_battery_row_get_primary(row_a);
+  b_primary = cc_battery_row_get_primary(row_b);
 
   if (a_primary)
     return -1;
   else if (b_primary)
     return 1;
 
-  a_kind = GPOINTER_TO_INT (g_object_get_data (row_a, "kind"));
-  b_kind = GPOINTER_TO_INT (g_object_get_data (row_b, "kind"));
+  a_kind = cc_battery_row_get_kind(row_a);
+  b_kind = cc_battery_row_get_kind(row_b);
 
   return a_kind - b_kind;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]