diff --git a/.DS_Store b/.DS_Store index 12863e33..3329ead7 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Applications.txt b/Applications.txt index 5cda39be..a1c20aa2 100644 --- a/Applications.txt +++ b/Applications.txt @@ -8,7 +8,7 @@ about="IgorTimofeev/OpenComputers/master/MineOS/About/", type="Script", forceDownload=true, - version=3.39, + version=3.40, }, { name="MineOS/Pictures/Raspberry.pic", @@ -69,14 +69,14 @@ url="IgorTimofeev/OpenComputers/master/MineOS/Languages/Russian.lang", type="Script", forceDownload=true, - version=1.16, + version=1.17, }, { name="MineOS/System/OS/Languages/English.lang", url="IgorTimofeev/OpenComputers/master/MineOS/Languages/English.lang", type="Script", forceDownload=true, - version=1.16, + version=1.17, }, ----------------------------------------------------- Системные иконки -------------------------------------------------------------------------- @@ -240,6 +240,12 @@ type="Icon", version=1.0, }, + { + name="MineOS/System/OS/Icons/Trash.pic", + url="IgorTimofeev/OpenComputers/master/MineOS/Icons/Trash.pic", + type="Icon", + version=1.0, + }, ----------------------------------------------------- Библиотеки -------------------------------------------------------------------------- @@ -247,7 +253,7 @@ name="lib/MineOSCore.lua", url="IgorTimofeev/OpenComputers/master/lib/MineOSCore.lua", type="Library", - version=1.34, + version=1.35, }, { name="lib/advancedLua.lua", @@ -697,9 +703,8 @@ about="IgorTimofeev/OpenComputers/master/Applications/RayWalk/About/", type="Application", icon="IgorTimofeev/OpenComputers/master/Applications/RayWalk/Icon.pic", - createShortcut="dock", - forceDownload=true, - version=1.57, + createShortcut="desktop", + version=1.58, resources={ { name="Localization/Russian.lang", diff --git a/Installer/Installer.lua b/Installer/Installer.lua index b5d76f14..81cc936f 100644 --- a/Installer/Installer.lua +++ b/Installer/Installer.lua @@ -198,9 +198,8 @@ do language = data[1], dockShortcuts = { {path = "/MineOS/Applications/AppMarket.app"}, - {path = "/MineOS/Applications/RayWalk.app"}, - {path = "/MineOS/Applications/Photoshop.app"}, {path = "/MineOS/Applications/VK.app"}, + {path = "/MineOS/Applications/Photoshop.app"}, } } diff --git a/MineOS/.DS_Store b/MineOS/.DS_Store index e409f4b8..8c5e2fd2 100644 Binary files a/MineOS/.DS_Store and b/MineOS/.DS_Store differ diff --git a/MineOS/Icons/Trash.pic b/MineOS/Icons/Trash.pic new file mode 100755 index 00000000..f5be3f23 Binary files /dev/null and b/MineOS/Icons/Trash.pic differ diff --git a/MineOS/Languages/English.lang b/MineOS/Languages/English.lang index 4010613e..918b2ce3 100755 --- a/MineOS/Languages/English.lang +++ b/MineOS/Languages/English.lang @@ -4,6 +4,8 @@ screensaverDelay = "Delay", screensaverDisabled = "Disabled", + areYouSure = "Are you sure?", + emptyTrash = "Empty trash" type = "Type", size = "Size", date = "Date", diff --git a/MineOS/Languages/Russian.lang b/MineOS/Languages/Russian.lang index 803c6566..478bb9dd 100755 --- a/MineOS/Languages/Russian.lang +++ b/MineOS/Languages/Russian.lang @@ -4,6 +4,8 @@ screensaverDelay = "Задрежка", screensaverDisabled = "Отключена", + areYouSure = "Вы уверены?", + emptyTrash = "Очистить корзину", type = "Тип", size = "Размер", date = "Дата", diff --git a/MineOS/OS.lua b/MineOS/OS.lua index 70e9f5d3..a9f04f8c 100755 --- a/MineOS/OS.lua +++ b/MineOS/OS.lua @@ -323,6 +323,97 @@ local function updateDesktopCounters() workspace.desktopCounters.width = x - 3 workspace.desktopCounters.localPosition.x = math.floor(workspace.width / 2 - workspace.desktopCounters.width / 2) + workspace.desktopCounters.localPosition.y = workspace.height - sizes.heightOfDock - 2 +end + +local function updateDock() + local function moveDockShortcut(iconIndex, direction) + _G.OSSettings.dockShortcuts[iconIndex], _G.OSSettings.dockShortcuts[iconIndex + direction] = swap(_G.OSSettings.dockShortcuts[iconIndex], _G.OSSettings.dockShortcuts[iconIndex + direction]) + MineOSCore.saveOSSettings() + updateDock() + workspace:draw() + buffer.draw() + end + + workspace.dockContainer.width = (#_G.OSSettings.dockShortcuts + 1) * (MineOSCore.iconWidth + sizes.xSpaceBetweenIcons) - sizes.xSpaceBetweenIcons + workspace.dockContainer.localPosition.x = math.floor(workspace.width / 2 - workspace.dockContainer.width / 2) + workspace.dockContainer.localPosition.y = workspace.height - sizes.heightOfDock + 1 + workspace.dockContainer:deleteChildren() + + local xPos = 1 + for iconIndex = 1, #_G.OSSettings.dockShortcuts do + local iconObject = MineOSCore.createIconObject(xPos, 1, _G.OSSettings.dockShortcuts[iconIndex].path, 0x000000, _G.OSSettings.showFileFormat) + + iconObject.onRightClick = function(iconObject, eventData) + local menu = GUI.contextMenu(eventData[3], eventData[4]) + menu:addItem(MineOSCore.localization.contextMenuShowContainingFolder, true).onTouch = function() + ecs.error("ТУТА БУДЕТ ОТКРЫВАТОР ПУТИ ИКОНКИ ДОКА") + end + menu:addSeparator() + menu:addItem(MineOSCore.localization.contextMenuMoveRight, iconIndex >= #_G.OSSettings.dockShortcuts).onTouch = function() + moveDockShortcut(iconIndex, 1) + end + menu:addItem(MineOSCore.localization.contextMenuMoveLeft, iconIndex <= 1).onTouch = function() + moveDockShortcut(iconIndex, -1) + end + menu:addSeparator() + menu:addItem(MineOSCore.localization.contextMenuRemoveFromDock, _G.OSSettings.dockShortcuts[iconIndex].canNotBeDeleted or #_G.OSSettings.dockShortcuts < 2).onTouch = function() + table.remove(_G.OSSettings.dockShortcuts, iconIndex) + MineOSCore.saveOSSettings() + updateDock() + workspace:draw() + buffer.draw() + end + menu:show() + end + + workspace.dockContainer:addChild(iconObject, GUI.objectTypes.container) + xPos = xPos + MineOSCore.iconWidth + sizes.xSpaceBetweenIcons + end + + local iconObject = MineOSCore.createIconObject(xPos, 1, MineOSCore.paths.trash, 0x000000, _G.OSSettings.showFileFormat) + iconObject.iconImage.image = MineOSCore.icons.trash + iconObject.onRightClick = function(iconObject, eventData) + local menu = GUI.contextMenu(eventData[3], eventData[4]) + menu:addItem(MineOSCore.localization.emptyTrash).onTouch = function() + local data = ecs.universalWindow("auto", "auto", 36, 0xeeeeee, true, + {"EmptyLine"}, + {"CenterText", 0x000000, MineOSCore.localization.areYouSure}, + {"EmptyLine"}, + {"Button", {0xAAAAAA, 0xffffff, "OK"}, {0x888888, 0xffffff, MineOSCore.localization.cancel}} + ) + + if data[1] == "OK" then + for file in fs.list(MineOSCore.paths.trash) do + fs.remove(MineOSCore.paths.trash .. file) + end + end + end + menu:show() + end + + workspace.dockContainer:addChild(iconObject, GUI.objectTypes.container) +end + +-- Отрисовка дока +local function createDock() + workspace.dockContainer = workspace:addContainer(1, 1, workspace.width, sizes.heightOfDock) + + -- Отрисовка дока + local oldDraw = workspace.dockContainer.draw + workspace.dockContainer.draw = function(dockContainer) + local currentDockTransparency, currentDockWidth, xPos, yPos = colors.dockBaseTransparency, dockContainer.width, dockContainer.x, dockContainer.y + 2 + local color = _G.OSSettings.interfaceColor or colors.interface + for i = 1, dockContainer.height do + buffer.text(xPos, yPos, color, "▟", currentDockTransparency) + buffer.square(xPos + 1, yPos, currentDockWidth - 2, 1, color, 0xFFFFFF, " ", currentDockTransparency) + buffer.text(xPos + currentDockWidth - 1, yPos, color, "▙", currentDockTransparency) + + currentDockTransparency, currentDockWidth, xPos, yPos = currentDockTransparency - colors.dockTransparencyAdder, currentDockWidth + 2, xPos - 1, yPos + 1 + end + + oldDraw(dockContainer) + end end local function changeResolution() @@ -336,88 +427,12 @@ local function changeResolution() workspace.iconField.localPosition.x = math.floor(workspace.width / 2 - (workspace.iconField.iconCount.width * (MineOSCore.iconWidth + sizes.xSpaceBetweenIcons) - sizes.xSpaceBetweenIcons) / 2) workspace.iconField.localPosition.y = 3 - workspace.desktopCounters.localPosition.y = workspace.height - sizes.heightOfDock - 2 - - workspace.dockContainer.width = (#_G.OSSettings.dockShortcuts * (MineOSCore.iconWidth + sizes.xSpaceBetweenIcons) - sizes.xSpaceBetweenIcons) + 2 - workspace.dockContainer.localPosition.x = math.floor(buffer.screen.width / 2 - workspace.dockContainer.width / 2) - workspace.dockContainer.localPosition.y = workspace.height - sizes.heightOfDock + 1 - workspace.menu.width = workspace.width workspace.background.width, workspace.background.height = workspace.width, workspace.height workspace.updateFileList(true) end --- Отрисовка дока -local function createDock() - workspace.dockContainer = workspace:addContainer(1, 1, workspace.width, sizes.heightOfDock) - workspace.dockContainer.updateFileList = function(dockContainer) - local function moveDockShortcut(iconIndex, direction) - _G.OSSettings.dockShortcuts[iconIndex], _G.OSSettings.dockShortcuts[iconIndex + direction] = swap(_G.OSSettings.dockShortcuts[iconIndex], _G.OSSettings.dockShortcuts[iconIndex + direction]) - MineOSCore.saveOSSettings() - dockContainer:updateFileList() - workspace:draw() - buffer.draw() - end - - -- Создание иконок дока - dockContainer:deleteChildren() - local xPos, yPos = 2, 1 - for iconIndex = 1, #_G.OSSettings.dockShortcuts do - local iconObject = MineOSCore.createIconObject(xPos, yPos, _G.OSSettings.dockShortcuts[iconIndex].path, 0x000000, showFileFormat) - - iconObject.onRightClick = function(iconObject, eventData) - local menu = GUI.contextMenu(eventData[3], eventData[4]) - menu:addItem(MineOSCore.localization.contextMenuShowContainingFolder, true).onTouch = function() - MineOSCore.safeLaunch(MineOSCore.paths.applications .. "Finder.app/Finder.lua", "open", fs.path(_G.OSSettings.dockShortcuts[iconIndex].path)) - dockContainer:updateFileList() - workspace:draw() - buffer.draw() - end - menu:addSeparator() - menu:addItem(MineOSCore.localization.contextMenuMoveRight, iconIndex >= #_G.OSSettings.dockShortcuts).onTouch = function() - moveDockShortcut(iconIndex, 1) - end - menu:addItem(MineOSCore.localization.contextMenuMoveLeft, iconIndex <= 1).onTouch = function() - moveDockShortcut(iconIndex, -1) - end - menu:addSeparator() - menu:addItem(MineOSCore.localization.contextMenuRemoveFromDock, _G.OSSettings.dockShortcuts[iconIndex].canNotBeDeleted or #_G.OSSettings.dockShortcuts < 2).onTouch = function() - table.remove(_G.OSSettings.dockShortcuts, iconIndex) - MineOSCore.saveOSSettings() - dockContainer:updateFileList() - workspace:draw() - buffer.draw() - end - menu:show() - end - - dockContainer:addChild(iconObject, GUI.objectTypes.container) - xPos = xPos + MineOSCore.iconWidth + sizes.xSpaceBetweenIcons - end - end - - -- Отрисовка дока - local oldDraw = workspace.dockContainer.draw - workspace.dockContainer.draw = function(dockContainer) - if #_G.OSSettings.dockShortcuts > 0 then - local currentDockTransparency, currentDockWidth, xPos, yPos = colors.dockBaseTransparency, dockContainer.width - 2, dockContainer.x, dockContainer.y + 2 - - for i = 1, sizes.heightOfDock do - buffer.text(xPos, yPos, _G.OSSettings.interfaceColor or colors.interface, "▟", currentDockTransparency) - buffer.square(xPos + 1, yPos, currentDockWidth, 1, _G.OSSettings.interfaceColor or colors.interface, 0xFFFFFF, " ", currentDockTransparency) - buffer.text(xPos + currentDockWidth + 1, yPos, _G.OSSettings.interfaceColor or colors.interface, "▙", currentDockTransparency) - - currentDockTransparency, currentDockWidth, xPos, yPos = currentDockTransparency - colors.dockTransparencyAdder, currentDockWidth + 2, xPos - 1, yPos + 1 - end - end - - oldDraw(dockContainer) - end - - return dockContainer -end - local function createWorkspace() workspace = windows.fullScreen() workspace.background = workspace:addPanel(1, 1, workspace.width, workspace.height, _G.OSSettings.backgroundColor or colors.background) @@ -482,35 +497,36 @@ local function createWorkspace() workspace.iconField.showFileFormat = not workspace.iconField.showFileFormat _G.OSSettings.showFileFormat = workspace.iconField.showFileFormat MineOSCore.saveOSSettings() - workspace:updateFileList() + workspace.updateFileList() end menu:addItem(workspace.iconField.showHiddenFiles and MineOSCore.localization.hideHiddenFiles or MineOSCore.localization.showHiddenFiles).onTouch = function() workspace.iconField.showHiddenFiles = not workspace.iconField.showHiddenFiles _G.OSSettings.showHiddenFiles = workspace.iconField.showHiddenFiles MineOSCore.saveOSSettings() - workspace:updateFileList() + workspace.updateFileList() end menu:addItem(MineOSCore.showApplicationIcons and MineOSCore.localization.hideApplicationIcons or MineOSCore.localization.showApplicationIcons).onTouch = function() MineOSCore.showApplicationIcons = not MineOSCore.showApplicationIcons + workspace.updateFileList() end menu:addSeparator() menu:addItem(MineOSCore.localization.sortByName).onTouch = function() _G.OSSettings.sortingMethod = "name" MineOSCore.saveOSSettings() workspace.iconField.sortingMethod = MineOSCore.sortingMethods.name - workspace:updateFileList() + workspace.updateFileList() end menu:addItem(MineOSCore.localization.sortByDate).onTouch = function() _G.OSSettings.sortingMethod = "date" MineOSCore.saveOSSettings() workspace.iconField.sortingMethod = MineOSCore.sortingMethods.date - workspace:updateFileList() + workspace.updateFileList() end menu:addItem(MineOSCore.localization.sortByType).onTouch = function() _G.OSSettings.sortingMethod = "type" MineOSCore.saveOSSettings() workspace.iconField.sortingMethod = MineOSCore.sortingMethods.type - workspace:updateFileList() + workspace.updateFileList() end menu:addSeparator() menu:addItem(MineOSCore.localization.screensaver).onTouch = function() @@ -602,7 +618,7 @@ local function createWorkspace() workspace.updateFileList = function(forceRedraw) workspace.iconField.fromFile = (currentDesktop - 1) * workspace.iconField.iconCount.total + 1 workspace.iconField:updateFileList() - workspace.dockContainer:updateFileList() + updateDock() updateDesktopCounters() workspace:draw() buffer.draw(forceRedraw) diff --git a/lib/MineOSCore.lua b/lib/MineOSCore.lua index 7a434787..aa796eca 100755 --- a/lib/MineOSCore.lua +++ b/lib/MineOSCore.lua @@ -206,6 +206,7 @@ function MineOSCore.loadStandartIcons() MineOSCore.loadIcon("archive", MineOSCore.paths.icons .. "Archive.pic") MineOSCore.loadIcon("model3D", MineOSCore.paths.icons .. "3DModel.pic") MineOSCore.loadIcon("application", MineOSCore.paths.icons .. "Application.pic") + MineOSCore.loadIcon("trash", MineOSCore.paths.icons .. "Trash.pic") end function MineOSCore.init() @@ -742,7 +743,7 @@ function MineOSCore.iconRightClick(icon, eventData) _G.clipboardCut = true computer.pushSignal("MineOSCore", "updateFileList") elseif action == MineOSCore.localization.contextMenuDelete then - fs.remove(icon.path) + fs.rename(icon.path, MineOSCore.paths.trash .. fs.name(icon.path)) computer.pushSignal("MineOSCore", "updateFileList") elseif action == MineOSCore.localization.contextMenuRename then ecs.rename(icon.path)