+++ /dev/null
-'''\r
-Created on 12 nov. 2009\r
-\r
-@author: Samuel Benveniste\r
-'''\r
-\r
-import os\r
-import sys\r
-import subprocess\r
-\r
-import pygame\r
-import pygame.midi\r
-import pickle\r
-\r
-from pygame.locals import *\r
-\r
-from pgu import gui as pguGui\r
-\r
-from PlayingScreen import PlayingScreen\r
-from SongPlayingScreen import SongPlayingScreen\r
-from InstrumentChoice import InstrumentChoice\r
-from instruments.Instrument import Instrument\r
-from cursor.WarpingCursor import *\r
-from controllers.Wiimote import Wiimote\r
-from logging.Log import Log\r
-from songs.Song import Song,loadSong\r
-from songs.musicxmltosong import musicXml2Song\r
-from constants import *\r
-from MINWiiDialog import MINWiiDialog\r
-\r
-class PGUConfiguration(pguGui.Desktop):\r
- '''\r
- classdocs\r
- '''\r
-\r
-\r
- def __init__(self,window):\r
- '''\r
- Constructor\r
- '''\r
- pguGui.Desktop.__init__(self)\r
- self.extendedScale = False\r
- self.cascade = False\r
- self.song = None\r
- self.scale = scaleDict["majorScale"]\r
- self.log = None\r
- self.done = False\r
- self.easyMode = True\r
- self.mode = 0\r
- self.activeWiimotes = [False for i in range(4)]\r
- self.alwaysDown = False\r
- \r
- self.file = None\r
- #fileName is the path for the log file\r
- self.fileName = fileName\r
- self.titleFont = pygame.font.Font(None,100)\r
- self.font = pygame.font.Font(None,70)\r
- self.spaceSize = (100,100)\r
- \r
- self.browseButton = pguGui.Button(self.createLabel("Choisir..."))\r
- self.browseButton.connect(pguGui.CLICK, self.open_file_browser, None)\r
- \r
- self.songSwitch = pguGui.Switch(False)\r
- \r
- self.modeSelect = pguGui.Select()\r
- for key in modeDict.keys() :\r
- self.modeSelect.add(self.createLabel(reversedReadabilityDict[key]),key)\r
- self.modeSelect.connect(pguGui.CHANGE,self.modeSelectChanged,None)\r
- \r
- self.activeWiimoteSwitches = [pguGui.Switch(False) for i in range(4)]\r
- for i in range(len(self.activeWiimoteSwitches)) :\r
- self.activeWiimoteSwitches[i].connect(pguGui.CHANGE,self.activeWiimoteSwitchesChanged,i)\r
- \r
- self.goButton = pguGui.Button(self.createLabel("Go"))\r
- self.goButton.connect(pguGui.CLICK,self.goButtonClicked,None)\r
- \r
- self.quitButton = pguGui.Button(self.createLabel("Fin"))\r
- self.quitButton.connect(pguGui.CLICK,self.quitButtonClicked,None)\r
- \r
- self.connect(pguGui.QUIT,self.quit,None)\r
- \r
- self.window = window\r
- \r
- ##The table code is entered much like HTML.\r
- ##::\r
- \r
- self.mainTable = pguGui.Table()\r
- \r
- self.fillMainTable()\r
- \r
-# self.mainTable.tr()\r
-# self.mainTable.td(self.createLabel("MINWii",self.titleFont),colspan = 4)\r
- \r
- self.run(self.mainTable)\r
- \r
- def open_file_browser(self,data=None):\r
- d = MINWiiDialog(font = self.font,width = 800, height = 600,path = "../songs/smwis")\r
- d.connect(pguGui.CHANGE, self.handle_file_browser_closed, d)\r
- d.open()\r
- \r
-\r
- def handle_file_browser_closed(self,dlg):\r
- if dlg.value:\r
- if os.path.isfile(dlg.value):\r
- self.file = dlg.value\r
- if self.file.endswith('.smwi') :\r
- self.song = loadSong(self.file)\r
- key = os.path.basename(self.file)[:-5]\r
- if key in reversedReadabilityDict : \r
- label = self.createLabel(reversedReadabilityDict[key])\r
- else :\r
- label = self.createLabel(key)\r
- elif self.file.endswith('.xml') :\r
- self.song = musicXml2Song(self.file, printNotes=False)\r
- filename = os.path.basename(self.file)\r
- label = self.createLabel(filename) \r
- self.browseButton = pguGui.Button(label)\r
- self.browseButton.connect(pguGui.CLICK, self.open_file_browser, None)\r
- if not self.songSwitch.value :\r
- self.songSwitch.click()\r
- self.mainTable.clear()\r
- self.fillMainTable()\r
- \r
- \r
- def fillMainTable(self):\r
- \r
- self.mainTable.tr()\r
- self.mainTable.td(pguGui.Spacer(*self.spaceSize))\r
- \r
- self.mainTable.tr()\r
- self.mainTable.td(self.createLabel("Chanson :"))\r
- self.mainTable.td(self.browseButton,colspan=2)\r
- self.mainTable.td(self.songSwitch)\r
- \r
- self.mainTable.tr()\r
- self.mainTable.td(pguGui.Spacer(*self.spaceSize))\r
- \r
- self.mainTable.tr()\r
- self.mainTable.td(self.createLabel("Niveau :"))\r
- self.mainTable.td(self.modeSelect,colspan=3)\r
- \r
- self.mainTable.tr()\r
- self.mainTable.td(pguGui.Spacer(*self.spaceSize))\r
- \r
- self.mainTable.tr()\r
- self.mainTable.td(self.createLabel("Joueurs :", self.font))\r
- playerTable = pguGui.Table()\r
- for i in range(len(self.activeWiimoteSwitches)):\r
- playerTable.td(self.createLabel(" " + str(i+1)+" ", self.font))\r
- playerTable.td(self.activeWiimoteSwitches[i])\r
- self.mainTable.td(playerTable,colspan = 3)\r
- \r
- self.mainTable.tr()\r
- self.mainTable.td(pguGui.Spacer(*self.spaceSize))\r
- \r
- self.mainTable.tr()\r
- self.mainTable.td(self.goButton)\r
- self.mainTable.td(self.quitButton,colspan=3) \r
- \r
- self.mainTable.tr()\r
- self.mainTable.td(pguGui.Spacer(500,500)) \r
- \r
- def createLabel(self,text,font = None):\r
- if font == None :\r
- font = self.font\r
- w,h = self.font.size(text)\r
- label = pguGui.Label(text,width=w,height=h,font = font)\r
- return(label)\r
- \r
- def songSelectChanged(self,data=None):\r
- self.song = songDict[self.songSelect.value]\r
- \r
- def activeWiimoteSwitchesChanged(self,data = None):\r
- if self.activeWiimoteSwitches[data].value :\r
- for i in range(len(self.activeWiimoteSwitches)) :\r
- if self.activeWiimoteSwitches[i].value and data != i :\r
- self.activeWiimoteSwitches[i].click() \r
- for i in range(len(self.activeWiimoteSwitches)) :\r
- self.activeWiimotes[i] = self.activeWiimoteSwitches[i].value\r
- \r
- def modeSelectChanged(self,data = None):\r
- self.mode = modeDict[self.modeSelect.value]\r
- \r
- def hasActiveWiimote(self):\r
- hasActive = False\r
- for i in self.activeWiimotes:\r
- if i :\r
- hasActive = True\r
- return(hasActive)\r
- \r
- def quitButtonClicked(self,data = None):\r
- self.done = True\r
- print 'puti'\r
- for isActive in self.activeWiimotes :\r
- print isActive\r
- self.quit()\r
- \r
- def goButtonClicked(self,data = None):\r
- pygame.font.init()\r
- \r
- if not self.hasActiveWiimote():\r
- self.activeWiimotes[0] = True\r
- pygame.midi.init()\r
- instruments = [Instrument(self.scale, i + 1, "".join(["../instruments/instrumentImages/", instrumentImagePathList[i], ".jpg"]), octaves[i]) for i in range(9)]\r
- \r
- joys = [[id,pygame.joystick.Joystick(id).get_name()] for id in range(pygame.joystick.get_count())]\r
- for joy in joys:\r
- print joy[1]\r
- if joy[1] in joyNames:\r
- print "On"\r
- pygame.joystick.Joystick(joy[0]).init()\r
- else :\r
- print "off" \r
- \r
- ports = [pygame.midi.get_device_info(id)[1] for id in range(pygame.midi.get_count())]\r
- portOffset = ports.index(portNames[0])\r
- print(portOffset)\r
- \r
- screen = pygame.display.get_surface()\r
- clock = pygame.time.Clock() \r
- cursorImages=[['../cursor/cursorImages/black/10.png'],['../cursor/cursorImages/red/10.png'],['../cursor/cursorImages/blue/10.png'],['../cursor/cursorImages/green/10.png']]\r
- durations = [75 for i in range(len(cursorImages[0]))]\r
- \r
- wiimoteCount = 4\r
- cursors = [WarpingCursor(None, cursorImages[i], durations, (300 * i, 300 * i),flashImage = '../cursor/cursorImages/black/flash.png' ) for i in range(wiimoteCount)]\r
- wiimotes = [Wiimote(i, i + portOffset, None, None, cursors[i]) for i in range(wiimoteCount)]\r
- \r
- if self.song != None and self.songSwitch.value :\r
- \r
- if self.mode == 0 :\r
- self.extendedScale = self.song.requiresExtendedScale\r
- self.cascade = True\r
- self.easyMode = True\r
- self.alwaysDown = True\r
- elif self.mode == 1 :\r
- self.extendedScale = self.song.requiresExtendedScale\r
- self.cascade = True\r
- self.easyMode = True\r
- elif self.mode == 2:\r
- self.extendedScale = self.song.requiresExtendedScale\r
- self.cascade = False\r
- self.easyMode = True\r
- elif self.mode == 3:\r
- self.extendedScale = True\r
- self.cascade = False\r
- self.easyMode = False\r
- \r
- choice = InstrumentChoice(instruments, wiimotes, self.window, screen, clock, joys, portOffset,self.activeWiimotes, scaleFactor = songScaleFactor)\r
- play = SongPlayingScreen(choice, self)# self.song,self.cascade, self.extendedScale,self.easyMode,self.alwaysDown)\r
- \r
- else:\r
- \r
- if self.mode == 0 :\r
- self.extendedScale = False\r
- self.cascade = False\r
- elif self.mode == 1 :\r
- self.extendedScale = True\r
- self.cascade = False\r
- elif self.mode == 2:\r
- self.extendedScale = False\r
- self.cascade = True\r
- elif self.mode == 3:\r
- self.extendedScale = True\r
- self.cascade = True\r
- \r
- choice = InstrumentChoice(instruments, wiimotes, self.window, screen, clock, joys, portOffset,self.activeWiimotes)\r
- play = PlayingScreen(choice, self)#None,self.cascade, self.extendedScale) \r
- \r
- while play.backToInstrumentChoice == True :\r
- \r
- for wiimote in wiimotes:\r
- del wiimote.port\r
- \r
- wiimotes = [Wiimote(i, i + portOffset, None, None, cursors[i]) for i in range(wiimoteCount)]\r
- previousEventLog = choice.eventLog\r
-\r
- if self.song != None :\r
- choice = InstrumentChoice(instruments, wiimotes, self.window, screen, clock, joys, portOffset, self.activeWiimotes,eventLog = previousEventLog, replay = False, scaleFactor = songScaleFactor)\r
- play = SongPlayingScreen(choice, self.song, False, self.extendedScale,self.easyMode)\r
- else:\r
- choice = InstrumentChoice(instruments, wiimotes, self.window, screen, clock, joys, portOffset,self.activeWiimotes, eventLog = previousEventLog, replay = False)\r
- play = PlayingScreen(choice, None, self.cascade, self.extendedScale)\r
- \r
- for wiimote in wiimotes:\r
- del wiimote.port\r
- \r
- i = 1 \r
- filePath = "".join([self.fileName,str(i),".mwi"]) \r
- while os.path.exists(filePath):\r
- i += 1\r
- filePath = "".join([self.fileName,str(i),".mwi"]) \r
- \r
- f = file(filePath, 'w')\r
- self.log = Log(play.eventLog,self.scale,self.extendedScale,self.cascade,self.song,self.mode,self.activeWiimotes)\r
- pickler = pickle.Pickler(f)\r
- pickler.dump(self.log)\r
- \r
- f.close()\r
- \r
- pygame.midi.quit()\r
- \r
- self.repaint()\r
- \r
-if __name__ == "__main__" :\r
- pygame.init()\r
- modeResolution = (1024,768)\r
- window = pygame.display.set_mode(modeResolution)#,pygame.FULLSCREEN)\r
- pgu = PGUConfiguration(window)\r
- pygame.quit() \r
- \r
- \r
- \r
-
\ No newline at end of file