|
|
|
#! /usr/bin/python
|
|
|
|
|
|
|
|
from field import Field
|
|
|
|
import curses
|
|
|
|
import logging
|
|
|
|
from curses import wrapper
|
|
|
|
from SourceGenerator import SourceGenerator
|
|
|
|
|
|
|
|
__VERSION__ = '1.00'
|
|
|
|
|
|
|
|
logging.basicConfig( format='%(asctime)s [%(levelname)s] %(funcName)s: %(message)s',
|
|
|
|
filename='r4.log',
|
|
|
|
level=logging.DEBUG)
|
|
|
|
|
|
|
|
|
|
|
|
field = Field()
|
|
|
|
|
|
|
|
def display_source(stdscr,source):
|
|
|
|
|
|
|
|
stdscr.clear()
|
|
|
|
stdscr.addstr(0,0,source)
|
|
|
|
key = stdscr.getch()
|
|
|
|
|
|
|
|
def display_help(stdscr):
|
|
|
|
stdscr.clear()
|
|
|
|
stdscr.addstr(0,0,f'r4matrixed V {__VERSION__}')
|
|
|
|
stdscr.addstr(1,0,'h - Help')
|
|
|
|
stdscr.addstr(2,0,'g - generate Source')
|
|
|
|
stdscr.addstr(3,0,'q - Quit')
|
|
|
|
stdscr.addstr(6,0,'<<Press any key to return>>',curses.color_pair(3))
|
|
|
|
stdscr.getch()
|
|
|
|
|
|
|
|
def inputLoop(stdscr):
|
|
|
|
exitPrg = False
|
|
|
|
curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLACK)
|
|
|
|
curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_CYAN)
|
|
|
|
curses.init_pair(3, curses.COLOR_RED, curses.COLOR_BLACK)
|
|
|
|
curses.noecho()
|
|
|
|
curses.cbreak()
|
|
|
|
|
|
|
|
|
|
|
|
while not exitPrg:
|
|
|
|
field.print_field(stdscr)
|
|
|
|
key = stdscr.getkey()
|
|
|
|
|
|
|
|
# field.message = str(key)
|
|
|
|
match key:
|
|
|
|
case 'q':
|
|
|
|
exitPrg = True
|
|
|
|
case 'g':
|
|
|
|
generator = SourceGenerator()
|
|
|
|
source = generator.generate_source(field)
|
|
|
|
display_source(stdscr,source)
|
|
|
|
case 'h':
|
|
|
|
display_help(stdscr)
|
|
|
|
case ' ':
|
|
|
|
field.togglePixel()
|
|
|
|
case '^L':
|
|
|
|
field.print_field(stdscr)
|
|
|
|
case '0':
|
|
|
|
field.clear()
|
|
|
|
case 'KEY_DOWN':
|
|
|
|
if field.cursor[0] < len(field.frame)-1:
|
|
|
|
newcursor = (field.cursor[0] +1,field.cursor[1])
|
|
|
|
field.cursor = newcursor
|
|
|
|
case 'KEY_RIGHT':
|
|
|
|
curline = field.frame[field.cursor[0]]
|
|
|
|
if field.cursor[1] < len(curline)-1:
|
|
|
|
newcursor = (field.cursor[0],field.cursor[1]+1)
|
|
|
|
field.cursor = newcursor
|
|
|
|
case 'KEY_LEFT':
|
|
|
|
curline = field.frame[field.cursor[0]]
|
|
|
|
if field.cursor[1] > 0:
|
|
|
|
newcursor = (field.cursor[0],field.cursor[1]-1)
|
|
|
|
field.cursor = newcursor
|
|
|
|
case 'KEY_UP':
|
|
|
|
curline = field.frame[field.cursor[0]]
|
|
|
|
if field.cursor[0] > 0:
|
|
|
|
newcursor = (field.cursor[0] -1,field.cursor[1])
|
|
|
|
field.cursor = newcursor
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
wrapper(inputLoop)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|