import FSM import utils as u import menus as m from itertools import cycle #==================================== State = type("State", (object,), {}) #==================================== class State(object): def __init__(self, FSM): self.FSM = FSM def Enter(self): pass def Execute(self): pass def Exit(self): pass #==================================== class EditSong(State): def __init__(self,FSM): super(EditSong, self).__init__(FSM) def Enter(self): o = self.FSM.owner o.header_text = "Edit Song" o.pub.register("beat", self) if o.keyState[16] > 0 or o.keyState[17] > 0: pass else: u.draw_header(o) self.draw_main(o) # o.draw.text((20, 30), "Current Song", font=o.h2, fill=o.light_grey) # o.draw.text((20, 50), str(o.song), font=o.h2, fill=o.light_grey) o.update_display(0) self.new_song = [] super(EditSong, self).Enter() def Execute(self): o = self.FSM.owner m.menu1_actions(self, o) m.menu2_actions_song(self, o) if o.keyState[16] == 1: m.draw_menu1(o) o.update_display(0) elif o.keyState[16] == 4: u.draw_header(o) self.draw_main(o) # if self.new_song == []: # o.draw.text((20, 30), "Current Song", font=o.h2, fill=o.light_grey) # o.draw.text((20, 50), str(o.song), font=o.h2, fill=o.light_grey) # else: # o.draw.text((20, 30), "New Song", font=o.h2, fill=o.pink) # o.draw.text((20, 50), str(self.new_song), font=o.h2, fill=o.pink) o.update_display(0) if o.keyState[17] == 1: m.draw_menu2_song(o) o.update_display(0) elif o.keyState[17] == 4: u.draw_header(o) self.draw_main(o) o.update_display(0) if o.keyState[16] > 0 or o.keyState[17] > 0: #if o.keyState[16] > 0: pass else: _id = 0 for k in self.FSM.owner.keyState: if k == 1 and _id < 16: self.new_song.append((_id + (o.pat_bank * 16))) u.draw_header(o) self.draw_main(o) #o.draw.text((20, 30), "New Song", font=o.h2, fill=o.pink) #o.draw.text((20, 50), str(self.new_song), font=o.h2, fill=o.pink) o.update_display(0) _id += 1 def draw_main(self, o): ypos = 35 ysize = 20 tmp_song = [8, 6, 7, 5, 3, 0, 9] lines = u.breakup_song_text(o.song) #lines = u.breakup_song_text(tmp_song) if self.new_song != []: #o.draw.text((20, 30), "New Song", font=o.h2, fill=o.pink) lines = u.breakup_song_text(self.new_song) o.center_block("New Song", o.h2, [0, ypos, o.width, ypos + ysize], o.pink) else: #o.draw.text((20, 30), "Current Song", font=o.h2, fill=o.light_grey) o.center_block("Current Song", o.h2, [0, ypos, o.width, ypos + ysize], o.light_grey) ypos += ysize o.center_block(lines[0], o.h2, [0, ypos, o.width, ypos + ysize], o.light_grey) ypos += ysize o.center_block(lines[1], o.h2, [0, ypos, o.width, ypos + ysize], o.light_grey) ypos += ysize o.center_block(lines[2], o.h2, [0, ypos, o.width, ypos + ysize], o.light_grey) ypos += ysize o.center_block(lines[3], o.h2, [0, ypos, o.width, ypos + ysize], o.light_grey) def ReceiveMessage(self, message): _id = 0 o = self.FSM.owner u.play_seq(o, message) def Exit(self): o = self.FSM.owner self.FSM.owner.pub.unregister("beat", self) if self.new_song != []: o.song = self.new_song o.songCycle = cycle(self.new_song) self.curPattern = next(o.songCycle) o.songStart = o.curPattern #====================================