Параметры обоев, улучшенное текстовое поле

This commit is contained in:
Igor Timofeev 2017-06-04 11:39:42 +03:00
parent c2dc372b77
commit 030605c2f0
15 changed files with 446 additions and 440 deletions

View File

@ -5,7 +5,7 @@
about="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/MineOS/About/",
type="Script",
forceDownload=true,
version=3.64,
version=3.65,
},
{
path="/MineOS/Pictures/MoonTouch.pic",
@ -72,14 +72,14 @@
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/MineOS/Localization/Russian.lang",
type="Script",
forceDownload=true,
version=1.26,
version=1.27,
},
{
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.26,
version=1.27,
},
----------------------------------------------------- Системные иконки --------------------------------------------------------------------------
@ -204,7 +204,7 @@
path="/lib/MineOSCore.lua",
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/MineOSCore.lua",
type="Library",
version=1.68,
version=1.69,
},
{
path="/lib/advancedLua.lua",
@ -264,7 +264,7 @@
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/GUI.lua",
type="Library",
preloadFile=true,
version=1.60,
version=1.61,
},
{
path="/lib/rayEngine.lua",
@ -324,7 +324,7 @@
path="/lib/palette.lua",
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/palette.lua",
type="Library",
version=1.14,
version=1.15,
},
{
path="/lib/doubleBuffering.lua",
@ -449,7 +449,7 @@
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/MineCodeIDE/Icon.pic",
createShortcut="dock",
forceDownload=true,
version=1.73,
version=1.74,
resources={
{
path="/Localization/Russian.lang",
@ -477,7 +477,7 @@
type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/GeoScan2/Icon.pic",
createShortcut="desktop",
version=1.07,
version=1.08,
resources={
{
path="/Earth.pic",
@ -492,7 +492,7 @@
type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/VK/Icon.pic",
createShortcut="desktop",
version=1.30,
version=1.31,
resources={
{
path="/VKLogo.pic",
@ -570,7 +570,7 @@
type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/RayWalk/Icon.pic",
createShortcut="desktop",
version=1.64,
version=1.65,
resources={
{
path="/Localization/Russian.lang",
@ -693,7 +693,7 @@
type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/PrintImage/Icon.pic",
createShortcut="desktop",
version=1.11,
version=1.12,
},
{
path="/MineOS/Applications/Palette",
@ -709,7 +709,7 @@
type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/Stargate/Icon.pic",
createShortcut="desktop",
version=1.07,
version=1.08,
resources={
{
path="/Ch1.pic",
@ -853,7 +853,7 @@
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/AppMarket/Icon.pic",
createShortcut="dock",
forceDownload=true,
version=1.60,
version=1.61,
resources={
{
path="/Update.pic",

View File

@ -141,7 +141,7 @@ local function displayApps(fromPage, typeFilter, nameFilter, updateCheck)
return
end
else
window.contentContainer.searchInputTextBox = window.contentContainer:addChild(GUI.inputTextBox(math.floor(window.contentContainer.width / 2 - 10), y, 20, 1, 0xEEEEEE, 0xAAAAAA, 0xEEEEEE, 0x3C3C3C, nil, localization.search, true))
window.contentContainer.searchInputTextBox = window.contentContainer:addChild(GUI.inputField(math.floor(window.contentContainer.width / 2 - 10), y, 20, 1, 0xEEEEEE, 0x444444, 0xAAAAAA, 0xEEEEEE, 0x2D2D2D, nil, localization.search, true))
window.contentContainer.searchInputTextBox.onInputFinished = function()
if window.contentContainer.searchInputTextBox.text then
displayApps(1, typeFilter, window.contentContainer.searchInputTextBox.text)

View File

@ -132,9 +132,9 @@ objectY = objectY + 4
mainContainer:addChild(GUI.label(buttonX, objectY, buttonWidth, 1, 0xFFFFFF, "Rendering properties")):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top)
objectY = objectY + 2
mainContainer.minimumHardnessTextBox = mainContainer:addChild(GUI.inputTextBox(buttonX, objectY, 12, 3, 0x262626, 0xBBBBBB, 0x262626, 0xFFFFFF, tostring(2.7), nil, true))
mainContainer.minimumHardnessTextBox = mainContainer:addChild(GUI.inputField(buttonX, objectY, 12, 3, 0x262626, 0xBBBBBB, 0xBBBBBB, 0x262626, 0xFFFFFF, tostring(2.7), nil, true))
mainContainer.minimumHardnessTextBox.validator = function(text) if tonumber(text) then return true end end
mainContainer.maximumHardnessTextBox = mainContainer:addChild(GUI.inputTextBox(buttonX + 14, objectY, 12, 3, 0x262626, 0xBBBBBB, 0x262626, 0xFFFFFF, tostring(10), nil, true))
mainContainer.maximumHardnessTextBox = mainContainer:addChild(GUI.inputField(buttonX + 14, objectY, 12, 3, 0x262626, 0xBBBBBB, 0xBBBBBB, 0x262626, 0xFFFFFF, tostring(10), nil, true))
mainContainer.maximumHardnessTextBox.validator = function(text) if tonumber(text) then return true end end
objectY = objectY + 3
mainContainer:addChild(GUI.label(buttonX, objectY, buttonWidth, 1, 0xBBBBBB, "Hardness min Hardness max")):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top)

View File

@ -283,7 +283,7 @@ local function calculateSizes()
mainContainer.bottomToolBar.localPosition.y = mainContainer.height - 2
mainContainer.bottomToolBar.findButton.localPosition.x = mainContainer.bottomToolBar.width - mainContainer.bottomToolBar.findButton.width + 1
mainContainer.bottomToolBar.inputTextBox.width = mainContainer.bottomToolBar.width - mainContainer.bottomToolBar.inputTextBox.localPosition.x - mainContainer.bottomToolBar.findButton.width + 1
mainContainer.bottomToolBar.inputField.width = mainContainer.bottomToolBar.width - mainContainer.bottomToolBar.inputField.localPosition.x - mainContainer.bottomToolBar.findButton.width + 1
mainContainer.topToolBar.width, mainContainer.topToolBar.backgroundPanel.width = mainContainer.width, mainContainer.width
mainContainer.titleTextBox.width = math.floor(mainContainer.topToolBar.width * 0.32)
@ -626,22 +626,22 @@ local function changeResolutionWindow()
local textBoxWidth, x, y = math.floor(textBoxesWidth / 2), math.floor(mainContainer.width / 2 - textBoxesWidth / 2), math.floor(mainContainer.height / 2) - 3
mainContainer.settingsContainer:addChild(GUI.label(1, y, mainContainer.width, 1, 0xFFFFFF, localization.changeResolution)):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top); y = y + 3
local inputTextBoxWidth = mainContainer.settingsContainer:addChild(GUI.inputTextBox(x, y, textBoxWidth, 3, 0xCCCCCC, 0x777777, 0xCCCCCC, 0x2D2D2D, tostring(config.screenResolution.width))); x = x + textBoxWidth + 2
local inputTextBoxHeight = mainContainer.settingsContainer:addChild(GUI.inputTextBox(x, y, textBoxWidth, 3, 0xCCCCCC, 0x777777, 0xCCCCCC, 0x2D2D2D, tostring(config.screenResolution.height)))
local inputFieldWidth = mainContainer.settingsContainer:addChild(GUI.inputField(x, y, textBoxWidth, 3, 0xCCCCCC, 0x777777, 0x777777, 0xCCCCCC, 0x2D2D2D, tostring(config.screenResolution.width))); x = x + textBoxWidth + 2
local inputFieldHeight = mainContainer.settingsContainer:addChild(GUI.inputField(x, y, textBoxWidth, 3, 0xCCCCCC, 0x777777, 0x777777, 0xCCCCCC, 0x2D2D2D, tostring(config.screenResolution.height)))
local maxResolutionWidth, maxResolutionHeight = component.gpu.maxResolution()
inputTextBoxWidth.validator = function(text)
inputFieldWidth.validator = function(text)
local number = tonumber(text)
if number and number >= 1 and number <= maxResolutionWidth then return true end
end
inputTextBoxHeight.validator = function(text)
inputFieldHeight.validator = function(text)
local number = tonumber(text)
if number and number >= 1 and number <= maxResolutionHeight then return true end
end
mainContainer.settingsContainer.backgroundPanel.eventHandler = function(mainContainer, object, eventData)
if eventData[1] == "touch" then
config.screenResolution.width, config.screenResolution.height = tonumber(inputTextBoxWidth.text), tonumber(inputTextBoxHeight.text)
config.screenResolution.width, config.screenResolution.height = tonumber(inputFieldWidth.text), tonumber(inputFieldHeight.text)
saveConfig()
hideSettingsContainer()
changeResolution(config.screenResolution.width, config.screenResolution.height)
@ -655,10 +655,10 @@ local function createInputTextBoxForSettingsWindow(title, placeholder, onInputFi
local x, y = math.floor(mainContainer.width / 2 - textBoxWidth / 2), math.floor(mainContainer.height / 2) - 3
mainContainer.settingsContainer:addChild(GUI.label(1, y, mainContainer.width, 1, 0xFFFFFF, title)):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top); y = y + 3
mainContainer.settingsContainer.inputTextBox = mainContainer.settingsContainer:addChild(GUI.inputTextBox(x, y, textBoxWidth, 3, 0xCCCCCC, 0x777777, 0xCCCCCC, 0x2D2D2D, "", placeholder))
mainContainer.settingsContainer.inputField = mainContainer.settingsContainer:addChild(GUI.inputField(x, y, textBoxWidth, 3, 0xCCCCCC, 0x777777, 0x777777, 0xCCCCCC, 0x2D2D2D, "", placeholder))
mainContainer.settingsContainer.inputTextBox.validator = validatorMethod
mainContainer.settingsContainer.inputTextBox.onInputFinished = function(...)
mainContainer.settingsContainer.inputField.validator = validatorMethod
mainContainer.settingsContainer.inputField.onInputFinished = function(...)
onInputFinishedMethod(...)
hideSettingsContainer()
end
@ -704,10 +704,10 @@ end
local function gotoLineWindow()
createInputTextBoxForSettingsWindow(localization.gotoLine, localization.lineNumber,
function()
gotoLine(tonumber(mainContainer.settingsContainer.inputTextBox.text))
gotoLine(tonumber(mainContainer.settingsContainer.inputField.text))
end,
function()
if mainContainer.settingsContainer.inputTextBox.text:match("%d+") then return true end
if mainContainer.settingsContainer.inputField.text:match("%d+") then return true end
end
)
end
@ -715,10 +715,10 @@ end
local function openFileWindow()
createInputTextBoxForSettingsWindow(localization.openFile, localization.pathToFile,
function()
loadFile(mainContainer.settingsContainer.inputTextBox.text)
loadFile(mainContainer.settingsContainer.inputField.text)
end,
function()
if fs.exists(mainContainer.settingsContainer.inputTextBox.text) then return true end
if fs.exists(mainContainer.settingsContainer.inputField.text) then return true end
end
)
end
@ -726,8 +726,8 @@ end
local function saveFileAsWindow()
createInputTextBoxForSettingsWindow(localization.saveAs, localization.pathToFile,
function()
saveFile(mainContainer.settingsContainer.inputTextBox.text)
mainContainer.leftTreeView.currentFile = mainContainer.settingsContainer.inputTextBox.text
saveFile(mainContainer.settingsContainer.inputField.text)
mainContainer.leftTreeView.currentFile = mainContainer.settingsContainer.inputField.text
if unicode.sub(mainContainer.leftTreeView.currentFile, 1, 1) ~= "/" then
mainContainer.leftTreeView.currentFile = "/" .. mainContainer.leftTreeView.currentFile
end
@ -763,7 +763,7 @@ end
local function downloadFileFromWeb()
createInputTextBoxForSettingsWindow(localization.getFromWeb, localization.url,
function()
local result, reason = web.request(mainContainer.settingsContainer.inputTextBox.text)
local result, reason = web.request(mainContainer.settingsContainer.inputField.text)
if result then
newFile()
mainContainer.codeView.lines, mainContainer.codeView.maximumLineLength = splitStringIntoLines(result)
@ -1226,11 +1226,11 @@ local function updateRAMProgressBar()
end
local function find()
if not mainContainer.bottomToolBar.hidden and mainContainer.bottomToolBar.inputTextBox.text ~= "" then
if not mainContainer.bottomToolBar.hidden and mainContainer.bottomToolBar.inputField.text ~= "" then
findStartFrom = findStartFrom + 1
for line = findStartFrom, #mainContainer.codeView.lines do
local whereToFind, whatToFind = mainContainer.codeView.lines[line], mainContainer.bottomToolBar.inputTextBox.text
local whereToFind, whatToFind = mainContainer.codeView.lines[line], mainContainer.bottomToolBar.inputField.text
if not mainContainer.bottomToolBar.caseSensitiveButton.pressed then
whereToFind, whatToFind = unicode.lower(whereToFind), unicode.lower(whatToFind)
end
@ -1268,7 +1268,7 @@ local function toggleBottomToolBar()
if not mainContainer.bottomToolBar.hidden then
mainContainer:draw()
mainContainer.bottomToolBar.inputTextBox:input()
mainContainer.bottomToolBar.inputField:startInput()
findFromFirstDisplayedLine()
end
end
@ -1450,12 +1450,12 @@ local function createMainContainer()
local elementWidth = math.floor(mainContainer.width * 0.3)
local x, y = math.floor(mainContainer.width / 2 - elementWidth / 2), math.floor(mainContainer.height / 2) - 7
mainContainer.settingsContainer:addChild(GUI.label(1, y, mainContainer.settingsContainer.width, 1, 0xFFFFFF, localization.cursorProperties)):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top); y = y + 3
local inputTextBox = mainContainer.settingsContainer:addChild(GUI.inputTextBox(x, y, elementWidth, 3, 0xCCCCCC, 0x777777, 0xCCCCCC, 0x2D2D2D, config.cursorSymbol, localization.cursorSymbol)); y = y + 5
inputTextBox.validator = function(text)
local inputField = mainContainer.settingsContainer:addChild(GUI.inputField(x, y, elementWidth, 3, 0xCCCCCC, 0x777777, 0x777777, 0xCCCCCC, 0x2D2D2D, config.cursorSymbol, localization.cursorSymbol)); y = y + 5
inputField.validator = function(text)
if unicode.len(text) == 1 then return true end
end
inputTextBox.onInputFinished = function()
config.cursorSymbol = inputTextBox.text; saveConfig()
inputField.onInputFinished = function()
config.cursorSymbol = inputField.text; saveConfig()
end
local colorSelector = mainContainer.settingsContainer:addChild(GUI.colorSelector(x, y, elementWidth, 3, config.cursorColor, localization.cursorColor)); y = y + 5
colorSelector.onTouch = function()
@ -1578,8 +1578,8 @@ local function createMainContainer()
mainContainer.bottomToolBar.onTouch = function()
find()
end
mainContainer.bottomToolBar.inputTextBox = mainContainer.bottomToolBar:addChild(GUI.inputTextBox(7, 1, 10, 3, 0xCCCCCC, 0x999999, 0xCCCCCC, 0x2D2D2D, "", localization.findSomeShit))
mainContainer.bottomToolBar.inputTextBox.onInputFinished = function()
mainContainer.bottomToolBar.inputField = mainContainer.bottomToolBar:addChild(GUI.inputField(7, 1, 10, 3, 0xCCCCCC, 0x999999, 0x999999, 0xCCCCCC, 0x2D2D2D, "", localization.findSomeShit))
mainContainer.bottomToolBar.inputField.onInputFinished = function()
findFromFirstDisplayedLine()
end
mainContainer.bottomToolBar.findButton = mainContainer.bottomToolBar:addChild(GUI.adaptiveButton(1, 1, 3, 1, 0x3C3C3C, 0xEEEEEE, 0xBBBBBB, 0x2D2D2D, localization.find))

View File

@ -196,7 +196,7 @@ local function createWindow()
y = y + 2
mainContainer.shadeContainer:addChild(GUI.label(3, y, mainContainer.shadeContainer.width, 1, 0xCCCCCC, "Image path:"))
mainContainer.shadeContainer:addChild(GUI.inputTextBox(mainContainer.shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0xEEEEEE, 0x262626, startImagePath, nil, true)).validator = function(text)
mainContainer.shadeContainer:addChild(GUI.inputField(mainContainer.shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0x555555, 0xEEEEEE, 0x262626, startImagePath, nil, true)).validator = function(text)
if text and fs.exists(text) then
if unicode.sub(text, -4, -1) == ".pic" then
mainImage = image.load(text)
@ -212,7 +212,7 @@ local function createWindow()
y = y + 2
mainContainer.shadeContainer:addChild(GUI.label(3, y, mainContainer.shadeContainer.width, 1, 0xCCCCCC, "Material:"))
local mainMaterialTextBox = mainContainer.shadeContainer:addChild(GUI.inputTextBox(mainContainer.shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0xEEEEEE, 0x262626, config.mainMaterial, nil, false))
local mainMaterialTextBox = mainContainer.shadeContainer:addChild(GUI.inputField(mainContainer.shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0x555555, 0xEEEEEE, 0x262626, config.mainMaterial, nil, false))
mainMaterialTextBox.onInputFinished = function()
config.mainMaterial = mainMaterialTextBox.text
save()
@ -220,7 +220,7 @@ local function createWindow()
y = y + 2
mainContainer.shadeContainer:addChild(GUI.label(3, y, mainContainer.shadeContainer.width, 1, 0xCCCCCC, "Print name:"))
local printNameTextBox = mainContainer.shadeContainer:addChild(GUI.inputTextBox(mainContainer.shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0xEEEEEE, 0x262626, config.printName, nil, false))
local printNameTextBox = mainContainer.shadeContainer:addChild(GUI.inputField(mainContainer.shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0x555555, 0xEEEEEE, 0x262626, config.printName, nil, false))
printNameTextBox.onInputFinished = function()
config.printName = printNameTextBox.text
save()
@ -254,7 +254,7 @@ local function createWindow()
end
y = y + 2
mainContainer.shadeContainer:addChild(GUI.label(3, y, mainContainer.shadeContainer.width, 1, 0xCCCCCC, "Material:"))
local frameMaterialTextBox = mainContainer.shadeContainer:addChild(GUI.inputTextBox(mainContainer.shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0xEEEEEE, 0x262626, config.frame.material, nil, false))
local frameMaterialTextBox = mainContainer.shadeContainer:addChild(GUI.inputField(mainContainer.shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0x555555, 0xEEEEEE, 0x262626, config.frame.material, nil, false))
frameMaterialTextBox.onInputFinished = function()
config.frame.material = frameMaterialTextBox.text
save()

View File

@ -37,13 +37,17 @@ local function settings()
window:addChild(GUI.label(1, y, window.width, 1, 0xFFFFFF, localization.rayEngineProperties)):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top); y = y + 3
local resolutionTextBoxWidth = window:addChild(GUI.inputTextBox(x, y, textBoxWidth, 3, 0x262626, 0xBBBBBB, 0x262626, 0xFFFFFF, tostring(buffer.width), nil, true))
local resolutionTextBoxWidth = window:addChild(GUI.inputField(x, y, textBoxWidth, 3, 0x262626, 0xBBBBBB, 0xBBBBBB, 0x262626, 0xFFFFFF, tostring(buffer.width), nil, true))
window:addChild(GUI.label(x + textBoxWidth + 2, y + 1, 1, 1, 0xFFFFFF, "X"))
local resolutionTextBoxHeight = window:addChild(GUI.inputTextBox(x + textBoxWidth + 5, y, textBoxWidth, 3, 0x262626, 0xBBBBBB, 0x262626, 0xFFFFFF, tostring(buffer.height), nil, true)); y = y + 4
local resolutionTextBoxHeight = window:addChild(GUI.inputField(x + textBoxWidth + 5, y, textBoxWidth, 3, 0x262626, 0xBBBBBB, 0xBBBBBB, 0x262626, 0xFFFFFF, tostring(buffer.height), nil, true)); y = y + 4
window:addChild(GUI.label(1, y, window.width, 1, 0xDDDDDD, localization.screenResolution)):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top); y = y + 3
resolutionTextBoxWidth.validator = function(text) local num = tonumber(text); if num and num >= 40 and num <= 160 then return true end end
resolutionTextBoxHeight.validator = function(text) local num = tonumber(text); if num and num >= 12 and num <= 50 then return true end end
local function onAnyResolutionTextBoxInputFinished() window:stopEventHandling(); rayEngine.changeResolution(tonumber(resolutionTextBoxWidth.text), tonumber(resolutionTextBoxHeight.text)); settings() end
local function onAnyResolutionTextBoxInputFinished()
window:stopEventHandling()
rayEngine.changeResolution(tonumber(resolutionTextBoxWidth.text), tonumber(resolutionTextBoxHeight.text))
settings()
end
resolutionTextBoxWidth.onInputFinished = onAnyResolutionTextBoxInputFinished
resolutionTextBoxHeight.onInputFinished = onAnyResolutionTextBoxInputFinished

View File

@ -158,11 +158,11 @@ mainContainer.connectionButton = mainContainer:addChild(GUI.framedButton(x, y, w
mainContainer.connectionButton.onTouch = function()
if stargate.stargateState() == "Idle" then
local container = MineOSCore.addUniversalContainer(mainContainer, "Connect")
local inputTextBox = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, contacts.last, "Type address here"))
inputTextBox.onInputFinished = function()
if inputTextBox.text then
dial(inputTextBox.text)
contacts.last = inputTextBox.text
local inputField = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0x666666, 0xEEEEEE, 0x262626, contacts.last, "Type address here"))
inputField.onInputFinished = function()
if inputField.text then
dial(inputField.text)
contacts.last = inputField.text
saveContacts()
container:delete()
@ -172,7 +172,7 @@ mainContainer.connectionButton.onTouch = function()
end
container.panel.eventHandler = function()
inputTextBox.onInputFinished()
inputField.onInputFinished()
end
mainContainer:draw()
@ -194,11 +194,11 @@ end
mainContainer.messageContactButton = mainContainer:addChild(GUI.framedButton(x, y, width, 3, 0xEEEEEE, 0xEEEEEE, 0xBBBBBB, 0xBBBBBB, "Message")); y = y + 4
mainContainer.messageContactButton.onTouch = function()
local container = MineOSCore.addUniversalContainer(mainContainer, "Message")
local inputTextBox = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, nil, "Type message text here"))
inputTextBox.onInputFinished = function()
if inputTextBox.text then
local inputField = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0x666666, 0xEEEEEE, 0x262626, nil, "Type message text here"))
inputField.onInputFinished = function()
if inputField.text then
container:delete()
stargate.sendMessage(inputTextBox.text)
stargate.sendMessage(inputField.text)
mainContainer:draw()
buffer.draw()
@ -206,7 +206,7 @@ mainContainer.messageContactButton.onTouch = function()
end
container.panel.eventHandler = function()
inputTextBox.onInputFinished()
inputField.onInputFinished()
end
mainContainer:draw()
@ -226,21 +226,21 @@ end
mainContainer.addContactButton = mainContainer:addChild(GUI.framedButton(x, y, width, 3, 0xEEEEEE, 0xEEEEEE, 0xBBBBBB, 0xBBBBBB, "Add contact")); y = y + 3
mainContainer.addContactButton.onTouch = function()
local container = MineOSCore.addUniversalContainer(mainContainer, "Add contact")
local inputTextBox1 = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, nil, "Name"))
local inputTextBox2 = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, contacts.last, "Address"))
local inputField1 = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0x666666, 0xEEEEEE, 0x262626, nil, "Name"))
local inputField2 = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0x666666, 0xEEEEEE, 0x262626, contacts.last, "Address"))
container.panel.eventHandler = function(mainContainer, object, eventData)
if eventData[1] == "touch" then
if inputTextBox1.text and inputTextBox2.text then
if inputField1.text and inputField2.text then
local exists = false
for i = 1, #contacts do
if contacts[i].address == inputTextBox2.text then
if contacts[i].address == inputField2.text then
exists = true
break
end
end
if not exists then
table.insert(contacts, {name = inputTextBox1.text, address = inputTextBox2.text})
table.insert(contacts, {name = inputField1.text, address = inputField2.text})
updateContacts()
saveContacts()
end

View File

@ -319,8 +319,8 @@ local function loginGUI(startUsername, startPassword)
obj.button = GUI.button(x, y, textFieldWidth, textFieldHeight, buttonColor, 0xEEEEEE, 0xEEEEEE, buttonColor, "Войти")
local VKLogoImage = image.load(VKLogoImagePath)
local loginTextBox = GUI.inputTextBox(x, obj.username[2], textFieldWidth, 3, 0xEEEEEE, 0x777777, 0xEEEEEE, 0x262626, username, "E-Mail", false)
local passwordTextBox = GUI.inputTextBox(x, obj.password[2], textFieldWidth, 3, 0xEEEEEE, 0x777777, 0xEEEEEE, 0x262626, password, "Password", false, "*")
local loginTextBox = GUI.inputField(x, obj.username[2], textFieldWidth, 3, 0xEEEEEE, 0x777777, 0x777777, 0xEEEEEE, 0x262626, username, "E-Mail", false)
local passwordTextBox = GUI.inputField(x, obj.password[2], textFieldWidth, 3, 0xEEEEEE, 0x777777, 0x777777, 0xEEEEEE, 0x262626, password, "Password", false, "*")
local function draw()
buffer.clear(colors.loginGUIBackground)
@ -446,7 +446,7 @@ end
local function drawMessageInputBar(currentText)
local x, y = mainZoneX, buffer.height - 5
buffer.square(x, y, mainZoneWidth, 5, colors.messageInputBarColor)
obj.messageInputBar = GUI.inputTextBox(x + 2, y + 1, mainZoneWidth - 4, 3, 0xFFFFFF, 0x444444, 0xFFFFFF, 0x262626, "", "Введите сообщение", true)
obj.messageInputBar = GUI.inputField(x + 2, y + 1, mainZoneWidth - 4, 3, 0xFFFFFF, 0x444444, 0x444444, 0x444444, 0xFFFFFF, 0x262626, "", "Введите сообщение", true)
obj.messageInputBar:draw()
end

View File

@ -403,7 +403,7 @@ mainContainer:startEventHandling()
![Imgur](http://i.imgur.com/4Hl5G7l.png?1)
GUI.**inputTextBox**( x, y, width, height, backgroundColor, textColor, backgroundFocusedColor, textFocusedColor, text, [placeholderText, eraseTextOnFocus, textMask, highlightLuaSyntax, autocompleteVariables] ): *table* inputTextBox
GUI.**inputField**( x, y, width, height, backgroundColor, textColor, placeholderTextColor, backgroundFocusedColor, textFocusedColor, text, [placeholderText, eraseTextOnFocus, textMask ): *table* inputField
------------------------------------------------------------------------
| Тип | Аргумент | Описание |
| ------ | ------ | ------ |
@ -411,23 +411,23 @@ GUI.**inputTextBox**( x, y, width, height, backgroundColor, textColor, backgroun
| *int* | y | Координата объекта по оси y |
| *int* | width | Ширина объекта |
| *int* | height | Высота объекта |
| *int* | backgroundColor | Цвет поля ввода |
| *int* | textColor | Цвет текста поля ввода |
| *int* | backgroundFocusedColor | Цвет поля ввода в состоянии *focused* |
| *int* | textFocusedColor |Цвет текста поля ввода в состоянии *focused* |
| *int* | backgroundColor | Цвет фона |
| *int* | textColor | Цвет текста |
| *int* | placeholderTextColor | Цвет текста *placeholder* при условии, что он указан ниже |
| *int* | backgroundFocusedColor | Цвет фона в состоянии *focused* |
| *int* | textFocusedColor |Цвет текста в состоянии *focused* |
| *string* | text | Введенный на момент создания поля текст |
| [*string* | placeholderText] | Текст, появляющийся при условии, что *text* == nil |
| [*string* | placeholderText] | Текст, появляющийся при условии, что введенный текст отсутствует |
| [*boolean* | eraseTextOnFocus] | Необходимо ли удалять текст при активации ввода |
| [*string* | textMask] | Символ-маска для вводимого текста. Полезно для создания поля ввода пароля |
| [*boolean* | highlightLuaSyntax] | Режим подсветки синтаксиса Lua для вводимой строки. Цвет текста при этом игнорируется |
| [*boolean* | autocompleteVariables] | Режим автодополнения текстовых данных на основе поиска таковых переменных в оперативной памяти |
| [*char* | textMask] | Символ-маска для вводимого текста. Удобно для создания поля ввода пароля |
Создать объект типа "поле ввода текста", предназначенный для ввода и анализа текстовых данных с клавиатуры. Объект универсален и подходит как для создания простых форм для ввода логина/пароля, так и для сложных структур наподобие интерпретаторов команд. К примеру, окно *палитры* выше целиком и полностью основано на использовании этого объекта.
Создать объект, предназначенный для ввода и анализа текстовых данных с клавиатуры. Объект универсален и подходит как для создания простых форм для ввода логина/пароля, так и для сложных структур наподобие интерпретаторов команд. К примеру, окно *палитры* со скриншота в начале документации полностью основано на использовании этого объекта.
| Тип свойства | Свойство |Описание |
| ------ | ------ | ------ |
| *function* | :**startInput**()| Начать ввод в текстовое поле. Метод полезен, если хочется сразу сделать |
| *callback-function* | .**validator**( *string* text )| Метод, вызывающийся после окончания ввода текста в поле. Если возвращает *true*, то текст в текстовом поле меняется на введенный, в противном случае введенные данные игнорируются. К примеру, в данном методе удобно проверять, является ли введенная текстовая информация числом через *tonumber()* |
| *callback-function* | .**onInputFinished**( *string* text, *table* eventData )| Метод, вызываемый после ввода данных в обработчике событий |
| *callback-function* | .**onInputFinished**( *string* text, *table* eventData )| Метод, вызываемый после ввода данных в обработчике событий. Удобная штука, если хочется выполнить какие-либо действия сразу после ввода текста. Если у объекта имеется *validator*, и текст не прошел проверку через него, то *onInputFinished* вызван не будет. |
Пример реализации поля ввода:
@ -438,11 +438,16 @@ local GUI = require("GUI")
local mainContainer = GUI.fullScreenContainer()
mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x2D2D2D))
local inputTextBox = mainContainer:addChild(GUI.inputTextBox(2, 2, 32, 3, 0xEEEEEE, 0x555555, 0xEEEEEE, 0x2D2D2D, nil, "Type number here", true, nil, nil, nil))
inputTextBox.validator = function(text)
if tonumber(text) then return true end
local inputField = mainContainer:addChild(GUI.inputField(2, 2, 30, 3, 0xEEEEEE, 0x555555, 0x999999, 0xFFFFFF, 0x2D2D2D, "Hello world", "Placeholder text"))
inputField.validator = function(text)
if tonumber(text) then
GUI.error("It's a number!")
end
return true
end
inputTextBox.onInputFinished = function()
inputField.onInputFinished = function()
-- Do something when input finished
end
@ -453,9 +458,11 @@ mainContainer:startEventHandling()
Результат:
![Imgur](http://i.imgur.com/CNYHJKF.png?1)
![Imgur](http://i.imgur.com/8cUO1vy.png)
![Imgur](http://i.imgur.com/AdOIiXQ.png?1)
![Imgur](http://i.imgur.com/4jHPQfl.png)
![Imgur](http://i.imgur.com/PV0RQOq.png)
GUI.**slider**( x, y, width, primaryColor, secondaryColor, pipeColor, valueColor, minimumValue, maximumValue, value, [showCornerValues, currentValuePrefix, currentValuePostfix] ): *table* slider
------------------------------------------------------------------------
@ -1227,7 +1234,7 @@ layout:setCellPosition(3, 1, layout:addChild(GUI.adaptiveButton(1, 1, 3, 0, 0x33
mainContainer:draw()
buffer.draw()
end
-- В ячейке 3ч1 задаем горизонтальную ориентацию объектов, расстояние между ними в 2 пикселя, а также выравнивание по правому верхнему краю
-- В ячейке 3x1 задаем горизонтальную ориентацию объектов, расстояние между ними в 2 пикселя, а также выравнивание по правому верхнему краю
layout:setCellDirection(3, 1, GUI.directions.horizontal)
layout:setCellSpacing(3, 1, 2)
layout:setCellAlignment(3, 1, GUI.alignment.horizontal.right, GUI.alignment.vertical.bottom)

View File

@ -87,7 +87,12 @@
mineOSCreatorUsedMasterPassword = "The creator of this operating system has used Master-Password",
loginToSystem = "Login",
appearance = "Appearance",
wallpaperProperties = "Wallpaper properties",
colorScheme = "Color scheme",
wallpaperPath = "Path to wallpaper",
wallpaperModeStretch = "Stretch",
wallpaperModeCenter = "Center",
backgroundColor = "Background color",
interfaceColor = "Interface color",
screenResolution = "Screen resolution",

View File

@ -87,7 +87,12 @@
mineOSCreatorUsedMasterPassword = "Создатель операционной системы использовал мастер-ключ",
loginToSystem = "Вход в систему",
appearance = "Внешний вид",
wallpaperProperties = "Параметры обоев",
colorScheme = "Цветовая схема",
wallpaperPath = "Путь к обоям",
wallpaperModeStretch = "Растянуть",
wallpaperModeCenter = "По центру",
backgroundColor = "Цвет фона",
interfaceColor = "Цвет интерфейса",
screenResolution = "Разрешение экрана",

View File

@ -108,34 +108,36 @@ end
local function checkPassword()
local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.inputPassword)
local inputTextBox = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, nil, "Password", true, "*"))
local inputField = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0x666666, 0xEEEEEE, 0x262626, nil, nil, true, "*"))
local label = container.layout:addChild(GUI.label(1, 1, 36, 1, 0xFF4940, " ")):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top)
container.panel.eventHandler = function(mainContainer, object, eventData)
if eventData[1] == "touch" then
local hash = require("SHA2").hash(inputTextBox.text or "")
if hash == MineOSCore.OSSettings.passwordHash then
container:delete()
MineOSCore.OSMainContainer:draw()
buffer.draw()
elseif hash == "c925be318b0530650b06d7f0f6a51d8289b5925f1b4117a43746bc99f1f81bc1" then
GUI.error(MineOSCore.localization.mineOSCreatorUsedMasterPassword)
container:delete()
MineOSCore.OSMainContainer:draw()
buffer.draw()
else
label.text = MineOSCore.localization.incorrectPassword
MineOSCore.OSMainContainer:draw()
buffer.draw()
end
inputField.onInputFinished = function()
local hash = require("SHA2").hash(inputField.text or "")
if hash == MineOSCore.OSSettings.passwordHash then
container:delete()
MineOSCore.OSMainContainer:draw()
buffer.draw()
elseif hash == "c925be318b0530650b06d7f0f6a51d8289b5925f1b4117a43746bc99f1f81bc1" then
GUI.error(MineOSCore.localization.mineOSCreatorUsedMasterPassword)
container:delete()
MineOSCore.OSMainContainer:draw()
buffer.draw()
else
label.text = MineOSCore.localization.incorrectPassword
MineOSCore.OSMainContainer:draw()
buffer.draw()
end
end
MineOSCore.OSMainContainer:draw()
buffer.draw()
inputField:startInput()
end
local function setPassword()
local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.passwordProtection)
local inputTextBox1 = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, nil, MineOSCore.localization.inputPassword, true, "*"))
local inputTextBox2 = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, nil, MineOSCore.localization.confirmInputPassword, true, "*"))
local inputField1 = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0x666666, 0xEEEEEE, 0x262626, nil, MineOSCore.localization.inputPassword, true, "*"))
local inputField2 = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0x666666, 0xEEEEEE, 0x262626, nil, MineOSCore.localization.confirmInputPassword, true, "*"))
local label = container.layout:addChild(GUI.label(1, 1, 36, 1, 0xFF4940, " ")):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top)
MineOSCore.OSMainContainer:draw()
@ -143,11 +145,11 @@ local function setPassword()
container.panel.eventHandler = function(mainContainer, object, eventData)
if eventData[1] == "touch" then
if inputTextBox1.text == inputTextBox2.text then
if inputField1.text == inputField2.text then
container:delete()
MineOSCore.OSSettings.protectionMethod = "password"
MineOSCore.OSSettings.passwordHash = require("SHA2").hash(inputTextBox1.text or "")
MineOSCore.OSSettings.passwordHash = require("SHA2").hash(inputField1.text or "")
MineOSCore.saveOSSettings()
else
label.text = MineOSCore.localization.passwordsAreDifferent
@ -167,7 +169,7 @@ end
local function setProtectionMethod()
local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.protectYourComputer)
local comboBox = container.layout:addChild(GUI.comboBox(1, 1, 36, 3, 0xEEEEEE, 0x262626, 0x666666, 0xEEEEEE))
comboBox:addItem(MineOSCore.localization.biometricProtection)
comboBox:addItem(MineOSCore.localization.passwordProtection)
@ -263,7 +265,14 @@ end
local function changeWallpaper()
if MineOSCore.OSSettings.wallpaper and fs.exists(MineOSCore.OSSettings.wallpaper) then
MineOSCore.OSMainContainer.background.wallpaper = image.transform(image.load(MineOSCore.OSSettings.wallpaper), MineOSCore.OSMainContainer.width, MineOSCore.OSMainContainer.height)
MineOSCore.OSMainContainer.background.wallpaper = image.load(MineOSCore.OSSettings.wallpaper)
if MineOSCore.OSSettings.wallpaperMode == 1 then
MineOSCore.OSMainContainer.background.wallpaper = image.transform(MineOSCore.OSMainContainer.background.wallpaper, MineOSCore.OSMainContainer.width, MineOSCore.OSMainContainer.height)
MineOSCore.OSMainContainer.background.wallpaperPosition.x, MineOSCore.OSMainContainer.background.wallpaperPosition.y = 1, 1
else
MineOSCore.OSMainContainer.background.wallpaperPosition.x = math.floor(MineOSCore.OSMainContainer.width / 2 - image.getWidth(MineOSCore.OSMainContainer.background.wallpaper) / 2)
MineOSCore.OSMainContainer.background.wallpaperPosition.y = math.floor(MineOSCore.OSMainContainer.height / 2 - image.getHeight(MineOSCore.OSMainContainer.background.wallpaper) / 2)
end
else
MineOSCore.OSMainContainer.background.wallpaper = nil
end
@ -348,12 +357,12 @@ end
local function createOSWindow()
MineOSCore.OSMainContainer = GUI.fullScreenContainer()
MineOSCore.OSMainContainer.background = GUI.object(1, 1, 1, 1)
MineOSCore.OSMainContainer.background = MineOSCore.OSMainContainer:addChild(GUI.object(1, 1, 1, 1))
MineOSCore.OSMainContainer.background.wallpaperPosition = {x = 1, y = 1}
MineOSCore.OSMainContainer.background.draw = function(object)
buffer.square(object.x, object.y, object.width, object.height, MineOSCore.OSSettings.backgroundColor or colors.background, 0x0, " ")
if object.wallpaper then
buffer.image(object.x, object.y, object.wallpaper)
else
buffer.square(object.x, object.y, object.width, object.height, MineOSCore.OSSettings.backgroundColor or colors.background, 0x0, " ")
buffer.image(object.wallpaperPosition.x, object.wallpaperPosition.y, object.wallpaper)
end
end
MineOSCore.OSMainContainer.background.eventHandler = function(mainContainer, object, eventData)
@ -363,8 +372,7 @@ local function createOSWindow()
end
end
end
MineOSCore.OSMainContainer:addChild(MineOSCore.OSMainContainer.background)
MineOSCore.OSMainContainer.desktopCounters = MineOSCore.OSMainContainer:addChild(GUI.container(1, 1, 1, 1))
MineOSCore.OSMainContainer.iconField = MineOSCore.OSMainContainer:addChild(
@ -472,7 +480,7 @@ local function createOSWindow()
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)
@ -481,7 +489,7 @@ local function createOSWindow()
MineOSCore.OSMainContainer.updateAndDraw()
end
container.panel.onTouch = function()
container.panel.onTouch = function()
container:delete()
MineOSCore.OSMainContainer:draw()
buffer.draw()
@ -534,13 +542,13 @@ local function createOSWindow()
menu:addItem(MineOSCore.localization.shutdown).onTouch = function()
-- ecs.TV(0)
require("computer").shutdown()
end
end
menu:addSeparator()
menu:addItem(MineOSCore.localization.returnToShell).onTouch = function()
MineOSCore.OSMainContainer:stopEventHandling()
ecs.prepareToExit()
os.exit()
end
end
menu:show()
end
@ -585,7 +593,7 @@ local function createOSWindow()
menu:addSeparator()
menu:addItem(MineOSCore.localization.screensaver).onTouch = function()
local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.screensaver)
local comboBox = container.layout:addChild(GUI.comboBox(1, 1, 36, 3, 0xEEEEEE, 0x262626, 0x666666, 0xEEEEEE))
comboBox:addItem(MineOSCore.localization.screensaverDisabled)
for file in fs.list(screensaversPath) do
@ -611,25 +619,47 @@ local function createOSWindow()
end
end
end
menu:addItem(MineOSCore.localization.colorScheme).onTouch = function()
local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.colorScheme)
menu:addItem(MineOSCore.localization.appearance).onTouch = function()
local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.wallpaperProperties)
local inputField = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0x999999, 0xEEEEEE, 0x262626, MineOSCore.OSSettings.wallpaper, MineOSCore.localization.wallpaperPath, true))
local comboBox = container.layout:addChild(GUI.comboBox(1, 1, 36, 3, 0xEEEEEE, 0x262626, 0x666666, 0xEEEEEE))
comboBox.selectedItem = MineOSCore.OSSettings.wallpaperMode or 1
comboBox:addItem(MineOSCore.localization.wallpaperModeStretch)
comboBox:addItem(MineOSCore.localization.wallpaperModeCenter)
container.layout:addChild(GUI.label(1, 1, 36, 1, 0xEEEEEE, MineOSCore.localization.colorScheme)):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top)
local backgroundColorSelector = container.layout:addChild(GUI.colorSelector(1, 1, 36, 3, MineOSCore.OSSettings.backgroundColor or colors.background, MineOSCore.localization.backgroundColor))
local interfaceColorSelector = container.layout:addChild(GUI.colorSelector(1, 1, 36, 3, MineOSCore.OSSettings.interfaceColor or colors.interface, MineOSCore.localization.interfaceColor))
comboBox.onItemSelected = function()
MineOSCore.OSSettings.wallpaperMode = comboBox.selectedItem
MineOSCore.saveOSSettings()
changeWallpaper()
MineOSCore.OSMainContainer:draw()
buffer.draw()
end
inputField.onInputFinished = function()
MineOSCore.OSSettings.wallpaper = inputField.text
MineOSCore.saveOSSettings()
changeWallpaper()
MineOSCore.OSMainContainer:draw()
buffer.draw()
end
backgroundColorSelector.onTouch = function()
MineOSCore.OSSettings.backgroundColor, MineOSCore.OSSettings.interfaceColor = backgroundColorSelector.color, interfaceColorSelector.color
MineOSCore.OSMainContainer.menu.colors.default.background = MineOSCore.OSSettings.interfaceColor
MineOSCore.saveOSSettings()
MineOSCore.OSMainContainer:draw()
buffer.draw()
end
interfaceColorSelector.onTouch = backgroundColorSelector.onTouch
MineOSCore.OSMainContainer:draw()
buffer.draw()
container.panel.eventHandler = function(mainContainer, object, eventData)
if eventData[1] == "touch" then
container:delete()
@ -637,7 +667,11 @@ local function createOSWindow()
buffer.draw()
end
end
MineOSCore.OSMainContainer:draw()
buffer.draw()
end
menu:addItem(MineOSCore.localization.contextMenuRemoveWallpaper, not MineOSCore.OSMainContainer.background.wallpaper).onTouch = function()
MineOSCore.OSSettings.wallpaper = nil
MineOSCore.saveOSSettings()
@ -651,14 +685,14 @@ local function createOSWindow()
local menu = GUI.contextMenu(item3.x, item3.y + 1)
menu:addItem(MineOSCore.localization.screenResolution).onTouch = function()
local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.screenResolution)
local widthTextBox = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, tostring(MineOSCore.OSSettings.resolution and MineOSCore.OSSettings.resolution[1] or 160), "Width", true))
local widthTextBox = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0x666666, 0xEEEEEE, 0x262626, tostring(MineOSCore.OSSettings.resolution and MineOSCore.OSSettings.resolution[1] or 160), "Width", true))
widthTextBox.validator = function(text)
local number = tonumber(text)
if number then return number >= 1 and number <= 160 end
end
local heightTextBox = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, tostring(MineOSCore.OSSettings.resolution and MineOSCore.OSSettings.resolution[2] or 50), "Height", true))
local heightTextBox = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0x666666, 0xEEEEEE, 0x262626, tostring(MineOSCore.OSSettings.resolution and MineOSCore.OSSettings.resolution[2] or 50), "Height", true))
heightTextBox.validator = function(text)
local number = tonumber(text)
if number then return number >= 1 and number <= 50 end
@ -771,9 +805,3 @@ while true do
buffer.draw()
end
end

View File

@ -929,271 +929,6 @@ function GUI.error(...)
mainContainer:startEventHandling()
end
----------------------------------------- Universal keyboard-input function -----------------------------------------
local function findValue(t, whatToSearch)
if type(t) ~= "table" then return end
for key, value in pairs(t) do
if type(key) == "string" and string.match(key, "^" .. whatToSearch) then
local valueType, postfix = type(value), ""
if valueType == "function" or (valueType == "table" and getmetatable(value) and getmetatable(value).__call) then
postfix = "()"
elseif valueType == "table" then
postfix = "."
end
return key .. postfix
end
end
end
local function findTable(whereToSearch, t, whatToSearch)
local beforeFirstDot = string.match(whereToSearch, "^[^%.]+%.")
-- Если вообще есть таблица, где надо искать
if beforeFirstDot then
beforeFirstDot = unicode.sub(beforeFirstDot, 1, -2)
if t[beforeFirstDot] then
return findTable(unicode.sub(whereToSearch, unicode.len(beforeFirstDot) + 2, -1), t[beforeFirstDot], whatToSearch)
else
-- Кароч, слушай суда: вот в эту зону хуйня может зайти толька
-- тагда, кагда ты вручную ебенишь массив вида "abc.cda.blabla.test"
-- без автозаполнения, т.е. он МОЖЕТ быть неверным, однако прога все
-- равно проверяет на верность, и вот если НИ ХУЯ такого говнища типа
-- ... .blabla не существует, то интерхпретатор захуяривается СУДЫ
-- И ЧТОБ БОЛЬШЕ ВОПРОСОВ НЕ ЗАДАВАЛ!11!
end
-- Или если таблиц либо ваще нету, либо рекурсия суда вон вошла
else
return findValue(t[whereToSearch], whatToSearch)
end
end
local function autocompleteVariables(sourceText)
local varPath = string.match(sourceText, "[a-zA-Z0-9%.%_]+$")
if varPath then
local prefix = string.sub(sourceText, 1, -unicode.len(varPath) - 1)
local whereToSearch = string.match(varPath, "[a-zA-Z0-9%.%_]+%.")
if whereToSearch then
whereToSearch = unicode.sub(whereToSearch, 1, -2)
local findedTable = findTable(whereToSearch, _G, unicode.sub(varPath, unicode.len(whereToSearch) + 2, -1))
return findedTable and prefix .. whereToSearch .. "." .. findedTable or sourceText
else
local findedValue = findValue(_G, varPath)
return findedValue and prefix .. findedValue or sourceText
end
else
return sourceText
end
end
local function inputFieldDraw(inputField)
if inputField.x < 1 or inputField.y < 1 or inputField.x + inputField.width - 1 > buffer.width or inputField.y > buffer.height then return inputField end
if inputField.oldPixels then
buffer.paste(inputField.x, inputField.y, inputField.oldPixels)
else
inputField.oldPixels = buffer.copy(inputField.x, inputField.y, inputField.width, 1)
end
if inputField.highlightLuaSyntax then
require("syntax").highlightString(inputField.x, inputField.y, inputField.text, 2)
else
buffer.text(
inputField.x,
inputField.y,
inputField.colors.text,
unicode.sub(
inputField.textMask and string.rep(inputField.textMask, unicode.len(inputField.text)) or inputField.text,
inputField.textCutFrom,
inputField.textCutFrom + inputField.width - 1
)
)
end
if inputField.cursorBlinkState then
buffer.text(inputField.x + inputField.cursorPosition - inputField.textCutFrom, inputField.y, inputField.cursorColor, inputField.cursorSymbol)
end
return inputField
end
local function inputFieldSetCursorPosition(inputField, newPosition)
if newPosition < 1 then
newPosition = 1
elseif newPosition > unicode.len(inputField.text) + 1 then
newPosition = unicode.len(inputField.text) + 1
end
if newPosition > inputField.textCutFrom + inputField.width - 1 then
inputField.textCutFrom = inputField.textCutFrom + newPosition - (inputField.textCutFrom + inputField.width - 1)
elseif newPosition < inputField.textCutFrom then
inputField.textCutFrom = newPosition
end
inputField.cursorPosition = newPosition
return inputField
end
local function inputFieldBeginInput(inputField)
inputField.cursorBlinkState = true; inputField:draw(); buffer.draw()
while true do
local e = { event.pull(inputField.cursorBlinkDelay) }
if e[1] == "touch" or e[1] == "drag" then
if inputField:isClicked(e[3], e[4]) then
inputField:setCursorPosition(inputField.textCutFrom + e[3] - inputField.x)
inputField.cursorBlinkState = true; inputField:draw(); buffer.draw()
else
inputField.cursorBlinkState = false; inputField:draw(); buffer.draw()
return inputField
end
elseif e[1] == "key_down" then
if e[4] == 28 then
inputField.cursorBlinkState = false; inputField:draw(); buffer.draw()
return inputField
elseif e[4] == 15 then
if inputField.autocompleteVariables then
inputField.text = autocompleteVariables(inputField.text)
inputField:setCursorPosition(unicode.len(inputField.text) + 1)
inputField.cursorBlinkState = true; inputField:draw(); buffer.draw()
end
elseif e[4] == 203 then
inputField:setCursorPosition(inputField.cursorPosition - 1)
inputField.cursorBlinkState = true; inputField:draw(); buffer.draw()
elseif e[4] == 205 then
inputField:setCursorPosition(inputField.cursorPosition + 1)
inputField.cursorBlinkState = true; inputField:draw(); buffer.draw()
elseif e[4] == 14 then
inputField.text = unicode.sub(unicode.sub(inputField.text, 1, inputField.cursorPosition - 1), 1, -2) .. unicode.sub(inputField.text, inputField.cursorPosition, -1)
inputField:setCursorPosition(inputField.cursorPosition - 1)
inputField.cursorBlinkState = true; inputField:draw(); buffer.draw()
else
if not keyboard.isControl(e[3]) then
inputField.text = unicode.sub(inputField.text, 1, inputField.cursorPosition - 1) .. unicode.char(e[3]) .. unicode.sub(inputField.text, inputField.cursorPosition, -1)
inputField:setCursorPosition(inputField.cursorPosition + 1)
inputField.cursorBlinkState = true; inputField:draw(); buffer.draw()
end
end
elseif e[1] == "clipboard" then
inputField.text = unicode.sub(inputField.text, 1, inputField.cursorPosition - 1) .. e[3] .. unicode.sub(inputField.text, inputField.cursorPosition, -1)
inputField:setCursorPosition(inputField.cursorPosition + unicode.len(e[3]))
inputField.cursorBlinkState = true; inputField:draw(); buffer.draw()
else
inputField.cursorBlinkState = not inputField.cursorBlinkState; inputField:draw(); buffer.draw()
end
end
end
function GUI.inputField(x, y, width, textColor, text, textMask, highlightLuaSyntax, autocompleteVariables)
local inputField = GUI.object(x, y, width, 1)
inputField.textCutFrom = 1
inputField.cursorPosition = 1
inputField.cursorColor = 0x00A8FF
inputField.cursorSymbol = ""
inputField.cursorBlinkDelay = 0.4
inputField.cursorBlinkState = false
inputField.colors = {text = textColor}
inputField.text = text
inputField.textMask = textMask
inputField.highlightLuaSyntax = highlightLuaSyntax
inputField.autocompleteVariables = autocompleteVariables
inputField.setCursorPosition = inputFieldSetCursorPosition
inputField.draw = inputFieldDraw
inputField.input = inputFieldBeginInput
inputField:setCursorPosition(unicode.len(inputField.text) + 1)
return inputField
end
----------------------------------------- Input Text Box object -----------------------------------------
local function drawInputTextBox(inputTextBox)
local background = inputTextBox.isFocused and inputTextBox.colors.focused.background or inputTextBox.colors.default.background
local foreground = inputTextBox.isFocused and inputTextBox.colors.focused.text or inputTextBox.colors.default.text
local y = math.floor(inputTextBox.y + inputTextBox.height / 2)
local text = inputTextBox.text or ""
if inputTextBox.isFocused then
if inputTextBox.eraseTextOnFocus then
text = ""
else
text = inputTextBox.text or ""
end
else
if inputTextBox.text == "" or not inputTextBox.text then
text = inputTextBox.placeholderText or ""
end
end
if background then
buffer.square(inputTextBox.x, inputTextBox.y, inputTextBox.width, inputTextBox.height, background, foreground, " ")
end
local inputField = GUI.inputField(inputTextBox.x + 1, y, inputTextBox.width - 2, foreground, text, inputTextBox.textMask, inputTextBox.highlightLuaSyntax, inputTextBox.autocompleteVariables)
if inputTextBox.isFocused then
inputField:input()
if inputTextBox.validator then
if inputTextBox.validator(inputField.text) then
inputTextBox.text = inputField.text
end
else
inputTextBox.text = inputField.text
end
else
local oldHighlightLuaSyntaxValue = inputField.highlightLuaSyntax
inputField.highlightLuaSyntax = false
inputField:draw()
inputField.highlightLuaSyntax = oldHighlightLuaSyntaxValue
end
return inputTextBox
end
local function inputTextBoxBeginInput(inputTextBox)
inputTextBox.isFocused = true
inputTextBox:draw()
inputTextBox.isFocused = false
return inputTextBox
end
local function inputTextBoxEventHandler(mainContainer, object, eventData)
if eventData[1] == "touch" then
object:input()
mainContainer:draw()
buffer.draw()
callMethod(object.onInputFinished, mainContainer, object, eventData, object.text)
end
end
function GUI.inputTextBox(x, y, width, height, inputTextBoxColor, textColor, inputTextBoxFocusedColor, textFocusedColor, text, placeholderText, eraseTextOnFocus, textMask, highlightLuaSyntax, autocompleteVariables)
local inputTextBox = GUI.object(x, y, width, height)
inputTextBox.colors = {
default = {
background = inputTextBoxColor,
text = textColor
},
focused = {
background = inputTextBoxFocusedColor,
text = textFocusedColor
}
}
inputTextBox.eventHandler = inputTextBoxEventHandler
inputTextBox.text = text
inputTextBox.placeholderText = placeholderText
inputTextBox.draw = drawInputTextBox
inputTextBox.input = inputTextBoxBeginInput
inputTextBox.eraseTextOnFocus = eraseTextOnFocus
inputTextBox.textMask = textMask
return inputTextBox
end
----------------------------------------- Text Box object -----------------------------------------
local function drawTextBox(object)
@ -2251,10 +1986,232 @@ function GUI.layout(x, y, width, height, columnCount, rowCount)
return layout
end
----------------------------------------- Universal keyboard-input function -----------------------------------------
local function inputDraw(input)
if input.oldPixels then
buffer.paste(input.x, input.y, input.oldPixels)
else
input.oldPixels = buffer.copy(input.x, input.y, input.width, 1)
end
buffer.text(
input.x,
input.y,
input.colors.text,
unicode.sub(
input.textMask and string.rep(input.textMask, unicode.len(input.text)) or input.text,
input.textCutFrom,
input.textCutFrom + input.width - 1
)
)
if input.cursorBlinkState then
buffer.text(input.x + input.cursorPosition - input.textCutFrom, input.y, input.cursorColor, input.cursorSymbol)
end
return input
end
local function inputSetCursorPosition(input, newPosition)
if newPosition < 1 then
newPosition = 1
elseif newPosition > unicode.len(input.text) + 1 then
newPosition = unicode.len(input.text) + 1
end
if newPosition > input.textCutFrom + input.width - 1 then
input.textCutFrom = input.textCutFrom + newPosition - (input.textCutFrom + input.width - 1)
elseif newPosition < input.textCutFrom then
input.textCutFrom = newPosition
end
input.cursorPosition = newPosition
return input
end
local function inputBeginInput(input)
input.cursorBlinkState = true; input:draw(); buffer.draw()
while true do
local e = { event.pull(input.cursorBlinkDelay) }
if e[1] == "touch" or e[1] == "drag" then
if input:isClicked(e[3], e[4]) then
input:setCursorPosition(input.textCutFrom + e[3] - input.x)
input.cursorBlinkState = true; input:draw(); buffer.draw()
else
input.cursorBlinkState = false; input:draw(); buffer.draw()
return input
end
elseif e[1] == "key_down" then
-- Return
if e[4] == 28 then
input.cursorBlinkState = false; input:draw(); buffer.draw()
return input
-- Arrows left/right
elseif e[4] == 203 then
input:setCursorPosition(input.cursorPosition - 1)
elseif e[4] == 205 then
input:setCursorPosition(input.cursorPosition + 1)
-- Backspace
elseif e[4] == 14 then
input.text = unicode.sub(unicode.sub(input.text, 1, input.cursorPosition - 1), 1, -2) .. unicode.sub(input.text, input.cursorPosition, -1)
input:setCursorPosition(input.cursorPosition - 1)
-- Delete
elseif e[4] == 211 then
input.text = unicode.sub(input.text, 1, input.cursorPosition - 1) .. unicode.sub(input.text, input.cursorPosition + 1, -1)
else
if not keyboard.isControl(e[3]) then
input.text = unicode.sub(input.text, 1, input.cursorPosition - 1) .. unicode.char(e[3]) .. unicode.sub(input.text, input.cursorPosition, -1)
input:setCursorPosition(input.cursorPosition + 1)
end
end
input.cursorBlinkState = true; input:draw(); buffer.draw()
elseif e[1] == "clipboard" then
input.text = unicode.sub(input.text, 1, input.cursorPosition - 1) .. e[3] .. unicode.sub(input.text, input.cursorPosition, -1)
input:setCursorPosition(input.cursorPosition + unicode.len(e[3]))
input.cursorBlinkState = true; input:draw(); buffer.draw()
else
input.cursorBlinkState = not input.cursorBlinkState; input:draw(); buffer.draw()
end
end
end
function GUI.input(x, y, width, textColor, text, textMask)
local input = GUI.object(x, y, width, 1)
input.textCutFrom = 1
input.cursorPosition = 1
input.cursorColor = 0x00A8FF
input.cursorSymbol = ""
input.cursorBlinkDelay = 0.4
input.cursorBlinkState = false
input.colors = {text = textColor}
input.text = text
input.textMask = textMask
input.setCursorPosition = inputSetCursorPosition
input.draw = inputDraw
input.startInput = inputBeginInput
input:setCursorPosition(unicode.len(input.text) + 1)
return input
end
----------------------------------------- Input Text Box object -----------------------------------------
local function drawInputTextBox(inputField)
local background = inputField.isFocused and inputField.colors.focused.background or inputField.colors.default.background
local y = math.floor(inputField.y + inputField.height / 2)
local text, foreground, textMask = inputField.text or "", inputField.colors.default.text, inputField.textMask
if inputField.isFocused then
if inputField.eraseTextOnFocus then
text = ""
else
text = inputField.text or ""
end
foreground = inputField.colors.focused.text
else
if inputField.text == "" or not inputField.text then
text, foreground, textMask = inputField.placeholderText or "", inputField.colors.placeholderText, nil
end
end
if background then
buffer.square(inputField.x, inputField.y, inputField.width, inputField.height, background, foreground, " ")
end
local input = GUI.input(inputField.x + 1, y, inputField.width - 2, foreground, text, textMask)
input.onKeyDown = inputField.onKeyDown
if inputField.isFocused then
input:startInput()
if inputField.validator then
if inputField.validator(input.text) then
inputField.text = input.text
end
else
inputField.text = input.text
end
else
input:draw()
end
return inputField
end
local function inputFieldStartInput(inputField)
inputField.isFocused = true
inputField:draw()
inputField.isFocused = false
callMethod(inputField.onInputFinished, inputField.text)
return inputField
end
local function inputFieldEventHandler(mainContainer, object, eventData)
if eventData[1] == "touch" then
object:startInput()
mainContainer:draw()
buffer.draw()
end
end
function GUI.inputField(x, y, width, height, backgroundColor, textColor, placeholderTextColor, backgroundFocusedColor, textFocusedColor, text, placeholderText, eraseTextOnFocus, textMask)
local inputField = GUI.object(x, y, width, height)
inputField.colors = {
default = {
background = backgroundColor,
text = textColor
},
focused = {
background = backgroundFocusedColor,
text = textFocusedColor
},
placeholderText = placeholderTextColor
}
inputField.eventHandler = inputFieldEventHandler
inputField.text = text
inputField.placeholderText = placeholderText
inputField.draw = drawInputTextBox
inputField.startInput = inputFieldStartInput
inputField.eraseTextOnFocus = eraseTextOnFocus
inputField.textMask = textMask
return inputField
end
--------------------------------------------------------------------------------------------------------------------------------
-- buffer.start()
-- local mainContainer = GUI.fullScreenContainer()
-- mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x2D2D2D))
-- local inputField = mainContainer:addChild(GUI.inputField(2, 2, 30, 3, 0xEEEEEE, 0x555555, 0x999999, 0xFFFFFF, 0x2D2D2D, "Hello world", "Placeholder text"))
-- inputField.validator = function(text)
-- if tonumber(text) then
-- GUI.error("It's a number!")
-- end
-- return true
-- end
-- inputField.onInputFinished = function()
-- -- Do something when input finished
-- end
-- mainContainer:draw()
-- buffer.draw(true)
-- mainContainer:startEventHandling()
-- -- Создаем полноэкранный контейнер, добавляем темно-серую панель
-- local mainContainer = GUI.fullScreenContainer()
-- mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x2D2D2D))
@ -2282,7 +2239,7 @@ end
-- mainContainer:draw()
-- buffer.draw()
-- end
-- -- В ячейке 3ч1 задаем горизонтальную ориентацию объектов, расстояние между ними в 2 пикселя, а также выравнивание по правому верхнему краю
-- -- В ячейке 3x1 задаем горизонтальную ориентацию объектов, расстояние между ними в 2 пикселя, а также выравнивание по правому верхнему краю
-- layout:setCellDirection(3, 1, GUI.directions.horizontal)
-- layout:setCellSpacing(3, 1, 2)
-- layout:setCellAlignment(3, 1, GUI.alignment.horizontal.right, GUI.alignment.vertical.bottom)

View File

@ -808,7 +808,7 @@ end
local function addUniversalContainerWithInputTextBoxes(parentWindow, path, text, title, placeholder)
local container = MineOSCore.addUniversalContainer(parentWindow, title)
container.inputTextBox = container.layout:addChild(GUI.inputTextBox(1, 1, 36, 3, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x262626, text, placeholder, false))
container.inputField = container.layout:addChild(GUI.inputField(1, 1, 36, 3, 0xEEEEEE, 0x666666, 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
@ -839,8 +839,8 @@ end
function MineOSCore.newApplication(parentWindow, path)
local container = addUniversalContainerWithInputTextBoxes(parentWindow, path, nil, MineOSCore.localization.contextMenuNewApplication, MineOSCore.localization.applicationName)
container.inputTextBox.onInputFinished = function()
local finalPath = path .. container.inputTextBox.text .. ".app/"
container.inputField.onInputFinished = function()
local finalPath = path .. container.inputField.text .. ".app/"
if checkFileToExists(container, finalPath) then
fs.makeDirectory(finalPath .. "/Resources/")
fs.copy(MineOSCore.paths.icons .. "SampleIcon.pic", finalPath .. "/Resources/Icon.pic")
@ -856,11 +856,11 @@ end
function MineOSCore.newFile(parentWindow, path)
local container = addUniversalContainerWithInputTextBoxes(parentWindow, path, nil, MineOSCore.localization.contextMenuNewFile, MineOSCore.localization.fileName)
container.inputTextBox.onInputFinished = function()
if checkFileToExists(container, path .. container.inputTextBox.text) then
local file = io.open(path .. container.inputTextBox.text, "w")
container.inputField.onInputFinished = function()
if checkFileToExists(container, path .. container.inputField.text) then
local file = io.open(path .. container.inputField.text, "w")
file:close()
MineOSCore.safeLaunch(MineOSCore.paths.applications .. "/MineCode IDE.app/Main.lua", "open", path .. container.inputTextBox.text)
MineOSCore.safeLaunch(MineOSCore.paths.applications .. "/MineCode IDE.app/Main.lua", "open", path .. container.inputField.text)
computer.pushSignal("MineOSCore", "updateFileList")
end
end
@ -869,9 +869,9 @@ end
function MineOSCore.newFolder(parentWindow, path)
local container = addUniversalContainerWithInputTextBoxes(parentWindow, path, nil, MineOSCore.localization.contextMenuNewFolder, MineOSCore.localization.folderName)
container.inputTextBox.onInputFinished = function()
if checkFileToExists(container, path .. container.inputTextBox.text) then
fs.makeDirectory(path .. container.inputTextBox.text)
container.inputField.onInputFinished = function()
if checkFileToExists(container, path .. container.inputField.text) then
fs.makeDirectory(path .. container.inputField.text)
computer.pushSignal("MineOSCore", "updateFileList")
end
end
@ -880,9 +880,9 @@ end
function MineOSCore.rename(parentWindow, path)
local container = addUniversalContainerWithInputTextBoxes(parentWindow, path, fs.name(path), MineOSCore.localization.contextMenuRename, MineOSCore.localization.newName)
container.inputTextBox.onInputFinished = function()
if checkFileToExists(container, fs.path(path) .. container.inputTextBox.text) then
fs.rename(path, fs.path(path) .. container.inputTextBox.text)
container.inputField.onInputFinished = function()
if checkFileToExists(container, fs.path(path) .. container.inputField.text) then
fs.rename(path, fs.path(path) .. container.inputField.text)
computer.pushSignal("MineOSCore", "updateFileList")
end
end
@ -891,10 +891,10 @@ end
function MineOSCore.launchWithArguments(parentWindow, path)
local container = addUniversalContainerWithInputTextBoxes(parentWindow, path, nil, MineOSCore.localization.launchWithArguments)
container.inputTextBox.onInputFinished = function()
container.inputField.onInputFinished = function()
local args = {}
if container.inputTextBox.text then
for arg in container.inputTextBox.text:gmatch("[^%s]+") do
if container.inputField.text then
for arg in container.inputField.text:gmatch("[^%s]+") do
table.insert(args, arg)
end
end

View File

@ -21,13 +21,13 @@ end
--------------------------------------------------------------------------------------------------------------
local function changeInputsValueToCurrentColor(window)
window.inputs[1].inputTextBox.text = tostring(window.color.rgb.red)
window.inputs[2].inputTextBox.text = tostring(window.color.rgb.green)
window.inputs[3].inputTextBox.text = tostring(window.color.rgb.blue)
window.inputs[4].inputTextBox.text = tostring(math.floor(window.color.hsb.hue))
window.inputs[5].inputTextBox.text = tostring(math.floor(window.color.hsb.saturation))
window.inputs[6].inputTextBox.text = tostring(math.floor(window.color.hsb.brightness))
window.inputs[7].inputTextBox.text = string.format("%06X", window.color.hex)
window.inputs[1].inputField.text = tostring(window.color.rgb.red)
window.inputs[2].inputField.text = tostring(window.color.rgb.green)
window.inputs[3].inputField.text = tostring(window.color.rgb.blue)
window.inputs[4].inputField.text = tostring(math.floor(window.color.hsb.hue))
window.inputs[5].inputField.text = tostring(math.floor(window.color.hsb.saturation))
window.inputs[6].inputField.text = tostring(math.floor(window.color.hsb.brightness))
window.inputs[7].inputField.text = string.format("%06X", window.color.hex)
window.colorPanel.colors.background = window.color.hex
end
@ -143,26 +143,26 @@ function palette.window(x, y, startColor)
window.OKButton = window:addChild(GUI.button(58, 6, 12, 1, 0x444444, 0xFFFFFF, 0x88FF88, 0xFFFFFF, "OK"))
window.cancelButton = window:addChild(GUI.button(58, 8, 12, 1, 0xFFFFFF, 0x444444, 0x88FF88, 0xFFFFFF, "Cancel"))
local function onAnyInputFinished(mainContainer, object, eventData)
local function onAnyInputFinished()
refreshBigRainbow(window)
createCrestsCoordinates(window)
mainContainer:draw()
window:getFirstParent():draw()
buffer.draw()
end
local function onHexInputFinished(mainContainer, object, eventData, newText)
switchColorFromHex(window, tonumber("0x" .. newText))
onAnyInputFinished(mainContainer, object, eventData)
local function onHexInputFinished()
switchColorFromHex(window, tonumber("0x" .. window.inputs[7].inputField.text))
onAnyInputFinished()
end
local function onRgbInputFinished(mainContainer, object, eventData, newText)
switchColorFromRgb(window, tonumber(window.inputs[1].inputTextBox.text), tonumber(window.inputs[2].inputTextBox.text), tonumber(window.inputs[3].inputTextBox.text))
onAnyInputFinished(mainContainer, object, eventData)
local function onRgbInputFinished()
switchColorFromRgb(window, tonumber(window.inputs[1].inputField.text), tonumber(window.inputs[2].inputField.text), tonumber(window.inputs[3].inputField.text))
onAnyInputFinished()
end
local function onHsbInputFinished(mainContainer, object, eventData, newText)
switchColorFromHsb(window, tonumber(window.inputs[4].inputTextBox.text), tonumber(window.inputs[5].inputTextBox.text), tonumber(window.inputs[6].inputTextBox.text))
onAnyInputFinished(mainContainer, object, eventData)
local function onHsbInputFinished()
switchColorFromHsb(window, tonumber(window.inputs[4].inputField.text), tonumber(window.inputs[5].inputField.text), tonumber(window.inputs[6].inputField.text))
onAnyInputFinished()
end
local function rgbValidaror(text)
@ -197,9 +197,9 @@ function palette.window(x, y, startColor)
for i = 1, #window.inputs do
window:addChild(GUI.label(58, y, 2, 1, 0x000000, window.inputs[i].shortcut))
window.inputs[i].inputTextBox = window:addChild(GUI.inputTextBox(61, y, 9, 1, 0xFFFFFF, 0x444444, 0xFFFFFF, 0x000000, "", "", true))
window.inputs[i].inputTextBox.validator = window.inputs[i].validator
window.inputs[i].inputTextBox.onInputFinished = window.inputs[i].onInputFinished
window.inputs[i].inputField = window:addChild(GUI.inputField(61, y, 9, 1, 0xFFFFFF, 0x444444, 0x444444, 0xFFFFFF, 0x000000, "", "", true))
window.inputs[i].inputField.validator = window.inputs[i].validator
window.inputs[i].inputField.onInputFinished = window.inputs[i].onInputFinished
y = y + 2
end