From bcbc105a28efccef99611d628f15b5dda3733b93 Mon Sep 17 00:00:00 2001 From: Igor Timofeev Date: Mon, 24 Aug 2015 01:49:43 +0300 Subject: [PATCH] Update OS.lua --- Applications/OS.lua | 114 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 100 insertions(+), 14 deletions(-) diff --git a/Applications/OS.lua b/Applications/OS.lua index 57454a2d..67432c7b 100644 --- a/Applications/OS.lua +++ b/Applications/OS.lua @@ -19,6 +19,7 @@ local xSize, ySize = gpu.getResolution() local icons = {} local workPath = "" local workPathHistory = {} +local clipboard local currentFileList local currentDesktop = 1 local countOfDesktops @@ -50,7 +51,10 @@ local xPosOfIcons = math.floor(xSize / 2 - (xCountOfIcons * (widthOfIcon + xSpac --ПЕРЕМЕННЫЕ ДЛЯ ТОП БАРА -local topBarColor = 0xeeeeee +local topBarColor = 0xdddddd +local showHiddenFiles = false +local showSystemFiles = true +local showFileFormat = false ------------------------------------------------------------------------------------------------------------------------ @@ -73,7 +77,17 @@ end --ОТРИСОВКА ТЕКСТА ПОД ИКОНКОЙ local function drawIconText(xIcons, yIcons, path) - local text = ecs.stringLimit("end", fs.name(path), widthOfIcon) + + local text = fs.name(path) + + if not showFileFormat then + local fileFormat = ecs.getFileFormat(text) + if fileFormat then + text = unicode.sub(text, 1, -(unicode.len(fileFormat) + 1)) + end + end + + text = ecs.stringLimit("end", text, widthOfIcon) local textPos = xIcons + math.floor(widthOfIcon / 2 - unicode.len(text) / 2) - 2 ecs.adaptiveText(textPos, yIcons + heightOfIcon - 1, text, 0xffffff) @@ -104,8 +118,8 @@ local function drawIcon(xIcons, yIcons, path) icon = "config" elseif fileFormat == ".txt" or fileFormat == ".rtf" then icon = "text" - -- elseif fileFormat == ".lua" then - -- icon = "lua" + elseif fileFormat == ".lua" then + icon = "lua" else icon = "script" end @@ -211,9 +225,6 @@ end ------------------------------------------------------------------------------------------------ -showHiddenFiles = false -showSystemFiles = false - --ОТРИСОВКА ИКОНОК НА РАБОЧЕМ СТОЛЕ ПО ТЕКУЩЕЙ ПАПКЕ local function drawDesktop(x, y) @@ -241,7 +252,10 @@ local function drawDesktop(x, y) if i == currentDesktop then color = ecs.colors.green + else + color = 0xffffff end + ecs.colorTextWithBack(xButtons, yButtons, 0x000000, color, " ") newObj("DesktopButtons", i, xButtons, yButtons, xButtons + 1, yButtons) @@ -309,16 +323,34 @@ end local function drawTime() local time = " " .. unicode.sub(os.date("%T"), 1, -4) .. " " local sTime = unicode.len(time) - ecs.colorTextWithBack(xSize - sTime - 2, 1, 0x000000, topBarColor, time) + ecs.colorTextWithBack(xSize - sTime, 1, 0x000000, topBarColor, time) end --РИСОВАТЬ ВЕСЬ ТОПБАР local function drawTopBar() - local time = unicode.sub(os.date("%T"), 1, -4) + + --Элементы топбара + local topBarElements = { "MineOS", "Вид" } + + --Белая горизонтальная линия ecs.square(1, 1, xSize, 1, topBarColor) - ecs.colorTextWithBack(2, 1, 0x000000, topBarColor, "/"..workPath) + --Рисуем элементы и создаем объекты + local xPos = 2 + gpu.setForeground(0x000000) + for i = 1, #topBarElements do + if i > 1 then gpu.setForeground(0x666666) end + + local length = unicode.len(topBarElements[i]) + gpu.set(xPos + 1, 1, topBarElements[i]) + + newObj("TopBarButtons", topBarElements[i], xPos, 1, xPos + length + 1, 1) + + xPos = xPos + length + 2 + end + + --Рисуем время drawTime() end @@ -463,13 +495,13 @@ while true do --РАЗНЫЕ КОНТЕКСТНЫЕ МЕНЮ if #getSelectedIcons() > 1 then - action = context.menu(eventData[3], eventData[4], {"Вырезать", false, "^X"}, {"Копировать", false, "^C"}, {"Вставить", true, "^V"}, "-", {"Добавить в архив"}, "-", {"Удалить", false, "⌫"}) + action = context.menu(eventData[3], eventData[4], {"Вырезать", false, "^X"}, {"Копировать", false, "^C"}, {"Вставить", not clipboard, "^V"}, "-", {"Добавить в архив"}, "-", {"Удалить", false, "⌫"}) elseif fileFormat == ".app" and fs.isDirectory(obj["DesktopIcons"][key][5]) then - action = context.menu(eventData[3], eventData[4], {"Показать содержимое"}, "-", {"Вырезать", false, "^X"}, {"Копировать", false, "^C"}, {"Вставить", true, "^V"}, "-", {"Переименовать"}, {"Создать ярлык"}, {"Добавить в архив"}, "-", {"Удалить", false, "⌫"}) + action = context.menu(eventData[3], eventData[4], {"Показать содержимое"}, "-", {"Вырезать", false, "^X"}, {"Копировать", false, "^C"}, {"Вставить", not clipboard, "^V"}, "-", {"Переименовать"}, {"Создать ярлык"}, {"Добавить в архив"}, "-", {"Удалить", false, "⌫"}) elseif fileFormat ~= ".app" and fs.isDirectory(obj["DesktopIcons"][key][5]) then - action = context.menu(eventData[3], eventData[4], {"Вырезать", false, "^X"}, {"Копировать", false, "^C"}, {"Вставить", true, "^V"}, "-", {"Переименовать"}, {"Создать ярлык"}, {"Добавить в архив"}, "-", {"Удалить", false, "⌫"}) + action = context.menu(eventData[3], eventData[4], {"Вырезать", false, "^X"}, {"Копировать", false, "^C"}, {"Вставить", not clipboard, "^V"}, "-", {"Переименовать"}, {"Создать ярлык"}, {"Добавить в архив"}, "-", {"Удалить", false, "⌫"}) else - action = context.menu(eventData[3], eventData[4], {"Редактировать"}, "-", {"Вырезать", false, "^X"}, {"Копировать", false, "^C"}, {"Вставить", true, "^V"}, "-", {"Переименовать"}, {"Создать ярлык"}, {"Добавить в архив"}, "-", {"Удалить", false, "⌫"}) + action = context.menu(eventData[3], eventData[4], {"Редактировать"}, "-", {"Вырезать", false, "^X"}, {"Копировать", false, "^C"}, {"Вставить", not clipboard, "^V"}, "-", {"Переименовать"}, {"Создать ярлык"}, {"Добавить в архив"}, "-", {"Удалить", false, "⌫"}) end --ecs.error(#getSelectedIcons()) @@ -484,6 +516,14 @@ while true do ecs.prepareToExit() shell.execute("edit "..obj["DesktopIcons"][key][5]) drawAll() + elseif action == "Удалить" then + fs.remove(workPath .. "/" .. obj["DesktopIcons"][key][5]) + drawDesktop(xPosOfIcons, yPosOfIcons) + elseif action == "Копировать" then + clipboard = workPath .. "/" .. obj["DesktopIcons"][key][5] + elseif action == "Вставить" then + ecs.copy(clipboard, workPath) + drawDesktop(xPosOfIcons, yPosOfIcons) else redrawSelectedIcons() deselectAll(true) @@ -515,6 +555,52 @@ while true do end end + for key, val 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 + ecs.colorTextWithBack(obj["TopBarButtons"][key][1], obj["TopBarButtons"][key][2], 0xffffff, ecs.colors.blue, " "..key.." ") + + if key == "Вид" then + + local action = context.menu(obj["TopBarButtons"][key][1], obj["TopBarButtons"][key][2] + 1, {(function() if showHiddenFiles then return "Скрывать скрытые файлы" else return "Показывать скрытые файлы" end end)()}, {(function() if showSystemFiles then return "Скрывать системные файлы" else return "Показывать системные файлы" end end)()}, "-", {(function() if showFileFormat then return "Скрывать формат файлов" else return "Показывать формат файлов" end end)()}) + + if action == "Скрывать скрытые файлы" then + showHiddenFiles = false + elseif action == "Показывать скрытые файлы" then + showHiddenFiles = true + elseif action == "Показывать системные файлы" then + showSystemFiles = true + elseif action == "Скрывать системные файлы" then + showSystemFiles = false + elseif action == "Показывать формат файлов" then + showFileFormat = true + elseif action == "Скрывать формат файлов" then + showFileFormat = false + end + + drawTopBar() + drawDesktop(xPosOfIcons, yPosOfIcons) + + elseif key == "MineOS" then + local action = context.menu(obj["TopBarButtons"][key][1], obj["TopBarButtons"][key][2] + 1, {"Обновления"}, "-", {"Перезагрузить"}, {"Выключить"}, "-", {"Вернуться в Shell"}) + + if action == "Вернуться в Shell" then + ecs.prepareToExit() + return 0 + elseif action == "Выключить" then + shell.execute("shutdown") + elseif action == "Перезагрузить" then + shell.execute("reboot") + elseif + action == "Обновления" then + shell.execute("pastebin run 0nm5b1ju") + ecs.prepareToExit() + return 0 + end + end + + end + end + --ПРОКРУТКА РАБОЧИХ СТОЛОВ elseif eventData[1] == "scroll" then if eventData[5] == -1 then