Igor Timofeev 6a910d8d86 aaefaef
2015-11-20 04:59:26 +03:00

269 lines
8.9 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

------------------------------------------ Библиотеки ---------------------------------------------------------------
local ecs = require("ECSAPI")
local fs = require("filesystem")
local gpu = require("component").gpu
local unicode = require("unicode")
local event = require("event")
local serialization = require("serialization")
------------------------------------------ Переменные ---------------------------------------------------------------
local width, height = 70, 30
local x, y = ecs.correctStartCoords("auto", "auto", width, height)
local oldPixels = ecs.rememberOldPixels(x, y, x + width - 1, y + height - 1)
local dataWidth, dataHeight = width - 6, height - 14
local drawListFrom = 1
local selectedObject = 3
local pathToList = "MineOS/System/AutorunManager/Filelist.txt"
local autorunObjects = {
-- { path = "OS.lua", enabled = true, size = 30 },
-- { path = "Cyka/Home.lua", enabled = true, size = 30 },
-- { path = "Pidar/Lalra/Cyka.lua", enabled = true, size = 30 },
-- { path = "322File.lua", enabled = false, size = 30 },
-- { path = "SasiHyu.lua", enabled = true, size = 30 },
-- { path = "Blabla.cfg", enabled = false, size = 30 },
}
------------------------------------------ Функции ---------------------------------------------------------------
--Объекты для тача
local obj = {}
local function newObj(class, name, ...)
obj[class] = obj[class] or {}
obj[class][name] = {...}
end
local function saveAutorun()
local file = io.open("autorun.lua", "w")
file:write("local success, reason\n")
for i = 1, #autorunObjects do
if autorunObjects[i].enabled then
file:write("success, reason = pcall(loadfile(\"" .. autorunObjects[i].path .. "\")); if not success then print(\"Ошибка: \" .. tostring(reason)) end\n")
end
end
file:close()
end
local function saveList()
local file = io.open(pathToList, "w")
file:write(serialization.serialize(autorunObjects))
file:close()
end
local function loadList()
if fs.exists(pathToList) then
local file = io.open(pathToList, "r")
local text = file:read("*a")
autorunObjects = serialization.unserialize(text)
file:close()
else
fs.makeDirectory(fs.path(pathToList))
saveList()
end
end
local function drawFiles(x, y)
local limit, from = dataHeight, drawListFrom
obj["List"] = {}
local yPos = y + 1
ecs.square(x, y, dataWidth, dataHeight, 0xFFFFFF)
ecs.square(x, y, dataWidth, 1, ecs.colors.blue)
gpu.setForeground(0xFFFFFF)
gpu.set(x + 1, y, "Запуск")
gpu.set(x + 9, y, "Файл")
gpu.set(x + 48, y, "Размер")
ecs.srollBar(x + dataWidth - 1, yPos, 1, dataHeight - 1, #autorunObjects == 0 and from or #autorunObjects, from, 0xCCCCCC, ecs.colors.lightBlue)
local color, color2
for i = from, (from + #autorunObjects - 1) do
if i > limit then break end
if i % 2 == 0 then color = 0xFFFFFF; color2 = 0x262626 else color = 0xEEEEEE; color2 = 0x262626 end
if i == selectedObject then color = ecs.colors.green; color2 = 0xFFFFFF end
if autorunObjects[i] then
ecs.square(x, yPos, dataWidth - 1, 1, color)
if autorunObjects[i].enabled then
ecs.colorTextWithBack(x + 3, yPos, ecs.colors.blue, color, "")
else
ecs.colorTextWithBack(x + 3, yPos, ecs.colors.red, color, "")
end
gpu.setBackground(color)
gpu.setForeground(color2)
gpu.set(x + 9, yPos, ecs.stringLimit("start", autorunObjects[i].path, 37))
gpu.set(x + 48, yPos, autorunObjects[i].size .. " КБ")
newObj("List", i, x, yPos, x + dataWidth - 1, yPos)
yPos = yPos + 1
end
end
end
local function drawWindow()
local xPos, yPos
ecs.square(x, y, width, height, 0xDDDDDD)
xPos = x + 3
yPos = y + 4
ecs.colorText(xPos, yPos, 0x262626, "Эти объекты будут запускаться автоматически при загрузке:")
yPos = yPos + 2
ecs.square(x, y, width, 3, 0xCCCCCC)
ecs.centerText("x", y + 1, "Менеджер автозагрузки")
drawFiles(x + 3, y + 6)
yPos = y + height - 7
ecs.colorTextWithBack(xPos, yPos, 0x262626, 0xDDDDDD, "Чтобы отключить загрузку файла, снимите галочку рядом с именем")
yPos = yPos + 1
gpu.set(xPos, yPos, "программы. Приоритет загузки снижается сверху вниз.")
yPos = yPos + 2
local name
name = "+"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0xFFFFFF, 0x262626)); xPos = obj["Buttons"][name][3] + 2
name = "-"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0xFFFFFF, 0x262626)); xPos = obj["Buttons"][name][3] + 2
name = "Выше"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0xFFFFFF, 0x262626)); xPos = obj["Buttons"][name][3] + 2
name = "Ниже"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0xFFFFFF, 0x262626)); xPos = obj["Buttons"][name][3] + 2
-- if fs.isAutorunEnabled() then
-- name = "Выключить автозапуск"
-- else
-- name = "Включить автозапуск "
-- end
-- newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0xAAAAAA, 0xFFFFFF)); xPos = obj["Buttons"][name][3] + 2
xPos = x + width - 12
name = "Выход"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0x888888, 0xFFFFFF))
end
------------------------------------------ Программа ---------------------------------------------------------------
loadList()
drawWindow()
while true do
local e = {event.pull()}
if e[1] == "touch" then
--if obj["List"] and #obj["List"] > 0 then
for key in pairs(obj["List"]) do
if ecs.clickedAtArea(e[3], e[4], obj["List"][key][1], obj["List"][key][2], obj["List"][key][3], obj["List"][key][4]) then
if selectedObject ~= key then
selectedObject = key
drawFiles(x + 3, y + 6)
else
if e[3] >= obj["List"][key][1] + 2 and e[3] <= obj["List"][key][1] + 4 then
autorunObjects[key].enabled = not autorunObjects[key].enabled
drawFiles(x + 3, y + 6)
saveList()
saveAutorun()
end
end
break
end
end
--end
for key in pairs(obj["Buttons"]) do
if ecs.clickedAtArea(e[3], e[4], obj["Buttons"][key][1], obj["Buttons"][key][2], obj["Buttons"][key][3], obj["Buttons"][key][4]) then
ecs.drawAdaptiveButton(obj["Buttons"][key][1], obj["Buttons"][key][2], 2, 1, key, ecs.colors.blue, 0xFFFFFF)
os.sleep(0.2)
ecs.drawAdaptiveButton(obj["Buttons"][key][1], obj["Buttons"][key][2], 2, 1, key, 0xFFFFFF, 0x262626)
if key == "-" then
table.remove(autorunObjects, selectedObject)
if drawListFrom == selectedObject then drawListFrom = 1 end
drawFiles(x + 3, y + 6)
saveList()
saveAutorun()
elseif key == "+" then
local data = ecs.universalWindow("auto", "auto", 36, 0xeeeeee, true, {"EmptyLine"}, {"CenterText", 0x880000, "Добавить новый файл"}, {"EmptyLine"}, {"Input", 0x262626, 0x880000, "Путь к файлу"}, {"EmptyLine"}, {"Button", {0x888888, 0xffffff, "Добавить"}, {0xAAAAAA, 0xffffff, "Отмена"}})
if data[2] == "Добавить" then
if fs.exists(data[1]) then
local cyka = false
for i = 1, #autorunObjects do
if autorunObjects[i].path == data[1] then cyka = true end
end
if not cyka then
table.insert(autorunObjects, { path = data[1], enabled = true, size = math.ceil(fs.size(data[1]) / 1024) })
drawFiles(x + 3, y + 6)
saveList()
saveAutorun()
else
ecs.error("Файл \"" .. data[1] .. "\" уже есть в этом списке!")
end
else
ecs.error("Файл \"" .. data[1] .. "\" не существует!")
end
end
elseif key == "Выше" then
if selectedObject > 1 then
local cyka = autorunObjects[selectedObject]
table.remove(autorunObjects, selectedObject)
table.insert(autorunObjects, selectedObject - 1, cyka)
selectedObject = selectedObject - 1
drawFiles(x + 3, y + 6)
saveList()
saveAutorun()
end
elseif key == "Ниже" then
if selectedObject < #autorunObjects then
local cyka = autorunObjects[selectedObject]
table.remove(autorunObjects, selectedObject)
table.insert(autorunObjects, selectedObject + 1, cyka)
selectedObject = selectedObject + 1
drawFiles(x + 3, y + 6)
saveList()
saveAutorun()
end
elseif key == "Выход" then
ecs.drawOldPixels(oldPixels)
return
-- elseif key == "Включить автозапуск " then
-- fs.setAutorunEnabled(true)
-- drawWindow()
-- elseif key == "Выключить автозапуск" then
-- fs.setAutorunEnabled(false)
-- drawWindow()
end
break
end
end
elseif e[1] == "scroll" then
if e[5] == 1 then
if drawListFrom > 1 then drawListFrom = drawListFrom - 1; drawFiles(x + 3, y + 6) end
else
if drawListFrom < #autorunObjects then drawListFrom = drawListFrom + 1; drawFiles(x + 3, y + 6) end
end
end
end