diff --git a/Applications/Finder.app/Icon.pic b/Applications/Finder.app/Icon.pic index 59d9e4a8..4389226e 100644 Binary files a/Applications/Finder.app/Icon.pic and b/Applications/Finder.app/Icon.pic differ diff --git a/Applications/MineCode IDE.app/Main.lua b/Applications/MineCode IDE.app/Main.lua index 105b4397..3d46ad75 100755 --- a/Applications/MineCode IDE.app/Main.lua +++ b/Applications/MineCode IDE.app/Main.lua @@ -1398,7 +1398,7 @@ codeView.eventHandler = function(workspace, object, e1, e2, e3, e4, e5) tick(true) elseif e1 == "key_down" then -- Ctrl or CMD - if keyboard.isKeyDown(29) or keyboard.isKeyDown(219) then + if keyboard.isControlDown() or keyboard.isCommandDown() then -- Slash if e4 == 53 then toggleComment() diff --git a/Applications/Picture Edit.app/Main.lua b/Applications/Picture Edit.app/Main.lua index 61d61bff..c99234ea 100644 --- a/Applications/Picture Edit.app/Main.lua +++ b/Applications/Picture Edit.app/Main.lua @@ -8,6 +8,7 @@ local color = require("Color") local screen = require("Screen") local paths = require("Paths") local text = require("Text") +local keyboard = require("Keyboard") local args, options = system.parseArguments(...) @@ -293,6 +294,118 @@ window.secondaryColorSelector.draw, window.primaryColorSelector.draw = colorSele window.swapColorsButton = window:addChild(GUI.button(1, 1, window.toolsList.width, 1, nil, 0x696969, nil, 0xA5A5A5, ">")) window.swapColorsButton.onTouch = swapColors +local function loadImage(path) + local result, reason + + if filesystem.extension(path) == ".rawpic" then + result = image.fromString(filesystem.read(path)) + else + result, reason = image.load(path) + end + + if result then + savePath, saveItem.disabled = path, false + addRecentFile(path) + window.image.data = result + else + GUI.alert(reason) + end +end + +local function save(path) + if filesystem.extension(path) == ".pic" then + local result, reason = image.save(path, window.image.data, 6) + if result then + savePath, saveItem.disabled = path, false + addRecentFile(path) + else + GUI.alert(reason) + end + else + savePath, saveItem.disabled = path, false + filesystem.write(path, image.toString(window.image.data)) + end + + computer.pushSignal("system", "updateFileList") +end + +local function saveAs() + local filesystemDialog = GUI.addFilesystemDialog(workspace, true, 50, math.floor(window.height * 0.8), "Save", "Cancel", "File name", "/") + filesystemDialog:setMode(GUI.IO_MODE_SAVE, GUI.IO_MODE_FILE) + filesystemDialog:addExtensionFilter(".pic") + filesystemDialog:addExtensionFilter(".ocifstring") + filesystemDialog:expandPath(paths.user.desktop) + filesystemDialog.filesystemTree.selectedItem = paths.user.desktop + filesystemDialog:show() + + filesystemDialog.onSubmit = function(path) + save(path) + workspace:draw() + end +end + +local function newNoGUI(width, height) + savePath, saveItem.disabled = nil, true + window.image.data = {width, height} + + for i = 1, width * height do + table.insert(window.image.data, 0x0) + table.insert(window.image.data, 0x0) + table.insert(window.image.data, 1) + table.insert(window.image.data, " ") + end +end + +local function new() + local container = GUI.addBackgroundContainer(workspace, true, true, "New picture") + + local layout = container.layout:addChild(GUI.layout(1, 1, 36, 3, 1, 1)) + layout:setDirection(1, 1, GUI.DIRECTION_HORIZONTAL) + layout:setSpacing(1, 1, 0) + + local function addInput(...) + return layout:addChild(GUI.input(1, 1, 36, 3, 0xE1E1E1, 0x696969, 0x969696, 0xE1E1E1, 0x2D2D2D, ...)) + end + + local widthInput = addInput("", "Width") + layout:addChild(GUI.text(1, 1, 0x696969, " x ")) + local heightInput = addInput("", "Height") + widthInput.width, heightInput.width = 16, 17 + + container.panel.eventHandler = function(workspace, panel, e1) + if e1 == "touch" then + if + widthInput.text:match("%d+") and + heightInput.text:match("%d+") + then + newNoGUI(tonumber(widthInput.text), tonumber(heightInput.text)) + window.image.reposition() + end + + container:remove() + workspace:draw() + end + end + + workspace:draw() +end + +local function open() + local filesystemDialog = GUI.addFilesystemDialog(workspace, true, 50, math.floor(window.height * 0.8), "Open", "Cancel", "File name", "/") + filesystemDialog:setMode(GUI.IO_MODE_OPEN, GUI.IO_MODE_FILE) + filesystemDialog:addExtensionFilter(".pic") + filesystemDialog:addExtensionFilter(".rawpic") + filesystemDialog:expandPath(paths.user.desktop) + filesystemDialog:show() + + filesystemDialog.onSubmit = function(path) + loadImage(path) + + window.image.reposition() + workspace:draw() + end +end + window.image.eventHandler = function(workspace, object, e1, e2, e3, e4, ...) if e1 == "key_down" then -- D @@ -302,6 +415,21 @@ window.image.eventHandler = function(workspace, object, e1, e2, e3, e4, ...) -- X elseif e4 == 45 then swapColors() + elseif keyboard.isControlDown() or keyboard.isCommandDown() then + -- S + if e4 == 31 then + if keyboard.isShiftDown() then + saveAs() + elseif not saveItem.disabled then + save(savePath) + end + -- N + elseif e4 == 49 then + new() + -- O + elseif e4 == 24 then + open() + end else for i = 1, window.toolsList:count() do if e4 == window.toolsList:getItem(i).tool.keyCode then @@ -344,104 +472,21 @@ window.image.reposition = function() end end -local function newNoGUI(width, height) - savePath, saveItem.disabled = nil, true - window.image.data = {width, height} - - for i = 1, width * height do - table.insert(window.image.data, 0x0) - table.insert(window.image.data, 0x0) - table.insert(window.image.data, 1) - table.insert(window.image.data, " ") - end -end - -local function new() - local container = GUI.addBackgroundContainer(workspace, true, true, "New picture") - - local widthInput = container.layout:addChild(GUI.input(1, 1, 36, 3, 0xE1E1E1, 0x696969, 0x696969, 0xE1E1E1, 0x2D2D2D, "51", "Width")) - local heightInput = container.layout:addChild(GUI.input(1, 1, 36, 3, 0xE1E1E1, 0x696969, 0x696969, 0xE1E1E1, 0x2D2D2D, "19", "Height")) - - widthInput.validator = function(text) - return tonumber(text) - end - heightInput.validator = widthInput.validator - - container.panel.eventHandler = function(workspace, object, e1) - if e1 == "touch" then - newNoGUI(tonumber(widthInput.text), tonumber(heightInput.text)) - window.image.reposition() - - container:remove() - workspace:draw() - end - end - - workspace:draw() -end - -local function loadImage(path) - local result, reason - - if filesystem.extension(path) == ".rawpic" then - result = image.fromString(filesystem.read(path)) - else - result, reason = image.load(path) - end - - if result then - savePath, saveItem.disabled = path, false - addRecentFile(path) - window.image.data = result - else - GUI.alert(reason) - end -end - -local function saveImage(path) - if filesystem.extension(path) == ".pic" then - local result, reason = image.save(path, window.image.data, 6) - if result then - savePath, saveItem.disabled = path, false - addRecentFile(path) - else - GUI.alert(reason) - end - else - savePath, saveItem.disabled = path, false - filesystem.write(path, image.toString(window.image.data)) - end - - computer.pushSignal("system", "updateFileList") -end - local fileItem = menu:addContextMenuItem("File") -fileItem:addItem("New").onTouch = new +fileItem:addItem("New", false, "^N").onTouch = new fileItem:addSeparator() -fileItem:addItem("Open").onTouch = function() - local filesystemDialog = GUI.addFilesystemDialog(workspace, true, 50, math.floor(window.height * 0.8), "Open", "Cancel", "File name", "/") - filesystemDialog:setMode(GUI.IO_MODE_OPEN, GUI.IO_MODE_FILE) - filesystemDialog:addExtensionFilter(".pic") - filesystemDialog:addExtensionFilter(".rawpic") - filesystemDialog:expandPath(paths.user.desktop) - filesystemDialog:show() - - filesystemDialog.onSubmit = function(path) - loadImage(path) - window.image.reposition() - - workspace:draw() - end +fileItem:addItem("Open", false, "^O").onTouch = function() + open() end local fileItemSubMenu = fileItem:addSubMenuItem("Open recent", #config.recentFiles == 0) for i = 1, #config.recentFiles do fileItemSubMenu:addItem(text.limit(config.recentFiles[i], 32, "left")).onTouch = function() loadImage(config.recentFiles[i]) + window.image.reposition() - workspace:draw() end end @@ -480,31 +525,15 @@ end fileItem:addSeparator() -saveItem = fileItem:addItem("Save") +saveItem = fileItem:addItem("Save", false, "^S") saveItem.onTouch = function() - saveImage(savePath) + save(savePath) end -fileItem:addItem("Save as").onTouch = function() - local filesystemDialog = GUI.addFilesystemDialog(workspace, true, 50, math.floor(window.height * 0.8), "Save", "Cancel", "File name", "/") - filesystemDialog:setMode(GUI.IO_MODE_SAVE, GUI.IO_MODE_FILE) - filesystemDialog:addExtensionFilter(".pic") - filesystemDialog:addExtensionFilter(".ocifstring") - filesystemDialog:expandPath(paths.user.desktop) - filesystemDialog.filesystemTree.selectedItem = paths.user.desktop - filesystemDialog:show() - - filesystemDialog.onSubmit = function(path) - saveImage(path) - end -end +fileItem:addItem("Save as", false, "^⇧S").onTouch = saveAs fileItem:addSeparator() -fileItem:addItem("Exit").onTouch = function() - window:remove() -end - menu:addItem("View").onTouch = function() local container = GUI.addBackgroundContainer(workspace, true, true, "View") diff --git a/Libraries/Keyboard.lua b/Libraries/Keyboard.lua index 59f71eec..991f0241 100755 --- a/Libraries/Keyboard.lua +++ b/Libraries/Keyboard.lua @@ -14,18 +14,22 @@ function keyboard.isControl(code) return type(code) == "number" and (code < 32 or (code >= 127 and code <= 159)) end -function keyboard.isAltDown(address) +function keyboard.isAltDown() return pressedCodes[56] or pressedCodes[184] end -function keyboard.isControlDown(address) +function keyboard.isControlDown() return pressedCodes[29] or pressedCodes[157] end -function keyboard.isShiftDown(address) +function keyboard.isShiftDown() return pressedCodes[42] or pressedCodes[54] end +function keyboard.isCommandDown() + return pressedCodes[219] +end + ------------------------------------------------------------------------------- require("Event").addHandler(function(e1, _, _, e4) diff --git a/Libraries/System.lua b/Libraries/System.lua index 928d03d4..61d592af 100755 --- a/Libraries/System.lua +++ b/Libraries/System.lua @@ -367,8 +367,6 @@ end function system.updateIconProperties() desktopIconField:deleteIconConfig() - dockContainer.sort() - computer.pushSignal("system", "updateFileList") end @@ -1520,7 +1518,7 @@ local function windowRemove(window) if not window.dockIcon.keepInDock then window.dockIcon:remove() - dockContainer.sort() + dockContainer.update() end end end @@ -1979,19 +1977,19 @@ function system.updateResolution() desktopIconField.height = workspace.height desktopIconField:updateFileList() - dockContainer.sort() - dockContainer.localY = workspace.height - dockContainer.height + 1 - desktopMenu.width = workspace.width desktopMenuLayout.width = workspace.width - desktopBackground.width, desktopBackground.height = workspace.width, workspace.height - 1 + desktopBackground.localY, desktopBackground.width, desktopBackground.height = 2, workspace.width, workspace.height - 1 desktopWindowsContainer.width, desktopWindowsContainer.height = workspace.width, workspace.height - 1 + + dockContainer.update() + dockContainer.localY = workspace.height - dockContainer.height + 1 end local function moveDockIcon(index, direction) dockContainer.children[index], dockContainer.children[index + direction] = dockContainer.children[index + direction], dockContainer.children[index] - dockContainer.sort() + dockContainer.update() dockContainer.saveUserSettings() workspace:draw() end @@ -2060,9 +2058,15 @@ function system.updateDesktop() system.saveUserSettings() end - dockContainer.sort = function() + dockContainer.update = function() local x = 4 for i = 1, #dockContainer.children do + -- Not trash + if i < #dockContainer.children then + dockContainer.children[i]:analyseExtension(iconLaunchers) + end + + -- Sorting dockContainer.children[i].localX = x x = x + userSettings.iconWidth + userSettings.iconHorizontalSpace end @@ -2143,7 +2147,7 @@ function system.updateDesktop() icon.keepInDock = nil else icon:remove() - dockContainer.sort() + dockContainer.update() end workspace:draw() @@ -2162,7 +2166,7 @@ function system.updateDesktop() workspace:draw() end - dockContainer.sort() + dockContainer.update() return icon end @@ -2377,6 +2381,7 @@ function system.updateDesktop() elseif e1 == "system" then if e2 == "updateFileList" then desktopIconField:updateFileList() + dockContainer.update() workspace:draw() end elseif e1 == "network" then @@ -2522,9 +2527,10 @@ function system.updateWorkspace() -- Clearing workspace workspace:removeChildren() - -- Creating background object - desktopBackground = workspace:addChild(GUI.object(1, 2, workspace.width, workspace.height)) - desktopBackground.draw = desktopBackgroundAmbientDraw + -- Creating desktop background object + local oldDraw = desktopBackground and desktopBackground.draw + desktopBackground = workspace:addChild(GUI.object(1, 1, workspace.width, workspace.height)) + desktopBackground.draw = oldDraw or desktopBackgroundAmbientDraw end function system.createUser(name, language, password, wallpaper, screensaver)