import FSM import utils as u import menus as m import pygame from itertools import cycle import glob import os #==================================== 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 SelectFolder(State): def __init__(self,FSM): super(SelectFolder, self).__init__(FSM) def Enter(self): o = self.FSM.owner o.header_text = "Select Folder" o.pub.register("beat", self) self.cur_el = 0 files = u.get_files(o.song_dir, '.zzz') files_trimmed = [os.path.basename(x) for x in files] files_trimmed = [os.path.splitext(x)[0] for x in files_trimmed] print('files trimmed ', files_trimmed) files_trimmed.insert(0, '..') self.menu = files_trimmed if '_blank' in self.menu: self.menu.remove('_blank') if o.keyState[16] > 0 or o.keyState[17] > 0: pass else: u.draw_header(o) self.draw_main(o) o.update_display(0) super(SelectFolder, self).Enter() def Execute(self): #print('doing select folder') o = self.FSM.owner #u.draw_header(o) #o.update_display(0) m.menu1_actions(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_footer(o) self.draw_main(o) o.update_display(0) if o.keyState[17] == 4: u.draw_header(o) self.draw_footer(o) self.draw_main(o) o.update_display(0) if o.keyState[0] == 1 or o.keyState[0] == 3 or o.keyState[1] == 1 or o.keyState[1] == 3 or o.keyState[2] == 1 or o.keyState[2] == 3 or o.keyState[3] == 1 or o.keyState[3] == 3: u.draw_header(o) self.draw_footer(o) self.draw_main(o) o.update_display(0) if o.keyState[16] > 0 or o.keyState[17] > 0: pass else: u.scroll_ud(o, self) # if o.keyState[0] == 1: # if self.cur_el > 0: # self.cur_el -= 1 # print('cur el down is ', self.cur_el) # if o.keyState[1] == 1: # if self.cur_el < (len(self.menu) - 1): # self.cur_el += 1 # print('cur el up is ', self.cur_el) if o.keyState[2] == 1: print('old song dir is ', o.song_dir) print('new song dir is ', self.menu[self.cur_el]) self.FSM.ToTransition('toEnterText') if o.keyState[3] == 1: if self.menu[self.cur_el] == '..': print('move up dir') if o.song_dir == o.base_song_dir: pass else: print('old song dir ', o.song_dir) o.song_dir = os.path.dirname(os.path.dirname(o.song_dir)) o.song_dir += '/' print('new song dir ', o.song_dir) files = u.get_files(o.song_dir, '.zzz') files_trimmed = [os.path.basename(x) for x in files] files_trimmed = [os.path.splitext(x)[0] for x in files_trimmed] print('files trimmed ', files_trimmed) files_trimmed.insert(0, '..') self.menu = files_trimmed if '_blank' in self.menu: self.menu.remove('_blank') u.draw_header(o) self.draw_footer(o) self.draw_main(o) o.update_display(0) elif os.path.isdir(o.song_dir + self.menu[self.cur_el]): o.song_dir += self.menu[self.cur_el] + '/' print('new song dir is ', o.song_dir) files = u.get_files(o.song_dir, '.zzz') files_trimmed = [os.path.basename(x) for x in files] files_trimmed = [os.path.splitext(x)[0] for x in files_trimmed] print('files trimmed ', files_trimmed) files_trimmed.insert(0, '..') self.menu = files_trimmed if '_blank' in self.menu: self.menu.remove('_blank') u.draw_header(o) self.draw_footer(o) self.draw_main(o) o.update_display(0) else: pass #o.mconf['default_song'] = self.menu[self.cur_el] #o.save_config() #o.load_song() def draw_main(self, o): al = [] ypos = 30 if self.cur_el > (len(self.menu) - 1): self.cur_el = 0 if self.cur_el == 0: _iter = 0 while _iter < 4: if _iter < (len(self.menu)): al.append(self.menu[_iter]) _iter += 1 # print('cur el ', self.cur_el) # if self.cur_el > (len(self.menu) - 1): # self.cur_el = 0 # if self.cur_el == 0: # _iter = 0 # while _iter < 4: # if _iter < (len(self.menu)): # al.append(self.menu[_iter]) # _iter += 1 elif self.cur_el == 1: al.append(self.menu[self.cur_el - 1]) al.append(self.menu[self.cur_el]) al.append(self.menu[self.cur_el + 1]) al.append(self.menu[self.cur_el + 2]) elif self.cur_el == (len(self.menu) - 2): al.append(self.menu[self.cur_el - 2]) al.append(self.menu[self.cur_el - 1]) al.append(self.menu[self.cur_el]) al.append(self.menu[self.cur_el + 1]) elif self.cur_el == (len(self.menu) - 1): al.append(self.menu[self.cur_el - 3]) al.append(self.menu[self.cur_el - 2]) al.append(self.menu[self.cur_el - 1]) al.append(self.menu[self.cur_el]) else: al.append(self.menu[self.cur_el - 1]) al.append(self.menu[self.cur_el]) al.append(self.menu[self.cur_el + 1]) al.append(self.menu[self.cur_el + 2]) _iter = 0 for i in al: if i == self.menu[self.cur_el]: #if _iter == self.cur_el: if os.path.isdir(o.song_dir + i): i += "/" o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.light_grey) o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.blue) else: if os.path.isdir(o.song_dir + i): i += "/" o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.blue) o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.light_grey) ypos += 20 _iter += 1 def draw_footer(self, o): _iter = 0 width = o.width / 4 xpos = 0 yposa = 135 - 25 yposb = 135 opts = ["Up", "Down", "Use", "Open"] while _iter < 4: o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.blue) if o.keyState[_iter] == 1: o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.light_grey) o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.blue) else: o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.light_grey) xpos += width _iter += 1 def ReceiveMessage(self, message): o = self.FSM.owner u.play_seq(o, message) def Exit(self): print('why the fuck are we leaving') self.FSM.owner.pub.unregister("beat", self)