152 lines
4.2 KiB
Python
152 lines
4.2 KiB
Python
![]() |
#!/usr/bin/env python3
|
||
|
|
||
|
import curses
|
||
|
from curses import panel
|
||
|
|
||
|
|
||
|
|
||
|
class Menu(object):
|
||
|
def __init__(self, items, stdscreen):
|
||
|
self.window = stdscreen
|
||
|
self.window.keypad(1)
|
||
|
self.panel = panel.new_panel(self.window)
|
||
|
self.panel.hide()
|
||
|
panel.update_panels()
|
||
|
self.position = 0
|
||
|
self.items = items
|
||
|
self.items.append(("exit", "exit"))
|
||
|
|
||
|
def navigate(self, n):
|
||
|
self.position += n
|
||
|
if self.position < 0:
|
||
|
self.position = 0
|
||
|
elif self.position >= len(self.items):
|
||
|
self.position = len(self.items) - 1
|
||
|
|
||
|
def display(self):
|
||
|
self.panel.top()
|
||
|
self.panel.show()
|
||
|
self.window.clear()
|
||
|
self.window.box()
|
||
|
|
||
|
while True:
|
||
|
self.window.refresh()
|
||
|
curses.doupdate()
|
||
|
for index, item in enumerate(self.items):
|
||
|
if index == self.position:
|
||
|
mode = curses.A_REVERSE
|
||
|
else:
|
||
|
mode = curses.A_NORMAL
|
||
|
|
||
|
msg = "%s" % (item[0])
|
||
|
self.window.addstr(1 + index, 1, msg, mode)
|
||
|
|
||
|
key = self.window.getch()
|
||
|
|
||
|
if key in [curses.KEY_ENTER, ord("\n")]:
|
||
|
if self.position == len(self.items) - 1:
|
||
|
break
|
||
|
else:
|
||
|
self.items[self.position][1]()
|
||
|
|
||
|
elif key == curses.KEY_UP:
|
||
|
self.navigate(-1)
|
||
|
|
||
|
elif key == curses.KEY_DOWN:
|
||
|
self.navigate(1)
|
||
|
|
||
|
self.window.clear()
|
||
|
self.panel.hide()
|
||
|
panel.update_panels()
|
||
|
curses.doupdate()
|
||
|
|
||
|
|
||
|
def resist(menu):
|
||
|
resistors_items = [("10R", curses.beep), ("10K", curses.beep), ("330R", curses.flash), ("57K", curses.flash)]
|
||
|
resistorsMenu = Menu(resistors_items, menu)
|
||
|
resistorsMenu.display()
|
||
|
|
||
|
|
||
|
class MyApp(object):
|
||
|
|
||
|
def __init__(self, screen):
|
||
|
screen = curses.initscr()
|
||
|
curses.curs_set(0)
|
||
|
curses.start_color()
|
||
|
curses.init_color(0,0,0,0)
|
||
|
screen.box()
|
||
|
|
||
|
cols22 = (curses.COLS - 2) * 0.22 # Take 2 characters out from the boarders and then calculate 22%
|
||
|
cols22 = int(cols22) # Ditch the fractional part
|
||
|
|
||
|
cols56 = (curses.COLS - 2) * 0.56 # Take 2 characters out from the boarders and then calculate 56%
|
||
|
cols56 = int(cols56) + 1 # Ditch the fractional part and add 1
|
||
|
|
||
|
lines = (curses.LINES - 2) * 0.95 # Take 2 characters out from the boarders and then calculate 95%
|
||
|
lines = int(lines) # Ditch the fractional part
|
||
|
|
||
|
|
||
|
|
||
|
# title = "Sparks-Skraps" + " COLS -> " + str(curses.COLS) + " lines -> " + str(cols56)
|
||
|
title = "Sparks-Skraps"
|
||
|
titlePos = (curses.COLS / 2) - (len(title) / 2)
|
||
|
|
||
|
screen.addstr(1, int(titlePos), title, curses.A_BOLD)
|
||
|
screen.refresh()
|
||
|
|
||
|
|
||
|
components = curses.newwin(lines,cols22,3,1)
|
||
|
components.box()
|
||
|
components.addstr(1, 1, "precious components")
|
||
|
components.refresh()
|
||
|
|
||
|
parts = curses.newwin(lines, cols22, 3, 1+cols22)
|
||
|
parts.box()
|
||
|
parts.addstr(1, 1, "My precious parts")
|
||
|
parts.refresh()
|
||
|
|
||
|
info = curses.newwin(lines, cols56, 3, 1+cols22*2)
|
||
|
info.box()
|
||
|
info.addstr(1, 1, "My precious info")
|
||
|
info.refresh()
|
||
|
|
||
|
|
||
|
# resistors_items = [("10R", curses.beep), ("10K", curses.beep), ("330R", curses.flash), ("57K", curses.flash)]
|
||
|
# resistorsMenu = Menu(resistors_items, parts)
|
||
|
# resistorsMenu.display()
|
||
|
|
||
|
components_items = [("Resistors", curses.beep), ("Capacitors", curses.beep), ("Coils", curses.flash), ("IC\'s", curses.flash)]
|
||
|
componentsMenu = Menu(components_items, components)
|
||
|
componentsMenu.display()
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
curses.wrapper(MyApp)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
'''
|
||
|
|
||
|
components = curses.newwin(lines,cols22,3,1)
|
||
|
# components.box()
|
||
|
# components.addstr(1, 1, "precious components")
|
||
|
components.refresh()
|
||
|
|
||
|
parts = curses.newwin(lines, cols22, 3, 1+cols22)
|
||
|
parts.box()
|
||
|
parts.addstr(1, 1, "My precious parts")
|
||
|
parts.refresh()
|
||
|
|
||
|
info = curses.newwin(lines, cols56, 3, 1+cols22*2)
|
||
|
info.box()
|
||
|
info.addstr(1, 1, "My precious info")
|
||
|
info.refresh()
|
||
|
'''
|
||
|
|