[connections/refactor-properties-instanciation: 4/4] properties: Introduce ComboProperty for multiple options




commit 248431a30d00222350f1a5485e374f235e17590d
Author: Felipe Borges <felipeborges gnome org>
Date:   Tue Dec 1 18:32:29 2020 +0100

    properties: Introduce ComboProperty for multiple options

 src/properties.vala            | 53 ++++++++++++++++++++++++++++++++++++++----
 src/vnc-properties-dialog.vala | 17 ++++++--------
 2 files changed, 56 insertions(+), 14 deletions(-)
---
diff --git a/src/properties.vala b/src/properties.vala
index 99c1c18..2dd90df 100644
--- a/src/properties.vala
+++ b/src/properties.vala
@@ -126,15 +126,22 @@ namespace Connections {
         }
     }
 
-     private class Property : GLib.Object {
+     private abstract class Property : GLib.Object {
         public string label;
-        public Gtk.Widget widget;
+        public abstract Gtk.Widget widget { get; }
     }
 
     private class BooleanProperty : Property {
+        private Gtk.Switch switch_widget;
+
+        public override Gtk.Widget widget {
+            get {
+                return switch_widget;
+            }
+        }
+
         public BooleanProperty (Connection connection, string property_id) {
-            widget = new Gtk.Switch ();
-            var switch_widget = widget as Gtk.Switch;
+            switch_widget = new Gtk.Switch ();
 
             bool active = false;
             connection.get (property_id, out active);
@@ -143,4 +150,42 @@ namespace Connections {
             switch_widget.bind_property ("active", connection, property_id, BindingFlags.SYNC_CREATE);
         }
     }
+
+    private class ComboProperty : Property {
+        private Gtk.ComboBoxText combo_widget;
+        private string? default_option;
+
+        public signal void changed (string property_value);
+        public string active_id {
+            get {
+                return combo_widget.active_id;
+            }
+
+            set {
+                combo_widget.active_id = value;
+            }
+        }
+
+        public override Gtk.Widget widget {
+            get {
+                return combo_widget;
+            }
+        }
+
+        public ComboProperty (Connection connection, string property_id, string default_option) {
+            combo_widget = new Gtk.ComboBoxText ();
+            this.default_option = default_option;
+
+            combo_widget.notify["active-id"].connect (() => {
+                changed (combo_widget.active_id);
+            });
+        }
+
+        public void add_option (string option_id, string option_label) {
+            combo_widget.append (option_id, option_label);
+
+            if (option_id == default_option)
+                combo_widget.active_id = option_id;
+        }
+    }
 }
diff --git a/src/vnc-properties-dialog.vala b/src/vnc-properties-dialog.vala
index 5bf457f..04b50af 100644
--- a/src/vnc-properties-dialog.vala
+++ b/src/vnc-properties-dialog.vala
@@ -23,7 +23,6 @@ namespace Connections {
     private class VncPropertiesDialog : PropertiesDialog {
         public VncPropertiesDialog (Connection connection) {
             this.connection = connection;
-            var vnc = connection as VncConnection;
 
             var scaling = new BooleanProperty (connection, "scaling") {
                 label = _("Scaling")
@@ -40,16 +39,14 @@ namespace Connections {
             };
             add_property (local_pointer);
 
-            var combo_widget = new Gtk.ComboBoxText ();
-            combo_widget.append ("high-quality", _("High quality"));
-            combo_widget.append ("fast-refresh", _("Fast refresh"));
-            combo_widget.active_id = vnc.bandwidth.to_string ();
-            var bandwidth = new Property () {
-                label = _("Bandwidth"),
-                widget = combo_widget
+            var vnc = connection as VncConnection;
+            var bandwidth = new ComboProperty (vnc, "bandwidth", vnc.bandwidth.to_string ()) {
+                label = _("Bandwidth")
             };
-            combo_widget.notify["active-id"].connect (() => {
-                vnc.bandwidth = vnc.bandwidth.from_string (combo_widget.active_id);
+            bandwidth.add_option ("high-quality", _("High quality"));
+            bandwidth.add_option ("fast-refresh", _("Fast refresh"));
+            bandwidth.changed.connect ((property_value) => {
+               vnc.bandwidth = vnc.bandwidth.from_string (property_value);
             });
             add_property (bandwidth);
         }


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