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 | + |