+# -*- coding: utf-8 -*-
+"""
+Écran de sélection de l'instrument
+
+$Id$
+$URL$
+"""
+import pygame
+from eventutils import event_handler, EventDispatcher, EventHandlerMixin
+from cursors import WarpingCursor
+from config import FRAMERATE
+from globals import BACKGROUND_LAYER
+from globals import CURSOR_LAYER
+from globals import hls_to_rgba_8bits
+
+
+class InstrumentSelector(pygame.sprite.LayeredDirty, EventHandlerMixin) :
+
+ rows = 3
+ cols = 3
+
+ def __init__(self) :
+ super(InstrumentSelector, self).__init__()
+ self._initCursor()
+ self._initRects()
+ self._initTiles()
+
+ def _initRects(self) :
+ screen = pygame.display.get_surface()
+ tileWidth = int(round(float(screen.get_width()) / self.cols))
+ tileHeight = int(round(float(screen.get_height()) / self.rows))
+
+ rects = []
+ for y in range(self.cols) :
+ for x in range(self.rows) :
+ upperLeftCorner = (y * tileWidth, x * tileHeight)
+ rect = pygame.Rect(upperLeftCorner, (tileWidth, tileHeight))
+ rects.append(rect)
+ self.rects = rects
+
+ def _initTiles(self) :
+ for rect in self.rects :
+ tile = InstrumentTile(self, rect)
+ self.add(tile, layer=BACKGROUND_LAYER)
+
+
+
+ def _initCursor(self) :
+ self.cursor = WarpingCursor(blinkMode=True)
+ self.add(self.cursor, layer=CURSOR_LAYER)
+
+
+ def run(self):
+ self._running = True
+ clock = pygame.time.Clock()
+ pygame.display.flip()
+ pygame.mouse.set_visible(False)
+ while self._running :
+ EventDispatcher.dispatchEvents()
+ dirty = self.draw(pygame.display.get_surface())
+ pygame.display.update(dirty)
+ clock.tick(FRAMERATE)
+
+ def stop(self) :
+ self._running = False
+ pygame.mouse.set_visible(True)
+ self.cursor._stopBlink()
+
+ @event_handler(pygame.KEYDOWN)
+ def handleKeyDown(self, event) :
+ if event.key == pygame.K_q:
+ self.stop()
+
+
+class InstrumentTile(pygame.sprite.DirtySprite) :
+
+ def __init__(self, group, rect) :
+ pygame.sprite.DirtySprite.__init__(self, group)
+ self.rect = rect
+ self.image = pygame.Surface(rect.size)
+ self.image.fill((0,255,255,64))