Esempio n. 1
0
  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)))
Esempio n. 2
0
  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)))
Esempio n. 3
0
  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)))
Esempio n. 4
0
  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)))
Esempio n. 5
0
    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)))
Esempio n. 6
0
    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)))
Esempio n. 7
0
    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)))
Esempio n. 8
0
  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
Esempio n. 9
0
  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)))
Esempio n. 10
0
    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)))