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)
- -
-
value
either a widget or a string -
- - Example - - 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)
- -
-
value
initial value, (True, False) -
- - Example - - 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)
- -
-
group
a gui.Group for the Checkbox to belong to -
value
the value -
- - Example - - 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)
- -
-
group
a gui.Group for the Radio to belong to -
value
the value -
- - Example - - 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)
- -
-
group
a gui.Group for the Tool to belong to -
widget
a widget to appear on the Tool (similar to a Button) -
value
the value -
- - Example - - 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)
- -
-
value
a string -
- - Example - - 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)) -