This commit is contained in:
yumoqing 2021-12-17 00:02:02 +08:00
parent 23fb775723
commit 979ac006b2
2 changed files with 85 additions and 36 deletions

View File

@ -11,9 +11,14 @@ from kivy.properties import NumericProperty, DictProperty, \
from kivyblocks.ready import WidgetReady
from kivyblocks.bgcolorbehavior import BGColorBehavior
from kivyblocks.utils import CSize
from kivyblocks.baseWidget import Box
from kivyblocks.baseWidget import Box, Text
from kivyblocks.widget_css import WidgetCSS
class TinyText(Text):
def on_texture_size(self, o, ts):
self.size = self.texture_size
print('TinyText:texture_size=', self.texture_size)
class ClickableBox(TouchRippleButtonBehavior, Box):
def __init__(self,
border_width=1,
@ -23,11 +28,10 @@ class ClickableBox(TouchRippleButtonBehavior, Box):
border_width,
border_width,
border_width],
radius=radius,
**kw)
self.border_width = border_width
self.bind(minimum_height=self.setter('height'))
self.bind(minimum_width=self.setter('width'))
# self.bind(minimum_height=self.setter('height'))
# self.bind(minimum_width=self.setter('width'))
def on_press(self,o=None):
pass
@ -35,32 +39,53 @@ class ClickableBox(TouchRippleButtonBehavior, Box):
class ClickableText(ClickableBox):
text = StringProperty(' ')
def __init__(self, **kw):
print('ClickableText begin inited')
self.txt_w = None
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.txt_w = TinyText(text=self.text, i18n=True)
self.txt_w.bind(texture_size=self.reset_size)
self.add_widget(self.txt_w)
self.txt_w.size_hint = (None, None)
self.txt_w.size = self.txt_w.texture_size
#self.txt_w.bind(minimum_height=self.txt_w.setter('height'))
#self.txt_w.bind(minimum_width=self.txt_w.setter('width'))
print('ClickableText inited')
def reset_size(self, o, s):
self.size_hint = (None,None)
self.size = self.txt_w.texture_size
def on_text(self, o, txt):
self.txt_w.text = txt
print('on_text fired')
if self.txt_w:
self.txt_w.text = self.text
class ClickableIconText(ClickableText):
source = StringProperty(None)
img_kw = DictProperty({})
def __init__(self, **kw):
super(ClickableIconText, self).__init__(**kw)
self.img_w = None
if source:
self.img_w = AsyncImage(source=self.source, **self.img_kw)
self.add_widget(self.img_w, index=0)
super(ClickableIconText, self).__init__(**kw)
print('ClickableIconText inited')
def reset_size(self, o, s):
self.size_hint = (None,None)
if self.orientation == 'horizontal':
self.height = max(self.txt_w.texture_size[1], self.img_w.height)
self.width = self.txt_w.texture_size[0] + self.img_w.width
else:
self.height = self.txt_w.texture_size[1] + self.img_w.height
self.width = max(self.txt_w.texture_size[0], self.img_w.width)
def on_source(self, o, source):
if self.img_w:
self.img_w.source = source
return
self.img_w = AsyncImage(source=self.source, **self.img_kw)
self.add_widget(self.img_w, index=0)
self.add_widget(self.img_w, index=-1)
class ToggleText(ClickableText):
"""
@ -91,7 +116,8 @@ class ToggleText(ClickableText):
return self.select_state
def on_select_state(self, o, f):
self.clscss = self.css_on if f else self.css_off
self.csscls = self.css_on if f else self.css_off
print(f'using {self.csscls}')
class ToggleIconText(ToggleText):
"""
@ -109,28 +135,38 @@ class ToggleIconText(ToggleText):
source = StringProperty(None)
img_kw = DictProperty({})
def __init__(self, **kw):
super(ToggleIconText, self).__init__(**kw)
self.img_w = None
self.source = source_off
super(ToggleIconText, self).__init__(**kw)
self.source = self.source_off
self.img_w = AsyncImage(source=self.source, **self.img_kw)
self.add_widget(self.img_w, index=-1)
def reset_size(self, o, s):
self.size_hint = (None,None)
if self.orientation == 'horizontal':
self.height = max(self.txt_w.texture_size[1], self.img_w.height)
self.width = self.txt_w.texture_size[0] + self.img_w.width
else:
self.height = self.txt_w.texture_size[1] + self.img_w.height
self.width = max(self.txt_w.texture_size[0], self.img_w.width)
print(f'ToggleIconText:w,h={self.width},{self.height}')
def on_select_state(self, o, f):
super(ToggleIconText, self).on_select_state(o,f)
self.source = source_on if f else source_off
self.source = self.source_on if f else self.source_off
def on_source(self, o, source):
if not self.img_w:
self.img_w = AsyncImage(self.source, **self.img_kw)
self.add_widget(sef.img_w, index=0)
if self.img_w:
self.img_w.source = self.source
class ClickableImage(ClickableBox):
source=StringProperty(None)
img_kw = DictProperty(None)
def __init__(self, **kw):
super(ClickableImage, self).__init__(**kw)
self.img_w = None
if source:
self.img_w = AsyncImage(source=self.source, **self.img_kw)
self.add_widget(self.img_w)
super(ClickableImage, self).__init__(**kw)
self.img_w = AsyncImage(source=self.source, **self.img_kw)
self.add_widget(self.img_w)
def on_source(self, o, source):
if self.img_w:
@ -145,7 +181,7 @@ class ToggleImage(ClickableImage):
select_state = BooleanProperty(False)
def __init__(self, **kw):
super(ToggleImage, self).__init__(**kw)
self.source = source_on
self.source = self.source_on
def toggle(self):
self.select_state = False if self.select_state else True
@ -166,9 +202,11 @@ class ToggleImage(ClickableImage):
self.source = self.source_off
r = Factory.register
r('TinyText', TinyText)
r('ClickableBox', ClickableBox)
r('ClickableText',ClickableText)
r('ClickableIconText',ClickableIconText)
r('ToggleText',ToggleText)
r('ToggleIconText',ToggleIconText)
r('ClickableImage',ClickableImage)
r('ToggleImage',ToggleImage)

View File

@ -9,7 +9,7 @@ from kivy.uix.widget import Widget
from kivy.app import App
from kivy.clock import Clock
from kivy.factory import Factory
from kivy.properties import StringProperty
from kivy.properties import StringProperty, ListProperty, NumericProperty
from appPublic.dictObject import DictObject
from appPublic.registerfunction import RegisterFunction
@ -19,6 +19,7 @@ from .utils import *
from .ready import WidgetReady
from .color_definitions import getColors
from .baseWidget import Text, Box
from .scrollpanel import ScrollPanel
from .toggleitems import ToggleItems
"""
@ -130,7 +131,7 @@ Toolpage options
"""
class ScrollToolbar(ToolbarPanel):
class ScrollToolbar(ScrollPanel):
"""
tool has the follow attributes
{
@ -145,35 +146,37 @@ class ScrollToolbar(ToolbarPanel):
"img_width_c":image width in charecter size
"css_on",
"css_off",
"orient":"V" or "H"
"tools":
"tool_orient"
}
"""
css_on = StringProperty('default')
css_off = StringProperty('default')
tools = ListProperty([])
tool_orient = StringProperty('horizontal')
img_height_c = NumericProperty(2)
img_width_c = NumericProperty(2)
def __init__(self, **kw):
print('#############init begin##########')
super(ScrollToolbar, self).__init__(**kw)
print('#############super init end##########')
self.register_event_type('on_press')
self.w_dic = {}
def on_tools(self, o, tools):
for t in self.tools:
label = t.get('label')
source_on = t.get('source_on', t.get('img_src',None))
source_off = t.get('source_off', t.get('img_src', None))
ToggleIconText = Factory.ToggleIconText
ToggleText = Factory.ToggleText
ToggleIcon = Factory.ToggleIcon
ToggleImage = Factory.ToggleImage
if label and source_on:
w = ToggleIconText(css_on=self.css_on,
css_off=self.css_off,
text=label,
source_on=source_on,
source_off=source_off,
orientation=self.tool_orient,
img_kw={
"size_hint":(None, None),
"height":CSize(self.img_height_c),
@ -183,14 +186,16 @@ class ScrollToolbar(ToolbarPanel):
elif label:
w = ToggleText(css_on=self.css_on,
css_off=self.css_off,
orientation=self.tool_orient,
text=label)
elif source_on:
w = ToggleIcon( source_on=source_on,
w = ToggleImage( source_on=source_on,
source_off=source_off,
orientation=self.tool_orient,
img_kw={
"size_hint":(None, None),
"height":CSize(self.img_height_c),
"width":"CSize(self.img_width_c)
"width":CSize(self.img_width_c)
}
)
@ -260,6 +265,12 @@ class ToolPage(BoxLayout):
self.toolbar.height = self.height
self.content.height = self.height
self.content.width = self.width - self.toolbar.width
print(f'tb-width={self.toolbar.width}')
print(f'tb-height={self.toolbar.height}')
print(f'c-height={self.content.height}')
print(f'c-width={self.content.width}')
print(f'height={self.height}')
print(f'width={self.width}')
def init(self):
self.initFlag = True
@ -267,8 +278,8 @@ class ToolPage(BoxLayout):
self.content = BoxLayout()
self.content.widget_id = 'content'
opts = {}
opts['img_height_c"] = self.img_size,
opts['img_width_c"] = self.img_size,
opts['img_height_c'] = self.img_size
opts['img_width_c'] = self.img_size
opts['css_on'] = self.actived_css
opts['css_off'] = self.normal_css
opts['orient'] = 'H'