Mercurial > libervia-desktop-kivy
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):