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 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. files_trimmed.insert(0, '..')
  32. self.menu = files_trimmed
  33. if '_blank' in self.menu:
  34. self.menu.remove('_blank')
  35. if o.keyState[16] > 0 or o.keyState[17] > 0:
  36. pass
  37. else:
  38. u.draw_header(o)
  39. self.draw_main(o)
  40. o.update_display(0)
  41. super(SelectFolder, self).Enter()
  42. def Execute(self):
  43. o = self.FSM.owner
  44. m.menu1_actions(self, o)
  45. if o.keyState[16] == 1:
  46. m.draw_menu1(o)
  47. o.update_display(0)
  48. elif o.keyState[16] == 4:
  49. u.draw_header(o)
  50. self.draw_footer(o)
  51. self.draw_main(o)
  52. o.update_display(0)
  53. if o.keyState[17] == 4:
  54. u.draw_header(o)
  55. self.draw_footer(o)
  56. self.draw_main(o)
  57. o.update_display(0)
  58. 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:
  59. u.draw_header(o)
  60. self.draw_footer(o)
  61. self.draw_main(o)
  62. o.update_display(0)
  63. if o.keyState[16] > 0 or o.keyState[17] > 0:
  64. pass
  65. else:
  66. u.scroll_ud(o, self)
  67. if o.keyState[2] == 1:
  68. self.FSM.ToTransition('toEnterText')
  69. if o.keyState[3] == 1:
  70. if self.menu[self.cur_el] == '..':
  71. if o.song_dir == o.base_song_dir:
  72. pass
  73. else:
  74. o.song_dir = os.path.dirname(os.path.dirname(o.song_dir))
  75. o.song_dir += '/'
  76. files = u.get_files(o.song_dir, '.zzz')
  77. files_trimmed = [os.path.basename(x) for x in files]
  78. files_trimmed = [os.path.splitext(x)[0] for x in files_trimmed]
  79. files_trimmed.insert(0, '..')
  80. self.menu = files_trimmed
  81. if '_blank' in self.menu:
  82. self.menu.remove('_blank')
  83. u.draw_header(o)
  84. self.draw_footer(o)
  85. self.draw_main(o)
  86. o.update_display(0)
  87. elif os.path.isdir(o.song_dir + self.menu[self.cur_el]):
  88. o.song_dir += self.menu[self.cur_el] + '/'
  89. files = u.get_files(o.song_dir, '.zzz')
  90. files_trimmed = [os.path.basename(x) for x in files]
  91. files_trimmed = [os.path.splitext(x)[0] for x in files_trimmed]
  92. files_trimmed.insert(0, '..')
  93. self.menu = files_trimmed
  94. if '_blank' in self.menu:
  95. self.menu.remove('_blank')
  96. u.draw_header(o)
  97. self.draw_footer(o)
  98. self.draw_main(o)
  99. o.update_display(0)
  100. else:
  101. pass
  102. def draw_main(self, o):
  103. al = []
  104. ypos = 30
  105. if self.cur_el > (len(self.menu) - 1):
  106. self.cur_el = 0
  107. if self.cur_el == 0:
  108. _iter = 0
  109. while _iter < 4:
  110. if _iter < (len(self.menu)):
  111. al.append(self.menu[_iter])
  112. _iter += 1
  113. elif self.cur_el == 1:
  114. al.append(self.menu[self.cur_el - 1])
  115. al.append(self.menu[self.cur_el])
  116. al.append(self.menu[self.cur_el + 1])
  117. al.append(self.menu[self.cur_el + 2])
  118. elif self.cur_el == (len(self.menu) - 2):
  119. al.append(self.menu[self.cur_el - 2])
  120. al.append(self.menu[self.cur_el - 1])
  121. al.append(self.menu[self.cur_el])
  122. al.append(self.menu[self.cur_el + 1])
  123. elif self.cur_el == (len(self.menu) - 1):
  124. al.append(self.menu[self.cur_el - 3])
  125. al.append(self.menu[self.cur_el - 2])
  126. al.append(self.menu[self.cur_el - 1])
  127. al.append(self.menu[self.cur_el])
  128. else:
  129. al.append(self.menu[self.cur_el - 1])
  130. al.append(self.menu[self.cur_el])
  131. al.append(self.menu[self.cur_el + 1])
  132. al.append(self.menu[self.cur_el + 2])
  133. _iter = 0
  134. for i in al:
  135. if i == self.menu[self.cur_el]:
  136. if os.path.isdir(o.song_dir + i):
  137. i += "/"
  138. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.light_grey)
  139. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.blue)
  140. else:
  141. if os.path.isdir(o.song_dir + i):
  142. i += "/"
  143. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.blue)
  144. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.light_grey)
  145. ypos += 20
  146. _iter += 1
  147. def draw_footer(self, o):
  148. _iter = 0
  149. width = o.width / 4
  150. xpos = 0
  151. yposa = 135 - 25
  152. yposb = 135
  153. opts = ["Up", "Down", "Use", "Open"]
  154. while _iter < 4:
  155. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.blue)
  156. if o.keyState[_iter] == 1:
  157. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.light_grey)
  158. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.blue)
  159. else:
  160. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.light_grey)
  161. xpos += width
  162. _iter += 1
  163. def ReceiveMessage(self, message):
  164. o = self.FSM.owner
  165. u.play_seq(o, message)
  166. def Exit(self):
  167. self.FSM.owner.pub.unregister("beat", self)