raspberry pi zero based drum machine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

sSelectFolder.py 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. import FSM
  2. import utils as u
  3. import menus as m
  4. import pygame
  5. from itertools import cycle
  6. import glob
  7. import os
  8. #====================================
  9. State = type("State", (object,), {})
  10. #====================================
  11. class State(object):
  12. def __init__(self, FSM):
  13. self.FSM = FSM
  14. def Enter(self):
  15. pass
  16. def Execute(self):
  17. pass
  18. def Exit(self):
  19. pass
  20. class SelectFolder(State):
  21. def __init__(self,FSM):
  22. super(SelectFolder, self).__init__(FSM)
  23. def Enter(self):
  24. o = self.FSM.owner
  25. o.header_text = "Select Folder"
  26. o.pub.register("beat", self)
  27. self.cur_el = 0
  28. files = u.get_files(o.song_dir, '.zzz')
  29. files_trimmed = [os.path.basename(x) for x in files]
  30. files_trimmed = [os.path.splitext(x)[0] for x in files_trimmed]
  31. print('files trimmed ', files_trimmed)
  32. files_trimmed.insert(0, '..')
  33. self.menu = files_trimmed
  34. if '_blank' in self.menu:
  35. self.menu.remove('_blank')
  36. if o.keyState[16] > 0 or o.keyState[17] > 0:
  37. pass
  38. else:
  39. u.draw_header(o)
  40. self.draw_main(o)
  41. o.update_display(0)
  42. super(SelectFolder, self).Enter()
  43. def Execute(self):
  44. #print('doing select folder')
  45. o = self.FSM.owner
  46. #u.draw_header(o)
  47. #o.update_display(0)
  48. m.menu1_actions(self, o)
  49. if o.keyState[16] == 1:
  50. m.draw_menu1(o)
  51. o.update_display(0)
  52. elif o.keyState[16] == 4:
  53. u.draw_header(o)
  54. self.draw_footer(o)
  55. self.draw_main(o)
  56. o.update_display(0)
  57. if o.keyState[17] == 4:
  58. u.draw_header(o)
  59. self.draw_footer(o)
  60. self.draw_main(o)
  61. o.update_display(0)
  62. 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:
  63. u.draw_header(o)
  64. self.draw_footer(o)
  65. self.draw_main(o)
  66. o.update_display(0)
  67. if o.keyState[16] > 0 or o.keyState[17] > 0:
  68. pass
  69. else:
  70. u.scroll_ud(o, self)
  71. # if o.keyState[0] == 1:
  72. # if self.cur_el > 0:
  73. # self.cur_el -= 1
  74. # print('cur el down is ', self.cur_el)
  75. # if o.keyState[1] == 1:
  76. # if self.cur_el < (len(self.menu) - 1):
  77. # self.cur_el += 1
  78. # print('cur el up is ', self.cur_el)
  79. if o.keyState[2] == 1:
  80. print('old song dir is ', o.song_dir)
  81. print('new song dir is ', self.menu[self.cur_el])
  82. self.FSM.ToTransition('toEnterText')
  83. if o.keyState[3] == 1:
  84. if self.menu[self.cur_el] == '..':
  85. print('move up dir')
  86. if o.song_dir == o.base_song_dir:
  87. pass
  88. else:
  89. print('old song dir ', o.song_dir)
  90. o.song_dir = os.path.dirname(os.path.dirname(o.song_dir))
  91. o.song_dir += '/'
  92. print('new song dir ', o.song_dir)
  93. files = u.get_files(o.song_dir, '.zzz')
  94. files_trimmed = [os.path.basename(x) for x in files]
  95. files_trimmed = [os.path.splitext(x)[0] for x in files_trimmed]
  96. print('files trimmed ', files_trimmed)
  97. files_trimmed.insert(0, '..')
  98. self.menu = files_trimmed
  99. if '_blank' in self.menu:
  100. self.menu.remove('_blank')
  101. u.draw_header(o)
  102. self.draw_footer(o)
  103. self.draw_main(o)
  104. o.update_display(0)
  105. elif os.path.isdir(o.song_dir + self.menu[self.cur_el]):
  106. o.song_dir += self.menu[self.cur_el] + '/'
  107. print('new song dir is ', o.song_dir)
  108. files = u.get_files(o.song_dir, '.zzz')
  109. files_trimmed = [os.path.basename(x) for x in files]
  110. files_trimmed = [os.path.splitext(x)[0] for x in files_trimmed]
  111. print('files trimmed ', files_trimmed)
  112. files_trimmed.insert(0, '..')
  113. self.menu = files_trimmed
  114. if '_blank' in self.menu:
  115. self.menu.remove('_blank')
  116. u.draw_header(o)
  117. self.draw_footer(o)
  118. self.draw_main(o)
  119. o.update_display(0)
  120. else:
  121. pass
  122. #o.mconf['default_song'] = self.menu[self.cur_el]
  123. #o.save_config()
  124. #o.load_song()
  125. def draw_main(self, o):
  126. al = []
  127. ypos = 30
  128. if self.cur_el > (len(self.menu) - 1):
  129. self.cur_el = 0
  130. if self.cur_el == 0:
  131. _iter = 0
  132. while _iter < 4:
  133. if _iter < (len(self.menu)):
  134. al.append(self.menu[_iter])
  135. _iter += 1
  136. # print('cur el ', self.cur_el)
  137. # if self.cur_el > (len(self.menu) - 1):
  138. # self.cur_el = 0
  139. # if self.cur_el == 0:
  140. # _iter = 0
  141. # while _iter < 4:
  142. # if _iter < (len(self.menu)):
  143. # al.append(self.menu[_iter])
  144. # _iter += 1
  145. elif self.cur_el == 1:
  146. al.append(self.menu[self.cur_el - 1])
  147. al.append(self.menu[self.cur_el])
  148. al.append(self.menu[self.cur_el + 1])
  149. al.append(self.menu[self.cur_el + 2])
  150. elif self.cur_el == (len(self.menu) - 2):
  151. al.append(self.menu[self.cur_el - 2])
  152. al.append(self.menu[self.cur_el - 1])
  153. al.append(self.menu[self.cur_el])
  154. al.append(self.menu[self.cur_el + 1])
  155. elif self.cur_el == (len(self.menu) - 1):
  156. al.append(self.menu[self.cur_el - 3])
  157. al.append(self.menu[self.cur_el - 2])
  158. al.append(self.menu[self.cur_el - 1])
  159. al.append(self.menu[self.cur_el])
  160. else:
  161. al.append(self.menu[self.cur_el - 1])
  162. al.append(self.menu[self.cur_el])
  163. al.append(self.menu[self.cur_el + 1])
  164. al.append(self.menu[self.cur_el + 2])
  165. _iter = 0
  166. for i in al:
  167. if i == self.menu[self.cur_el]:
  168. #if _iter == self.cur_el:
  169. if os.path.isdir(o.song_dir + i):
  170. i += "/"
  171. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.light_grey)
  172. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.blue)
  173. else:
  174. if os.path.isdir(o.song_dir + i):
  175. i += "/"
  176. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.blue)
  177. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.light_grey)
  178. ypos += 20
  179. _iter += 1
  180. def draw_footer(self, o):
  181. _iter = 0
  182. width = o.width / 4
  183. xpos = 0
  184. yposa = 135 - 25
  185. yposb = 135
  186. opts = ["Up", "Down", "Use", "Open"]
  187. while _iter < 4:
  188. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.blue)
  189. if o.keyState[_iter] == 1:
  190. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.light_grey)
  191. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.blue)
  192. else:
  193. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.light_grey)
  194. xpos += width
  195. _iter += 1
  196. def ReceiveMessage(self, message):
  197. o = self.FSM.owner
  198. u.play_seq(o, message)
  199. def Exit(self):
  200. print('why the fuck are we leaving')
  201. self.FSM.owner.pub.unregister("beat", self)