MineOS/Applications/Configurator/Configurator.lua
2015-08-24 21:03:53 +03:00

202 lines
6.5 KiB
Lua

local component = require("component")
local gpu = component.gpu
local ecs = require("ECSAPI")
local image = require("image")
local unicode = require("unicode")
local event = require("event")
local palette = require("palette")
------------------------------------------------------------------------------------------------
local xSize, ySize = gpu.getResolution()
local width, height = 80, 25
local x, y = math.floor(xSize /2 - width / 2), math.floor(ySize / 2 - height / 2)
local xCenter, yCenter = math.floor(xSize / 2), math.floor(ySize / 2)
local oldPixels = ecs.rememberOldPixels(x, y, x + width + 1, y + height)
local OS_Logo = image.load("System/OS/Installer/OS_Logo.png")
local offset = 3
local buttonColor = 0x888888
local buttonPressColor = ecs.colors.blue
------------------------------------------------------------------------------------------------
--СОЗДАНИЕ ОБЪЕКТОВ
local obj = {}
local function newObj(class, name, ...)
obj[class] = obj[class] or {}
obj[class][name] = {...}
end
local function clear()
obj = {}
ecs.blankWindow(x, y, width, height)
end
local function drawTablicu(y, users)
local width = 40
local limit = 7
local x = math.ceil(xCenter - width / 2)
local yPos = y
ecs.square(x, yPos, width, 1, ecs.colors.blue)
ecs.colorText(x + 1, yPos, 0xffffff, "Пользователи ("..#users.." из "..limit..")")
yPos = yPos + 1
ecs.square(x, yPos, width, limit * 2 - 1, 0xffffff)
for i = 1, limit do
if users[i] then
ecs.colorText(x + 1, yPos, 0x000000, ecs.stringLimit("end", users[i], width - 2))
end
if i < limit then
ecs.colorText(x, yPos + 1, 0xaaaaaa, string.rep("", width))
end
yPos = yPos + 2
end
end
------------------------------------------------------------------------------------------------
local function stage1()
clear()
image.draw(math.ceil(xSize / 2 - 15), y + 2, OS_Logo)
local yPos = y + height - 6
gpu.setForeground(ecs.windowColors.usualText); gpu.setBackground(ecs.windowColors.background); ecs.centerText("x", yPos, "Добро пожаловать в программу настройки MineOS!")
yPos = yPos + 2
local name
name = "Далее"; newObj("Buttons", name, ecs.drawAdaptiveButton("auto", yPos, offset, 1, name, buttonColor, 0xffffff))
while true do
local e = {event.pull()}
if e[1] == "touch" then
if ecs.clickedAtArea(e[3], e[4], obj["Buttons"][name][1], obj["Buttons"][name][2], obj["Buttons"][name][3], obj["Buttons"][name][4] ) then
ecs.drawAdaptiveButton(obj["Buttons"][name][1], obj["Buttons"][name][2], offset, 1, name, buttonPressColor, 0xffffff)
os.sleep(0.3)
return
end
elseif e[1] == "key_down" then
if e[4] == 28 then
ecs.drawAdaptiveButton(obj["Buttons"][name][1], obj["Buttons"][name][2], offset, 1, name, buttonPressColor, 0xffffff)
os.sleep(0.3)
return
end
end
end
end
local function stage2()
clear()
local users = {}
drawTablicu(y + 2, users)
local yPos = y + height - 7
gpu.setForeground(ecs.windowColors.usualText); gpu.setBackground(ecs.windowColors.background)
ecs.centerText("x", yPos, "Это биометрическая защита компьютера."); yPos = yPos + 1
ecs.centerText("x", yPos, "Прикоснитесь к экрану - и система зарегистрирует вас."); yPos = yPos + 1
local yPos = yPos + 1
local name = "Далее"; newObj("Buttons", name, ecs.drawAdaptiveButton("auto", yPos, offset, 1, name, buttonColor, 0xffffff))
while true do
local e = {event.pull()}
if e[1] == "touch" then
if ecs.clickedAtArea(e[3], e[4], obj["Buttons"][name][1], obj["Buttons"][name][2], obj["Buttons"][name][3], obj["Buttons"][name][4] ) then
ecs.drawAdaptiveButton(obj["Buttons"][name][1], obj["Buttons"][name][2], offset, 1, name, buttonPressColor, 0xffffff)
if #users == 0 then table.insert(users, e[6]) end
drawTablicu(y + 2, users)
os.sleep(0.3)
return users
else
if #users < 7 then
local exists
for key, val in pairs(users) do
if e[6] == val then exists = true; break end
end
if not exists then
table.insert(users, e[6])
drawTablicu(y + 2, users)
end
end
end
end
end
end
local function drawSampleCode(y, background, foreground)
local shirina = width - 10
local visota = 14
local x = math.floor(xCenter - shirina / 2)
ecs.square(x, y, shirina, visota, background)
ecs.colorText(x + 1, y + 1, 0xff0000, "/#")
ecs.colorText(x + 4, y + 1, foreground, "Hello world!")
end
local function stage3()
local background, foreground = 0x262626, 0xffffff
clear()
while true do
drawSampleCode(y + 2, background, foreground)
local yPos = y + height - 7
gpu.setForeground(ecs.windowColors.usualText); gpu.setBackground(ecs.windowColors.background)
ecs.centerText("x", yPos, "Вы можете выбрать цвет текста и фона консоли."); yPos = yPos + 1
ecs.centerText("x", yPos, "Пример кода выше."); yPos = yPos + 1
yPos = yPos + 1
obj = {}
local xPos = xCenter - 28
local name = "Изменить текст"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, offset, 1, name, foreground, 0xffffff - foreground)); xPos = xPos + unicode.len(name) + offset * 3
name = "Изменить фон"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, offset, 1, name, background, 0xffffff - background)); xPos = xPos + unicode.len(name) + offset * 3
name = "Далее"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, offset, 1, name, buttonColor, 0xffffff)); xPos = xPos + unicode.len(name) + offset * 3
local exit
while true do
if exit then break end
local e = {event.pull()}
if e[1] == "touch" then
for name, val in pairs(obj["Buttons"]) do
if ecs.clickedAtArea(e[3], e[4], obj["Buttons"][name][1], obj["Buttons"][name][2], obj["Buttons"][name][3], obj["Buttons"][name][4] ) then
ecs.drawAdaptiveButton(obj["Buttons"][name][1], obj["Buttons"][name][2], offset, 1, name, buttonPressColor, 0xffffff)
os.sleep(0.3)
if name == "Изменить текст" then
local color = palette.draw("auto", "auto", foreground)
if color then foreground = color end
exit = true
break
elseif name == "Изменить фон" then
local color = palette.draw("auto", "auto", background)
if color then background = color end
exit = true
break
else
return background, foreground
end
end
end
end
end
end
end
------------------------------------------------------------------------------------------------
stage1()
stage2()
stage3()