X-Git-Url: https://scm.cri.mines-paristech.fr/git/minwii.git/blobdiff_plain/898cc352cb6624da41e4befd97a07c99243433a4..820dda3f2152d653172c5caef86ddf33fb7abc0e:/src/app/widgets/instrumentselector.py diff --git a/src/app/widgets/instrumentselector.py b/src/app/widgets/instrumentselector.py index 6935e03..6861643 100755 --- a/src/app/widgets/instrumentselector.py +++ b/src/app/widgets/instrumentselector.py @@ -10,6 +10,7 @@ import pygame from eventutils import event_handler, EventDispatcher, EventHandlerMixin from cursors import WarpingCursor from config import FRAMERATE +from config import INSTRUMENTS from globals import BACKGROUND_LAYER from globals import FOREGROUND_LAYER from globals import CURSOR_LAYER @@ -20,7 +21,7 @@ class InstrumentSelector(pygame.sprite.LayeredDirty, EventHandlerMixin) : rows = 3 cols = 3 - instruments = ['accordeon', 'celesta', 'flute', 'guitare', 'orgue', 'piano', 'tuba', 'violon', 'violoncelle'] + instruments = INSTRUMENTS def __init__(self) : super(InstrumentSelector, self).__init__() @@ -28,6 +29,7 @@ class InstrumentSelector(pygame.sprite.LayeredDirty, EventHandlerMixin) : self._initTiles() self._initCursor() self._inflatedTile = None + self.selectedInstrument = None def _initTiles(self) : screen = pygame.display.get_surface() @@ -35,11 +37,14 @@ class InstrumentSelector(pygame.sprite.LayeredDirty, EventHandlerMixin) : tileHeight = int(round(float(screen.get_height()) / self.rows)) self.tiles = [] - instrus = self.instruments[:] + instrus = list(self.instruments[:]) for y in range(self.cols) : for x in range(self.rows) : upperLeftCorner = (x * tileWidth, y * tileHeight) rect = pygame.Rect(upperLeftCorner, (tileWidth, tileHeight)) + # !!! s'il y avait plus de 3x3 tuiles !!!, il faudrait alors + # changer le tuple (x,y) qui concerne le point d'application de l'homotétie. + # Cf. InstrumentTile.inflate tile = InstrumentTile(instrus.pop(0), self, rect, (x,y)) self.add(tile, layer=BACKGROUND_LAYER) self.tiles.append(tile) @@ -71,7 +76,6 @@ class InstrumentSelector(pygame.sprite.LayeredDirty, EventHandlerMixin) : self.stop() @event_handler(pygame.MOUSEMOTION) - #@event_handler(pygame.MOUSEBUTTONDOWN) def onMouseMove(self, event) : for tile in reversed(self.sprites()[:-1]) : if tile.rect.collidepoint(*event.pos) : @@ -89,6 +93,13 @@ class InstrumentSelector(pygame.sprite.LayeredDirty, EventHandlerMixin) : self._inflatedTile = tile + @event_handler(pygame.MOUSEBUTTONDOWN) + def selectInstrument(self, event) : + for tile in reversed(self.sprites()[:-1]) : + if tile.rect.collidepoint(*event.pos) : + self.selectedInstrument = tile.instrumentDescription + self.stop() + break @@ -105,14 +116,14 @@ class InstrumentTile(pygame.sprite.DirtySprite) : BORDER = 10 INFLATE_ZOOM = 0.4 - def __init__(self, name, group, rect, coords) : + def __init__(self, instrumentDescription, group, rect, coords) : pygame.sprite.DirtySprite.__init__(self, group) self.inflated = False - self.name = name + self.instrumentDescription = instrumentDescription self.rect = rect self._baseRect = rect.copy() self.coords = coords - imagePath = InstrumentTile._get_instrument_image(name) + imagePath = InstrumentTile._get_instrument_image(instrumentDescription['name']) self._img = pygame.image.load(imagePath) self.update() @@ -122,7 +133,7 @@ class InstrumentTile(pygame.sprite.DirtySprite) : innerSize = innerWidth, innerHeight border = pygame.Surface(self.rect.size) - border.fill((0,0,0,255)) + border.fill((0xdd,0xdd,0xdd,255)) bg = pygame.Surface(innerSize) bg.fill((255,255,255,255))