diff --git a/examples/widgets/compound_selection.py b/examples/widgets/compound_selection.py new file mode 100644 index 000000000..ef674bebd --- /dev/null +++ b/examples/widgets/compound_selection.py @@ -0,0 +1,57 @@ +from kivy.uix.gridlayout import GridLayout +from kivy.uix.button import Button +from kivy.uix.behaviors import CompoundSelectionBehavior +from kivy.app import runTouchApp +from kivy.core.window import Window + + +class SelectableGrid(CompoundSelectionBehavior, GridLayout): + + def __init__(self, **kwargs): + super(SelectableGrid, self).__init__(**kwargs) + keyboard = Window.request_keyboard(None, self) + keyboard.bind(on_key_down=self.select_with_key_down, + on_key_up=self.select_with_key_up) + + def print_selection(*l): + print [x.text for x in self.selected_nodes] + self.bind(selected_nodes=print_selection) + + def goto_node(self, key, last_node, last_node_idx): + ''' This function is used to go to the node by typing the number + of the text of the button. + ''' + node, idx = super(SelectableGrid, self).goto_node(key, last_node, + last_node_idx) + if node == last_node: + children = self.children + for i in range(len(children)): + if children[i].text == key: + return children[i], i + return node, idx + + def select_node(self, node): + node.background_color = (1, 0, 0, 1) + return super(SelectableGrid, self).select_node(node) + + def deselect_node(self, node): + node.background_color = (1, 1, 1, 1) + super(SelectableGrid, self).deselect_node(node) + + def do_touch(self, instance, touch): + if ('button' in touch.profile and touch.button in + ('scrollup', 'scrolldown', 'scrollleft', 'scrollright')) or\ + instance.collide_point(*touch.pos): + self.select_with_touch(instance, touch) + else: + return False + return True + + +root = SelectableGrid(cols=5, up_count=5, multiselect=True, scroll_count=1) +for i in range(40): + c = Button(text=str(i)) + c.bind(on_touch_down=root.do_touch) + root.add_widget(c) + +runTouchApp(root)