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.

sFile.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import FSM
  2. import utils as u
  3. import menus as m
  4. #====================================
  5. State = type("State", (object,), {})
  6. #====================================
  7. class State(object):
  8. def __init__(self, FSM):
  9. self.FSM = FSM
  10. def Enter(self):
  11. pass
  12. def Execute(self):
  13. pass
  14. def Exit(self):
  15. pass
  16. #====================================
  17. class File(State):
  18. def __init__(self,FSM):
  19. super(File, self).__init__(FSM)
  20. def Enter(self):
  21. self.FSM.stateLife = 1
  22. o = self.FSM.owner
  23. o.header_text = "File"
  24. o.pub.register("beat", self)
  25. self.cur_el = 0
  26. if o.keyState[16] > 0 or o.keyState[17] > 0:
  27. pass
  28. else:
  29. u.draw_header(o)
  30. self.draw_footer(o)
  31. self.draw_main(o)
  32. o.update_display(0)
  33. self.menu = ["Save", "Save As", "Open", "New"]
  34. super(File, self).Enter()
  35. def Execute(self):
  36. o = self.FSM.owner
  37. m.menu1_actions(self, o)
  38. if o.keyState[16] == 1:
  39. m.draw_menu1(o)
  40. #self.draw_footer(o)
  41. o.update_display(0)
  42. elif o.keyState[16] == 4:
  43. u.draw_header(o)
  44. self.draw_footer(o)
  45. self.draw_main(o)
  46. o.update_display(0)
  47. 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:
  48. u.draw_header(o)
  49. self.draw_footer(o)
  50. self.draw_main(o)
  51. o.update_display(0)
  52. print('draw butt')
  53. if o.keyState[16] > 0 or o.keyState[17] > 0:
  54. pass
  55. else:
  56. if o.keyState[0] == 1:
  57. if self.cur_el > 0:
  58. self.cur_el -= 1
  59. print('cur el down is ', self.cur_el)
  60. if o.keyState[1] == 1:
  61. if self.cur_el < (len(self.menu) - 1):
  62. self.cur_el += 1
  63. print('cur el up is ', self.cur_el)
  64. if o.keyState[3] == 1:
  65. m.file_command(self, o, self.menu[self.cur_el])
  66. pass
  67. def draw_footer(self, o):
  68. _iter = 0
  69. width = o.width / 4
  70. xpos = 0
  71. yposa = 135 - 25
  72. yposb = 135
  73. opts = ["Up", "Down", "Esc", "OK"]
  74. while _iter < 4:
  75. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.blue)
  76. if o.keyState[_iter] == 1:
  77. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.light_grey)
  78. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.blue)
  79. else:
  80. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.light_grey)
  81. xpos += width
  82. _iter += 1
  83. def draw_main(self, o):
  84. al = []
  85. ypos = 30
  86. if self.cur_el == 0:
  87. _iter = 0
  88. while len(al) < 4:
  89. al.append(self.menu[_iter])
  90. _iter += 1
  91. elif self.cur_el == 1:
  92. al.append(self.menu[self.cur_el - 1])
  93. al.append(self.menu[self.cur_el])
  94. al.append(self.menu[self.cur_el + 1])
  95. al.append(self.menu[self.cur_el + 2])
  96. elif self.cur_el == (len(self.menu) - 2):
  97. al.append(self.menu[self.cur_el - 2])
  98. al.append(self.menu[self.cur_el - 1])
  99. al.append(self.menu[self.cur_el])
  100. al.append(self.menu[self.cur_el + 1])
  101. elif self.cur_el == (len(self.menu) - 1):
  102. al.append(self.menu[self.cur_el - 3])
  103. al.append(self.menu[self.cur_el - 2])
  104. al.append(self.menu[self.cur_el - 1])
  105. al.append(self.menu[self.cur_el])
  106. else:
  107. al.append(self.menu[self.cur_el - 1])
  108. al.append(self.menu[self.cur_el])
  109. al.append(self.menu[self.cur_el + 1])
  110. al.append(self.menu[self.cur_el + 2])
  111. _iter = 0
  112. for i in al:
  113. if i == self.menu[self.cur_el]:
  114. #if _iter == self.cur_el:
  115. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.light_grey)
  116. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.blue)
  117. else:
  118. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.blue)
  119. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.light_grey)
  120. ypos += 20
  121. _iter += 1
  122. def ReceiveMessage(self, message):
  123. o = self.FSM.owner
  124. u.play_seq(o, message)
  125. def Exit(self):
  126. self.FSM.owner.pub.unregister("beat", self)