[polari/wip/raresv/nick-popover: 15/16] userDetails: Add notification support.



commit 44f30583ccd33d68b93e68290834cae32b732187
Author: raresv <rares visalom gmail com>
Date:   Thu Aug 18 20:58:10 2016 +0300

    userDetails: Add notification support.
    
    We want to be able to emit a notification whenever a
    watched user comes online. The notification will be
    emitted by the new userTracker module, but we also need
    support for it in both the UserDetails and the UserPopover.
    The UserDetails class needs to show an icon and a label
    whenever the corresponding user is being watched, and
    hide those when the user is not being watched. The new
    notifications-enabled property is used to set the
    visibility of the two widgets. This property is controlled
    by the ToggleButton located in the UserPopover. We also
    add a new icon that will be used in the UserDetails and
    UserPopover classes.

 data/org.gnome.Polari.data.gresource.xml       |    1 +
 data/resources/polari-user-notify-symbolic.svg |   18 +++++++++++
 data/resources/user-details.ui                 |   39 ++++++++++++++++++++++++
 src/userList.js                                |   24 ++++++++++++++-
 4 files changed, 81 insertions(+), 1 deletions(-)
---
diff --git a/data/org.gnome.Polari.data.gresource.xml b/data/org.gnome.Polari.data.gresource.xml
index 1c4d3fc..b21bb85 100644
--- a/data/org.gnome.Polari.data.gresource.xml
+++ b/data/org.gnome.Polari.data.gresource.xml
@@ -5,6 +5,7 @@
     <file alias="data/networks.json">resources/networks.json</file>
     <file alias="gtk/help-overlay.ui" preprocess="xml-stripblanks">resources/help-overlay.ui</file>
     <file alias="gtk/menus.ui" preprocess="xml-stripblanks">resources/menus.ui</file>
+    <file alias="icons/polari-user-notify-symbolic.svg" 
preprocess="xml-stripblanks">resources/polari-user-notify-symbolic.svg</file>
     <file alias="ui/connection-details.ui" 
preprocess="xml-stripblanks">resources/connection-details.ui</file>
     <file alias="ui/connection-properties.ui" 
preprocess="xml-stripblanks">resources/connection-properties.ui</file>
     <file alias="ui/entry-area.ui" preprocess="xml-stripblanks">resources/entry-area.ui</file>
diff --git a/data/resources/polari-user-notify-symbolic.svg b/data/resources/polari-user-notify-symbolic.svg
new file mode 100644
index 0000000..c28a4d4
--- /dev/null
+++ b/data/resources/polari-user-notify-symbolic.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:cc="http://creativecommons.org/ns#"; 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"; xmlns:svg="http://www.w3.org/2000/svg"; 
xmlns="http://www.w3.org/2000/svg"; xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"; 
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"; version="1.1" id="svg10865" viewBox="0 0 
15.999999 15.999999" height="4.5155554mm" width="4.5155554mm" inkscape:version="0.91 r13725" 
sodipodi:docname="polari-user-notify-symbolic.svg">
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" 
gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" 
inkscape:window-width="1920" inkscape:window-height="1080" id="namedview10" showgrid="false" 
inkscape:zoom="29.500001" inkscape:cx="1.6963679" inkscape:cy="10.950363" inkscape:window-x="0" 
inkscape:window-y="0" inkscape:window-maximized="0" inkscape:current-layer="svg10865"/>
+  <defs id="defs10867"/>
+  <metadata id="metadata10870">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title/>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g id="g35541" transform="translate(-346.1907,-963.1781)">
+    <path inkscape:connector-curvature="0" style="fill:#bebebe;fill-opacity:1;stroke:none" d="m 
354.25319,964.67814 c -1.65686,0 -3,1.34315 -3,3 0,1.27269 -0.0169,4.99999 -3.5625,7 l 13,0 c 
-3.45455,-2.00001 -3.4375,-5.72731 -3.4375,-7 0,-1.65685 -1.34314,-3 -3,-3 z" id="path5705-7"/>
+    <path inkscape:connector-curvature="0" style="fill:#bebebe;fill-opacity:1;stroke:none" id="path5707-8" 
d="m 356.24405,975.6781 a 2.0000288,2.0000186 0 0 1 -1.00002,1.73207 2.0000288,2.0000186 0 0 1 -2.00003,0 
2.0000288,2.0000186 0 0 1 -1.00001,-1.73207 l 2.00003,0 z"/>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/data/resources/user-details.ui b/data/resources/user-details.ui
index a9349ec..3269cfc 100644
--- a/data/resources/user-details.ui
+++ b/data/resources/user-details.ui
@@ -127,6 +127,45 @@
                 <property name="left-attach">0</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkImage">
+                <property name="icon-name">polari-user-notify-symbolic</property>
+                <property name="visible" bind-source="notificationLabel"
+                          bind-property="visible" bind-flags="sync-create"/>
+                <property name="opacity" bind-source="notificationLabel"
+                          bind-property="opacity" bind-flags="sync-create"/>
+                <property name="no-show-all">True</property>
+                <property name="halign">start</property>
+                <property name="margin-left">0</property>
+                <style>
+                  <class name="dim-label" />
+                </style>
+              </object>
+              <packing>
+                <property name="width">1</property>
+                <property name="top-attach">2</property>
+                <property name="left-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="notificationLabel">
+                <property name="ellipsize">end</property>
+                <property name="halign">start</property>
+                <property name="margin-start">20</property>
+                <property name="hexpand">True</property>
+                <property name="no-show-all">True</property>
+                <property name="use-markup">True</property>
+                <property name="label" translatable="yes">Will notify if user appears online.</property>
+                <style>
+                  <class name="dim-label" />
+                </style>
+              </object>
+              <packing>
+                <property name="width">2</property>
+                <property name="top-attach">2</property>
+                <property name="left-attach">0</property>
+              </packing>
+            </child>
           </object>
         </child>
         <child>
diff --git a/src/userList.js b/src/userList.js
index cfcb337..1f1e6bc 100644
--- a/src/userList.js
+++ b/src/userList.js
@@ -109,12 +109,18 @@ const UserDetails = new Lang.Class({
                        'detailsGrid',
                        'fullnameLabel',
                        'lastLabel',
+                       'notificationLabel',
                        'messageButton'],
     Properties: { 'expanded': GObject.ParamSpec.boolean('expanded',
                                                         'expanded',
                                                         'expanded',
                                                         READWRITE,
-                                                        false)},
+                                                        false),
+                  'notifications-enabled': GObject.ParamSpec.boolean('notifications-enabled',
+                                                             'notifications-enabled',
+                                                             'notifications-enabled',
+                                                             READWRITE,
+                                                             false)},
 
     _init: function(params = {}) {
         if (params.user) {
@@ -134,6 +140,21 @@ const UserDetails = new Lang.Class({
         this._detailsGrid.hide();
     },
 
+    get notifications_enabled() {
+        return this._notificationsEnabled;
+    },
+
+    set notifications_enabled(value) {
+        if (this._notificationsEnabled == value)
+            return;
+
+        this._notificationsEnabled = value;
+
+        this.notify('notifications-enabled');
+
+        this._notificationLabel.opacity = value ? 1. : 0.;
+    },
+
     set user(user) {
         if (this._user == user)
             return;
@@ -152,6 +173,7 @@ const UserDetails = new Lang.Class({
             this._expand();
 
         this._updateButtonVisibility();
+        this._notificationLabel.visible = this._user == null;
         this._lastLabel.visible = this._user != null;
     },
 


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