X-Git-Url: https://scm.cri.ensmp.fr/git/minwii.git/blobdiff_plain/346a9b8e1fcfe30629f0d1ee4675e9e8f89890cf..4c4732c6ed8cb0aaa70fb2d4c6e5a958868c5349:/src/pgu/gui/button.py?ds=inline diff --git a/src/pgu/gui/button.py b/src/pgu/gui/button.py deleted file mode 100644 index 90cdd1e..0000000 --- a/src/pgu/gui/button.py +++ /dev/null @@ -1,351 +0,0 @@ -""" -""" - -from pygame.locals import * - -from const import * -import widget, surface -import basic - -class _button(widget.Widget): - def __init__(self,**params): - widget.Widget.__init__(self,**params) - self.state = 0 - - def event(self,e): - if e.type == ENTER: self.repaint() - elif e.type == EXIT: self.repaint() - elif e.type == FOCUS: self.repaint() - elif e.type == BLUR: self.repaint() - elif e.type == KEYDOWN: - if e.key == K_SPACE or e.key == K_RETURN: - self.state = 1 - self.repaint() - elif e.type == MOUSEBUTTONDOWN: - self.state = 1 - self.repaint() - elif e.type == KEYUP: - if self.state == 1: - sub = pygame.event.Event(CLICK,{'pos':(0,0),'button':1}) - #self.send(sub.type,sub) - self._event(sub) - - self.state = 0 - self.repaint() - elif e.type == MOUSEBUTTONUP: - self.state = 0 - self.repaint() - elif e.type == CLICK: - self.click() - - self.pcls = "" - if self.state == 0 and self.container.myhover is self: - self.pcls = "hover" - if self.state == 1 and self.container.myhover is self: - self.pcls = "down" - - def click(self): - pass - - -class Button(_button): - """A button, buttons can be clicked, they are usually used to set up callbacks. - -
Button(value=None)- -
- w = gui.Button("Click Me")
- w.connect(gui.CLICK,fnc,value)
-
- """
- def __init__(self,value=None,**params):
- params.setdefault('cls','button')
- _button.__init__(self,**params)
- self.value = value
-
- def __setattr__(self,k,v):
- if k == 'value' and type(v) == str: v = basic.Label(v,cls=self.cls+".label")
- _v = self.__dict__.get(k,NOATTR)
- self.__dict__[k]=v
- if k == 'value' and v != None:
- pass
-
- if k == 'value' and _v != NOATTR and _v != None and _v != v:
- self.send(CHANGE)
- self.chsize()
-
- def resize(self,width=None,height=None):
- self.value.rect.x,self.value.rect.y = 0,0
- self.value.rect.w,self.value.rect.h = self.value.resize(width,height)
- return self.value.rect.w,self.value.rect.h
-#
-# self.value._resize()
-# self.rect.w,self.rect.h = self.value.rect_margin.w,self.value.rect_margin.h
-#
-# if self.style.width: self.rect.w = max(self.rect.w,self.style.width)
-# if self.style.height: self.rect.w = max(self.rect.w,self.style.height)
-#
-# xt,xr,xb,xl = self.value.getspacing()
-#
-# self.value._resize(self.rect.w-(xl+xr),self.rect.h-(xt+xb))
-#
- def paint(self,s):
- self.value.pcls = self.pcls
- self.value.paint(surface.subsurface(s,self.value.rect))
-
-class Switch(_button):
- """A switch can have two states, True or False.
-
- Switch(value=False)- -
- w = gui.Switch(True)
- w.connect(gui.CHANGE,fnc,value)
-
- """
- def __init__(self,value=False,**params):
- params.setdefault('cls','switch')
- _button.__init__(self,**params)
- self.value = value
-
- img = self.style.off
- self.style.width = img.get_width()
- self.style.height = img.get_height()
-
- def paint(self,s):
- #self.pcls = ""
- #if self.container.myhover is self: self.pcls = "hover"
- if self.value: img = self.style.on
- else: img = self.style.off
- s.blit(img,(0,0))
-
- def __setattr__(self,k,v):
- _v = self.__dict__.get(k,NOATTR)
- self.__dict__[k]=v
- if k == 'value' and _v != NOATTR and _v != v:
- self.send(CHANGE)
- self.repaint()
-
- def click(self):
- self.value = not self.value
-
-class Checkbox(_button):
- """Within a Group of Checkbox widgets several may be selected at a time.
-
- Checkbox(group,value=None)- -
- g = gui.Group(name='colors',value=['r','b'])
-
- t = gui.Table()
- t.tr()
- t.td(gui.Label('Red'))
- t.td(gui.Checkbox(g,'r'))
- t.tr()
- t.td(gui.Label('Green'))
- t.td(gui.Checkbox(g,'g'))
- t.tr()
- t.td(gui.Label('Blue'))
- t.td(gui.Checkbox(g,'b'))
-
- """
-
- def __init__(self,group,value=None,**params):
- params.setdefault('cls','checkbox')
- _button.__init__(self,**params)
- self.group = group
- self.group.add(self)
- if self.group.value == None:
- self.group.value = []
- self.value = value
-
- img = self.style.off
- self.style.width = img.get_width()
- self.style.height = img.get_height()
-
- def paint(self,s):
- #self.pcls = ""
- #if self.container.myhover is self: self.pcls = "hover"
- if self.value in self.group.value: img = self.style.on
- else: img = self.style.off
-
- s.blit(img,(0,0))
-
- def click(self):
- if self.value in self.group.value:
- self.group.value.remove(self.value)
- else:
- self.group.value.append(self.value)
- self.group._change()
-
-class Radio(_button):
- """Within a Group of Radio widgets only one may be selected at a time.
-
- Radio(group,value=None)- -
- g = gui.Group(name='colors',value='g')
-
- t = gui.Table()
- t.tr()
- t.td(gui.Label('Red'))
- t.td(gui.Radio(g,'r'))
- t.tr()
- t.td(gui.Label('Green'))
- t.td(gui.Radio(g,'g'))
- t.tr()
- t.td(gui.Label('Blue'))
- t.td(gui.Radio(g,'b'))
-
- """
-
-
- def __init__(self,group=None,value=None,**params):
- params.setdefault('cls','radio')
- _button.__init__(self,**params)
- self.group = group
- self.group.add(self)
- self.value = value
-
- img = self.style.off
- self.style.width = img.get_width()
- self.style.height = img.get_height()
-
- def paint(self,s):
- #self.pcls = ""
- #if self.container.myhover is self: self.pcls = "hover"
- if self.group.value == self.value: img = self.style.on
- else: img = self.style.off
- s.blit(img,(0,0))
-
- def click(self):
- self.group.value = self.value
-
-class Tool(_button):
- """Within a Group of Tool widgets only one may be selected at a time.
-
- Tool(group,widget=None,value=None)- -
- g = gui.Group(name='colors',value='g')
-
- t = gui.Table()
- t.tr()
- t.td(gui.Tool(g,'Red','r'))
- t.tr()
- t.td(gui.Tool(g,'Green','g'))
- t.tr()
- t.td(gui.Tool(g,'Blue','b'))
-
- """
-
- def __init__(self,group,widget=None,value=None,**params): #TODO widget= could conflict with module widget
- params.setdefault('cls','tool')
- _button.__init__(self,**params)
- self.group = group
- self.group.add(self)
- self.value = value
-
- if widget:
- self.setwidget(widget)
-
- if self.group.value == self.value: self.pcls = "down"
-
- def setwidget(self,w):
- self.widget = w
-
- def resize(self,width=None,height=None):
- self.widget.rect.w,self.widget.rect.h = self.widget.resize()
- #self.widget._resize()
- #self.rect.w,self.rect.h = self.widget.rect_margin.w,self.widget.rect_margin.h
-
- return self.widget.rect.w,self.widget.rect.h
-
- def event(self,e):
- _button.event(self,e)
- if self.group.value == self.value: self.pcls = "down"
-
- def paint(self,s):
- if self.group.value == self.value: self.pcls = "down"
- self.widget.paint(surface.subsurface(s,self.widget.rect))
-
- def click(self):
- self.group.value = self.value
- for w in self.group.widgets:
- if w != self: w.pcls = ""
-
-
-class Icon(_button):
- """TODO - might be deprecated
- """
- def __init__(self,cls,**params):
- params['cls'] = cls
- _button.__init__(self,**params)
- s = self.style.image
- self.style.width = s.get_width()
- self.style.height = s.get_height()
- self.state = 0
-
- def paint(self,s):
- #self.pcls = ""
- #if self.state == 0 and hasattr(self.container,'myhover') and self.container.myhover is self: self.pcls = "hover"
- #if self.state == 1 and hasattr(self.container,'myhover') and self.container.myhover is self: self.pcls = "down"
- s.blit(self.style.image,(0,0))
-
-class Link(_button):
- """A link, links can be clicked, they are usually used to set up callbacks.
- Basically the same as the button widget, just text only with a different cls. Made for
- convenience.
-
- Link(value=None)- -
- w = gui.Link("Click Me")
- w.connect(gui.CLICK,fnc,value)
-
- """
- def __init__(self,value,**params):
- params.setdefault('focusable',True)
- params.setdefault('cls','link')
- _button.__init__(self,**params)
- self.value = value
- self.font = self.style.font
- self.style.width, self.style.height = self.font.size(self.value)
-
- def paint(self,s):
- s.blit(self.font.render(self.value, 1, self.style.color),(0,0))
-