raspberry pi zero based drum machine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

sSelectFolder.py 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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. if o.keyState[0] == 1:
  71. if self.cur_el > 0:
  72. self.cur_el -= 1
  73. print('cur el down is ', self.cur_el)
  74. if o.keyState[1] == 1:
  75. if self.cur_el < (len(self.menu) - 1):
  76. self.cur_el += 1
  77. print('cur el up is ', self.cur_el)
  78. if o.keyState[2] == 1:
  79. print('old song dir is ', o.song_dir)
  80. print('new song dir is ', self.menu[self.cur_el])
  81. self.FSM.ToTransition('toEnterText')
  82. if o.keyState[3] == 1:
  83. if self.menu[self.cur_el] == '..':
  84. print('move up dir')
  85. if o.song_dir == o.base_song_dir:
  86. pass
  87. else:
  88. print('old song dir ', o.song_dir)
  89. o.song_dir = os.path.dirname(os.path.dirname(o.song_dir))
  90. o.song_dir += '/'
  91. print('new song dir ', o.song_dir)
  92. files = u.get_files(o.song_dir, '.zzz')
  93. files_trimmed = [os.path.basename(x) for x in files]
  94. files_trimmed = [os.path.splitext(x)[0] for x in files_trimmed]
  95. print('files trimmed ', files_trimmed)
  96. files_trimmed.insert(0, '..')
  97. self.menu = files_trimmed
  98. if '_blank' in self.menu:
  99. self.menu.remove('_blank')
  100. u.draw_header(o)
  101. self.draw_footer(o)
  102. self.draw_main(o)
  103. o.update_display(0)
  104. elif os.path.isdir(o.song_dir + self.menu[self.cur_el]):
  105. o.song_dir += self.menu[self.cur_el] + '/'
  106. print('new song dir is ', o.song_dir)
  107. files = u.get_files(o.song_dir, '.zzz')
  108. files_trimmed = [os.path.basename(x) for x in files]
  109. files_trimmed = [os.path.splitext(x)[0] for x in files_trimmed]
  110. print('files trimmed ', files_trimmed)
  111. files_trimmed.insert(0, '..')
  112. self.menu = files_trimmed
  113. if '_blank' in self.menu:
  114. self.menu.remove('_blank')
  115. u.draw_header(o)
  116. self.draw_footer(o)
  117. self.draw_main(o)
  118. o.update_display(0)
  119. else:
  120. pass
  121. #o.mconf['default_song'] = self.menu[self.cur_el]
  122. #o.save_config()
  123. #o.load_song()
  124. def draw_main(self, o):
  125. al = []
  126. ypos = 30
  127. print('cur el ', self.cur_el)
  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. elif self.cur_el == 1:
  137. al.append(self.menu[self.cur_el - 1])
  138. al.append(self.menu[self.cur_el])
  139. al.append(self.menu[self.cur_el + 1])
  140. al.append(self.menu[self.cur_el + 2])
  141. elif self.cur_el == (len(self.menu) - 2):
  142. al.append(self.menu[self.cur_el - 2])
  143. al.append(self.menu[self.cur_el - 1])
  144. al.append(self.menu[self.cur_el])
  145. al.append(self.menu[self.cur_el + 1])
  146. elif self.cur_el == (len(self.menu) - 1):
  147. al.append(self.menu[self.cur_el - 3])
  148. al.append(self.menu[self.cur_el - 2])
  149. al.append(self.menu[self.cur_el - 1])
  150. al.append(self.menu[self.cur_el])
  151. else:
  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. al.append(self.menu[self.cur_el + 2])
  156. _iter = 0
  157. for i in al:
  158. if i == self.menu[self.cur_el]:
  159. #if _iter == self.cur_el:
  160. if os.path.isdir(o.song_dir + i):
  161. i += "/"
  162. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.light_grey)
  163. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.blue)
  164. else:
  165. if os.path.isdir(o.song_dir + i):
  166. i += "/"
  167. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.blue)
  168. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.light_grey)
  169. ypos += 20
  170. _iter += 1
  171. def draw_footer(self, o):
  172. _iter = 0
  173. width = o.width / 4
  174. xpos = 0
  175. yposa = 135 - 25
  176. yposb = 135
  177. opts = ["Up", "Down", "Use", "Open"]
  178. while _iter < 4:
  179. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.blue)
  180. if o.keyState[_iter] == 1:
  181. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.light_grey)
  182. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.blue)
  183. else:
  184. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.light_grey)
  185. xpos += width
  186. _iter += 1
  187. def ReceiveMessage(self, message):
  188. o = self.FSM.owner
  189. u.play_seq(o, message)
  190. def Exit(self):
  191. print('why the fuck are we leaving')
  192. self.FSM.owner.pub.unregister("beat", self)