1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
from kivy.uix.label import Label
from kivy.uix.stacklayout import StackLayout
from kivy.uix.relativelayout import RelativeLayout
from kivy.properties import ListProperty, StringProperty
import math
__all__ = ["ActionList",
"ActionListIcons", "ActionListIcon",
"ActionListDescriptions", "ActionListDescription"]
class ActionList(RelativeLayout):
action_title = StringProperty("")
action_list = ListProperty([])
def update_list(self, key, action_descriptions):
self.action_title = "actions linked to key {}:".format(key.key_sym)
action_list = []
for [action, status] in action_descriptions:
if status == "done":
icon = "✓"
elif status == "current":
icon = "✅"
else:
icon = " "
action_list.append([icon, action])
self.action_list = action_list
class ActionListIcons(StackLayout):
def __init__(self, **kwargs):
super(ActionListIcons, self).__init__(**kwargs)
self.icons = []
def on_parent(self, instance, parent):
parent.bind(action_list=self.update_actionlist_icons)
def update_actionlist_icons(self, instance, actionlist):
for icon in self.icons:
self.remove_widget(icon)
self.icons = []
for icon, description in actionlist:
icon_label = ActionListIcon(text=icon)
self.add_widget(icon_label)
self.icons.append(icon_label)
class ActionListIcon(Label):
def __init__(self, text='', **kwargs):
super(ActionListIcon, self).__init__(**kwargs)
self.text = text
def on_parent(self, instance, parent):
if parent is not None:
self.font_size = math.ceil(2 * math.sqrt(parent.parent.parent.key_size))
self.height = parent.parent.labels_height
class ActionListDescriptions(StackLayout):
def __init__(self, **kwargs):
super(ActionListDescriptions, self).__init__(**kwargs)
self.descriptions = []
def on_parent(self, instance, parent):
parent.bind(action_list=self.update_actionlist_descriptions)
def update_actionlist_descriptions(self, instance, actionlist):
for description in self.descriptions:
self.remove_widget(description)
self.descriptions = []
for icon, description in actionlist:
description_label = ActionListDescription(text=description)
self.add_widget(description_label)
self.descriptions.append(description_label)
class ActionListDescription(Label):
def __init__(self, text='', **kwargs):
super(ActionListDescription, self).__init__(**kwargs)
self.text = text
def on_parent(self, instance, parent):
if parent is not None:
self.font_size = math.ceil(2 * math.sqrt(parent.parent.parent.key_size))
self.height = parent.parent.labels_height
|