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.

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)