bugfix
This commit is contained in:
parent
a28c177fd3
commit
82c6652ad6
64
kivyblocks/multi_select.py
Normal file
64
kivyblocks/multi_select.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
from kivy.properties import BooleanProperty, StringProperty,\
|
||||||
|
ListProperty, DictProperty
|
||||||
|
from kivyblocks.baseWidgets import VBox, PressableText
|
||||||
|
|
||||||
|
class MultiSelect(VBox):
|
||||||
|
items = ListProperty([])
|
||||||
|
item_cls = DictProperty({})
|
||||||
|
item_selected_cls = DictProperty({})
|
||||||
|
all_button_position = StringProperty('begin')
|
||||||
|
default_selected=StringProperty([])
|
||||||
|
|
||||||
|
def __init__(self, **kw):
|
||||||
|
super(MultiSelectBotton, self).__init__(**kw)
|
||||||
|
self.button_dic = {}
|
||||||
|
self.button_state = {}
|
||||||
|
|
||||||
|
def on_items(self, o, items):
|
||||||
|
self.clear_widgets()
|
||||||
|
dic = {
|
||||||
|
'text':'all',
|
||||||
|
'value':None,
|
||||||
|
}
|
||||||
|
if all_button_position == 'begin':
|
||||||
|
items.insert(dic,0)
|
||||||
|
else:
|
||||||
|
items.append(dic)
|
||||||
|
for item in items:
|
||||||
|
dic = item.copy()
|
||||||
|
if item['name'] in self.default_selected:
|
||||||
|
dic['clscss'] = self.item_selected_cls
|
||||||
|
state = 'selected'
|
||||||
|
else:
|
||||||
|
dic['clscss'] = self.item_cls
|
||||||
|
state = 'unselected'
|
||||||
|
b = PressableText(dic)
|
||||||
|
b.bind(on_press=self.button_pressed)
|
||||||
|
self.button_dic.update({b:dic})
|
||||||
|
self.button_state.update({b:state})
|
||||||
|
|
||||||
|
def button_pressed(self, o):
|
||||||
|
if self.button_state[o] == 'selected':
|
||||||
|
o.clscss = item_cls
|
||||||
|
self.button_state.update({o:'unselected'})
|
||||||
|
else:
|
||||||
|
o.clscss = item_selected_cls
|
||||||
|
self.button_state.update({o:'selected'})
|
||||||
|
if self.button_dic[o]['text'] == 'all' \
|
||||||
|
and self.button_state[o] == 'selected':
|
||||||
|
for b, state in self.button_state.copy().items():
|
||||||
|
if b == o:
|
||||||
|
continue
|
||||||
|
b.clscss = item_cls
|
||||||
|
self.button_state.update({b:'unselected'})
|
||||||
|
|
||||||
|
def getValue(self):
|
||||||
|
selected_buttons = [ b for b,state in self.button_state.item() \
|
||||||
|
if state == 'selected' ]
|
||||||
|
r = [ dic['value'] for b, dic in self.button_dic.items() \
|
||||||
|
if b in selected_buttons ]
|
||||||
|
return r
|
||||||
|
|
||||||
|
def setValue(self, v):
|
||||||
|
pass
|
||||||
|
|
Loading…
Reference in New Issue
Block a user