mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2026-01-07 19:52:40 +01:00
aef
This commit is contained in:
parent
5354b48b8e
commit
3ceb3f441e
@ -8,6 +8,7 @@ local libraries = {
|
||||
["context"] = "context",
|
||||
["unicode"] = "unicode",
|
||||
["buffer"] = "doubleBuffering",
|
||||
["zip"] = "zip",
|
||||
["serialization"] = "serialization",
|
||||
}
|
||||
|
||||
@ -62,7 +63,7 @@ local currentSortingMethod = 1
|
||||
local function saveConfig()
|
||||
fs.makeDirectory(fs.path(pathToConfig))
|
||||
local file = io.open(pathToConfig, "w")
|
||||
file:write(serialization.serialize( { ["leftBar"] = leftBar, ["showHiddenFiles"] = showHiddenFiles, ["showSystemFiles"] = showSystemFiles, ["showFileFormat"] = showFileFormat }))
|
||||
file:write(serialization.serialize( { ["leftBar"] = leftBar, ["showHiddenFiles"] = showHiddenFiles, ["showSystemFiles"] = showSystemFiles, ["showFileFormat"] = showFileFormat, ["currentSortingMethod"] = currentSortingMethod }))
|
||||
file:close()
|
||||
end
|
||||
|
||||
@ -77,6 +78,7 @@ local function loadConfig()
|
||||
showFileFormat = readedConfig.showFileFormat
|
||||
showSystemFiles = readedConfig.showSystemFiles
|
||||
showHiddenFiles = readedConfig.showHiddenFiles
|
||||
currentSortingMethod = readedConfig.currentSortingMethod
|
||||
else
|
||||
leftBar = {
|
||||
{"Title", "Избранное"},
|
||||
@ -93,6 +95,7 @@ local function loadConfig()
|
||||
showFileFormat = false
|
||||
showSystemFiles = false
|
||||
showHiddenFiles = false
|
||||
currentSortingMethod = 1
|
||||
saveConfig()
|
||||
end
|
||||
end
|
||||
@ -183,9 +186,9 @@ local function drawCloses()
|
||||
buffer.set(x + 1, y, colors.topBar, colors.closes.cross, symbol)
|
||||
buffer.set(x + 3, y, colors.topBar, colors.closes.hide, symbol)
|
||||
buffer.set(x + 5, y, colors.topBar, colors.closes.full, symbol)
|
||||
newObj("Closes", 1, x + 1, y, x + 1, y)
|
||||
newObj("Closes", 2, x + 3, y, x + 3, y)
|
||||
newObj("Closes", 3, x + 5, y, x + 5, y)
|
||||
newObj("Closes", 1, x + 1, y, x + 2, y)
|
||||
newObj("Closes", 2, x + 3, y, x + 4, y)
|
||||
newObj("Closes", 3, x + 5, y, x + 6, y)
|
||||
end
|
||||
|
||||
--Рисуем строку поиска
|
||||
@ -206,9 +209,9 @@ local function drawFsControl()
|
||||
for i = 1, #sortingMethods do
|
||||
name = sortingMethods[i].symbol; bg, fg = getColors(currentSortingMethod == i); newObj("FSButtons", i, buffer.button(xPos, yPos, unicode.len(name) + 2, 1, bg, fg, name)); xPos = xPos + unicode.len(name) + 3
|
||||
end
|
||||
xPos = xPos + 2
|
||||
name = "Скрытые"; bg, fg = getColors(showHiddenFiles); newObj("FSButtons", #sortingMethods + 1, buffer.button(xPos, yPos, unicode.len(name) + 2, 1, bg, fg, name)); xPos = xPos + 5
|
||||
|
||||
--xPos = xPos + 4
|
||||
name = "Формат"; bg, fg = getColors(showFileFormat); newObj("FSButtons", #sortingMethods + 1, buffer.button(xPos, yPos, unicode.len(name) + 2, 1, bg, fg, name)); xPos = xPos + unicode.len(name) + 3
|
||||
name = "Скрытые"; bg, fg = getColors(showHiddenFiles); newObj("FSButtons", #sortingMethods + 2, buffer.button(xPos, yPos, unicode.len(name) + 2, 1, bg, fg, name)); xPos = xPos + unicode.len(name) + 3
|
||||
|
||||
-- name = "Формат"; newObj("FSButtons", 1, buffer.adaptiveButton(xPos, yPos, 1, 0, getColors(showFileFormat), name)); xPos = xPos + unicode.len(name) + 3
|
||||
-- name = "Скрытые"; newObj("FSButtons", 2, buffer.adaptiveButton(xPos, yPos, 1, 0, getColors(showHiddenFiles), name)); xPos = xPos + unicode.len(name) + 3
|
||||
@ -444,15 +447,17 @@ while true do
|
||||
else
|
||||
if fs.isDirectory(path) then
|
||||
if fileFormat ~= ".app" then
|
||||
action = context.menu(e[3], e[4], {"Добавить в избранное"},"-", {"Копировать", false, "^C"}, {"Вставить", (_G.clipboard == nil), "^V"}, "-", {"Переименовать"}, {"Создать ярлык"}, "-", {"Добавить в архив"}, "-", {"Удалить", false, "⌫"})
|
||||
action = context.menu(e[3], e[4], {"Добавить в избранное"},"-", {"Копировать", false, "^C"}, {"Переименовать"}, {"Создать ярлык"}, "-", {"Добавить в архив"}, "-", {"Удалить", false, "⌫"})
|
||||
else
|
||||
action = context.menu(e[3], e[4], {"Показать содержимое"}, {"Добавить в избранное"},"-", {"Копировать", false, "^C"}, {"Вставить", (_G.clipboard == nil), "^V"}, "-", {"Переименовать"}, {"Создать ярлык"}, "-", {"Добавить в архив"}, "-", {"Удалить", false, "⌫"})
|
||||
action = context.menu(e[3], e[4], {"Показать содержимое"}, {"Добавить в избранное"},"-", {"Копировать", false, "^C"}, {"Переименовать"}, {"Создать ярлык"}, "-", {"Добавить в архив"}, "-", {"Удалить", false, "⌫"})
|
||||
end
|
||||
else
|
||||
if fileFormat == ".pic" then
|
||||
action = context.menu(e[3], e[4], {"Редактировать"}, {"Установить как обои"}, "-", {"Копировать", false, "^C"}, {"Вставить", (not _G.clipboard), "^V"}, "-", {"Переименовать"}, {"Создать ярлык"}, "-", {"Загрузить на Pastebin"}, "-", {"Удалить", false, "⌫"})
|
||||
action = context.menu(e[3], e[4], {"Редактировать"}, {"Установить как обои"}, "-", {"Копировать", false, "^C"}, "-", {"Переименовать"}, {"Создать ярлык"}, "-", {"Загрузить на Pastebin"}, "-", {"Удалить", false, "⌫"})
|
||||
elseif fileFormat == ".lua" then
|
||||
action = context.menu(e[3], e[4], {"Редактировать"}, {"Создать приложение"}, "-", {"Копировать", false, "^C"}, {"Переименовать"}, {"Создать ярлык"}, "-", {"Загрузить на Pastebin"}, "-", {"Удалить", false, "⌫"})
|
||||
else
|
||||
action = context.menu(e[3], e[4], {"Редактировать"}, "-", {"Копировать", false, "^C"}, {"Вставить", (not _G.clipboard), "^V"}, "-", {"Переименовать"}, {"Создать ярлык"}, "-", {"Загрузить на Pastebin"}, "-", {"Удалить", false, "⌫"})
|
||||
action = context.menu(e[3], e[4], {"Редактировать"}, "-", {"Копировать", false, "^C"}, {"Переименовать"}, {"Создать ярлык"}, "-", {"Загрузить на Pastebin"}, "-", {"Удалить", false, "⌫"})
|
||||
end
|
||||
end
|
||||
|
||||
@ -501,6 +506,10 @@ while true do
|
||||
buffer.paste(1, 1, oldPixelsOfFullScreen)
|
||||
buffer.draw()
|
||||
return
|
||||
elseif action == "Создать приложение" then
|
||||
ecs.newApplicationFromLuaFile(path, workPathHistory[currentWorkPathHistoryElement])
|
||||
getFileList(workPathHistory[currentWorkPathHistoryElement])
|
||||
drawAll()
|
||||
else
|
||||
--Рисуем иконку выделенную
|
||||
buffer.square(obj["Icons"][key][1], obj["Icons"][key][2], widthOfIcon, heightOfIcon, colors.main, 0xffffff, " ")
|
||||
@ -583,7 +592,6 @@ while true do
|
||||
for key in pairs(obj["Closes"]) do
|
||||
if ecs.clickedAtArea(e[3], e[4], obj["Closes"][key][1], obj["Closes"][key][2], obj["Closes"][key][3], obj["Closes"][key][4]) then
|
||||
|
||||
|
||||
--Закрыть прогу
|
||||
if key == 1 then
|
||||
ecs.colorTextWithBack(obj["Closes"][key][1], obj["Closes"][key][2], ecs.colors.blue, colors.topBar, "⮾")
|
||||
@ -638,6 +646,8 @@ while true do
|
||||
elseif key == 3 then
|
||||
currentSortingMethod = 3
|
||||
elseif key == 4 then
|
||||
showFileFormat = not showFileFormat
|
||||
elseif key == 5 then
|
||||
showHiddenFiles = not showHiddenFiles
|
||||
end
|
||||
fromLine = 1
|
||||
@ -655,6 +665,7 @@ while true do
|
||||
chkdsk()
|
||||
changePath("")
|
||||
drawAll()
|
||||
|
||||
elseif e[1] == "scroll" then
|
||||
--Если скроллим в зоне иконок
|
||||
if ecs.clickedAtArea(e[3], e[4], xMain, yLeftBar, xEnd, yEnd - 1) then
|
||||
|
||||
@ -161,6 +161,13 @@ while true do
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
elseif e[1] == "key_down" then
|
||||
if e[4] == 28 then
|
||||
gpu.setResolution(xOld, yOld)
|
||||
ecs.prepareToExit()
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
207
MineOS/OS.lua
207
MineOS/OS.lua
@ -15,20 +15,19 @@ local copyright = [[
|
||||
|
||||
-- Адаптивная загрузка необходимых библиотек и компонентов
|
||||
local libraries = {
|
||||
["ecs"] = "ECSAPI",
|
||||
["component"] = "component",
|
||||
["event"] = "event",
|
||||
["term"] = "term",
|
||||
["config"] = "config",
|
||||
["context"] = "context",
|
||||
["internet"] = "internet",
|
||||
["buffer"] = "doubleBuffering",
|
||||
["image"] = "image",
|
||||
["zones"] = "zones",
|
||||
ecs = "ECSAPI",
|
||||
component = "component",
|
||||
event = "event",
|
||||
term = "term",
|
||||
config = "config",
|
||||
context = "context",
|
||||
buffer = "doubleBuffering",
|
||||
image = "image",
|
||||
SHA2 = "SHA2",
|
||||
}
|
||||
|
||||
local components = {
|
||||
["gpu"] = "gpu",
|
||||
gpu = "gpu",
|
||||
}
|
||||
|
||||
for library in pairs(libraries) do if not _G[library] then _G[library] = require(libraries[library]) end end
|
||||
@ -44,6 +43,9 @@ local workPath = "MineOS/Desktop/"
|
||||
local pathOfDockShortcuts = "MineOS/System/OS/Dock/"
|
||||
local pathToWallpaper = "MineOS/System/OS/Wallpaper.lnk"
|
||||
local currentFileList
|
||||
local showHiddenFiles = false
|
||||
local showFileFormat = false
|
||||
local sortingMethod = "type"
|
||||
local wallpaper
|
||||
local currentCountOfIconsInDock
|
||||
|
||||
@ -76,6 +78,13 @@ sizes.dockCountOfIcons = sizes.xCountOfIcons - 1
|
||||
|
||||
---------------------------------------------- Функции ------------------------------------------------------------------------
|
||||
|
||||
--Объекты
|
||||
local obj = {}
|
||||
local function newObj(class, name, ...)
|
||||
obj[class] = obj[class] or {}
|
||||
obj[class][name] = {...}
|
||||
end
|
||||
|
||||
--Изменение обоев из файла обоев
|
||||
local function changeWallpaper()
|
||||
wallpaper = nil
|
||||
@ -100,7 +109,7 @@ end
|
||||
--ОТРИСОВКА ИКОНОК НА РАБОЧЕМ СТОЛЕ ПО ТЕКУЩЕЙ ПАПКЕ
|
||||
local function drawDesktop()
|
||||
currentFileList = ecs.getFileList(workPath)
|
||||
currentFileList = ecs.sortFiles(workPath, currentFileList, "type", false)
|
||||
currentFileList = ecs.sortFiles(workPath, currentFileList, sortingMethod, showHiddenFiles)
|
||||
|
||||
drawWallpaper()
|
||||
|
||||
@ -113,10 +122,10 @@ local function drawDesktop()
|
||||
|
||||
--Отрисовка конкретной иконки
|
||||
local path = workPath .. currentFileList[counter]
|
||||
ecs.drawOSIcon(xPos, yPos, path, false, 0xffffff)
|
||||
ecs.drawOSIcon(xPos, yPos, path, showFileFormat, 0xffffff)
|
||||
|
||||
--Создание объекта иконки
|
||||
zones.add("OS", "DesktopIcons", counter, xPos, yPos, sizes.widthOfIcon, sizes.heightOfIcon, path)
|
||||
newObj("DesktopIcons", counter, xPos, yPos, xPos + sizes.widthOfIcon - 1, yPos + sizes.heightOfIcon - 1, path)
|
||||
|
||||
xPos = xPos + sizes.widthOfIcon + sizes.xSpaceBetweenIcons
|
||||
counter = counter + 1
|
||||
@ -151,8 +160,8 @@ local function drawDock()
|
||||
local yIcons = sizes.ySize - sizes.heightOfDock - 1
|
||||
|
||||
for i = 1, currentCountOfIconsInDock do
|
||||
ecs.drawOSIcon(xIcons, yIcons, pathOfDockShortcuts .. dockShortcuts[i], false, 0x000000)
|
||||
zones.add("OS", "DockIcons", dockShortcuts[i], xIcons, yIcons, sizes.widthOfIcon, sizes.heightOfIcon)
|
||||
ecs.drawOSIcon(xIcons, yIcons, pathOfDockShortcuts .. dockShortcuts[i], showFileFormat, 0x000000)
|
||||
newObj("DockIcons", dockShortcuts[i], xIcons, yIcons, xIcons + sizes.widthOfIcon - 1, yIcons + sizes.heightOfIcon - 1)
|
||||
xIcons = xIcons + sizes.xSpaceBetweenIcons + sizes.widthOfIcon
|
||||
end
|
||||
end
|
||||
@ -181,7 +190,7 @@ local function drawTopBar()
|
||||
buffer.text(xPos + 1, 1, 0x000000, topBarElements[i])
|
||||
end
|
||||
local length = unicode.len(topBarElements[i])
|
||||
zones.add("OS", "TopBarButtons", topBarElements[i], xPos, 1, length + 2, 1)
|
||||
newObj("TopBarButtons", topBarElements[i], xPos, 1, xPos + length + 1, 1)
|
||||
xPos = xPos + length + 2
|
||||
end
|
||||
--Рисуем время
|
||||
@ -197,13 +206,7 @@ end
|
||||
|
||||
---------------------------------------------- Сама ОС ------------------------------------------------------------------------
|
||||
|
||||
zones.stop()
|
||||
zones.start()
|
||||
zones.remove("OS")
|
||||
buffer.start()
|
||||
|
||||
--zones.add("OS", "Global", "Global", 1, 1, sizes.xSize, sizes.ySize)
|
||||
--createDesktopShortCuts()
|
||||
drawAll(true)
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------
|
||||
@ -211,22 +214,24 @@ drawAll(true)
|
||||
while true do
|
||||
local eventData = { event.pull() }
|
||||
|
||||
if eventData[1] == "zone" then
|
||||
if eventData[1] == "touch" then
|
||||
|
||||
local x, y, mouseKey, xZone, yZone, path = eventData[5], eventData[6], eventData[7], eventData[8], eventData[9], eventData[12]
|
||||
local clickedAtEmptyArea = true
|
||||
|
||||
if eventData[2] == "OS" then
|
||||
if eventData[3] == "DesktopIcons" then
|
||||
for key in pairs(obj["DesktopIcons"]) do
|
||||
if ecs.clickedAtArea(eventData[3], eventData[4], obj["DesktopIcons"][key][1], obj["DesktopIcons"][key][2], obj["DesktopIcons"][key][3], obj["DesktopIcons"][key][4]) then
|
||||
|
||||
local path = obj["DesktopIcons"][key][5]
|
||||
local fileFormat = ecs.getFileFormat(path)
|
||||
|
||||
local oldPixelsOfIcon = buffer.copy(xZone, yZone, sizes.widthOfIcon, sizes.heightOfIcon)
|
||||
local oldPixelsOfIcon = buffer.copy(obj["DesktopIcons"][key][1], obj["DesktopIcons"][key][2], sizes.widthOfIcon, sizes.heightOfIcon)
|
||||
|
||||
buffer.square(xZone, yZone, sizes.widthOfIcon, sizes.heightOfIcon, colors.iconsSelectionColor, 0xFFFFFF, " ", colors.iconsSelectionTransparency)
|
||||
ecs.drawOSIcon(xZone, yZone, path, false, 0xffffff)
|
||||
buffer.square(obj["DesktopIcons"][key][1], obj["DesktopIcons"][key][2], sizes.widthOfIcon, sizes.heightOfIcon, colors.iconsSelectionColor, 0xFFFFFF, " ", colors.iconsSelectionTransparency)
|
||||
ecs.drawOSIcon(obj["DesktopIcons"][key][1], obj["DesktopIcons"][key][2], path, false, 0xffffff)
|
||||
buffer.draw()
|
||||
|
||||
-- Левый клик
|
||||
if mouseKey == 0 then
|
||||
if eventData[5] == 0 then
|
||||
os.sleep(0.2)
|
||||
if fs.isDirectory(path) then
|
||||
if fileFormat == ".app" then
|
||||
@ -234,7 +239,7 @@ while true do
|
||||
buffer.start()
|
||||
drawAll()
|
||||
else
|
||||
shell.execute("MineOS/Applications/Finder.app/Finder.lua "..path)
|
||||
shell.execute("MineOS/Applications/Finder.app/Finder.lua " .. path)
|
||||
end
|
||||
else
|
||||
ecs.launchIcon(path)
|
||||
@ -243,21 +248,21 @@ while true do
|
||||
end
|
||||
|
||||
-- Правый клик
|
||||
elseif mouseKey == 1 then
|
||||
elseif eventData[5] == 1 then
|
||||
|
||||
local action
|
||||
local fileFormat = ecs.getFileFormat(path)
|
||||
|
||||
-- Разные контекстные меню
|
||||
if fileFormat == ".app" and fs.isDirectory(path) then
|
||||
action = context.menu(x, y, {lang.contextShowContent}, "-", {lang.contextCopy, false, "^C"}, {lang.contextPaste, not _G.clipboard, "^V"}, "-", {lang.contextRename}, {lang.contextCreateShortcut}, "-", {lang.contextUploadToPastebin, true}, "-", {lang.contextAddToDock, not (currentCountOfIconsInDock < sizes.dockCountOfIcons and workPath ~= "MineOS/System/OS/Dock/")}, {lang.contextDelete, false, "⌫"})
|
||||
action = context.menu(eventData[3], eventData[4], {lang.contextShowContent}, "-", {lang.contextCopy, false, "^C"}, {lang.contextPaste, not _G.clipboard, "^V"}, "-", {lang.contextRename}, {lang.contextCreateShortcut}, "-", {lang.contextUploadToPastebin, true}, "-", {lang.contextAddToDock, not (currentCountOfIconsInDock < sizes.dockCountOfIcons and workPath ~= "MineOS/System/OS/Dock/")}, {lang.contextDelete, false, "⌫"})
|
||||
elseif fileFormat ~= ".app" and fs.isDirectory(path) then
|
||||
action = context.menu(x, y, {lang.contextCopy, false, "^C"}, {lang.contextPaste, not _G.clipboard, "^V"}, "-", {lang.contextRename}, {lang.contextCreateShortcut}, "-", {lang.contextUploadToPastebin, true}, "-", {lang.contextDelete, false, "⌫"})
|
||||
action = context.menu(eventData[3], eventData[4], {lang.contextCopy, false, "^C"}, {lang.contextPaste, not _G.clipboard, "^V"}, "-", {lang.contextRename}, {lang.contextCreateShortcut}, "-", {lang.contextUploadToPastebin, true}, "-", {lang.contextDelete, false, "⌫"})
|
||||
else
|
||||
if fileFormat == ".pic" then
|
||||
action = context.menu(x, y, {lang.contextEdit}, {"Установить как обои"},"-", {lang.contextCopy, false, "^C"}, {lang.contextPaste, not _G.clipboard, "^V"}, "-", {lang.contextRename}, {lang.contextCreateShortcut}, "-", {lang.contextUploadToPastebin, true}, "-", {lang.contextAddToDock, not (currentCountOfIconsInDock < sizes.dockCountOfIcons and workPath ~= "MineOS/System/OS/Dock/")}, {lang.contextDelete, false, "⌫"})
|
||||
action = context.menu(eventData[3], eventData[4], {lang.contextEdit}, {"Установить как обои"},"-", {lang.contextCopy, false, "^C"}, {lang.contextPaste, not _G.clipboard, "^V"}, "-", {lang.contextRename}, {lang.contextCreateShortcut}, "-", {lang.contextUploadToPastebin, true}, "-", {lang.contextAddToDock, not (currentCountOfIconsInDock < sizes.dockCountOfIcons and workPath ~= "MineOS/System/OS/Dock/")}, {lang.contextDelete, false, "⌫"})
|
||||
else
|
||||
action = context.menu(x, y, {lang.contextEdit}, "-", {lang.contextCopy, false, "^C"}, {lang.contextPaste, not _G.clipboard, "^V"}, "-", {lang.contextRename}, {lang.contextCreateShortcut}, "-", {lang.contextUploadToPastebin, true}, "-", {lang.contextAddToDock, not (currentCountOfIconsInDock < sizes.dockCountOfIcons and workPath ~= "MineOS/System/OS/Dock/")}, {lang.contextDelete, false, "⌫"})
|
||||
action = context.menu(eventData[3], eventData[4], {lang.contextEdit}, "-", {lang.contextCopy, false, "^C"}, {lang.contextPaste, not _G.clipboard, "^V"}, "-", {lang.contextRename}, {lang.contextCreateShortcut}, "-", {lang.contextUploadToPastebin, true}, "-", {lang.contextAddToDock, not (currentCountOfIconsInDock < sizes.dockCountOfIcons and workPath ~= "MineOS/System/OS/Dock/")}, {lang.contextDelete, false, "⌫"})
|
||||
end
|
||||
end
|
||||
|
||||
@ -289,46 +294,60 @@ while true do
|
||||
changeWallpaper()
|
||||
drawAll(true)
|
||||
else
|
||||
buffer.paste(xZone, yZone, oldPixelsOfIcon)
|
||||
buffer.paste(obj["DesktopIcons"][key][1], obj["DesktopIcons"][key][2], oldPixelsOfIcon)
|
||||
buffer.draw()
|
||||
end
|
||||
end
|
||||
|
||||
elseif eventData[3] == "DockIcons" then
|
||||
clickedAtEmptyArea = false
|
||||
|
||||
local oldPixelsOfIcon = buffer.copy(xZone, yZone, sizes.widthOfIcon, sizes.heightOfIcon)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
buffer.square(xZone, yZone, sizes.widthOfIcon, sizes.heightOfIcon, colors.iconsSelectionColor, 0xFFFFFF, " ", colors.iconsSelectionTransparency)
|
||||
ecs.drawOSIcon(xZone, yZone, pathOfDockShortcuts .. eventData[4], false, 0xffffff)
|
||||
for key in pairs(obj["DockIcons"]) do
|
||||
if ecs.clickedAtArea(eventData[3], eventData[4], obj["DockIcons"][key][1], obj["DockIcons"][key][2], obj["DockIcons"][key][3], obj["DockIcons"][key][4]) then
|
||||
|
||||
local oldPixelsOfIcon = buffer.copy(obj["DockIcons"][key][1], obj["DockIcons"][key][2], sizes.widthOfIcon, sizes.heightOfIcon)
|
||||
|
||||
buffer.square(obj["DockIcons"][key][1], obj["DockIcons"][key][2], sizes.widthOfIcon, sizes.heightOfIcon, colors.iconsSelectionColor, 0xFFFFFF, " ", colors.iconsSelectionTransparency)
|
||||
ecs.drawOSIcon(obj["DockIcons"][key][1], obj["DockIcons"][key][2], pathOfDockShortcuts .. key, false, 0xffffff)
|
||||
buffer.draw()
|
||||
|
||||
if mouseKey == 0 then
|
||||
if eventData[5] == 0 then
|
||||
os.sleep(0.2)
|
||||
ecs.launchIcon(pathOfDockShortcuts..eventData[4])
|
||||
ecs.launchIcon(pathOfDockShortcuts .. key)
|
||||
drawAll(true)
|
||||
else
|
||||
local content = ecs.readShortcut(pathOfDockShortcuts .. eventData[4])
|
||||
local content = ecs.readShortcut(pathOfDockShortcuts .. key)
|
||||
|
||||
action = context.menu(x, y, {lang.contextRemoveFromDock, not (currentCountOfIconsInDock > 1)})
|
||||
action = context.menu(eventData[3], eventData[4], {lang.contextRemoveFromDock, not (currentCountOfIconsInDock > 1)})
|
||||
|
||||
if action == lang.contextRemoveFromDock then
|
||||
fs.remove(pathOfDockShortcuts..eventData[4])
|
||||
fs.remove(pathOfDockShortcuts .. key)
|
||||
drawAll()
|
||||
else
|
||||
buffer.paste(xZone, yZone, oldPixelsOfIcon)
|
||||
buffer.paste(obj["DockIcons"][key][1], obj["DockIcons"][key][2], oldPixelsOfIcon)
|
||||
buffer.draw()
|
||||
oldPixelsOfIcon = nil
|
||||
end
|
||||
end
|
||||
|
||||
elseif eventData[3] == "TopBarButtons" then
|
||||
clickedAtEmptyArea = false
|
||||
|
||||
buffer.square(xZone, yZone, unicode.len(eventData[4]) + 2, 1, ecs.colors.blue, 0xFFFFFF, " ")
|
||||
buffer.text(xZone + 1, yZone, 0xffffff, eventData[4])
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
for key in pairs(obj["TopBarButtons"]) do
|
||||
if ecs.clickedAtArea(eventData[3], eventData[4], obj["TopBarButtons"][key][1], obj["TopBarButtons"][key][2], obj["TopBarButtons"][key][3], obj["TopBarButtons"][key][4]) then
|
||||
|
||||
buffer.square(obj["TopBarButtons"][key][1], obj["TopBarButtons"][key][2], unicode.len(key) + 2, 1, ecs.colors.blue, 0xFFFFFF, " ")
|
||||
buffer.text(obj["TopBarButtons"][key][1] + 1, obj["TopBarButtons"][key][2], 0xffffff, key)
|
||||
buffer.draw()
|
||||
|
||||
if eventData[4] == "MineOS" then
|
||||
local action = context.menu(xZone, yZone + 1, {lang.aboutSystem}, {lang.updateSystem}, "-", {lang.restart}, {lang.shutdown}, "-", {lang.backToShell})
|
||||
if key == "MineOS" then
|
||||
local action = context.menu(obj["TopBarButtons"][key][1], obj["TopBarButtons"][key][2] + 1, {lang.aboutSystem}, {lang.updateSystem}, "-", {lang.restart}, {lang.shutdown}, "-", {lang.backToShell})
|
||||
|
||||
if action == lang.backToShell then
|
||||
ecs.prepareToExit()
|
||||
@ -345,55 +364,71 @@ while true do
|
||||
elseif action == lang.aboutSystem then
|
||||
ecs.prepareToExit()
|
||||
print(copyright)
|
||||
print(" А теперь жмякай любую кнопку и продолжай работу с ОС.")
|
||||
print("А теперь жмякай любую кнопку и продолжай работу с ОС.")
|
||||
ecs.waitForTouchOrClick()
|
||||
drawAll(true)
|
||||
end
|
||||
|
||||
elseif eventData[4] == lang.viewTab then
|
||||
local action = context.menu(xZone, yZone + 1, {"Скрыть обои", not wallpaper}, {"Показать обои", wallpaper or not fs.exists(pathToWallpaper)})
|
||||
if action == "Скрыть обои" then
|
||||
elseif key == lang.viewTab then
|
||||
local action = context.menu(obj["TopBarButtons"][key][1], obj["TopBarButtons"][key][2] + 1, {"Показывать формат файлов", showFileFormat}, {"Скрывать формат файлов", not showFileFormat}, "-", {"Показывать скрытые файлы", showHiddenFiles}, {"Скрывать скрытые файлы", not showHiddenFiles}, "-", {"Сортировать по имени"}, {"Сортировать по дате"}, {"Сортировать по типу"}, "-", {"Удалить обои", not wallpaper})
|
||||
if action == "Показывать скрытые файлы" then
|
||||
showHiddenFiles = true
|
||||
drawAll()
|
||||
elseif action == "Скрывать скрытые файлы" then
|
||||
showHiddenFiles = false
|
||||
drawAll()
|
||||
elseif action == "Показывать формат файлов" then
|
||||
showFileFormat = true
|
||||
drawAll()
|
||||
elseif action == "Скрывать формат файлов" then
|
||||
showFileFormat = false
|
||||
drawAll()
|
||||
elseif action == "Сортировать по имени" then
|
||||
sortingMethod = "name"
|
||||
drawAll()
|
||||
elseif action == "Сортировать по дате" then
|
||||
sortingMethod = "date"
|
||||
drawAll()
|
||||
elseif action == "Сортировать по типу" then
|
||||
sortingMethod = "type"
|
||||
drawAll()
|
||||
elseif action == "Удалить обои" then
|
||||
wallpaper = nil
|
||||
fs.remove(pathToWallpaper)
|
||||
drawAll(true)
|
||||
elseif action == "Показать обои" then
|
||||
changeWallpaper()
|
||||
drawAll(true)
|
||||
end
|
||||
end
|
||||
|
||||
drawAll()
|
||||
|
||||
clickedAtEmptyArea = false
|
||||
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
elseif eventData[1] == "OSWallpaperChanged" then
|
||||
changeWallpaper()
|
||||
drawAll(true)
|
||||
if clickedAtEmptyArea and eventData[5] == 1 then
|
||||
local action = context.menu(eventData[3], eventData[4], {"Удалить обои", not wallpaper},"-", {lang.contextNewFile}, {lang.contextNewFolder}, "-", {lang.contextPaste, not _G.clipboard, "^V"})
|
||||
|
||||
--Создать новый файл
|
||||
if action == lang.contextNewFile then
|
||||
ecs.newFile(workPath)
|
||||
drawAll(true)
|
||||
--Создать новую папку
|
||||
elseif action == lang.contextNewFolder then
|
||||
ecs.newFolder(workPath)
|
||||
drawAll()
|
||||
--Вставить файл
|
||||
elseif action == lang.contextPaste then
|
||||
ecs.copy(_G.clipboard, workPath)
|
||||
drawAll()
|
||||
elseif action == "Удалить обои" then
|
||||
wallpaper = nil
|
||||
fs.remove(pathToWallpaper)
|
||||
drawAll()
|
||||
end
|
||||
end
|
||||
end
|
||||
--Если пустая глобал зона
|
||||
-- if eventData[1] == "touch" then
|
||||
-- if eventData[5] == 1 then
|
||||
-- local action = context.menu(eventData[3], eventData[4], {"Убрать обои", not wallpaper},"-", {lang.contextNewFile}, {lang.contextNewFolder}, "-", {lang.contextPaste, not _G.clipboard, "^V"})
|
||||
|
||||
-- --Создать новый файл
|
||||
-- if action == lang.contextNewFile then
|
||||
-- ecs.newFile(workPath)
|
||||
-- drawAll(true)
|
||||
-- --Создать новую папку
|
||||
-- elseif action == lang.contextNewFolder then
|
||||
-- ecs.newFolder(workPath)
|
||||
-- drawAll()
|
||||
-- --Вставить файл
|
||||
-- elseif action == lang.contextPaste then
|
||||
|
||||
-- elseif action == "Убрать обои" then
|
||||
-- wallpaper = nil
|
||||
-- fs.remove(pathToWallpaper)
|
||||
-- drawAll()
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
end
|
||||
|
||||
|
||||
|
||||
@ -1282,6 +1282,23 @@ function ECSAPI.newApplication(path, startName)
|
||||
end
|
||||
end
|
||||
|
||||
--Создать приложение на основе существующего ЛУА-файла
|
||||
function ECSAPI.newApplicationFromLuaFile(pathToLuaFile, pathWhereToCreateApplication)
|
||||
local data = ECSAPI.universalWindow("auto", "auto", 30, ECSAPI.windowColors.background, true, {"EmptyLine"}, {"CenterText", 0x000000, "Новое приложение"}, {"EmptyLine"}, {"Input", 0x262626, 0x880000, "Имя приложения"}, {"Input", 0x262626, 0x880000, "Путь к иконке приложения"}, {"EmptyLine"}, {"Button", {0xbbbbbb, 0xffffff, "OK"}})
|
||||
data[1] = data[1] or "MyApplication"
|
||||
data[2] = data[2] or "MineOS/System/OS/Icons/SampleIcon.pic"
|
||||
if fs.exists(data[2]) then
|
||||
fs.makeDirectory(pathWhereToCreateApplication .. "/" .. data[1] .. ".app/Resources")
|
||||
fs.copy(pathToLuaFile, pathWhereToCreateApplication .. "/" .. data[1] .. ".app/" .. data[1] .. ".lua")
|
||||
fs.copy(data[2], pathWhereToCreateApplication .. "/" .. data[1] .. ".app/Resources/Icon.pic")
|
||||
|
||||
--ECSAPI.universalWindow("auto", "auto", 30, ECSAPI.windowColors.background, true, {"EmptyLine"}, {"CenterText", 0x000000, "Приложение создано!"}, {"EmptyLine"}, {"Button", {ecs.colors.green, 0xffffff, "OK"}})
|
||||
else
|
||||
ecs.error("Указанный файл иконки не существует.")
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
--Простое информационное окошечко. Возвращает старые пиксели - мало ли понадобится.
|
||||
function ECSAPI.info(x, y, title, text)
|
||||
x = x or "auto"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user