annotate cagou/core/cagou_widget.py @ 222:a676cb07c1cb

core (menu): TouchMenuBehaviour: moved code showing ModernMenu on item from file sharing plugin to a generic behaviour, so it can be re-used elsewhere.
author Goffi <goffi@goffi.org>
date Tue, 26 Jun 2018 20:26:21 +0200
parents 7177fe2d9725
children 3e11b5d923e2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
3
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Cagou: desktop/mobile frontend for Salut à Toi XMPP client
126
cd99f70ea592 global file reorganisation:
Goffi <goffi@goffi.org>
parents: 115
diff changeset
5 # Copyright (C) 2016-2018 Jérôme Poisson (goffi@goffi.org)
10
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
6
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
11
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
16
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
19
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
20
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
21 from sat.core import log as logging
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
22 log = logging.getLogger(__name__)
25
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
23 from kivy.uix.behaviors import ButtonBehavior
10
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from kivy.uix.boxlayout import BoxLayout
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from kivy.uix.dropdown import DropDown
20
29b507826eed header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents: 16
diff changeset
26 from kivy import properties
16
ba14b596b90e host can now be get as a global value:
Goffi <goffi@goffi.org>
parents: 15
diff changeset
27 from cagou import G
179
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 164
diff changeset
28 from cagou.core.common import ActionIcon
10
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
29
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
30
25
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
31 class HeaderWidgetChoice(ButtonBehavior, BoxLayout):
164
60b2b2bad747 core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents: 158
diff changeset
32
25
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
33 def __init__(self, cagou_widget, plugin_info):
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
34 self.plugin_info = plugin_info
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
35 super(HeaderWidgetChoice, self).__init__()
38
9f45098289cc widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents: 29
diff changeset
36 self.bind(on_release=lambda btn: cagou_widget.switchWidget(plugin_info))
25
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
37
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
38
179
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 164
diff changeset
39 class HeaderWidgetCurrent(ButtonBehavior, ActionIcon):
14
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
40 pass
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
41
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
42
10
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 class HeaderWidgetSelector(DropDown):
14
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
44
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
45 def __init__(self, cagou_widget):
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
46 super(HeaderWidgetSelector, self).__init__()
16
ba14b596b90e host can now be get as a global value:
Goffi <goffi@goffi.org>
parents: 15
diff changeset
47 for plugin_info in G.host.getPluggedWidgets(except_cls=cagou_widget.__class__):
25
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
48 choice = HeaderWidgetChoice(cagou_widget, plugin_info)
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
49 self.add_widget(choice)
10
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
50
164
60b2b2bad747 core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents: 158
diff changeset
51 def add_widget(self, *args):
60b2b2bad747 core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents: 158
diff changeset
52 widget = args[0]
60b2b2bad747 core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents: 158
diff changeset
53 widget.bind(minimum_width=self.set_width)
60b2b2bad747 core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents: 158
diff changeset
54 return super(HeaderWidgetSelector, self).add_widget(*args)
60b2b2bad747 core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents: 158
diff changeset
55
60b2b2bad747 core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents: 158
diff changeset
56 def set_width(self, choice, minimum_width):
60b2b2bad747 core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents: 158
diff changeset
57 self.width = max([c.minimum_width for c in self.container.children])
60b2b2bad747 core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents: 158
diff changeset
58
10
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
59
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 class CagouWidget(BoxLayout):
20
29b507826eed header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents: 16
diff changeset
61 header_input = properties.ObjectProperty(None)
115
e0c41f209c28 CagouWidget: instances can now add their own extra widgets in header with headerInputAddExtra
Goffi <goffi@goffi.org>
parents: 108
diff changeset
62 header_box = properties.ObjectProperty(None)
10
8b2836b5b6c7 added CagouWidget:
Goffi <goffi@goffi.org>
parents:
diff changeset
63
16
ba14b596b90e host can now be get as a global value:
Goffi <goffi@goffi.org>
parents: 15
diff changeset
64 def __init__(self):
25
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
65 for p in G.host.getPluggedWidgets():
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
66 if p['main'] == self.__class__:
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
67 self.plugin_info = p
d09bd16dbbe2 code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents: 20
diff changeset
68 break
222
a676cb07c1cb core (menu): TouchMenuBehaviour:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
69 BoxLayout.__init__(self)
14
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
70 self.selector = HeaderWidgetSelector(self)
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
71
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
72 def switchWidget(self, plugin_info):
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
73 self.selector.dismiss()
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 10
diff changeset
74 factory = plugin_info["factory"]
20
29b507826eed header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents: 16
diff changeset
75 new_widget = factory(plugin_info, None, iter(G.host.profiles))
16
ba14b596b90e host can now be get as a global value:
Goffi <goffi@goffi.org>
parents: 15
diff changeset
76 G.host.switchWidget(self, new_widget)
20
29b507826eed header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents: 16
diff changeset
77
29b507826eed header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents: 16
diff changeset
78 def onHeaderInput(self):
29b507826eed header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents: 16
diff changeset
79 log.info(u"header input text entered")
51
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 38
diff changeset
80
108
953ddf817b8a cagou widget: added onHeaderInputComplete method which is called when text is changed, and should be used for completion
Goffi <goffi@goffi.org>
parents: 51
diff changeset
81 def onHeaderInputComplete(self, wid, text):
953ddf817b8a cagou widget: added onHeaderInputComplete method which is called when text is changed, and should be used for completion
Goffi <goffi@goffi.org>
parents: 51
diff changeset
82 return
953ddf817b8a cagou widget: added onHeaderInputComplete method which is called when text is changed, and should be used for completion
Goffi <goffi@goffi.org>
parents: 51
diff changeset
83
51
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 38
diff changeset
84 def on_touch_down(self, touch):
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 38
diff changeset
85 if self.collide_point(*touch.pos):
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 38
diff changeset
86 G.host.selected_widget = self
158
976f22cb3ecc core (cagou widget): return parent value in on_touch_down
Goffi <goffi@goffi.org>
parents: 126
diff changeset
87 return super(CagouWidget, self).on_touch_down(touch)
115
e0c41f209c28 CagouWidget: instances can now add their own extra widgets in header with headerInputAddExtra
Goffi <goffi@goffi.org>
parents: 108
diff changeset
88
e0c41f209c28 CagouWidget: instances can now add their own extra widgets in header with headerInputAddExtra
Goffi <goffi@goffi.org>
parents: 108
diff changeset
89 def headerInputAddExtra(self, widget):
e0c41f209c28 CagouWidget: instances can now add their own extra widgets in header with headerInputAddExtra
Goffi <goffi@goffi.org>
parents: 108
diff changeset
90 """add a widget on the right of header input"""
e0c41f209c28 CagouWidget: instances can now add their own extra widgets in header with headerInputAddExtra
Goffi <goffi@goffi.org>
parents: 108
diff changeset
91 self.header_box.add_widget(widget)