SHOW:
|
|
- or go back to the newest paste.
| 1 | function menu( title, ... ) | |
| 2 | --edit the background color to make the GUI more unique | |
| 3 | term.setBackgroundColor( colors.black ) | |
| 4 | local debug = false --#turn to true to see what it's thinking | |
| 5 | local tArgs = { ... }
| |
| 6 | local pages = {[1]={}}
| |
| 7 | for i = 1, #tArgs, 1 do | |
| 8 | if #pages[ #pages ] == 7 then | |
| 9 | pages[ #pages + 1 ] = {}
| |
| 10 | end | |
| 11 | pages[ #pages ][ #pages[#pages] + 1 ] = tArgs[ i ] | |
| 12 | end | |
| 13 | local maxLen = 0 | |
| 14 | for k, v in ipairs( tArgs ) do | |
| 15 | if #v > maxLen then maxLen = #v end | |
| 16 | end | |
| 17 | local maxx, maxy = term.getSize() | |
| 18 | if maxLen > maxx - 20 then | |
| 19 | error( 'largest string is too large', 2 ) | |
| 20 | end | |
| 21 | local centerx = math.ceil( maxx/2 ) | |
| 22 | local centery | |
| 23 | local yValue = {}
| |
| 24 | local page = 1 | |
| 25 | local selected = math.ceil( #pages[ page ] / 2 ) | |
| 26 | local function render() | |
| 27 | local tbl = pages[ page ] | |
| 28 | centery = (maxy/2) - #tbl/2 | |
| 29 | term.clear() | |
| 30 | term.setCursorPos( centerx - #title/2 + 1, 2 ) | |
| 31 | term.write( title ) | |
| 32 | for i = 1, #tbl do | |
| 33 | term.setCursorPos( centerx - (#tbl[i]/2), centery + i ) | |
| 34 | yValue[ i ] = centery + i | |
| 35 | term.write( tbl[ i ] ) | |
| 36 | end | |
| 37 | if pages[ page - 1 ] then | |
| 38 | term.setCursorPos( 3, centery + #tbl/2 + 1 ) | |
| 39 | term.write( "previous" ) | |
| 40 | end | |
| 41 | if pages[ page + 1 ] then | |
| 42 | term.setCursorPos( maxx - 5, centery + #tbl/2 + 1 ) | |
| 43 | term.write( "next" ) | |
| 44 | end | |
| 45 | local str = "(" .. page .. "/" .. #pages .. ")"
| |
| 46 | term.setCursorPos( centerx - (#str/2), maxy ) | |
| 47 | term.write( str ) | |
| 48 | end | |
| 49 | while true do | |
| 50 | render() | |
| 51 | if debug then | |
| 52 | term.setCursorPos( 1, 1 ) | |
| 53 | term.write( selected ) | |
| 54 | term.setCursorPos( 1, 2 ) | |
| 55 | term.write( page ) | |
| 56 | end | |
| 57 | if term.isColor() then | |
| 58 | term.setTextColor( colors.yellow ) | |
| 59 | end | |
| 60 | if selected == "previous" and not pages[ page - 1 ] then | |
| 61 | selected = math.ceil( #pages[ page ]/2 ) | |
| 62 | elseif selected == "next" and not pages[ page + 1 ] then | |
| 63 | selected = math.ceil( #pages[ page ]/2 ) | |
| 64 | end | |
| 65 | if type( selected ) == "number" then | |
| 66 | term.setCursorPos( centerx - (#pages[page][selected]/2) - 3, yValue[ selected ] ) | |
| 67 | term.write( "[" ) | |
| 68 | term.setCursorPos( centerx + (#pages[page][selected]/2) + 2, yValue[ selected ] ) | |
| 69 | term.write( "]" ) | |
| 70 | elseif selected == "previous" then | |
| 71 | term.setCursorPos( 1, centery + #pages[ page ]/2 + 1 ) | |
| 72 | term.write( "[" ) | |
| 73 | term.setCursorPos( 12, centery + #pages[ page ]/2 + 1 ) | |
| 74 | term.write( "]" ) | |
| 75 | elseif selected == "next" then | |
| 76 | term.setCursorPos( maxx - 7, centery + #pages[ page ]/2 + 1 ) | |
| 77 | term.write( "[" ) | |
| 78 | term.setCursorPos( maxx, centery + #pages[ page ]/2 + 1 ) | |
| 79 | term.write( "]" ) | |
| 80 | end | |
| 81 | if term.isColor() then | |
| 82 | term.setTextColor( colors.white ) | |
| 83 | end | |
| 84 | local event, key = os.pullEvent( "key" ) | |
| 85 | local old = selected | |
| 86 | if key == 200 and type( selected ) == "number" and pages[ page ][ selected - 1 ] then | |
| 87 | selected = selected - 1 | |
| 88 | elseif key == 208 and type( selected ) == "number" and pages[ page ][ selected + 1 ] then | |
| 89 | selected = selected + 1 | |
| 90 | elseif key == 28 then | |
| 91 | if type( selected ) == "number" then | |
| 92 | return pages[ page ][ selected ] | |
| 93 | elseif selected == "next" and pages[ page + 1 ] then | |
| 94 | page = page + 1 | |
| 95 | elseif selected == "previous" and pages[ page - 1 ] then | |
| 96 | page = page - 1 | |
| 97 | end | |
| 98 | elseif key == 203 then | |
| 99 | if selected == "next" then | |
| 100 | selected = math.ceil( #pages[ page ]/2 ) | |
| 101 | elseif type( selected ) == "number" and pages[ page - 1 ] then | |
| 102 | selected = "previous" | |
| 103 | end | |
| 104 | elseif key == 205 then | |
| 105 | if selected == "previous" then | |
| 106 | selected = math.ceil( #pages[ page ]/2 ) | |
| 107 | elseif type( selected ) == "number" and pages[ page + 1 ] then | |
| 108 | selected = "next" | |
| 109 | end | |
| 110 | end | |
| 111 | end | |
| 112 | - | end |
| 112 | + |