mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-24 13:02:49 +01:00
269 lines
8.9 KiB
Lua
269 lines
8.9 KiB
Lua
|
||
------------------------------------------ Библиотеки ---------------------------------------------------------------
|
||
|
||
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
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|