bugfix
This commit is contained in:
parent
62984b8501
commit
b21aef7f6d
@ -4,6 +4,7 @@ from kivy.uix.behaviors import TouchRippleButtonBehavior
|
||||
from kivy.graphics import Color, Rectangle
|
||||
from kivy.uix.boxlayout import BoxLayout
|
||||
from kivy.factory import Factory
|
||||
from kivy.uix.image import AsyncImage
|
||||
from kivy.properties import ObjectProperty, StringProperty, BooleanProperty
|
||||
|
||||
from kivyblocks.ready import WidgetReady
|
||||
@ -24,6 +25,7 @@ class ClickableBox(TouchRippleButtonBehavior, Box):
|
||||
radius=radius,
|
||||
**kw)
|
||||
self.border_width = border_width
|
||||
self.bind(minimum_height=self.setter('height'))
|
||||
|
||||
def on_press(self,o=None):
|
||||
pass
|
||||
@ -33,6 +35,9 @@ class ClickableText(ClickableBox):
|
||||
def __init__(self, **kw):
|
||||
super(ClickableText, self).__init__(**kw)
|
||||
self.txt_w = Text(text=self.text, i18n=True)
|
||||
self.txt_w.size_hint = (None, None)
|
||||
self.txt_w.bind(minimum_height=self.self.txt_w.setter('height'))
|
||||
self.txt_w.bind(minimum_width=self.self.txt_w.setter('width'))
|
||||
self.add_widget(self.txt_w)
|
||||
|
||||
def on_text(self, o, txt):
|
||||
@ -63,46 +68,43 @@ class ToggleText(ClickableText):
|
||||
self.clscss = self.off_css
|
||||
|
||||
class ClickableImage(ClickableBox):
|
||||
source=StringProperty('none')
|
||||
source=StringProperty(None)
|
||||
img_height = NumericProperty(None)
|
||||
img_width = NumericProperty(None)
|
||||
def __init__(self, **kw):
|
||||
super(ClickableImage, self).__init__(**kw)
|
||||
self.img_w = None
|
||||
if source:
|
||||
self.img_w = AsyncImage(source=self.source)
|
||||
|
||||
class ToggleImage(
|
||||
class PressableBox(TouchRippleButtonBehavior, Box):
|
||||
normal_css = StringProperty("default")
|
||||
actived_css = StringProperty("default")
|
||||
box_actived = BooleanProperty(False)
|
||||
def __init__(self,
|
||||
border_width=1,
|
||||
user_data=None,
|
||||
radius=[],
|
||||
**kw):
|
||||
super(PressableBox, self).__init__(
|
||||
padding=[border_width,
|
||||
border_width,
|
||||
border_width,
|
||||
border_width],
|
||||
radius=radius,
|
||||
**kw)
|
||||
self.border_width = border_width
|
||||
self.user_data = user_data
|
||||
self.actived = False
|
||||
self.csscls = self.normal_css
|
||||
def on_source(self, o, source):
|
||||
if self.img_w:
|
||||
self.img_w.source = source
|
||||
return
|
||||
self.img_w = AsyncImage(source=self.source)
|
||||
|
||||
def active(self, flag):
|
||||
self.box_actived = flag
|
||||
class ToggleImage(ClickableImage):
|
||||
on_source = StringProperty(None)
|
||||
select_state = BooleanProperty(False)
|
||||
def __init__(self, **kw):
|
||||
super(ToggleImage, self).__init__(**kw)
|
||||
|
||||
def on_box_actived(self, o, v):
|
||||
if self.box_actived:
|
||||
self.csscls = self.actived_css
|
||||
def on_press(self, o):
|
||||
self.select_state = if self.select_state ? False, True
|
||||
|
||||
def on_select_state(self, o, f):
|
||||
if self.img_w:
|
||||
if f:
|
||||
self.img_w.source = self.on_source
|
||||
else:
|
||||
self.img_w.source = self.source
|
||||
return
|
||||
if f:
|
||||
self.img_w = AsyncImage(source=self.on_source)
|
||||
else:
|
||||
self.csscls = self.normal_css
|
||||
self.img_w = AsyncImage(source=self.source)
|
||||
|
||||
def on_press(self,o=None):
|
||||
self.box_actived = True
|
||||
|
||||
|
||||
def setValue(self,d):
|
||||
self.user_data = d
|
||||
|
||||
def getValue(self):
|
||||
return self.user_data
|
||||
class Select(VBox):
|
||||
"""
|
||||
|
||||
"""
|
||||
|
@ -1,29 +1,32 @@
|
||||
from kivy.properties import BooleanProperty, StringProperty,\
|
||||
ListProperty, DictProperty
|
||||
from kivyblocks.baseWidgets import VBox, PressableText
|
||||
from kivyblocks.typewriterbox import TypeWriterBox
|
||||
|
||||
class MultiSelect(VBox):
|
||||
class MultiSelect(TypeWriterBox):
|
||||
items = ListProperty([])
|
||||
item_cls = DictProperty({})
|
||||
item_selected_cls = DictProperty({})
|
||||
all_button_position = StringProperty('begin')
|
||||
all_button_position = StringProperty(None)
|
||||
default_selected=StringProperty([])
|
||||
|
||||
def __init__(self, **kw):
|
||||
super(MultiSelectBotton, self).__init__(**kw)
|
||||
self.button_dic = {}
|
||||
self.value_b = {}
|
||||
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)
|
||||
if all_button_position is not None:
|
||||
dic = {
|
||||
'text':'all',
|
||||
'value':'_all_',
|
||||
}
|
||||
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:
|
||||
@ -35,6 +38,7 @@ class MultiSelect(VBox):
|
||||
b = PressableText(dic)
|
||||
b.bind(on_press=self.button_pressed)
|
||||
self.button_dic.update({b:dic})
|
||||
self.value_b.update({dic['value']:b})
|
||||
self.button_state.update({b:state})
|
||||
|
||||
def button_pressed(self, o):
|
||||
@ -44,7 +48,7 @@ class MultiSelect(VBox):
|
||||
else:
|
||||
o.clscss = item_selected_cls
|
||||
self.button_state.update({o:'selected'})
|
||||
if self.button_dic[o]['text'] == 'all' \
|
||||
if self.button_dic[o]['value'] == '_all_' \
|
||||
and self.button_state[o] == 'selected':
|
||||
for b, state in self.button_state.copy().items():
|
||||
if b == o:
|
||||
@ -59,6 +63,10 @@ class MultiSelect(VBox):
|
||||
if b in selected_buttons ]
|
||||
return r
|
||||
|
||||
def setValue(self, v):
|
||||
pass
|
||||
def setValue(self, value):
|
||||
for v in value:
|
||||
b = self.value_b[v]
|
||||
self.button_state[b] = 'selected'
|
||||
b.clscss = item_selected_cls
|
||||
|
||||
|
||||
|
50
kivyblocks/typewriterbox.py
Normal file
50
kivyblocks/typewriterbox.py
Normal file
@ -0,0 +1,50 @@
|
||||
from kivy.uix.boxlayout import BoxLayout
|
||||
from kivy.uix.widget import Widget
|
||||
from kivy.factory import Factory
|
||||
from kivyblocks.widget_css import WidgetCSS
|
||||
from kivyblocks.ready import WidgetReady
|
||||
|
||||
class TypeWriterBox(WidgetCSS, WidgetReady, Widget):
|
||||
def __init__(self, **kw):
|
||||
super(TypeWriterBox, self).__init__(**kw)
|
||||
self.size_hint_y = None
|
||||
self.sub_widgets = []
|
||||
self.curbox = self.add_vertical_box()
|
||||
self.bind(minimum_height=self.setter('height'))
|
||||
|
||||
def on_width(self, o, size):
|
||||
self.relocate()
|
||||
|
||||
def add_widget(self, w, *args):
|
||||
width = 0
|
||||
for c in self.curbox.children:
|
||||
width += c.width
|
||||
if width + c.width > self.width:
|
||||
self.curbox = self.add_vertical_box()
|
||||
self.curbox.add_widget(w, *args)
|
||||
self.sub_widgets.append(w)
|
||||
|
||||
def del_widget(self, w):
|
||||
self.sub_widgets = [i for i in self.sub_widgets.copy() if i !=w ]
|
||||
self.relocate()
|
||||
|
||||
def add_veritcal_box(self):
|
||||
box = BoxLayout(orientation='vertical', size_hint_y=None)
|
||||
box.bind(minimum_height = box.setter('height')
|
||||
super(TypeWriterBox, self).add_widget(box)
|
||||
return box
|
||||
|
||||
def relocate(self):
|
||||
with self.fboContext():
|
||||
for b in self.children:
|
||||
b.clear_widgets()
|
||||
width = 0
|
||||
self.clear_widgets()
|
||||
self.curbox = add_vertical_box()
|
||||
for w in self.sub_widgets:
|
||||
if width + w.width > self.width:
|
||||
self.curbox = self.add_vertical_box()
|
||||
width = 0
|
||||
self.curbox.add_widget(w)
|
||||
|
||||
Factory.register('TypeWriterBox', TypeWriterBox)
|
Loading…
Reference in New Issue
Block a user