Este postat aici pe forum un offline shop ce are lipsă clasa "CustomScrollBar" din ui.py
EDIT: cineva care poate posta şi ExpandedButton , vă rog?
Cineva amabil care are aşa eva în clientul său şi vrea să împartă respectiva resursă ?
Mulţumesc!


Cod: Selectaţi tot
class CustomScrollBar(Window):
HORIZONTAL = 1
VERTICAL = 2
BOTTOM = 1
TOP = 2
RIGHT = 3
LEFT = 4
def __init__(self, template):
Window.__init__(self)
self.baseImage = None
self.button1 = None
self.button2 = None
self.middleButton = None
self.onScroll = None
self.parent = None
self.orientation = 0
self.pos = 0.0
self.middleScale = 0.1
self.step = 0.1
self.baseInfo = {}
self.mouseOffset = {}
base = template.get('base', "")
button1 = template.get('button1', {})
button2 = template.get('button2', {})
middle = template.get('middle', {})
onscroll= template.get('onscroll', None)
orient = template.get('orientation', 0)
align = template.get('align', {})
parent = template.get('parent', None)
position= template.get('position', {})
if not base or not button1 or not button2 or not middle or not onscroll or not orient or not parent:
dbg.TraceError("CustomScrollBar : cannot set template [%s]"%str(template))
return
self.__SetParent(parent)
self.__SetOrientation(orient)
self.__LoadBaseImage(base)
self.__LoadButton1(button1)
self.__LoadButton2(button2)
self.__LoadMiddleButton(middle)
self.__SetOnScrollEvent(onscroll)
if template.has_key('align'):
self.__SetAlign(align)
elif template.has_key('position'):
self.__SetPosition(position)
def __SetParent(self, parent):
if parent:
self.parent = parent
self.SetParent(parent)
def __SetOrientation(self, orient):
self.orientation = orient
def __LoadBaseImage(self, base):
bg = ExpandedImageBox()
bg.LoadImage(base)
bg.SetParent(self)
bg.SetPosition(0,0)
bg.Show()
w , h = (bg.GetWidth() , bg.GetHeight())
self.baseInfo = {'base' : {'width':w, 'height':h,}}
self.SetSize(w,h)
bg.OnMouseLeftButtonDown = self.__OnClickBaseImage
self.baseImage = bg
def __LoadButton1(self, button1):
button1['event'] = self.__OnClickButton1
btn = ExpandedButton(button1)
btn.SetParent(self.baseImage)
btn.SetPosition(0,0)
btn.Show()
self.button1 = btn
def __LoadButton2(self, button2):
button2['event'] = self.__OnClickButton2
btn = ExpandedButton(button2)
btn.SetParent(self.baseImage)
if self.orientation == self.HORIZONTAL:
leng = btn.GetWidth()
btn.SetPosition(self.GetWidth() - leng , 0)
elif self.orientation == self.VERTICAL:
leng = btn.GetHeight()
btn.SetPosition(0, self.GetHeight() - leng)
btn.Show()
self.button2 = btn
def __LoadMiddleButton(self, middle):
middle['downevent'] = self.__OnClickMiddle
middle['update'] = self.__OnUpdateMiddleBar
if self.orientation == self.HORIZONTAL:
btn.SetPosition(self.button1.GetWidth(), 0)
elif self.orientation == self.VERTICAL:
btn.SetPosition(0, self.button1.GetHeight())
btn.Show()
self.middleButton = btn
def __SetOnScrollEvent(self, onscroll):
self.onScroll = onscroll
def __SetAlign(self, align):
mode = align['mode']
offset1 = align.get('offset1',0)
offset2 = align.get('offset2',0)
if not self.parent:
return
if self.orientation == self.HORIZONTAL:
if mode == self.TOP:
self.SetPosition(offset1, 0)
if mode == self.BOTTOM:
self.SetPosition(offset1, self.parent.GetHeight() - self.GetHeight())
self.SetScrollBarLength(self.parent.GetWidth() - (offset1 + offset2))
elif self.orientation == self.VERTICAL:
if mode == self.RIGHT:
self.SetPosition(self.parent.GetWidth()-self.GetWidth(), offset1 )
elif mode == self.LEFT:
self.SetPosition(0, offset1)
self.SetScrollBarLength(self.parent.GetHeight() - (offset1 + offset2))
def __SetPosition(self, position):
self.SetPosition(position['x'] , position['y'])
def SetScrollBarLength(self, leng):
if self.orientation == self.VERTICAL:
self.SetSize(self.GetWidth(), leng)
baseScale = float(leng) / float(self.baseInfo['base']['height'])
self.baseImage.SetScale(1.0, baseScale)
scrollsize = leng - (self.__GetElementLength(self.button1) + self.__GetElementLength(self.button2))
self.middleButton.SetPosition(0,self.__GetElementLength(self.button1) + int((scrollsize - self.__GetElementLength(self.middleButton))* self.pos))
self.button2.SetPosition(0, self.GetHeight()-self.button2.GetHeight())
elif self.orientation == self.HORIZONTAL:
self.SetSize(leng, self.GetHeight())
baseScale = float(leng) / float(self.baseInfo['base']['width'])
self.baseImage.SetScale(baseScale, 1.0)
scrollsize = leng - (self.__GetElementLength(self.button1) + self.__GetElementLength(self.button2))
middle_leng = int(self.middleScale * scrollsize)
init_middle = float(self.middleButton.baseInfo['default']['width'])
self.middleButton.SetScale(float(middle_leng) / init_middle, 1.0)
self.middleButton.SetPosition(self.__GetElementLength(self.button1) + int((scrollsize - self.__GetElementLength(self.middleButton)) * self.pos),0)
self.button2.SetPosition(self.GetWidth() - self.button2.GetWidth(), 0)
def __GetElementLength(self, element):
if self.orientation == self.VERTICAL:
return element.GetHeight()
if self.orientation == self.HORIZONTAL:
return element.GetWidth()
return 0
def __OnUpdateMiddleBar(self):
if self.middleButton.status != ExpandedButton.STATUS_DOWN:
return
x,y = wndMgr.GetMousePosition()
gx,gy = self.middleButton.GetGlobalPosition()
gx += self.mouseOffset.get('x',0)
gy += self.mouseOffset.get('y',0)
if self.orientation == self.VERTICAL:
if y == gy:
return
elif self.orientation == self.HORIZONTAL:
if x == gx:
return
self.__OnMoveMiddleBar(x,y)
def __OnClickBaseImage(self):
x,y = wndMgr.GetMousePosition()
gx,gy = self.middleButton.GetGlobalPosition()
offset = self.__GetElementLength(self.middleButton)/2
gx += offset
gy += offset
if self.orientation == self.VERTICAL:
if y == gy:
return
elif self.orientation == self.HORIZONTAL:
if x == gx:
return
self.mouseOffset = {'x' : offset, 'y': offset}
self.__OnMoveMiddleBar(x,y)
def __OnClickButton2(self):
self.mouseOffset={'x' : 0, 'y' :0}
gx,gy = self.middleButton.GetGlobalPosition()
if self.orientation == self.VERTICAL:
gy += self.__GetElementLength(self.middleButton)
elif self.orientation == self.HORIZONTAL:
gx += self.__GetElementLength(self.middleButton)
self.__OnMoveMiddleBar(gx,gy)
def __OnClickButton1(self):
self.mouseOffset={'x' : 0, 'y' :0}
gx, gy = self.middleButton.GetGlobalPosition()
if self.orientation == self.VERTICAL:
gy -= self.__GetElementLength(self.middleButton)
elif self.orientation == self.HORIZONTAL:
gx -= self.__GetElementLength(self.middleButton)
self.__OnMoveMiddleBar(gx, gy)
def __OnMoveMiddleBar(self, x , y):
gx, gy = self.GetGlobalPosition()
x -= self.mouseOffset.get('x', 0)
y -= self.mouseOffset.get('y', 0)
if self.orientation == self.VERTICAL:
min_ = gy + self.__GetElementLength(self.button1)
max_ = min_ + (self.GetHeight() - (self.__GetElementLength(self.button1) + self.__GetElementLength(self.button2) + self.__GetElementLength(self.middleButton)))
if max_ < y and self.pos == 1.0:
return
if min_ > y and self.pos == 0.0:
return
realy = max(y, min_)
realy = min(realy, max_)
scroll= max_-min_
if scroll == 0.0:
return
self.pos = float(realy-min_) / float(scroll)
self.middleButton.SetPosition(0, realy-gy)
self.__OnScroll()
elif self.orientation == self.HORIZONTAL:
min_ = gx + self.__GetElementLength(self.button1)
max_ = min_ + (self.GetWidth() - (self.__GetElementLength(self.button1) + self.__GetElementLength(self.button2) + self.__GetElementLength(self.middleButton)))
if max_ < x and self.pos == 1.0:
return
if min_ > x and self.pos == 0.0:
return
realx = max(x, min_)
realx = min(realx, max_)
scroll = max_ - min_
if scroll == 0.0:
return
self.pos = float(realx - min_) / float(scroll)
self.middleButton.SetPosition(realx-gx, 0)
self.__OnScroll()
def __OnScroll(self):
if self.onScroll:
self.onScroll()
def __OnClickMiddle(self):
x,y = wndMgr.GetMousePosition()
gx,gy = self.middleButton.GetGlobalPosition()
x-= gx
y-= gy
self.mouseOffset = {"x" : x, "y": y ,}
def GetPos(self):
return self.pos
def GetStep(self):
return self.step
def SetScrollStep(self, step):
step = min(1.0, max(0.1 , step))
self.middleScale = step
self.step = step
self.SetScrollBarLength(self.__GetElementLength(self.baseImage))
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 4 vizitatori