From 3ceb3f441e67f054faad80075163874a8be3a648 Mon Sep 17 00:00:00 2001 From: Igor Timofeev Date: Tue, 24 Nov 2015 09:39:21 +0300 Subject: [PATCH] aef --- Applications/Finder/Finder.lua | 35 +++-- Applications/InfoPanel/InfoPanel.lua | 7 + MineOS/OS.lua | 207 ++++++++++++++++----------- lib/ECSAPI.lua | 17 +++ 4 files changed, 168 insertions(+), 98 deletions(-) diff --git a/Applications/Finder/Finder.lua b/Applications/Finder/Finder.lua index d0cec742..3e735d27 100644 --- a/Applications/Finder/Finder.lua +++ b/Applications/Finder/Finder.lua @@ -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 diff --git a/Applications/InfoPanel/InfoPanel.lua b/Applications/InfoPanel/InfoPanel.lua index f4c85011..e23c615c 100644 --- a/Applications/InfoPanel/InfoPanel.lua +++ b/Applications/InfoPanel/InfoPanel.lua @@ -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 diff --git a/MineOS/OS.lua b/MineOS/OS.lua index f25ca22a..fb36a7be 100644 --- a/MineOS/OS.lua +++ b/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 diff --git a/lib/ECSAPI.lua b/lib/ECSAPI.lua index ebdc0b38..95d59963 100644 --- a/lib/ECSAPI.lua +++ b/lib/ECSAPI.lua @@ -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"