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.

sUtil.py 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. class Util(State):
  17. def __init__(self,FSM):
  18. super(Util, self).__init__(FSM)
  19. def Enter(self):
  20. o = self.FSM.owner
  21. o.header_text = "Utilities"
  22. o.pub.register("beat", self)
  23. self.menu = ["Clock", "Balls", "Defender", "Calculator", "Exit", "Shutdown", "Reboot", "Theme", "Ping", "Wifi", "Update", "About"]
  24. self.cur_el = 0
  25. if o.keyState[16] > 0 or o.keyState[17] > 0:
  26. pass
  27. else:
  28. u.draw_header(o)
  29. self.draw_footer(o)
  30. self.draw_main(o)
  31. o.update_display(0)
  32. super(Util, self).Enter()
  33. def Execute(self):
  34. o = self.FSM.owner
  35. m.menu1_actions(self, o)
  36. if o.keyState[16] == 1:
  37. m.draw_menu1(o)
  38. o.update_display(0)
  39. elif o.keyState[16] == 4:
  40. u.draw_header(o)
  41. self.draw_footer(o)
  42. self.draw_main(o)
  43. o.update_display(0)
  44. 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:
  45. u.draw_header(o)
  46. self.draw_footer(o)
  47. self.draw_main(o)
  48. o.update_display(0)
  49. print('draw butt')
  50. if o.keyState[16] > 0 or o.keyState[17] > 0:
  51. pass
  52. else:
  53. u.scroll_ud(o, self)
  54. if o.keyState[3] == 1:
  55. m.util_command(self, o, self.menu[self.cur_el])
  56. def ReceiveMessage(self, message):
  57. _id = 0
  58. o = self.FSM.owner
  59. u.play_seq(o, message)
  60. def draw_main(self, o):
  61. al = []
  62. ypos = 30
  63. if self.cur_el == 0:
  64. _iter = 0
  65. while len(al) < 4:
  66. al.append(self.menu[_iter])
  67. _iter += 1
  68. elif self.cur_el == 1:
  69. al.append(self.menu[self.cur_el - 1])
  70. al.append(self.menu[self.cur_el])
  71. al.append(self.menu[self.cur_el + 1])
  72. al.append(self.menu[self.cur_el + 2])
  73. elif self.cur_el == (len(self.menu) - 2):
  74. al.append(self.menu[self.cur_el - 2])
  75. al.append(self.menu[self.cur_el - 1])
  76. al.append(self.menu[self.cur_el])
  77. al.append(self.menu[self.cur_el + 1])
  78. elif self.cur_el == (len(self.menu) - 1):
  79. al.append(self.menu[self.cur_el - 3])
  80. al.append(self.menu[self.cur_el - 2])
  81. al.append(self.menu[self.cur_el - 1])
  82. al.append(self.menu[self.cur_el])
  83. else:
  84. al.append(self.menu[self.cur_el - 1])
  85. al.append(self.menu[self.cur_el])
  86. al.append(self.menu[self.cur_el + 1])
  87. al.append(self.menu[self.cur_el + 2])
  88. _iter = 0
  89. for i in al:
  90. if i == self.menu[self.cur_el]:
  91. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.light_grey)
  92. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.blue)
  93. else:
  94. o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.blue)
  95. o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.light_grey)
  96. ypos += 20
  97. _iter += 1
  98. def draw_footer(self, o):
  99. _iter = 0
  100. width = o.width / 4
  101. xpos = 0
  102. yposa = 135 - 25
  103. yposb = 135
  104. opts = ["Up", "Down", "", "OK"]
  105. while _iter < 4:
  106. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.blue)
  107. if o.keyState[_iter] == 1:
  108. o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.light_grey)
  109. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.blue)
  110. else:
  111. o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.light_grey)
  112. xpos += width
  113. _iter += 1
  114. def Exit(self):
  115. self.FSM.owner.pub.unregister("beat", self)