changeset 44:7819e9efa250

chat: avatar and nick are now displayed, need further aesthetic improvments
author Goffi <goffi@goffi.org>
date Mon, 29 Aug 2016 01:23:49 +0200
parents 12fdc7d1feb1
children b0595a33465d
files src/cagou/core/cagou_main.py src/cagou/plugins/plugin_wid_chat.kv src/cagou/plugins/plugin_wid_chat.py
diffstat 3 files changed, 48 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/cagou/core/cagou_main.py	Sun Aug 28 16:50:56 2016 +0200
+++ b/src/cagou/core/cagou_main.py	Mon Aug 29 01:23:49 2016 +0200
@@ -430,3 +430,6 @@
 
     def closeUI(self):
         self.app.root.show()
+
+    def getDefaultAvatar(self, entity=None):
+        return self.app.default_avatar
--- a/src/cagou/plugins/plugin_wid_chat.kv	Sun Aug 28 16:50:56 2016 +0200
+++ b/src/cagou/plugins/plugin_wid_chat.kv	Mon Aug 29 01:23:49 2016 +0200
@@ -14,6 +14,11 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+
+<MessAvatar>:
+    size_hint: None, None
+    size: dp(30), dp(30)
+
 <MessagesWidget>:
     spacing: self._spacing
     padding: self._padding
@@ -25,37 +30,31 @@
 
 <MessageWidget>:
     mess_label: mess_label
+    mess_box: mess_box
     size_hint: 1, None
     height: time_label.height + mess_label.height
     on_height: if root.parent: root.parent.sizeAdjust()
     on_width: self.sizeAdjust()
-    Label:
-        id: time_label
-        text_size: None, None
-        size_hint: 1, None
-        height: self.texture_size[1]
-        text: root.mess_data.time_text
-        halign: "center"
+    FloatLayout:
+        Label:
+            id: time_label
+            text_size: None, None
+            size_hint: 1, None
+            height: self.texture_size[1]
+            pos_hint: {'x':0, 'y':0}
+            text: root.mess_data.time_text
+            halign: "center"
+        Label:
+            size_hint: 1, 1
+            text_size: self.size
+            pos_hint: {'x':0, 'y':0}
+            text: root.mess_data.nick
+            halign: "left" if root.mess_data.own_mess else "right"
     BoxLayout:
+        id: mess_box
         size_hint: None,None
-        size: mess_label.size
+        size: sum([c.width for c in self.children]), mess_label.height
         pos_hint: {'x': 0} if root.mess_data.own_mess else {'right': 1}
-
-        # Label:
-        #     id: nick_label
-        #     text: root.mess_data.nick
-        #     # text: unicode(self.texture_size)
-        #     padding: 5, 5
-        #     bold: True
-        #     # text_size: None, self.height
-        #     # height: 20
-        #     size_hint: None, None
-        #     size: self.texture_size
-        #     pos_hint: {'top': 0}
-        #     # width: self.texture_size[0]
-        #     # height: max(self.texture_size[1], mess_label.height)
-        #     # size_hint: None, 1
-        #     # valign: "top"
         Label:
             canvas.before:
                 Color:
--- a/src/cagou/plugins/plugin_wid_chat.py	Sun Aug 28 16:50:56 2016 +0200
+++ b/src/cagou/plugins/plugin_wid_chat.py	Mon Aug 29 01:23:49 2016 +0200
@@ -30,6 +30,7 @@
 from sat_frontends.quick_frontend import quick_chat
 from sat_frontends.tools import jid
 from cagou.core import cagou_widget
+from cagou.core.image import Image
 from cagou import G
 
 
@@ -42,12 +43,27 @@
 }
 
 
+class MessAvatar(Image):
+    pass
+
+
 class MessageWidget(BoxLayout):
     mess_data = properties.ObjectProperty()
-    mess_label = properties.ObjectProperty(None)
+    mess_label = properties.ObjectProperty()
+    mess_box = properties.ObjectProperty()
 
     def __init__(self, **kwargs):
         BoxLayout.__init__(self, orientation='vertical', **kwargs)
+        avatar = MessAvatar(source=self.mess_data.avatar)
+        if self.mess_data.own_mess:
+            self.mess_box.add_widget(avatar, len(self.mess_box.children))
+        else:
+            self.mess_box.add_widget(avatar)
+
+    @property
+    def chat(self):
+        """return parent Chat instance"""
+        return self.mess_data.parent
 
     @property
     def message(self):
@@ -57,14 +73,15 @@
     def sizeAdjust(self):
         """this widget grows up with its children"""
         text_width, text_height = self.mess_label.texture_size
-        if text_width > self.parent.width:
-            self.mess_label.text_size = (self.parent.width - 10, None)
+        other_width = sum([c.width for c in self.mess_box.children if c != self.mess_label])
+        if text_width + other_width > self.parent.width:
+            self.mess_label.text_size = (self.parent.width - other_width - 10, None)
             self.text_max = text_width
-        elif self.mess_label.text_size[0] is not None and text_width < self.parent.width - 10:
+        elif self.mess_label.text_size[0] is not None and text_width + other_width < self.parent.width - 10:
             if text_width > self.text_max:
                 self.mess_label.text_size = (None, None)
             else:
-                self.mess_label.text_size = (self.parent.width - 10, None)
+                self.mess_label.text_size = (self.parent.width - other_width - 10, None)
 
 
 class MessageInputWidget(TextInput):