def renderHotZone(term, renderType, menu, selection, hotzoneLocation, paddingBefore = 4): global paginationSize selectedTextLength = len("-> ") print(term.move(hotzoneLocation[0], hotzoneLocation[1])) if paginationStartIndex >= 1: print(term.center("{b} {uaf} {uaf}{uaf}{uaf} {ual} {b}".format( b=specialChars[renderMode]["borderVertical"], uaf=specialChars[renderMode]["upArrowFull"], ual=specialChars[renderMode]["upArrowLine"] ))) else: print(term.center(commonEmptyLine(renderMode))) for (index, menuItem) in enumerate(menu): # Menu loop if index >= paginationStartIndex and index < paginationStartIndex + paginationSize: lineText = generateLineText(menuItem[0], paddingBefore=paddingBefore) # Menu highlight logic if index == selection: formattedLineText = '-> {t.blue_on_green}{title}{t.normal} <-'.format(t=term, title=menuItem[0]) paddedLineText = generateLineText(formattedLineText, textLength=len(menuItem[0]) + selectedTextLength, paddingBefore=paddingBefore - selectedTextLength) toPrint = paddedLineText else: toPrint = '{title}{t.normal}'.format(t=term, title=lineText) # ##### # Menu check render logic if menuItem[1]["checked"]: toPrint = " (X) " + toPrint else: toPrint = " ( ) " + toPrint toPrint = "{bv} {toPrint} {bv}".format(bv=specialChars[renderMode]["borderVertical"], toPrint=toPrint) # Generate border toPrint = term.center(toPrint) # Center Text (All lines should have the same amount of printable characters) # ##### print(toPrint) if paginationStartIndex + paginationSize < len(menu): print(term.center("{b} {daf} {daf}{daf}{daf} {dal} {b}".format( b=specialChars[renderMode]["borderVertical"], daf=specialChars[renderMode]["downArrowFull"], dal=specialChars[renderMode]["downArrowLine"] ))) else: print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode)))
def mainRender(needsRender, menu, selection): term = Terminal() if needsRender == 1: print(term.clear()) print(term.move_y(term.height // 16)) print(term.black_on_cornsilk4(term.center('IOTstack Homebridg Server Options'))) print("") print(term.center(commonTopBorder(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center("{bv} Select Option to configure {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) if needsRender >= 1: renderHotZone(term, menu, selection, hotzoneLocation) if needsRender == 1: print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) if not hideHelpText: print(term.center(commonEmptyLine(renderMode))) print(term.center("{bv} Controls: {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Up] and [Down] to move selection cursor {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [H] Show/hide this text {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Enter] to run command or save input {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Escape] to go back to build stack menu {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonBottomBorder(renderMode)))
def mainRender(needsRender, menu, selection): global paginationStartIndex global paginationSize term = Terminal() if selection >= paginationStartIndex + paginationSize: paginationStartIndex = selection - (paginationSize - 1) + 1 needsRender = 1 if selection <= paginationStartIndex - 1: paginationStartIndex = selection needsRender = 1 if needsRender == 1: print(term.clear()) print(term.move_y(term.height // 16)) print(term.black_on_cornsilk4(term.center('IOTstack MariaDB Password Options'))) print("") print(term.center(commonTopBorder(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center("{bv} Select Password Option {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) if needsRender >= 1: renderHotZone(term, needsRender, menu, selection, hotzoneLocation) if needsRender == 1: print(term.center(commonEmptyLine(renderMode))) if not hideHelpText: if term.height < 32: print(term.center(commonEmptyLine(renderMode))) print(term.center("{bv} Not enough vertical room to render controls help text {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) else: print(term.center(commonEmptyLine(renderMode))) print(term.center("{bv} Controls: {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Space] to select option {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Up] and [Down] to move selection cursor {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [H] Show/hide this text {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Enter] to build and save option {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Escape] to cancel changes {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonBottomBorder(renderMode)))
def mainRender(needsRender, menu, selection): term = Terminal() if needsRender == 1: print(term.clear()) print(term.move_y(term.height // 16)) print(term.black_on_cornsilk4(term.center('IOTstack Next Cloud Options'))) print("") print(term.center(commonTopBorder(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center("{bv} Select Option to configure {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) if needsRender >= 1: renderHotZone(term, menu, selection, hotzoneLocation) if needsRender == 1: print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) if not hideHelpText: print(term.center(commonEmptyLine(renderMode))) print(term.center("{bv} Controls: {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Up] and [Down] to move selection cursor {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [H] Show/hide this text {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Enter] to run command or save input {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Escape] to go back to build stack menu {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) if len(documentationHint) > 1: if len(documentationHint) > 56: documentationAndPadding = padText(documentationHint, 71) print(term.center("{bv} Documentation: {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} {dap} {bv}".format(bv=specialChars[renderMode]["borderVertical"], dap=documentationAndPadding))) else: documentationAndPadding = padText(documentationHint, 56) print(term.center("{bv} Documentation: {dap} {bv}".format(bv=specialChars[renderMode]["borderVertical"], dap=documentationAndPadding))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonBottomBorder(renderMode)))
def mainRender(needsRender, menu, selection): term = Terminal() if needsRender == 1: print(term.clear()) print(term.move_y(6 - hotzoneLocation[0])) print( term.black_on_cornsilk4( term.center('IOTstack Miscellaneous Commands'))) print("") print(term.center(commonTopBorder(renderMode))) print(term.center(commonEmptyLine(renderMode))) print( term.center( "{bv} Select Command to run {bv}" .format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) if needsRender >= 1: renderHotZone(term, menu, selection, hotzoneLocation) if needsRender == 1: print(term.center(commonEmptyLine(renderMode))) if not hideHelpText: if term.height < 30: print(term.center(commonEmptyLine(renderMode))) print( term.center( "{bv} Not enough vertical room to render controls help text {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) else: print(term.center(commonEmptyLine(renderMode))) print( term.center( "{bv} Controls: {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [Up] and [Down] to move selection cursor {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [H] Show/hide this text {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [Enter] to run command {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [Escape] to go back to main menu {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonBottomBorder(renderMode)))
def mainRender(needsRender, menu, selection): term = Terminal() if needsRender == 1: print(term.clear()) print(term.move_y(term.height // 16)) print( term.black_on_cornsilk4( term.center('IOTstack NodeRed Options'))) print("") print(term.center(commonTopBorder(renderMode))) print(term.center(commonEmptyLine(renderMode))) print( term.center( "{bv} Select Option to configure {bv}" .format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) if needsRender >= 1: renderHotZone(term, menu, selection, hotzoneLocation) if needsRender == 1: if os.path.exists(serviceService + '/addons_list.yml'): if hasRebuiltAddons: print(term.center(commonEmptyLine(renderMode))) print( term.center( '{bv} {t.grey_on_blue4} {text} {t.normal}{t.white_on_black}{t.normal} {bv}' .format( t=term, text= "Addons list has been rebuilt: addons_list.yml", bv=specialChars[renderMode] ["borderVertical"]))) else: print(term.center(commonEmptyLine(renderMode))) print( term.center( '{bv} {t.grey_on_blue4} {text} {t.normal}{t.white_on_black}{t.normal} {bv}' .format( t=term, text= "Using existing addons_list.yml for addons installation", bv=specialChars[renderMode] ["borderVertical"]))) else: print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) if not hideHelpText: print(term.center(commonEmptyLine(renderMode))) print( term.center( "{bv} Controls: {bv}" .format( bv=specialChars[renderMode]["borderVertical"]))) print( term.center( "{bv} [Up] and [Down] to move selection cursor {bv}" .format( bv=specialChars[renderMode]["borderVertical"]))) print( term.center( "{bv} [H] Show/hide this text {bv}" .format( bv=specialChars[renderMode]["borderVertical"]))) print( term.center( "{bv} [Enter] to run command or save input {bv}" .format( bv=specialChars[renderMode]["borderVertical"]))) print( term.center( "{bv} [Escape] to go back to build stack menu {bv}" .format( bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) if len(documentationHint) > 1: if len(documentationHint) > 56: documentationAndPadding = padText( documentationHint, 71) print( term.center( "{bv} Documentation: {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center("{bv} {dap} {bv}".format( bv=specialChars[renderMode]["borderVertical"], dap=documentationAndPadding))) else: documentationAndPadding = padText( documentationHint, 56) print( term.center( "{bv} Documentation: {dap} {bv}".format( bv=specialChars[renderMode] ["borderVertical"], dap=documentationAndPadding))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonBottomBorder(renderMode)))
def mainRender(needsRender, menu, selection): global paginationStartIndex global paginationSize term = Terminal() if selection >= paginationStartIndex + paginationSize: paginationStartIndex = selection - (paginationSize - 1) + 1 needsRender = 1 if selection <= paginationStartIndex - 1: paginationStartIndex = selection needsRender = 1 if needsRender == 1: print(term.clear()) print(term.move_y(term.height // 16)) print( term.black_on_cornsilk4( term.center('IOTstack Node Red Addons'))) print("") print(term.center(commonTopBorder(renderMode))) print(term.center(commonEmptyLine(renderMode))) print( term.center( "{bv} Select NodeRed Addons (npm) to install on initial run {bv}" .format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) if needsRender >= 1: renderHotZone(term, needsRender, menu, selection, hotzoneLocation) if needsRender == 1: print(term.center(commonEmptyLine(renderMode))) if not hideHelpText: if term.height < 32: print(term.center(commonEmptyLine(renderMode))) print( term.center( "{bv} Not enough vertical room to render controls help text {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) else: print(term.center(commonEmptyLine(renderMode))) print( term.center( "{bv} {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} Note: After initial startup installation, you must use the Palettes menu {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} in the NodeRed WUI to add or remove addons from NodeRed. {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} Controls: {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [Space] to select or deselect addon {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [Up] and [Down] to move selection cursor {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [Tab] Expand or collapse addon menu size {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [S] Switch between sorted by checked and sorted alphabetically {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [H] Show/hide this text {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [Enter] to build and save addons list {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print( term.center( "{bv} [Escape] to cancel changes {bv}" .format(bv=specialChars[renderMode] ["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonBottomBorder(renderMode)))
def mainRender(menu, selection, renderType = 1): global paginationStartIndex global paginationSize paddingBefore = 4 allIssues = [] if selection >= paginationStartIndex + paginationSize: paginationStartIndex = selection - (paginationSize - 1) + 1 renderType = 1 if selection <= paginationStartIndex - 1: paginationStartIndex = selection renderType = 1 try: if (renderType == 1): checkForOptions() print(term.clear()) print(term.move_y(7 - hotzoneLocation[0])) print(term.black_on_cornsilk4(term.center('IOTstack Build Menu'))) print("") print(term.center(commonTopBorder(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center("{bv} Select containers to build {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) renderHotZone(term, renderType, menu, selection, paddingBefore, allIssues) if (renderType == 1): print(term.center(commonEmptyLine(renderMode))) if not hideHelpText: room = term.height - (28 + len(allIssues) + paginationSize) if room < 0: allIssues.append({ "serviceName": "BuildStack Menu", "issues": { "screenSize": 'Not enough scren height to render correctly (t-height = ' + str(term.height) + ' v-lines = ' + str(room) + ')' } }) print(term.center(commonEmptyLine(renderMode))) print(term.center("{bv} Not enough vertical room to render controls help text ({th}, {rm}) {bv}".format(bv=specialChars[renderMode]["borderVertical"], th=padText(str(term.height), 3), rm=padText(str(room), 3)))) print(term.center(commonEmptyLine(renderMode))) else: print(term.center(commonEmptyLine(renderMode))) print(term.center("{bv} Controls: {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Space] to select or deselect image {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Up] and [Down] to move selection cursor {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Right] for options for containers that support them {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Tab] Expand or collapse build menu size {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [H] Show/hide this text {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) # print(term.center("{bv} [F] Filter options {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Enter] to begin build {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center("{bv} [Escape] to cancel build {bv}".format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonBottomBorder(renderMode))) if len(allIssues) > 0: print(term.center("")) print(term.center("")) print(term.center("")) print(term.center(("{btl}{bh}{bh}{bh}{bh}{bh}{bh} Build Issues " "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}" "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}" "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}" "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}" "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}" "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}" "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}" "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{btr}").format( btl=specialChars[renderMode]["borderTopLeft"], btr=specialChars[renderMode]["borderTopRight"], bh=specialChars[renderMode]["borderHorizontal"] ))) print(term.center(commonEmptyLine(renderMode, size = 139))) for serviceIssues in allIssues: for index, issue in enumerate(serviceIssues["issues"]): spacesAndBracketsLen = 5 issueAndTypeLen = len(issue) + len(serviceIssues["serviceName"]) + spacesAndBracketsLen serviceNameAndConflictType = '{t.red_on_black}{issueService}{t.normal} ({t.yellow_on_black}{issueType}{t.normal}) '.format(t=term, issueService=serviceIssues["serviceName"], issueType=issue) formattedServiceNameAndConflictType = generateLineText(str(serviceNameAndConflictType), textLength=issueAndTypeLen, paddingBefore=0, lineLength=32) issueDescription = generateLineText(str(serviceIssues["issues"][issue]), textLength=len(str(serviceIssues["issues"][issue])), paddingBefore=0, lineLength=103) print(term.center("{bv} {nm} - {desc} {bv}".format(nm=formattedServiceNameAndConflictType, desc=issueDescription, bv=specialChars[renderMode]["borderVertical"]) )) print(term.center(commonEmptyLine(renderMode, size = 139))) print(term.center(commonBottomBorder(renderMode, size = 139))) except Exception as err: print("There was an error rendering the menu:") print(err) print("Press [Esc] to go back") return return
def renderHotZone(term, renderType, menu, selection, paddingBefore, allIssues): global paginationSize optionsLength = len(" >> Options ") optionsIssuesSpace = len(" ") selectedTextLength = len("-> ") spaceAfterissues = len(" ") issuesLength = len(" !! Issue ") print(term.move(hotzoneLocation[0], hotzoneLocation[1])) if paginationStartIndex >= 1: print(term.center("{b} {uaf} {uaf}{uaf}{uaf} {ual} {b}".format( b=specialChars[renderMode]["borderVertical"], uaf=specialChars[renderMode]["upArrowFull"], ual=specialChars[renderMode]["upArrowLine"] ))) else: print(term.center(commonEmptyLine(renderMode))) menuItemsActiveRow = term.get_location()[0] if renderType == 2 or renderType == 1: # Rerender entire hotzone for (index, menuItem) in enumerate(menu): # Menu loop if "issues" in menuItem[1] and menuItem[1]["issues"]: allIssues.append({ "serviceName": menuItem[0], "issues": menuItem[1]["issues"] }) if index >= paginationStartIndex and index < paginationStartIndex + paginationSize: lineText = generateLineText(menuItem[0], paddingBefore=paddingBefore) # Menu highlight logic if index == selection: activeMenuLocation = term.get_location()[0] formattedLineText = '-> {t.blue_on_green}{title}{t.normal} <-'.format(t=term, title=menuItem[0]) paddedLineText = generateLineText(formattedLineText, textLength=len(menuItem[0]) + selectedTextLength, paddingBefore=paddingBefore - selectedTextLength) toPrint = paddedLineText else: toPrint = '{title}{t.normal}'.format(t=term, title=lineText) # ##### # Options and issues if "buildHooks" in menuItem[1] and "options" in menuItem[1]["buildHooks"] and menuItem[1]["buildHooks"]["options"]: toPrint = toPrint + '{t.blue_on_black} {raf}{raf} {t.normal}'.format(t=term, raf=specialChars[renderMode]["rightArrowFull"]) toPrint = toPrint + ' {t.white_on_black} Options {t.normal}'.format(t=term) else: for i in range(optionsLength): toPrint += " " for i in range(optionsIssuesSpace): toPrint += " " if "issues" in menuItem[1] and menuItem[1]["issues"]: toPrint = toPrint + '{t.red_on_orange} !! {t.normal}'.format(t=term) toPrint = toPrint + ' {t.orange_on_black} Issue {t.normal}'.format(t=term) else: if menuItem[1]["checked"]: if not menuItem[1]["issues"] == None and len(menuItem[1]["issues"]) == 0: toPrint = toPrint + ' {t.green_on_blue} Pass {t.normal} '.format(t=term) else: for i in range(issuesLength): toPrint += " " else: for i in range(issuesLength): toPrint += " " for i in range(spaceAfterissues): toPrint += " " # ##### # Menu check render logic if menuItem[1]["checked"]: toPrint = " (X) " + toPrint else: toPrint = " ( ) " + toPrint toPrint = "{bv} {toPrint} {bv}".format(bv=specialChars[renderMode]["borderVertical"], toPrint=toPrint) # Generate border toPrint = term.center(toPrint) # Center Text (All lines should have the same amount of printable characters) # ##### print(toPrint) if renderType == 3: # Only partial rerender of hotzone (the unselected menu item, and the newly selected menu item rows) global lastSelection global renderOffsetLastSelection global renderOffsetCurrentSelection # TODO: Finish this, currently disabled. To enable, update the actions for UP and DOWN array keys below to assigned 3 to needsRender renderOffsetLastSelection = lastSelection - paginationStartIndex renderOffsetCurrentSelection = selection - paginationStartIndex lineText = generateLineText(menu[lastSelection][0], paddingBefore=paddingBefore) toPrint = '{title}{t.normal}'.format(t=term, title=lineText) print('{t.move_y(lastSelection)}{title}'.format(t=term, title=toPrint)) # print(toPrint) print(renderOffsetCurrentSelection, lastSelection, renderOffsetLastSelection) lastSelection = selection # menuItemsActiveRow # activeMenuLocation if paginationStartIndex + paginationSize < len(menu): print(term.center("{b} {daf} {daf}{daf}{daf} {dal} {b}".format( b=specialChars[renderMode]["borderVertical"], daf=specialChars[renderMode]["downArrowFull"], dal=specialChars[renderMode]["downArrowLine"] ))) else: print(term.center(commonEmptyLine(renderMode)))
def mainRender(menu, selection): term = Terminal() print(term.clear()) print(term.clear()) print(term.move_y(term.height // 16)) print(term.black_on_cornsilk4( term.center('IOTstack Example Commands'))) print("") print(term.center(commonTopBorder(renderMode))) print(term.center(commonEmptyLine(renderMode))) print( term.center( "{bv} Select Command to run {bv}" .format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) lineLengthAtTextStart = 71 for (index, menuItem) in enumerate(menu): toPrint = "" if index == selection: # This checks if the current rendering item is the one that's selected toPrint += ( '{bv} -> {t.blue_on_green} {title} {t.normal} <-'.format( t=term, title=menuItem[0], bv=specialChars[renderMode]["borderVertical"])) else: if len( menu[index] ) > 2 and "customProperty" in menu[index][2] and menu[index][2][ "customProperty"] == True: # A custom property check example toPrint += ( '{bv} {t.black_on_green} {title} {t.normal} '. format(t=term, title=menuItem[0], bv=specialChars[renderMode]["borderVertical"])) else: toPrint += ('{bv} {t.normal} {title} '.format( t=term, title=menuItem[0], bv=specialChars[renderMode]["borderVertical"])) for i in range(lineLengthAtTextStart - len(menuItem[0])): # Pad the remainder of the line toPrint += " " toPrint += "{bv}".format( bv=specialChars[renderMode]["borderVertical"]) toPrint = term.center(toPrint) print(toPrint) print(term.center(commonEmptyLine(renderMode))) if not hideHelpText: print(term.center(commonEmptyLine(renderMode))) print( term.center( "{bv} Controls: {bv}" .format(bv=specialChars[renderMode]["borderVertical"]))) print( term.center( "{bv} [Up] and [Down] to move selection cursor {bv}" .format(bv=specialChars[renderMode]["borderVertical"]))) print( term.center( "{bv} [H] Show/hide this text {bv}" .format(bv=specialChars[renderMode]["borderVertical"]))) print( term.center( "{bv} [Enter] to run command {bv}" .format(bv=specialChars[renderMode]["borderVertical"]))) print( term.center( "{bv} [Escape] to go back to build stack menu {bv}" .format(bv=specialChars[renderMode]["borderVertical"]))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonEmptyLine(renderMode))) print(term.center(commonBottomBorder(renderMode)))