mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2026-09-14 11:06:16 +05:00
Полноценная оконна ось, ебать!
This commit is contained in:
parent
893ffa379f
commit
e385f7df3f
@ -5,7 +5,7 @@
|
||||
about="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/MineOS/About/",
|
||||
type="Script",
|
||||
forceDownload=true,
|
||||
version=3.62,
|
||||
version=3.63,
|
||||
},
|
||||
{
|
||||
path="/MineOS/Pictures/MoonTouch.pic",
|
||||
@ -108,14 +108,14 @@
|
||||
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/MineOS/Localization/Russian.lang",
|
||||
type="Script",
|
||||
forceDownload=true,
|
||||
version=1.25,
|
||||
version=1.26,
|
||||
},
|
||||
{
|
||||
path="/MineOS/System/OS/Localization/English.lang",
|
||||
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/MineOS/Localization/English.lang",
|
||||
type="Script",
|
||||
forceDownload=true,
|
||||
version=1.25,
|
||||
version=1.26,
|
||||
},
|
||||
|
||||
----------------------------------------------------- Системные иконки --------------------------------------------------------------------------
|
||||
@ -240,21 +240,21 @@
|
||||
path="/lib/MineOSCore.lua",
|
||||
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/MineOSCore.lua",
|
||||
type="Library",
|
||||
version=1.65,
|
||||
version=1.66,
|
||||
},
|
||||
{
|
||||
path="/lib/advancedLua.lua",
|
||||
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/advancedLua.lua",
|
||||
type="Library",
|
||||
preloadFile=true,
|
||||
version=1.13,
|
||||
version=1.14,
|
||||
},
|
||||
{
|
||||
path="/lib/web.lua",
|
||||
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/web.lua",
|
||||
type="Library",
|
||||
preloadFile=true,
|
||||
version=1.01,
|
||||
version=1.02,
|
||||
},
|
||||
{
|
||||
path="/lib/event.lua",
|
||||
@ -300,7 +300,7 @@
|
||||
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/GUI.lua",
|
||||
type="Library",
|
||||
preloadFile=true,
|
||||
version=1.54,
|
||||
version=1.55,
|
||||
},
|
||||
{
|
||||
path="/lib/rayEngine.lua",
|
||||
@ -360,7 +360,7 @@
|
||||
path="/lib/palette.lua",
|
||||
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/palette.lua",
|
||||
type="Library",
|
||||
version=1.13,
|
||||
version=1.14,
|
||||
},
|
||||
{
|
||||
path="/lib/doubleBuffering.lua",
|
||||
@ -528,7 +528,7 @@
|
||||
type="Application",
|
||||
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/VK/Icon.pic",
|
||||
createShortcut="desktop",
|
||||
version=1.29,
|
||||
version=1.30,
|
||||
resources={
|
||||
{
|
||||
path="/VKLogo.pic",
|
||||
@ -889,7 +889,7 @@
|
||||
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/AppMarket/Icon.pic",
|
||||
createShortcut="dock",
|
||||
forceDownload=true,
|
||||
version=1.59,
|
||||
version=1.60,
|
||||
resources={
|
||||
{
|
||||
path="/Update.pic",
|
||||
|
||||
@ -209,13 +209,6 @@ window.contentContainer.eventHandler = function(mainContainer, object, eventData
|
||||
end
|
||||
end
|
||||
|
||||
local oldResize = window.onResize
|
||||
window.onResize = function(window, width, height)
|
||||
window.contentContainer.width, window.contentContainer.height = width - 4, height - 3
|
||||
oldResize(window, width, height)
|
||||
tabs[window.tabBar.selectedItem].onTouch()
|
||||
end
|
||||
|
||||
local tabs = {
|
||||
window.tabBar:addItem(localization.applications),
|
||||
window.tabBar:addItem(localization.libraries),
|
||||
@ -224,6 +217,13 @@ local tabs = {
|
||||
window.tabBar:addItem(localization.updates)
|
||||
}
|
||||
|
||||
local oldResize = window.onResize
|
||||
window.onResize = function(window, width, height)
|
||||
window.contentContainer.width, window.contentContainer.height = width - 4, height - 3
|
||||
oldResize(window, width, height)
|
||||
tabs[window.tabBar.selectedItem].onTouch()
|
||||
end
|
||||
|
||||
tabs[1].onTouch = function() displayApps(1, "Application") end
|
||||
tabs[2].onTouch = function() displayApps(1, "Library") end
|
||||
tabs[3].onTouch = function() displayApps(1, "Wallpaper") end
|
||||
|
||||
@ -490,7 +490,7 @@ local function messagesGUI()
|
||||
|
||||
-- saveToFile("lastMessagesRequest.json", serialization.serialize(messages))
|
||||
|
||||
buffer.setDrawLimit(mainZoneX, mainZoneY, mainZoneWidth, mainZoneHeight)
|
||||
buffer.setDrawLimit(mainZoneX, mainZoneY, mainZoneX + mainZoneWidth - 1, mainZoneY + mainZoneHeight - 1)
|
||||
|
||||
local y = buffer.height - 7
|
||||
local xSender = mainZoneX + 2
|
||||
@ -727,7 +727,7 @@ local function userProfileGUI()
|
||||
whatIsOnScreen = "userProfile"
|
||||
drawTopBar("Страница пользователя " .. currentProfile.ID)
|
||||
|
||||
buffer.setDrawLimit(mainZoneX, mainZoneY, mainZoneWidth, mainZoneHeight)
|
||||
buffer.setDrawLimit(mainZoneX, mainZoneY, mainZoneX + mainZoneWidth - 1, mainZoneY + mainZoneHeight - 1)
|
||||
|
||||
local xAvatar, yAvatar = mainZoneX + 4, currentProfileY
|
||||
local x, y = xAvatar, yAvatar
|
||||
@ -866,7 +866,7 @@ local function friendsGUI()
|
||||
currentFriends = {sendMessageButtons = {}, openProfileButtons = {}}
|
||||
whatIsOnScreen = "friends"
|
||||
drawTopBar("Друзья")
|
||||
buffer.setDrawLimit(mainZoneX, mainZoneY, mainZoneWidth, mainZoneHeight)
|
||||
buffer.setDrawLimit(mainZoneX, mainZoneY, mainZoneX + mainZoneWidth - 1, mainZoneY + mainZoneHeight - 1)
|
||||
|
||||
local function getListName(listID)
|
||||
local name = "N/A"
|
||||
@ -926,7 +926,7 @@ local function newsGUI()
|
||||
clearGUIZone()
|
||||
drawTopBar("Новости")
|
||||
whatIsOnScreen = "news"
|
||||
buffer.setDrawLimit(mainZoneX, mainZoneY, mainZoneWidth, mainZoneHeight)
|
||||
buffer.setDrawLimit(mainZoneX, mainZoneY, mainZoneX + mainZoneWidth - 1, mainZoneY + mainZoneHeight - 1)
|
||||
|
||||
local function getAvatarTextAndNameForNews(source_id)
|
||||
local avatarText, name = "N/A", "N/A"
|
||||
|
||||
@ -300,9 +300,9 @@ stages[5] = function()
|
||||
OSSettings.screensaverDelay = 20
|
||||
OSSettings.showHelpOnApplicationStart = stageContainer.showApplicationsHelpSwitch.state
|
||||
OSSettings.dockShortcuts = {
|
||||
{path = "/MineOS/Applications/AppMarket.app"},
|
||||
{path = "/MineOS/Applications/MineCode IDE.app"},
|
||||
{path = "/MineOS/Applications/Photoshop.app"},
|
||||
"/MineOS/Applications/AppMarket.app/",
|
||||
"/MineOS/Applications/MineCode IDE.app/",
|
||||
"/MineOS/Applications/Photoshop.app/",
|
||||
}
|
||||
|
||||
table.toFile(paths.OSSettings, OSSettings)
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
{
|
||||
keepInDock = "Keep in dock",
|
||||
launchWithArguments = "Launch with arguments",
|
||||
dontShowAnymore = "Don't show again",
|
||||
applicationHelp = "About application",
|
||||
newName = "New name",
|
||||
@ -34,25 +36,19 @@
|
||||
contextMenuEditInPhotoshop = "Edit in Photoshop",
|
||||
contextMenuRename = "Rename",
|
||||
contextMenuCreateShortcut = "Create shortcut",
|
||||
contextMenuUploadToPastebin = "Upload to Pastebin",
|
||||
contextMenuAddToDock = "Add to Dock",
|
||||
contextMenuRemoveFromDock = "Remove from Dock",
|
||||
contextMenuMoveRight = "Move right",
|
||||
contextMenuMoveLeft = "Move left",
|
||||
contextMenuArchive = "Compress",
|
||||
contextMenuArchive = "Add to archive",
|
||||
contextMenuDelete = "Delete",
|
||||
contextMenuAddToFavourites = "Add to favourites",
|
||||
contextMenuCreateApplication = "Create MineOS application",
|
||||
contextMenuSetAsWallpaper = "Set as wallpaper",
|
||||
contextMenuShowPackageContent = "Show package content",
|
||||
contextMenuShowContainingFolder = "Show containing folder",
|
||||
contextMenuRemoveFromFavourites = "Remove from favourites",
|
||||
contextMenuFlashEEPROM = "Write file to EEPROM",
|
||||
|
||||
favourites = "Favourites",
|
||||
disks = "HDDs",
|
||||
network = "Network",
|
||||
search = "Search",
|
||||
sortByType = "Sort by type",
|
||||
sortByName = "Sort by name",
|
||||
sortByDate = "Sort by date",
|
||||
@ -109,13 +105,4 @@
|
||||
yourContacts = "Your contacts",
|
||||
additionalInfo = "Additional information",
|
||||
stackTraceback = "Stack traceback",
|
||||
fileDoesntExists = "File doesn't exists",
|
||||
fileSuccessfullySent = "File has been successfully sent",
|
||||
sendFile = "Send file",
|
||||
pathToFile = "Path to file",
|
||||
sendMessage = "Send message",
|
||||
messageText = "Message text",
|
||||
gotMessageFrom = "Got message from ",
|
||||
gotFileFrom = "Got file from ",
|
||||
pathToSave = "Path to save the file",
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,6 @@
|
||||
{
|
||||
keepInDock = "Оставить в Dock",
|
||||
launchWithArguments = "Запустить с аргументами",
|
||||
dontShowAnymore = "Больше не показывать",
|
||||
applicationHelp = "О приложении",
|
||||
newName = "Новое имя",
|
||||
@ -34,25 +36,19 @@
|
||||
contextMenuEditInPhotoshop = "Редактировать в Photoshop",
|
||||
contextMenuRename = "Переименовать",
|
||||
contextMenuCreateShortcut = "Создать ярлык",
|
||||
contextMenuUploadToPastebin = "Загрузить на Pastebin",
|
||||
contextMenuAddToDock = "Добавить в Dock",
|
||||
contextMenuRemoveFromDock = "Удалить из Dock",
|
||||
contextMenuMoveRight = "Передвинуть правее",
|
||||
contextMenuMoveLeft = "Передвинуть левее",
|
||||
contextMenuArchive = "Сжать",
|
||||
contextMenuArchive = "Добавить в архив",
|
||||
contextMenuDelete = "Удалить",
|
||||
contextMenuAddToFavourites = "Добавить в избранное",
|
||||
contextMenuCreateApplication = "Создать приложение MineOS",
|
||||
contextMenuSetAsWallpaper = "Установить как обои",
|
||||
contextMenuShowPackageContent = "Показать содержимое пакета",
|
||||
contextMenuShowContainingFolder = "Открыть содержащую папку",
|
||||
contextMenuRemoveFromFavourites = "Удалить из избранного",
|
||||
contextMenuFlashEEPROM = "Записать файл на EEPROM",
|
||||
|
||||
favourites = "Избранное",
|
||||
disks = "Диски",
|
||||
network = "Сеть",
|
||||
search = "Поиск",
|
||||
sortByType = "Сортировать по типу",
|
||||
sortByName = "Сортировать по имени",
|
||||
sortByDate = "Сортировать по дате",
|
||||
@ -109,13 +105,4 @@
|
||||
yourContacts = "Ваши контакты",
|
||||
additionalInfo = "Дополнительная информация",
|
||||
stackTraceback = "Стек ошибки",
|
||||
fileDoesntExists = "Файл не существует",
|
||||
fileSuccessfullySent = "Файл успешно отправлен",
|
||||
sendFile = "Отправить файл",
|
||||
pathToFile = "Путь к файлу",
|
||||
sendMessage = "Сообщение",
|
||||
messageText = "Текст сообщения",
|
||||
gotMessageFrom = "Сообщение от ",
|
||||
gotFileFrom = "Принят файл от ",
|
||||
pathToSave = "Путь для сохранения",
|
||||
}
|
||||
255
MineOS/OS.lua
255
MineOS/OS.lua
@ -316,103 +316,7 @@ local function updateDesktopCounters()
|
||||
MineOSCore.OSMainContainer.desktopCounters.localPosition.y = MineOSCore.OSMainContainer.height - sizes.heightOfDock - 2
|
||||
end
|
||||
|
||||
local function updateDock()
|
||||
local function moveDockShortcut(iconIndex, direction)
|
||||
MineOSCore.OSSettings.dockShortcuts[iconIndex], MineOSCore.OSSettings.dockShortcuts[iconIndex + direction] = swap(MineOSCore.OSSettings.dockShortcuts[iconIndex], MineOSCore.OSSettings.dockShortcuts[iconIndex + direction])
|
||||
MineOSCore.saveOSSettings()
|
||||
updateDock()
|
||||
MineOSCore.OSMainContainer:draw()
|
||||
buffer.draw()
|
||||
end
|
||||
|
||||
MineOSCore.OSMainContainer.dockContainer.width = (#MineOSCore.OSSettings.dockShortcuts + 1) * (MineOSCore.iconWidth + sizes.xSpaceBetweenIcons) - sizes.xSpaceBetweenIcons
|
||||
MineOSCore.OSMainContainer.dockContainer.localPosition.x = math.floor(MineOSCore.OSMainContainer.width / 2 - MineOSCore.OSMainContainer.dockContainer.width / 2)
|
||||
MineOSCore.OSMainContainer.dockContainer.localPosition.y = MineOSCore.OSMainContainer.height - sizes.heightOfDock + 1
|
||||
MineOSCore.OSMainContainer.dockContainer:deleteChildren()
|
||||
|
||||
local xPos = 1
|
||||
for iconIndex = 1, #MineOSCore.OSSettings.dockShortcuts do
|
||||
local icon = MineOSCore.createIcon(xPos, 1, MineOSCore.OSSettings.dockShortcuts[iconIndex].path, 0x262626, MineOSCore.OSSettings.showExtension, 0xFFFFFF)
|
||||
|
||||
icon.onRightClick = function(icon, eventData)
|
||||
local menu = GUI.contextMenu(eventData[3], eventData[4])
|
||||
menu:addItem(MineOSCore.localization.contextMenuShowContainingFolder).onTouch = function()
|
||||
table.insert(workpathHistory, fs.path(icon.path))
|
||||
changeWorkpath(#workpathHistory)
|
||||
MineOSCore.OSMainContainer.updateAndDraw()
|
||||
end
|
||||
menu:addSeparator()
|
||||
menu:addItem(MineOSCore.localization.contextMenuMoveRight, iconIndex >= #MineOSCore.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, MineOSCore.OSSettings.dockShortcuts[iconIndex].canNotBeDeleted or #MineOSCore.OSSettings.dockShortcuts < 2).onTouch = function()
|
||||
table.remove(MineOSCore.OSSettings.dockShortcuts, iconIndex)
|
||||
MineOSCore.saveOSSettings()
|
||||
updateDock()
|
||||
MineOSCore.OSMainContainer:draw()
|
||||
buffer.draw()
|
||||
end
|
||||
menu:show()
|
||||
end
|
||||
|
||||
MineOSCore.OSMainContainer.dockContainer:addChild(icon)
|
||||
xPos = xPos + MineOSCore.iconWidth + sizes.xSpaceBetweenIcons
|
||||
end
|
||||
|
||||
local icon = MineOSCore.createIcon(xPos, 1, MineOSCore.paths.trash, 0x262626, MineOSCore.OSSettings.showExtension, 0xFFFFFF)
|
||||
icon.iconImage.image = MineOSCore.icons.trash
|
||||
icon.onRightClick = function(icon, eventData)
|
||||
local menu = GUI.contextMenu(eventData[3], eventData[4])
|
||||
menu:addItem(MineOSCore.localization.emptyTrash).onTouch = function()
|
||||
local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.areYouSure)
|
||||
|
||||
container.layout:addChild(GUI.button(1, 1, 30, 3, 0xEEEEEE, 0x262626, 0xA, 0x262626, "OK")).onTouch = function()
|
||||
for file in fs.list(MineOSCore.paths.trash) do
|
||||
fs.remove(MineOSCore.paths.trash .. file)
|
||||
end
|
||||
container:delete()
|
||||
MineOSCore.OSMainContainer.updateAndDraw()
|
||||
end
|
||||
|
||||
container.panel.onTouch = function()
|
||||
container:delete()
|
||||
MineOSCore.OSMainContainer:draw()
|
||||
buffer.draw()
|
||||
end
|
||||
|
||||
MineOSCore.OSMainContainer:draw()
|
||||
buffer.draw()
|
||||
end
|
||||
menu:show()
|
||||
end
|
||||
|
||||
MineOSCore.OSMainContainer.dockContainer:addChild(icon)
|
||||
end
|
||||
|
||||
-- Отрисовка дока
|
||||
local function createDock()
|
||||
MineOSCore.OSMainContainer.dockContainer = MineOSCore.OSMainContainer:addChild(GUI.container(1, 1, MineOSCore.OSMainContainer.width, sizes.heightOfDock))
|
||||
|
||||
-- Отрисовка дока
|
||||
local oldDraw = MineOSCore.OSMainContainer.dockContainer.draw
|
||||
MineOSCore.OSMainContainer.dockContainer.draw = function(dockContainer)
|
||||
local currentDockTransparency, currentDockWidth, xPos, yPos = colors.dockBaseTransparency, dockContainer.width, dockContainer.x, dockContainer.y + 2
|
||||
local color = MineOSCore.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()
|
||||
currentDesktop = 1
|
||||
@ -425,12 +329,22 @@ local function changeResolution()
|
||||
MineOSCore.OSMainContainer.iconField.localPosition.x = math.floor(MineOSCore.OSMainContainer.width / 2 - (MineOSCore.OSMainContainer.iconField.iconCount.width * (MineOSCore.iconWidth + sizes.xSpaceBetweenIcons) - sizes.xSpaceBetweenIcons) / 2)
|
||||
MineOSCore.OSMainContainer.iconField.localPosition.y = 3
|
||||
|
||||
MineOSCore.OSMainContainer.dockContainer.localPosition.y = MineOSCore.OSMainContainer.height - sizes.heightOfDock + 1
|
||||
|
||||
MineOSCore.OSMainContainer.menu.width = MineOSCore.OSMainContainer.width
|
||||
MineOSCore.OSMainContainer.background.width, MineOSCore.OSMainContainer.background.height = MineOSCore.OSMainContainer.width, MineOSCore.OSMainContainer.height
|
||||
|
||||
MineOSCore.OSMainContainer.windowsContainer.width, MineOSCore.OSMainContainer.windowsContainer.height = MineOSCore.OSMainContainer.width, MineOSCore.OSMainContainer.height - 1
|
||||
end
|
||||
|
||||
local function moveDockIcon(index, direction)
|
||||
MineOSCore.OSMainContainer.dockContainer.children[index], MineOSCore.OSMainContainer.dockContainer.children[index + direction] = MineOSCore.OSMainContainer.dockContainer.children[index + direction], MineOSCore.OSMainContainer.dockContainer.children[index]
|
||||
MineOSCore.OSMainContainer.dockContainer.sort()
|
||||
MineOSCore.OSMainContainer.dockContainer.saveToOSSettings()
|
||||
MineOSCore.OSMainContainer:draw()
|
||||
buffer.draw()
|
||||
end
|
||||
|
||||
local function createOSWindow()
|
||||
MineOSCore.OSMainContainer = GUI.fullScreenContainer()
|
||||
|
||||
@ -459,17 +373,148 @@ local function createOSWindow()
|
||||
sizes.xSpaceBetweenIcons,
|
||||
sizes.ySpaceBetweenIcons,
|
||||
0xFFFFFF,
|
||||
MineOSCore.OSSettings.showExtension or true,
|
||||
MineOSCore.OSSettings.showHiddenFiles or true,
|
||||
MineOSCore.OSSettings.showExtension,
|
||||
MineOSCore.OSSettings.showHiddenFiles,
|
||||
MineOSCore.OSSettings.sortingMethod or "type",
|
||||
"/",
|
||||
0xFFFFFF
|
||||
)
|
||||
)
|
||||
|
||||
createDock()
|
||||
-- Dock
|
||||
MineOSCore.OSMainContainer.dockContainer = MineOSCore.OSMainContainer:addChild(GUI.container(1, 1, MineOSCore.OSMainContainer.width, sizes.heightOfDock))
|
||||
MineOSCore.OSMainContainer.dockContainer.saveToOSSettings = function()
|
||||
MineOSCore.OSSettings.dockShortcuts = {}
|
||||
for i = 1, #MineOSCore.OSMainContainer.dockContainer.children do
|
||||
if MineOSCore.OSMainContainer.dockContainer.children[i].keepInDock then
|
||||
table.insert(MineOSCore.OSSettings.dockShortcuts, MineOSCore.OSMainContainer.dockContainer.children[i].path)
|
||||
end
|
||||
end
|
||||
MineOSCore.saveOSSettings()
|
||||
end
|
||||
MineOSCore.OSMainContainer.dockContainer.sort = function()
|
||||
local x = 1
|
||||
for i = 1, #MineOSCore.OSMainContainer.dockContainer.children do
|
||||
MineOSCore.OSMainContainer.dockContainer.children[i].localPosition.x = x
|
||||
x = x + MineOSCore.iconWidth + sizes.xSpaceBetweenIcons
|
||||
end
|
||||
|
||||
MineOSCore.OSMainContainer.dockContainer.width = (#MineOSCore.OSMainContainer.dockContainer.children) * (MineOSCore.iconWidth + sizes.xSpaceBetweenIcons) - sizes.xSpaceBetweenIcons
|
||||
MineOSCore.OSMainContainer.dockContainer.localPosition.x = math.floor(MineOSCore.OSMainContainer.width / 2 - MineOSCore.OSMainContainer.dockContainer.width / 2)
|
||||
end
|
||||
|
||||
MineOSCore.OSMainContainer.dockContainer.addIcon = function(path, window)
|
||||
local icon = MineOSCore.OSMainContainer.dockContainer:addChild(MineOSCore.createIcon(1, 1, path, 0x262626, MineOSCore.OSSettings.showExtension, 0xFFFFFF))
|
||||
icon:moveBackward()
|
||||
icon.window = window
|
||||
|
||||
icon.onLeftClick = function(icon, eventData)
|
||||
if icon.window then
|
||||
icon.window.hidden = false
|
||||
icon.window:moveToFront()
|
||||
else
|
||||
MineOSCore.iconLeftClick(icon, eventData)
|
||||
end
|
||||
end
|
||||
|
||||
icon.onRightClick = function(icon, eventData)
|
||||
local indexOf = icon:indexOf()
|
||||
|
||||
local menu = GUI.contextMenu(eventData[3], eventData[4])
|
||||
menu:addItem(MineOSCore.localization.contextMenuShowContainingFolder).onTouch = function()
|
||||
table.insert(workpathHistory, fs.path(icon.path))
|
||||
changeWorkpath(#workpathHistory)
|
||||
MineOSCore.OSMainContainer.updateAndDraw()
|
||||
end
|
||||
menu:addSeparator()
|
||||
menu:addItem(MineOSCore.localization.contextMenuMoveRight, indexOf >= #MineOSCore.OSMainContainer.dockContainer.children - 1).onTouch = function()
|
||||
moveDockIcon(indexOf, 1)
|
||||
end
|
||||
menu:addItem(MineOSCore.localization.contextMenuMoveLeft, indexOf <= 1).onTouch = function()
|
||||
moveDockIcon(indexOf, -1)
|
||||
end
|
||||
menu:addSeparator()
|
||||
if icon.keepInDock then
|
||||
if #MineOSCore.OSMainContainer.dockContainer.children > 1 then
|
||||
menu:addItem(MineOSCore.localization.contextMenuRemoveFromDock).onTouch = function()
|
||||
if icon.window then
|
||||
icon.keepInDock = nil
|
||||
else
|
||||
icon:delete()
|
||||
MineOSCore.OSMainContainer.dockContainer.sort()
|
||||
end
|
||||
MineOSCore.OSMainContainer.dockContainer.saveToOSSettings()
|
||||
MineOSCore.OSMainContainer:draw()
|
||||
buffer.draw()
|
||||
end
|
||||
end
|
||||
else
|
||||
if icon.window then
|
||||
menu:addItem(MineOSCore.localization.keepInDock).onTouch = function()
|
||||
icon.keepInDock = true
|
||||
MineOSCore.OSMainContainer.dockContainer.saveToOSSettings()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
menu:show()
|
||||
end
|
||||
|
||||
MineOSCore.OSMainContainer.dockContainer.sort()
|
||||
|
||||
return icon
|
||||
end
|
||||
|
||||
-- Trash
|
||||
local icon = MineOSCore.OSMainContainer.dockContainer.addIcon(MineOSCore.paths.trash)
|
||||
icon.image = MineOSCore.icons.trash
|
||||
icon.onRightClick = function(icon, eventData)
|
||||
local menu = GUI.contextMenu(eventData[3], eventData[4])
|
||||
menu:addItem(MineOSCore.localization.emptyTrash).onTouch = function()
|
||||
local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.areYouSure)
|
||||
|
||||
container.layout:addChild(GUI.button(1, 1, 30, 3, 0xEEEEEE, 0x262626, 0xA, 0x262626, "OK")).onTouch = function()
|
||||
for file in fs.list(MineOSCore.paths.trash) do
|
||||
fs.remove(MineOSCore.paths.trash .. file)
|
||||
end
|
||||
container:delete()
|
||||
MineOSCore.OSMainContainer.updateAndDraw()
|
||||
end
|
||||
|
||||
container.panel.onTouch = function()
|
||||
container:delete()
|
||||
MineOSCore.OSMainContainer:draw()
|
||||
buffer.draw()
|
||||
end
|
||||
|
||||
MineOSCore.OSMainContainer:draw()
|
||||
buffer.draw()
|
||||
end
|
||||
menu:show()
|
||||
end
|
||||
|
||||
for i = 1, #MineOSCore.OSSettings.dockShortcuts do
|
||||
MineOSCore.OSMainContainer.dockContainer.addIcon(MineOSCore.OSSettings.dockShortcuts[i]).keepInDock = true
|
||||
end
|
||||
|
||||
MineOSCore.OSMainContainer.dockContainer.draw = function(dockContainer)
|
||||
local color, currentDockTransparency, currentDockWidth, xPos, yPos = MineOSCore.OSSettings.interfaceColor or colors.interface, colors.dockBaseTransparency, dockContainer.width, dockContainer.x, dockContainer.y + 2
|
||||
|
||||
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
|
||||
|
||||
GUI.drawContainerContent(dockContainer)
|
||||
end
|
||||
|
||||
-- Windows
|
||||
MineOSCore.OSMainContainer.windowsContainer = MineOSCore.OSMainContainer:addChild(GUI.container(1, 2, 1, 1))
|
||||
|
||||
-- Menu
|
||||
MineOSCore.OSMainContainer.menu = MineOSCore.OSMainContainer:addChild(GUI.menu(1, 1, MineOSCore.OSMainContainer.width, MineOSCore.OSSettings.interfaceColor or colors.interface, 0x444444, 0x3366CC, 0xFFFFFF, colors.topBarTransparency))
|
||||
local item1 = MineOSCore.OSMainContainer.menu:addItem("MineOS", 0x000000)
|
||||
item1.onTouch = function()
|
||||
@ -640,7 +685,6 @@ local function createOSWindow()
|
||||
MineOSCore.OSMainContainer.update = function()
|
||||
MineOSCore.OSMainContainer.iconField.fromFile = (currentDesktop - 1) * MineOSCore.OSMainContainer.iconField.iconCount.total + 1
|
||||
MineOSCore.OSMainContainer.iconField:updateFileList()
|
||||
updateDock()
|
||||
updateDesktopCounters()
|
||||
end
|
||||
|
||||
@ -715,12 +759,13 @@ while true do
|
||||
if success then
|
||||
break
|
||||
else
|
||||
createOSWindow()
|
||||
changeResolution()
|
||||
MineOSCore.OSMainContainer.windowsContainer:deleteChildren()
|
||||
-- MineOSCore.OSMainContainer:draw()
|
||||
-- buffer.draw()
|
||||
changeWorkpath(1)
|
||||
changeWallpaper()
|
||||
MineOSCore.OSMainContainer.updateAndDraw()
|
||||
|
||||
-- MineOSCore.showErrorWindow(path, line, traceback)
|
||||
MineOSCore.showErrorWindow(path, line, traceback)
|
||||
|
||||
MineOSCore.OSMainContainer:draw()
|
||||
buffer.draw()
|
||||
|
||||
10
lib/GUI.lua
10
lib/GUI.lua
@ -169,14 +169,16 @@ local function containerObjectMoveForward(object)
|
||||
if objectIndex < #object.parent.children then
|
||||
object.parent.children[index], object.parent.children[index + 1] = swap(object.parent.children[index], object.parent.children[index + 1])
|
||||
end
|
||||
return object
|
||||
end
|
||||
|
||||
-- Move container's object "more far out" of our eyes
|
||||
local function containerObjectMoveBackward(object)
|
||||
local objectIndex = object:indexOf()
|
||||
if objectIndex > 1 then
|
||||
object.parent.children[index], object.parent.children[index - 1] = swap(object.parent.children[index], object.parent.children[index - 1])
|
||||
object.parent.children[objectIndex], object.parent.children[objectIndex - 1] = swap(object.parent.children[objectIndex], object.parent.children[objectIndex - 1])
|
||||
end
|
||||
return object
|
||||
end
|
||||
|
||||
-- Move container's object to front of all objects
|
||||
@ -184,6 +186,7 @@ local function containerObjectMoveToFront(object)
|
||||
local objectIndex = object:indexOf()
|
||||
table.insert(object.parent.children, object)
|
||||
table.remove(object.parent.children, objectIndex)
|
||||
return object
|
||||
end
|
||||
|
||||
-- Move container's object to back of all objects
|
||||
@ -191,6 +194,7 @@ local function containerObjectMoveToBack(object)
|
||||
local objectIndex = object:indexOf()
|
||||
table.insert(object.parent.children, 1, object)
|
||||
table.remove(object.parent.children, objectIndex + 1)
|
||||
return object
|
||||
end
|
||||
|
||||
local function containerGetFirstParent(object)
|
||||
@ -210,7 +214,7 @@ local function selfDelete(object)
|
||||
end
|
||||
|
||||
-- Add any object as children to parent container
|
||||
function GUI.addChildToContainer(container, object)
|
||||
function GUI.addChildToContainer(container, object, atIndex)
|
||||
object.indexOf = containerObjectIndexOf
|
||||
object.moveToFront = containerObjectMoveToFront
|
||||
object.moveToBack = containerObjectMoveToBack
|
||||
@ -2195,7 +2199,7 @@ end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
buffer.start()
|
||||
-- buffer.start()
|
||||
|
||||
-- local mainContainer = GUI.fullScreenContainer()
|
||||
-- mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0xFF8888))
|
||||
|
||||
@ -202,6 +202,14 @@ function MineOSCore.init()
|
||||
MineOSCore.loadStandartIcons()
|
||||
end
|
||||
|
||||
function MineOSCore.clearTerminal()
|
||||
gpu.setBackground(0x1D1D1D)
|
||||
gpu.setForeground(0xFFFFFF)
|
||||
local width, height = gpu.getResolution()
|
||||
gpu.fill(1, 1, width, height, " ")
|
||||
require("term").setCursor(1, 1)
|
||||
end
|
||||
|
||||
function MineOSCore.waitForPressingAnyKey()
|
||||
print(" ")
|
||||
print(MineOSCore.localization.pressAnyKeyToContinue)
|
||||
@ -228,7 +236,7 @@ local function launchEditor(icon)
|
||||
end
|
||||
|
||||
local function launchLua(icon)
|
||||
ecs.prepareToExit()
|
||||
MineOSCore.clearTerminal()
|
||||
if MineOSCore.safeLaunch(icon.path) then
|
||||
MineOSCore.waitForPressingAnyKey()
|
||||
end
|
||||
@ -261,14 +269,14 @@ function MineOSCore.analyzeIconExtension(icon)
|
||||
if icon.isDirectory then
|
||||
if icon.extension == ".app" then
|
||||
if MineOSCore.showApplicationIcons then
|
||||
icon.iconImage.image = image.load(icon.path .. "/Resources/Icon.pic")
|
||||
icon.image = image.load(icon.path .. "/Resources/Icon.pic")
|
||||
else
|
||||
icon.iconImage.image = MineOSCore.icons.application
|
||||
icon.image = MineOSCore.icons.application
|
||||
end
|
||||
|
||||
icon.launch = launchApp
|
||||
else
|
||||
icon.iconImage.image = MineOSCore.icons.folder
|
||||
icon.image = MineOSCore.icons.folder
|
||||
icon.launch = launchDirectory
|
||||
end
|
||||
else
|
||||
@ -285,34 +293,34 @@ function MineOSCore.analyzeIconExtension(icon)
|
||||
iconImage = icon.iconImage
|
||||
})
|
||||
|
||||
icon.iconImage.image = shortcutIcon.iconImage.image
|
||||
icon.image = shortcutIcon.image
|
||||
icon.shortcutLaunch = shortcutIcon.launch
|
||||
icon.launch = launchLnk
|
||||
|
||||
shortcutIcon = nil
|
||||
elseif icon.extension == ".cfg" or icon.extension == ".config" then
|
||||
icon.iconImage.image = MineOSCore.icons.config
|
||||
icon.image = MineOSCore.icons.config
|
||||
icon.launch = launchEditor
|
||||
elseif icon.extension == ".txt" or icon.extension == ".rtf" then
|
||||
icon.iconImage.image = MineOSCore.icons.text
|
||||
icon.image = MineOSCore.icons.text
|
||||
icon.launch = launchEditor
|
||||
elseif icon.extension == ".lua" then
|
||||
icon.iconImage.image = MineOSCore.icons.lua
|
||||
icon.image = MineOSCore.icons.lua
|
||||
icon.launch = launchLua
|
||||
elseif icon.extension == ".pic" or icon.extension == ".png" then
|
||||
icon.iconImage.image = MineOSCore.icons.image
|
||||
icon.image = MineOSCore.icons.image
|
||||
icon.launch = launchImage
|
||||
elseif icon.extension == ".pkg" then
|
||||
icon.iconImage.image = MineOSCore.icons.archive
|
||||
icon.image = MineOSCore.icons.archive
|
||||
icon.launch = launchPackage
|
||||
elseif icon.extension == ".3dm" then
|
||||
icon.iconImage.image = MineOSCore.icons.model3D
|
||||
icon.image = MineOSCore.icons.model3D
|
||||
icon.launch = launch3DPrint
|
||||
elseif not fs.exists(icon.path) then
|
||||
icon.iconImage.image = MineOSCore.icons.fileNotExists
|
||||
icon.image = MineOSCore.icons.fileNotExists
|
||||
icon.launch = launchCorrupted
|
||||
else
|
||||
icon.iconImage.image = MineOSCore.icons.script
|
||||
icon.image = MineOSCore.icons.script
|
||||
icon.launch = launchLua
|
||||
end
|
||||
end
|
||||
@ -326,9 +334,38 @@ function MineOSCore.getParametersForDrawingIcons(fieldWidth, fieldHeight, xSpace
|
||||
return xCountOfIcons, yCountOfIcons, totalCountOfIcons
|
||||
end
|
||||
|
||||
function MineOSCore.createIcon(x, y, path, textColor, showExtension, selectionColor)
|
||||
local icon = GUI.container(x, y, MineOSCore.iconWidth, MineOSCore.iconHeight)
|
||||
local function iconDraw(icon)
|
||||
if icon.isSelected then
|
||||
buffer.square(icon.x, icon.y, icon.width, icon.height, icon.colors.selection, 0x000000, " ", 50)
|
||||
end
|
||||
|
||||
buffer.image(icon.x + 2, icon.y, icon.image)
|
||||
|
||||
local text
|
||||
if icon.showExtension then
|
||||
text = string.limit(fs.name(icon.path), icon.width, "center")
|
||||
else
|
||||
text = string.limit(fs.hideExtension(fs.name(icon.path)), icon.width, "center")
|
||||
end
|
||||
|
||||
buffer.text(math.floor(icon.x + icon.width / 2 - unicode.len(text) / 2), icon.y + icon.height - 1, icon.colors.text, text)
|
||||
|
||||
if icon.isShortcut then
|
||||
buffer.set(icon.x + 9, icon.y + 3, 0xFFFFFF, 0x000000, "<")
|
||||
end
|
||||
|
||||
if icon.window then
|
||||
buffer.text(icon.x + 5, icon.y + 4, 0x66DBFF, "╺╸")
|
||||
end
|
||||
end
|
||||
|
||||
function MineOSCore.createIcon(x, y, path, textColor, showExtension, selectionColor)
|
||||
local icon = GUI.object(x, y, MineOSCore.iconWidth, MineOSCore.iconHeight)
|
||||
|
||||
icon.colors = {
|
||||
text = textColor,
|
||||
selection = selectionColor,
|
||||
}
|
||||
icon.path = path
|
||||
icon.size = fs.size(icon.path)
|
||||
icon.isDirectory = fs.isDirectory(icon.path)
|
||||
@ -337,27 +374,14 @@ function MineOSCore.createIcon(x, y, path, textColor, showExtension, selectionCo
|
||||
icon.isShortcut = false
|
||||
icon.isSelected = false
|
||||
|
||||
icon.iconImage = icon:addChild(GUI.image(3, 1, {8, 4}))
|
||||
icon.textLabel = icon:addChild(GUI.label(1, MineOSCore.iconHeight, MineOSCore.iconWidth, 1, textColor, fs.name(icon.path))):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top)
|
||||
|
||||
local oldDraw = icon.draw
|
||||
icon.draw = function(icon)
|
||||
if icon.isSelected then buffer.square(icon.x, icon.y, icon.width, icon.height, selectionColor, 0x000000, " ", 50) end
|
||||
if icon.showExtension then
|
||||
icon.textLabel.text = string.limit(fs.name(icon.path), icon.textLabel.width, "center")
|
||||
else
|
||||
icon.textLabel.text = string.limit(fs.hideExtension(fs.name(icon.path)), icon.textLabel.width, "center")
|
||||
end
|
||||
oldDraw(icon)
|
||||
if icon.isShortcut then buffer.set(icon.iconImage.x + icon.iconImage.width - 1, icon.iconImage.y + icon.iconImage.height - 1, 0xFFFFFF, 0x000000, "<") end
|
||||
end
|
||||
icon.draw = iconDraw
|
||||
|
||||
-- Поддержка изменяемых извне функций правого и левого кликов
|
||||
icon.onLeftClick = MineOSCore.iconLeftClick
|
||||
icon.onRightClick = MineOSCore.iconRightClick
|
||||
|
||||
-- Обработка клика непосредственно на иконку
|
||||
icon.iconImage.eventHandler = function(mainContainer, object, eventData)
|
||||
icon.eventHandler = function(mainContainer, object, eventData)
|
||||
if eventData[1] == "touch" then
|
||||
icon.isSelected = true
|
||||
MineOSCore.OSDraw()
|
||||
@ -505,8 +529,6 @@ function MineOSCore.showErrorWindow(path, errorLine, reason)
|
||||
local success, reason = component.internet.request(url)
|
||||
if success then
|
||||
success:close()
|
||||
else
|
||||
ecs.error(reason)
|
||||
end
|
||||
|
||||
sendToDeveloperButton.text = MineOSCore.localization.sendedFeedback
|
||||
@ -582,7 +604,6 @@ function MineOSCore.safeLaunch(path, ...)
|
||||
|
||||
component.screen.setPrecise(false)
|
||||
buffer.setResolution(oldResolutionWidth, oldResolutionHeight)
|
||||
MineOSCore.OSDraw()
|
||||
|
||||
if not finalSuccess then
|
||||
MineOSCore.showErrorWindow(finalPath, finalLine, finalTraceback)
|
||||
@ -594,6 +615,7 @@ end
|
||||
-----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
function MineOSCore.iconLeftClick(icon, eventData)
|
||||
MineOSCore.lastLaunchPath = icon.path
|
||||
icon:launch()
|
||||
computer.pushSignal("MineOSCore", "updateFileList")
|
||||
end
|
||||
@ -609,26 +631,24 @@ function MineOSCore.iconRightClick(icon, eventData)
|
||||
{MineOSCore.localization.contextMenuCut},
|
||||
{MineOSCore.localization.contextMenuCopy},
|
||||
{MineOSCore.localization.contextMenuRename},
|
||||
{MineOSCore.localization.contextMenuDelete},
|
||||
{MineOSCore.localization.contextMenuCreateShortcut, icon.extension == ".lnk"},
|
||||
"-",
|
||||
{MineOSCore.localization.contextMenuArchive},
|
||||
{MineOSCore.localization.contextMenuAddToDock},
|
||||
"-",
|
||||
{MineOSCore.localization.contextMenuProperties},
|
||||
{MineOSCore.localization.contextMenuDelete}
|
||||
{MineOSCore.localization.contextMenuAddToDock},
|
||||
{MineOSCore.localization.contextMenuProperties}
|
||||
):show()
|
||||
else
|
||||
action = GUI.contextMenu(eventData[3], eventData[4],
|
||||
{MineOSCore.localization.contextMenuCut},
|
||||
{MineOSCore.localization.contextMenuCopy},
|
||||
{MineOSCore.localization.contextMenuRename},
|
||||
{MineOSCore.localization.contextMenuDelete},
|
||||
{MineOSCore.localization.contextMenuCreateShortcut, icon.extension == ".lnk"},
|
||||
"-",
|
||||
{MineOSCore.localization.contextMenuArchive},
|
||||
{MineOSCore.localization.contextMenuAddToDock},
|
||||
"-",
|
||||
{MineOSCore.localization.contextMenuProperties},
|
||||
{MineOSCore.localization.contextMenuDelete}
|
||||
{MineOSCore.localization.contextMenuAddToDock},
|
||||
{MineOSCore.localization.contextMenuProperties}
|
||||
):show()
|
||||
end
|
||||
else
|
||||
@ -640,10 +660,10 @@ function MineOSCore.iconRightClick(icon, eventData)
|
||||
{MineOSCore.localization.contextMenuCut},
|
||||
{MineOSCore.localization.contextMenuCopy},
|
||||
{MineOSCore.localization.contextMenuRename},
|
||||
{MineOSCore.localization.contextMenuDelete},
|
||||
"-",
|
||||
{MineOSCore.localization.contextMenuAddToDock},
|
||||
{MineOSCore.localization.contextMenuProperties},
|
||||
{MineOSCore.localization.contextMenuDelete}
|
||||
{MineOSCore.localization.contextMenuProperties}
|
||||
):show()
|
||||
elseif icon.extension == ".pic" then
|
||||
action = GUI.contextMenu(eventData[3], eventData[4],
|
||||
@ -652,31 +672,26 @@ function MineOSCore.iconRightClick(icon, eventData)
|
||||
{MineOSCore.localization.contextMenuCut},
|
||||
{MineOSCore.localization.contextMenuCopy},
|
||||
{MineOSCore.localization.contextMenuRename},
|
||||
{MineOSCore.localization.contextMenuDelete},
|
||||
{MineOSCore.localization.contextMenuCreateShortcut, icon.extension == ".lnk"},
|
||||
"-",
|
||||
-- {MineOSCore.localization.contextMenuArchive},
|
||||
{MineOSCore.localization.contextMenuAddToDock},
|
||||
"-",
|
||||
{MineOSCore.localization.contextMenuProperties},
|
||||
{MineOSCore.localization.contextMenuDelete}
|
||||
{MineOSCore.localization.contextMenuProperties}
|
||||
):show()
|
||||
elseif icon.extension == ".lua" then
|
||||
action = GUI.contextMenu(eventData[3], eventData[4],
|
||||
{MineOSCore.localization.contextMenuEdit},
|
||||
{MineOSCore.localization.launchWithArguments},
|
||||
{MineOSCore.localization.contextMenuFlashEEPROM, (not component.isAvailable("eeprom") or icon.size > 4096)},
|
||||
"-",
|
||||
{MineOSCore.localization.contextMenuCut},
|
||||
{MineOSCore.localization.contextMenuCopy},
|
||||
{MineOSCore.localization.contextMenuRename},
|
||||
{MineOSCore.localization.contextMenuDelete},
|
||||
{MineOSCore.localization.contextMenuCreateShortcut, icon.extension == ".lnk"},
|
||||
-- "-",
|
||||
-- {MineOSCore.localization.contextMenuUploadToPastebin, true},
|
||||
"-",
|
||||
-- {MineOSCore.localization.contextMenuArchive},
|
||||
{MineOSCore.localization.contextMenuAddToDock},
|
||||
"-",
|
||||
{MineOSCore.localization.contextMenuProperties},
|
||||
{MineOSCore.localization.contextMenuDelete}
|
||||
{MineOSCore.localization.contextMenuProperties}
|
||||
):show()
|
||||
else
|
||||
action = GUI.contextMenu(eventData[3], eventData[4],
|
||||
@ -685,13 +700,11 @@ function MineOSCore.iconRightClick(icon, eventData)
|
||||
{MineOSCore.localization.contextMenuCut},
|
||||
{MineOSCore.localization.contextMenuCopy},
|
||||
{MineOSCore.localization.contextMenuRename},
|
||||
{MineOSCore.localization.contextMenuDelete},
|
||||
{MineOSCore.localization.contextMenuCreateShortcut, icon.extension == ".lnk"},
|
||||
"-",
|
||||
-- {MineOSCore.localization.contextMenuArchive},
|
||||
{MineOSCore.localization.contextMenuAddToDock},
|
||||
"-",
|
||||
{MineOSCore.localization.contextMenuProperties},
|
||||
{MineOSCore.localization.contextMenuDelete}
|
||||
{MineOSCore.localization.contextMenuProperties}
|
||||
):show()
|
||||
end
|
||||
end
|
||||
@ -746,9 +759,10 @@ function MineOSCore.iconRightClick(icon, eventData)
|
||||
file:close()
|
||||
computer.beep(1500, 0.2)
|
||||
elseif action == MineOSCore.localization.contextMenuAddToDock then
|
||||
table.insert(MineOSCore.OSSettings.dockShortcuts, {path = icon.path})
|
||||
MineOSCore.saveOSSettings()
|
||||
computer.pushSignal("MineOSCore", "updateFileList")
|
||||
MineOSCore.OSMainContainer.dockContainer.addIcon(icon.path).keepInDock = true
|
||||
MineOSCore.OSMainContainer.dockContainer.saveToOSSettings()
|
||||
elseif action == MineOSCore.localization.launchWithArguments then
|
||||
MineOSCore.launchWithArguments(MineOSCore.OSMainContainer, icon.path)
|
||||
end
|
||||
end
|
||||
|
||||
@ -796,7 +810,14 @@ local function addUniversalContainerWithInputTextBoxes(parentWindow, path, text,
|
||||
|
||||
container.inputTextBox = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, text, placeholder, false))
|
||||
container.label = container.layout:addChild(GUI.label(1, 1, 36, 3, 0xFF4940, " ")):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top)
|
||||
|
||||
container.panel.eventHandler = function(mainContainer, object, eventData)
|
||||
if eventData[1] == "touch" then
|
||||
container:delete()
|
||||
mainContainer:draw()
|
||||
buffer.draw()
|
||||
end
|
||||
end
|
||||
|
||||
parentWindow:draw()
|
||||
buffer.draw()
|
||||
|
||||
@ -867,6 +888,27 @@ function MineOSCore.rename(parentWindow, path)
|
||||
end
|
||||
end
|
||||
|
||||
function MineOSCore.launchWithArguments(parentWindow, path)
|
||||
local container = addUniversalContainerWithInputTextBoxes(parentWindow, path, nil, MineOSCore.localization.launchWithArguments)
|
||||
|
||||
container.inputTextBox.onInputFinished = function()
|
||||
local args = {}
|
||||
if container.inputTextBox.text then
|
||||
for arg in container.inputTextBox.text:gmatch("[^%s]+") do
|
||||
table.insert(args, arg)
|
||||
end
|
||||
end
|
||||
container:delete()
|
||||
|
||||
MineOSCore.clearTerminal()
|
||||
if MineOSCore.safeLaunch(path, table.unpack(args)) then
|
||||
MineOSCore.waitForPressingAnyKey()
|
||||
end
|
||||
|
||||
MineOSCore.OSDraw(true)
|
||||
end
|
||||
end
|
||||
|
||||
function MineOSCore.applicationHelp(parentWindow, path)
|
||||
local pathToAboutFile = path .. "/resources/About/" .. MineOSCore.OSSettings.language .. ".txt"
|
||||
if MineOSCore.OSSettings.showHelpOnApplicationStart and fs.exists(pathToAboutFile) then
|
||||
@ -927,47 +969,69 @@ local function windowResize(window, width, height)
|
||||
return window
|
||||
end
|
||||
|
||||
local function windowMinimize(window)
|
||||
window.localPosition.x, window.localPosition.y = window.oldGeometry.x, window.oldGeometry.y
|
||||
window:resize(window.oldGeometry.width, window.oldGeometry.height)
|
||||
MineOSCore.OSDraw()
|
||||
end
|
||||
|
||||
local function windowMaximize(window)
|
||||
window.localPosition.x, window.localPosition.y = 1, 1
|
||||
if window.width ~= window.parent.width or window.height ~= window.parent.height then
|
||||
window.oldGeometry.x, window.oldGeometry.y, window.oldGeometry.width, window.oldGeometry.height = window.localPosition.x, window.localPosition.y, window.width, window.height
|
||||
window:resize(window.parent.width, window.parent.height)
|
||||
end
|
||||
MineOSCore.OSDraw()
|
||||
end
|
||||
|
||||
local function windowClose(window)
|
||||
window:delete()
|
||||
MineOSCore.OSDraw()
|
||||
end
|
||||
|
||||
function MineOSCore.addWindow(window)
|
||||
window.x = window.x or math.floor(MineOSCore.OSMainContainer.windowsContainer.width / 2 - window.width / 2)
|
||||
window.y = window.y or math.floor(MineOSCore.OSMainContainer.windowsContainer.height / 2 - window.height / 2)
|
||||
|
||||
MineOSCore.OSMainContainer.windowsContainer:addChild(window)
|
||||
|
||||
|
||||
-- Dock
|
||||
local dockPath = MineOSCore.lastLaunchPath or "/lib/MineOSCore.lua"
|
||||
MineOSCore.lastLaunchPath = nil
|
||||
|
||||
local dockIcon
|
||||
for i = 1, #MineOSCore.OSMainContainer.dockContainer.children do
|
||||
if MineOSCore.OSMainContainer.dockContainer.children[i].path == dockPath then
|
||||
dockIcon = MineOSCore.OSMainContainer.dockContainer.children[i]
|
||||
break
|
||||
end
|
||||
end
|
||||
dockIcon = dockIcon or MineOSCore.OSMainContainer.dockContainer.addIcon(dockPath, window)
|
||||
dockIcon.window = dockIcon.window or window
|
||||
|
||||
window.resize = windowResize
|
||||
window.onResize = onWindowResize
|
||||
window.close = windowClose
|
||||
window.close = function(window)
|
||||
local sameIconExists = false
|
||||
for i = 1, #MineOSCore.OSMainContainer.dockContainer.children do
|
||||
if MineOSCore.OSMainContainer.dockContainer.children[i].path == dockPath and MineOSCore.OSMainContainer.dockContainer.children[i].window and MineOSCore.OSMainContainer.dockContainer.children[i].window ~= window then
|
||||
sameIconExists = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not sameIconExists then
|
||||
dockIcon.window = nil
|
||||
if not dockIcon.keepInDock then
|
||||
dockIcon:delete()
|
||||
MineOSCore.OSMainContainer.dockContainer.sort()
|
||||
end
|
||||
end
|
||||
|
||||
window:delete()
|
||||
MineOSCore.OSDraw()
|
||||
end
|
||||
|
||||
window.maximize = function(window)
|
||||
window.localPosition.x, window.localPosition.y = 1, 1
|
||||
window:resize(window.parent.width, window.parent.height)
|
||||
MineOSCore.OSDraw()
|
||||
end
|
||||
|
||||
window.minimize = function(window)
|
||||
window.hidden = true
|
||||
MineOSCore.OSDraw()
|
||||
end
|
||||
|
||||
if window.actionButtons then
|
||||
window.oldGeometry = {x = window.x, y = window.y, width = window.width, height = window.height}
|
||||
|
||||
window.actionButtons.close.onTouch = function()
|
||||
windowClose(window)
|
||||
window.close(window)
|
||||
end
|
||||
window.actionButtons.maximize.onTouch = function()
|
||||
windowMaximize(window)
|
||||
window.maximize(window)
|
||||
end
|
||||
window.actionButtons.minimize.onTouch = function()
|
||||
windowMinimize(window)
|
||||
window.minimize(window)
|
||||
end
|
||||
end
|
||||
|
||||
@ -985,7 +1049,7 @@ function MineOSCore.propertiesWindow(x, y, width, icon)
|
||||
local mainContainer, window = MineOSCore.addWindow(GUI.titledWindow(x, y, width, 1, package.loaded.MineOSCore.localization.contextMenuProperties))
|
||||
|
||||
window.backgroundPanel.colors.transparency = 25
|
||||
window:addChild(GUI.image(2, 3, icon.iconImage.image))
|
||||
window:addChild(GUI.image(2, 3, icon.image))
|
||||
|
||||
local x, y = 11, 3
|
||||
addKeyAndValue(window, x, y, package.loaded.MineOSCore.localization.type, icon.extension and icon.extension or (icon.isDirectory and package.loaded.MineOSCore.localization.folder or package.loaded.MineOSCore.localization.unknown)); y = y + 1
|
||||
@ -996,6 +1060,7 @@ function MineOSCore.propertiesWindow(x, y, width, icon)
|
||||
local lines = string.wrap(icon.path, window.width - 18)
|
||||
local textBox = window:addChild(GUI.textBox(17, y, window.width - 18, #lines, nil, 0x555555, lines, 1))
|
||||
window:resize(window.width, textBox.y + textBox.height)
|
||||
textBox.eventHandler = nil
|
||||
|
||||
mainContainer:draw()
|
||||
buffer.draw()
|
||||
|
||||
@ -410,6 +410,23 @@ function table.size(t)
|
||||
return size
|
||||
end
|
||||
|
||||
function table.contains(t, object)
|
||||
for key in pairs(t) do
|
||||
if t[key] == object then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function table.indexOf(t, object)
|
||||
for i = 1, #t do
|
||||
if t[i] == object then
|
||||
return i
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------- String extensions --------------------------------------------------
|
||||
|
||||
function string.readUnicodeChar(file)
|
||||
|
||||
@ -121,6 +121,7 @@ function palette.window(x, y, startColor)
|
||||
buffer.draw()
|
||||
end
|
||||
end
|
||||
window.bigCrest.eventHandler = window.bigRainbow.eventHandler
|
||||
|
||||
window.miniRainbow = window:addChild(GUI.image(53, 1, image.create(3, 25)))
|
||||
window.miniCrest = window:addChild(GUI.object(52, 1, 5, 1))
|
||||
|
||||
@ -97,7 +97,7 @@ function web.downloadMineOSApplication(application, language)
|
||||
|
||||
local file, reason = io.open(path, "w")
|
||||
if file then
|
||||
file:write("return \"" .. application.path .. ".app" .. "\"")
|
||||
file:write("return \"" .. application.path .. ".app/" .. "\"")
|
||||
file:close()
|
||||
else
|
||||
print(reason)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user