Mercurial > libervia-desktop-kivy
changeset 237:059c5b39032d
plugin file sharing: moved common discovery widgets to new core.common_widgets module
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 31 Aug 2018 16:59:38 +0200 |
parents | ca86954b3788 |
children | 7918a5668304 |
files | cagou/core/common.py cagou/core/common_widgets.py cagou/kv/common_widgets.kv cagou/plugins/plugin_wid_file_sharing.kv cagou/plugins/plugin_wid_file_sharing.py |
diffstat | 5 files changed, 154 insertions(+), 101 deletions(-) [+] |
line wrap: on
line diff
--- a/cagou/core/common.py Fri Aug 31 16:58:15 2018 +0200 +++ b/cagou/core/common.py Fri Aug 31 16:59:38 2018 +0200 @@ -17,7 +17,7 @@ # 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/>. -"""common widgets, which can be reused everywhere""" +"""common simple widgets""" from sat.core.i18n import _ from kivy.uix.image import Image
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cagou/core/common_widgets.py Fri Aug 31 16:59:38 2018 +0200 @@ -0,0 +1,103 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- + +# Cagou: desktop/mobile frontend for Salut à Toi XMPP client +# Copyright (C) 2016-2018 Jérôme Poisson (goffi@goffi.org) + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# 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/>. + +"""common advanced widgets, which can be reused everywhere.""" + +from sat.core.i18n import _ +from kivy.uix.label import Label +from kivy.uix.boxlayout import BoxLayout +from cagou.core.menu import TouchMenuItemBehaviour +from kivy import properties +from kivy.metrics import dp +from cagou import G +from sat.core import log as logging + +log = logging.getLogger(__name__) + + +class Identities(object): + + def __init__(self, entity_ids): + identities = {} + for cat, type_, name in entity_ids: + identities.setdefault(cat, {}).setdefault(type_, []).append(name) + client = identities.get('client', {}) + if 'pc' in client: + self.type = 'desktop' + elif 'phone' in client: + self.type = 'phone' + elif 'web' in client: + self.type = 'web' + elif 'console' in client: + self.type = 'console' + else: + self.type = 'desktop' + + self.identities = identities + + @property + def name(self): + return self.identities.values()[0].values()[0][0] + + +class ItemWidget(TouchMenuItemBehaviour, BoxLayout): + name = properties.StringProperty() + base_width = properties.NumericProperty(dp(100)) + + +class DeviceWidget(ItemWidget): + + def __init__(self, main_wid, entity_jid, identities, **kw): + self.entity_jid = entity_jid + self.identities = identities + own_jid = next(G.host.profiles.itervalues()).whoami + self.own_device = entity_jid.bare == own_jid + if self.own_device: + name = self.identities.name + elif self.entity_jid.node: + name = self.entity_jid.node + elif self.entity_jid == own_jid.domain: + name = _(u"your server") + else: + name = entity_jid + + super(DeviceWidget, self).__init__(name=name, main_wid=main_wid, **kw) + + @property + def profile(self): + return self.main_wid.profile + + def getSymbol(self): + if self.identities.type == 'desktop': + return 'desktop' + elif self.identities.type == 'phone': + return 'mobile' + elif self.identities.type == 'web': + return 'globe' + elif self.identities.type == 'console': + return 'terminal' + else: + return 'desktop' + + def do_item_action(self, touch): + pass + + +class CategorySeparator(Label): + pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cagou/kv/common_widgets.kv Fri Aug 31 16:59:38 2018 +0200 @@ -0,0 +1,44 @@ +# Cagou: desktop/mobile frontend for Salut à Toi XMPP client +# Copyright (C) 2016-2018 Jérôme Poisson (goffi@goffi.org) + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# 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/>. + + +<ItemWidget>: + size_hint: None, None + width: self.base_width + height: self.minimum_height + orientation: 'vertical' + + +<DeviceWidget>: + Symbol: + size_hint: 1, None + height: dp(80) + symbol: root.getSymbol() + margin: dp(40) + color: 0, 0, 0, 1 + Label: + size_hint: None, None + width: dp(100) + font_size: sp(14) + text_size: dp(95), None + size: self.texture_size + text: root.name + halign: 'center' + + +<CategorySeparator>: + size_hint: 1, None + height: sp(20)
--- a/cagou/plugins/plugin_wid_file_sharing.kv Fri Aug 31 16:58:15 2018 +0200 +++ b/cagou/plugins/plugin_wid_file_sharing.kv Fri Aug 31 16:59:38 2018 +0200 @@ -40,13 +40,6 @@ spacing: 0 -<ItemWidget>: - size_hint: None, None - width: self.base_width - height: self.minimum_height - orientation: 'vertical' - - <PathWidget>: shared: False Symbol: @@ -67,25 +60,3 @@ <LocalPathWidget>: shared: root.filepath in root.main_wid.shared_paths - - -<DeviceWidget>: - Symbol: - size_hint: 1, None - height: dp(80) - symbol: root.getSymbol() - margin: dp(40) - color: 0, 0, 0, 1 - Label: - size_hint: None, None - width: dp(100) - font_size: sp(14) - text_size: dp(95), None - size: self.texture_size - text: root.name - halign: 'center' - - -<CategorySeparator>: - size_hint: 1, None - height: sp(20)
--- a/cagou/plugins/plugin_wid_file_sharing.py Fri Aug 31 16:58:15 2018 +0200 +++ b/cagou/plugins/plugin_wid_file_sharing.py Fri Aug 31 16:59:38 2018 +0200 @@ -27,15 +27,14 @@ from sat_frontends.tools import jid from cagou.core.constants import Const as C from cagou.core import cagou_widget -from cagou.core.menu import (EntitiesSelectorMenu, TouchMenuBehaviour, - TouchMenuItemBehaviour) +from cagou.core.menu import EntitiesSelectorMenu, TouchMenuBehaviour from cagou.core.utils import FilterBehavior +from cagou.core.common_widgets import (Identities, ItemWidget, DeviceWidget, + CategorySeparator) from cagou import G from kivy import properties from kivy.uix.label import Label from kivy.uix.button import Button -from kivy.uix.boxlayout import BoxLayout -from kivy.metrics import dp from kivy import utils as kivy_utils from functools import partial import os.path @@ -80,36 +79,6 @@ exceptions.InternalError(u"Unknown mode: {mode}".format(mode=new_mode)) -class Identities(object): - - def __init__(self, entity_ids): - identities = {} - for cat, type_, name in entity_ids: - identities.setdefault(cat, {}).setdefault(type_, []).append(name) - client = identities.get('client', {}) - if 'pc' in client: - self.type = 'desktop' - elif 'phone' in client: - self.type = 'phone' - elif 'web' in client: - self.type = 'web' - elif 'console' in client: - self.type = 'console' - else: - self.type = 'desktop' - - self.identities = identities - - @property - def name(self): - return self.identities.values()[0].values()[0][0] - - -class ItemWidget(TouchMenuItemBehaviour, BoxLayout): - name = properties.StringProperty() - base_width = properties.NumericProperty(dp(100)) - - class PathWidget(ItemWidget): def __init__(self, filepath, main_wid, **kw): @@ -171,46 +140,13 @@ self.main_wid.request_item(self) return True - -class DeviceWidget(ItemWidget): - - def __init__(self, main_wid, entity_jid, identities, **kw): - self.entity_jid = entity_jid - self.identities = identities - own_jid = next(G.host.profiles.itervalues()).whoami - self.own_device = entity_jid.bare == own_jid - if self.own_device: - name = self.identities.name - elif self.entity_jid.node: - name = self.entity_jid.node - elif self.entity_jid.domain.endswith(own_jid.domain): - name = _(u"your server") - else: - name = _(u"sharing component") - - super(DeviceWidget, self).__init__(name=name, main_wid=main_wid, **kw) - - def getSymbol(self): - if self.identities.type == 'desktop': - return 'desktop' - elif self.identities.type == 'phone': - return 'mobile' - elif self.identities.type == 'web': - return 'globe' - elif self.identities.type == 'console': - return 'terminal' - else: - return 'desktop' +class SharingDeviceWidget(DeviceWidget): def do_item_action(self, touch): self.main_wid.remote_entity = self.entity_jid self.main_wid.remote_dir = u'' -class CategorySeparator(Label): - pass - - class FileSharing(quick_widgets.QuickWidget, cagou_widget.CagouWidget, FilterBehavior, TouchMenuBehaviour): SINGLE=False @@ -302,9 +238,8 @@ self.layout.add_widget(CategorySeparator(text=title)) for entity_str, entity_ids in entities_map.iteritems(): entity_jid = jid.JID(entity_str) - item = DeviceWidget(self, - entity_jid, - Identities(entity_ids)) + item = SharingDeviceWidget( + self, entity_jid, Identities(entity_ids)) self.layout.add_widget(item) if not entities_services and not entities_own and not entities_roster: self.layout.add_widget(Label(