View difference between Paste ID: gbxiZJtc and 5X5A1tF1
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+