Advertisement
King0fGamesYami

origin_menu

Aug 19th, 2014
1,430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement