X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=tabakrolletjie%2Fwidgets.py;h=c1bbc941c38a924153af2875e9af59449b1b776f;hb=0244fa47c747ff7c68bba61328aea7a6ac9d82c8;hp=ff854de1f70b140e0e58926a51a8deb2c7a05e05;hpb=64b201d5de529398659af1022cabb985acd52ecc;p=tabakrolletjie.git diff --git a/tabakrolletjie/widgets.py b/tabakrolletjie/widgets.py index ff854de..c1bbc94 100644 --- a/tabakrolletjie/widgets.py +++ b/tabakrolletjie/widgets.py @@ -6,14 +6,23 @@ import pygame.locals as pgl from .loader import loader from .constants import FONTS +from .transforms import NullTransform, Multiply class Button(object): - def __init__(self, size, pos=None, padding=10): + def __init__(self, size, name=None, pos=None, padding=10): self._size = size self._padding = padding self.position = pos + self.name = name + self.enabled = True + + def enable(self): + self.enabled = True + + def disable(self): + self.enabled = False @property def position(self): @@ -38,6 +47,8 @@ class Button(object): pass def pressed(self, ev): + if not self.enabled: + return False if self._pos is None: # Unplaced buttons can't be pressed return False @@ -48,12 +59,48 @@ class Button(object): return False +class SpacerButton(Button): + """ Add a nothing object which can be used to space other things, + but is never pressed """ + + def pressed(self, ev): + return False + + class TextButton(Button): - def __init__(self, text, colour, pos=None, padding=10): + def __init__(self, text, colour, name=None, pos=None, padding=10): font = loader.load_font(FONTS['sans'], size=24) self._text = font.render(text, True, colour) - super(TextButton, self).__init__(self._text.get_size(), pos, padding) + self._disabled_text = self._text.copy() + Multiply(colour=(80, 80, 80)).apply(self._disabled_text) + super(TextButton, self).__init__(self._text.get_size(), name, + pos, padding) + + def render(self, surface): + if self.enabled: + surface.blit(self._text, self._pos, None) + else: + surface.blit(self._disabled_text, self._pos, None) + + +class ImageButton(Button): + + def __init__(self, *imgparts, **kwargs): + transform = kwargs.pop("transform", NullTransform()) + self._img = kwargs.pop("image", None) + if self._img is None: + self._img = loader.load_image(*imgparts, transform=transform) + name = kwargs.get('name') + pos = kwargs.get('pos') + padding = kwargs.get('padding', 0) + super(ImageButton, self).__init__(self._img.get_size(), name, + pos, padding) + + def update_image(self, *imgparts, **kwargs): + transform = kwargs.pop("transform", NullTransform()) + self._img = loader.load_image(*imgparts, transform=transform) + Multiply((128, 128, 128)).apply(self._disabled_img) def render(self, surface): - surface.blit(self._text, self._pos, None) + surface.blit(self._img, self._pos, None)