From 5034abc0164f6c09cb53291d2fe3e71c33cc4cf9 Mon Sep 17 00:00:00 2001 From: pin Date: Mon, 27 Jun 2011 17:02:53 +0000 Subject: [PATCH] Ajout d'une option pour afficher / masquer les noms de notes en bas du clavier. git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@359 fe552daf-6dbe-4428-90eb-1537e0879342 --- src/minwii/app.py | 19 +++++++++++-------- src/minwii/widgets/column.py | 8 +++++--- src/minwii/widgets/home.py | 18 ++++++++++++++++++ src/minwii/widgets/playingscreen.py | 13 +++++++------ 4 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/minwii/app.py b/src/minwii/app.py index c56700a..ab10bdf 100755 --- a/src/minwii/app.py +++ b/src/minwii/app.py @@ -102,14 +102,14 @@ class MinWii(object): pygame.display.set_caption('MINWii') WT = self.WT - songFile, playMode, wiimoteIndex = '', 'NORMAL', 0 + songFile, playMode, displayNotes, wiimoteIndex = '', 'NORMAL', True, 0 while True : WT.resume() WT.selectWiimote(self.nwiimotes - 1) # la télécommande est la souris self.screen = SCREEN_HOME - exit, songFile, playMode, wiimoteIndex = \ - self.selectSongAndOptions(songFile, playMode, wiimoteIndex) + exit, songFile, playMode, displayNotes, wiimoteIndex = \ + self.selectSongAndOptions(songFile, playMode, displayNotes, wiimoteIndex) if exit : break @@ -120,20 +120,22 @@ class MinWii(object): self.screen = SCREEN_PLAY WT.selectWiimote(wiimoteIndex) - self.runPlayingScreen(songFile, playMode, instrumentDescription) + self.runPlayingScreen(songFile, playMode, displayNotes, instrumentDescription) WT.pause() - def selectSongAndOptions(self, songFile, playMode, wiimoteIndex) : + def selectSongAndOptions(self, songFile, playMode, displayNotes, wiimoteIndex) : """ lance l'écran de paramétrage et retourne un tuple comportant : - drapeau de sortie de l'application (booléen) - chemin du fichier de la chanson - mode (entier) + - affichage des notes (booléen) - wiimote sélectionnée (entier) """ home = Home(songPath=SONG_FILE_PATH, songFile=songFile, playMode=playMode, + displayNotes=displayNotes, wiimoteIndex=wiimoteIndex, nwiimotes=self.nwiimotes) app = self.app @@ -163,6 +165,7 @@ class MinWii(object): return (home.exitApp, home.songFile, home.selectedPlayMode, + home.displayNotes, home.selectedWiimoteIndex) def selectInstrument(self) : @@ -182,7 +185,7 @@ class MinWii(object): console.info('ajustement octave : %d', instru['octave']) return instru - def runPlayingScreen(self, songFile, playMode, instrumentDescription) : + def runPlayingScreen(self, songFile, playMode, displayNotes, instrumentDescription) : """ Lance l'écran de jeu principal avec la chanson 'songFile' dans le mode 'playMode' avec l'instrument midi 'instrumentDescription'. """ @@ -192,10 +195,10 @@ class MinWii(object): self.synth.adjust_octave(0, octave) self.synth.program_select(0, bank, preset) if playMode == PLAYING_MODES_DICT['IMPRO'] : - playingScreen = PlayingScreen(self.synth) + playingScreen = PlayingScreen(self.synth, displayNotes=displayNotes) else : song = musicXml2Song(songFile) - self.playingScreen = playingScreen = SongPlayingScreen(self.synth, song, mode=playMode) + self.playingScreen = playingScreen = SongPlayingScreen(self.synth, song, mode=playMode, displayNotes=displayNotes) playingScreen.run() pygame.event.clear() EventDispatcher.reset() diff --git a/src/minwii/widgets/column.py b/src/minwii/widgets/column.py index d829152..b113529 100755 --- a/src/minwii/widgets/column.py +++ b/src/minwii/widgets/column.py @@ -27,7 +27,7 @@ class Column(pygame.sprite.DirtySprite) : ''' colonne utilisée pour l'affichage d'une touche du clavier de jeu. ''' - def __init__(self, group, index, hue, rect, tone) : + def __init__(self, group, index, hue, rect, tone, displayNote=True) : pygame.sprite.DirtySprite.__init__(self, group) self.index = index self.state = False @@ -43,7 +43,8 @@ class Column(pygame.sprite.DirtySprite) : w, h = rect.w, rect.h tw, th, = toneName.get_size() toneRect = pygame.Rect(((w - tw) / 2, h - th), (tw, th)) - sur.blit(toneName, toneRect) + if displayNote : + sur.blit(toneName, toneRect) self.surOff = sur self.rectOff = rect @@ -58,7 +59,8 @@ class Column(pygame.sprite.DirtySprite) : self.surOn = gradients.vertical(rectOn.size, topRgba, bottomRgba) w, h = rectOn.w, rectOn.h toneRect = pygame.Rect(((w - tw) / 2, h - th), (tw, th)) - self.surOn.blit(toneName, toneRect) + if displayNote : + self.surOn.blit(toneName, toneRect) self.rectOn = rectOn self.image = self.surOff diff --git a/src/minwii/widgets/home.py b/src/minwii/widgets/home.py index 8a671bc..92a0e22 100755 --- a/src/minwii/widgets/home.py +++ b/src/minwii/widgets/home.py @@ -52,6 +52,7 @@ class Home(object, Table) : self.font = pygame.font.Font(None,70) self._fill() self.selectedPlayMode = params.get('playMode', 'NORMAL') + self.displayNotes = params.get('displayNotes', True) self.selectedWiimoteIndex = params.get('wiimoteIndex', 0) self._initLocalListeners() @@ -79,6 +80,15 @@ class Home(object, Table) : for k, caption in PLAYING_MODES : self.modeSelect.add(self.createLabel(caption), k) self.td(self.modeSelect,colspan=3, style=STYLE_RIGHT_COL) + + # affichage / masquage des noms de notes + self.tr() + self.td(self.createLabel("Notes :"), style=STYLE_LEFT_COL) + self.displayNotesSelect = Select(True) + for k, caption in ((True, 'Oui'), (False, 'Non')) : + self.displayNotesSelect.add(self.createLabel(caption), k) + self.td(self.displayNotesSelect, style=STYLE_RIGHT_COL) + # choix des wiimotes self.tr() @@ -112,6 +122,14 @@ class Home(object, Table) : else : self.playButton.disabled = False + @property + def displayNotes(self) : + return self.displayNotesSelect.value + + @displayNotes.setter + def displayNotes(self, value) : + self.displayNotesSelect.value = value + @property def selectedWiimoteIndex(self) : return self.selectedWiimote.value diff --git a/src/minwii/widgets/playingscreen.py b/src/minwii/widgets/playingscreen.py index b1dbe80..9519053 100755 --- a/src/minwii/widgets/playingscreen.py +++ b/src/minwii/widgets/playingscreen.py @@ -27,7 +27,7 @@ from column import Column class PlayingScreenBase(pygame.sprite.LayeredDirty, EventHandlerMixin) : - def __init__(self, synth, distinctNotes=[]) : + def __init__(self, synth, distinctNotes=[], displayNotes=True) : """ distinctNotes : notes disctinctes présentes dans la chanson triées du plus grave au plus aigu. @@ -35,6 +35,7 @@ class PlayingScreenBase(pygame.sprite.LayeredDirty, EventHandlerMixin) : super(PlayingScreenBase, self).__init__() self.synth = synth self.distinctNotes = distinctNotes + self.displayNotes = displayNotes self.keyboardLength = 0 self.keyboardRects = [] self.cursor = None @@ -77,7 +78,7 @@ class PlayingScreenBase(pygame.sprite.LayeredDirty, EventHandlerMixin) : for i, rect in enumerate(self.keyboardRects) : hue = FIRST_HUE - hueStep * i tone = self.distinctNotes[i] - c = Column(self, i, hue, rect, tone) + c = Column(self, i, hue, rect, tone, displayNote=self.displayNotes) self.add(c, layer=BACKGROUND_LAYER) self.columns[tone.midi] = c @@ -166,14 +167,14 @@ class PlayingScreen(PlayingScreenBase) : scale = [55, 57, 59, 60, 62, 64, 65, 67, 69, 71, 72] - def __init__(self, synth) : + def __init__(self, synth, displayNotes=True) : distinctNotes = [] self.currentColumn = None for midi in self.scale : tone = Tone(midi) distinctNotes.append(tone) - super(PlayingScreen, self).__init__(synth, distinctNotes) + super(PlayingScreen, self).__init__(synth, distinctNotes, displayNotes=displayNotes) @event_handler(events.COLDOWN) def noteon(self, event) : @@ -191,8 +192,8 @@ class PlayingScreen(PlayingScreenBase) : class SongPlayingScreen(PlayingScreenBase) : - def __init__(self, synth, song, mode=PLAYING_MODES_DICT['NORMAL'], tempoTrim=0) : - super(SongPlayingScreen, self).__init__(synth, song.distinctNotes) + def __init__(self, synth, song, mode=PLAYING_MODES_DICT['NORMAL'], displayNotes=True, tempoTrim=0) : + super(SongPlayingScreen, self).__init__(synth, song.distinctNotes, displayNotes=displayNotes) self.song = song self.quarterNoteDuration = song.quarterNoteDuration self.tempoTrim = tempoTrim -- 2.20.1