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.

sSelTheme.py 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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 SelTheme(State):
  21. def __init__(self,FSM):
  22. super(SelTheme, self).__init__(FSM)
  23. def Enter(self):
  24. o = self.FSM.owner
  25. o.header_text = "Select Theme"
  26. o.pub.register("beat", self)
  27. self.cur_el = 0
  28. self.globbed = glob.glob('/home/pi/zpc_ct/user/themes/*.thm')
  29. self.globbed.sort()
  30. self.names = [os.path.basename(x) for x in self.globbed]
  31. self.names = [os.path.splitext(x)[0] for x in self.names]
  32. if o.mconf['theme'] in self.names:
  33. _id = self.names.index(o.mconf['theme'])
  34. self.cur_el = _id
  35. #print('found theme ', _id)
  36. else:
  37. print('nope ', o.mconf['theme'], ' - ', self.globbed)
  38. #self.theme = ConfigObj("/home/pi/zpc_ct/themes/" + self.mconf['theme'])
  39. #print(os.path.splitext(x)[0])
  40. self.menu = self.names
  41. #self.cur_el = 0
  42. print('theme menu is ', self.menu)
  43. if o.keyState[16] > 0 or o.keyState[17] > 0:
  44. pass
  45. else:
  46. u.draw_header(o)
  47. self.draw_main(o)
  48. o.update_display(0)
  49. super(SelTheme, self).Enter()
  50. def Execute(self):
  51. o = self.FSM.owner
  52. m.menu1_actions(self, o)
  53. if o.keyState[16] == 1:
  54. m.draw_menu1(o)
  55. o.update_display(0)
  56. elif o.keyState[16] == 4:
  57. u.draw_header(o)
  58. self.draw_footer(o)
  59. self.draw_main(o)
  60. o.update_display(0)
  61. 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:
  62. u.draw_header(o)
  63. self.draw_footer(o)
  64. self.draw_main(o)
  65. o.update_display(0)
  66. print('draw butt')
  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. o.mconf['theme'] = self.menu[self.cur_el]
  74. o.save_config()
  75. o.load_config()
  76. o.apply_theme()
  77. print('cur el down is ', self.cur_el)
  78. #o.applyTheme
  79. if o.keyState[1] == 1:
  80. if self.cur_el < (len(self.menu) - 1):
  81. self.cur_el += 1
  82. o.mconf['theme'] = self.menu[self.cur_el]
  83. o.save_config()
  84. o.load_config()
  85. o.apply_theme()
  86. print('cur el up is ', self.cur_el)
  87. print('loading theme ', self.menu[self.cur_el], '-- ', o.mconf['theme'])
  88. if o.keyState[3] == 1:
  89. m.util_command(self, o, self.menu[self.cur_el])
  90. def draw_main(self, o):
  91. al = []
  92. ypos = 30
  93. if self.cur_el == 0:
  94. _iter = 0
  95. while len(al) < 4:
  96. al.append(self.menu[_iter])
  97. _iter += 1
  98. elif self.cur_el == 1:
  99. al.append(self.menu[self.cur_el - 1])
  100. al.append(self.menu[self.cur_el])
  101. al.append(self.menu[self.cur_el + 1])
  102. al.append(self.menu[self.cur_el + 2])
  103. elif self.cur_el == (len(self.menu) - 2):
  104. al.append(self.menu[self.cur_el - 2])
  105. al.append(self.menu[self.cur_el - 1])
  106. al.append(self.menu[self.cur_el])
  107. al.append(self.menu[self.cur_el + 1])
  108. elif self.cur_el == (len(self.menu) - 1):
  109. al.append(self.menu[self.cur_el - 3])
  110. al.append(self.menu[self.cur_el - 2])
  111. al.append(self.menu[self.cur_el - 1])
  112. al.append(self.menu[self.cur_el])
  113. else:
  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. _iter = 0
  119. for i in al:
  120. if i == self.menu[self.cur_el]:
  121. #if _iter == self.cur_el:
  122. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.light_grey)
  123. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.blue)
  124. else:
  125. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.blue)
  126. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.light_grey)
  127. ypos += 20
  128. _iter += 1
  129. def draw_footer(self, o):
  130. _iter = 0
  131. width = o.width / 4
  132. xpos = 0
  133. yposa = 135 - 25
  134. yposb = 135
  135. opts = ["Up", "Down", "", ""]
  136. while _iter < 4:
  137. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.blue)
  138. if o.keyState[_iter] == 1:
  139. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.light_grey)
  140. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.blue)
  141. else:
  142. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.light_grey)
  143. xpos += width
  144. _iter += 1
  145. def ReceiveMessage(self, message):
  146. o = self.FSM.owner
  147. u.play_seq(o, message)
  148. def Exit(self):
  149. self.FSM.owner.pub.unregister("beat", self)