refactor(gui): rækker kan klones ind i et andet layout (redigeringsvindue)
This commit is contained in:
@@ -80,8 +80,11 @@ function SmartPickupFrame:makeRowClickable(row, action)
|
|||||||
row.mouseEvent = function(element, posX, posY, isDown, isUp, button, eventUsed)
|
row.mouseEvent = function(element, posX, posY, isDown, isUp, button, eventUsed)
|
||||||
local used = baseMouseEvent(element, posX, posY, isDown, isUp, button, eventUsed)
|
local used = baseMouseEvent(element, posX, posY, isDown, isUp, button, eventUsed)
|
||||||
-- også inden for listens synlige udsnit: rækker scrollet ud af syne må ikke fange klik
|
-- også inden for listens synlige udsnit: rækker scrollet ud af syne må ikke fange klik
|
||||||
if not used and not eventUsed and isUp and button == MOUSE_LEFT and (element.getIsVisible == nil or element:getIsVisible())
|
-- klik tæller inde i rækkens eget layout (listen eller redigeringsvinduet); listen er død mens vinduet er åbent
|
||||||
and isInside(element, posX, posY) and isInside(frame.boxLayout, posX, posY) then
|
local layout = element.spuLayout or frame.boxLayout
|
||||||
|
local blockedByPanel = frame.editPanelOpen and layout == frame.boxLayout
|
||||||
|
if not used and not eventUsed and not blockedByPanel and isUp and button == MOUSE_LEFT and (element.getIsVisible == nil or element:getIsVisible())
|
||||||
|
and isInside(element, posX, posY) and isInside(layout, posX, posY) then
|
||||||
frame.pendingClick = action
|
frame.pendingClick = action
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ function SmartPickupFrame.new(i18n, getAdEnv)
|
|||||||
self.runIds, self.targetIds, self.poolGroups = {}, {}, {}
|
self.runIds, self.targetIds, self.poolGroups = {}, {}, {}
|
||||||
self.rowData = {} -- element -> {kind = "ingredient"|"vehicle", ...}
|
self.rowData = {} -- element -> {kind = "ingredient"|"vehicle", ...}
|
||||||
self.clonedRows = {}
|
self.clonedRows = {}
|
||||||
|
self.panelRows = {}
|
||||||
self.refreshTimer = 0
|
self.refreshTimer = 0
|
||||||
self.statusOverride = nil
|
self.statusOverride = nil
|
||||||
self.statusRow = nil -- Text-elementet i den klonede statusrække
|
self.statusRow = nil -- Text-elementet i den klonede statusrække
|
||||||
@@ -346,9 +347,11 @@ function SmartPickupFrame:addToggleRow(kind, title, texts, isOn)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function SmartPickupFrame:addRow(prefab, data)
|
function SmartPickupFrame:addRow(prefab, data)
|
||||||
local row = prefab:clone(self.boxLayout)
|
local layout = self.rowTarget or self.boxLayout
|
||||||
|
local row = prefab:clone(layout)
|
||||||
|
row.spuLayout = layout
|
||||||
FocusManager:loadElementFromCustomValues(row)
|
FocusManager:loadElementFromCustomValues(row)
|
||||||
table.insert(self.clonedRows, row)
|
table.insert(layout == self.boxLayout and self.clonedRows or self.panelRows, row)
|
||||||
local option = row:getDescendantByName("option")
|
local option = row:getDescendantByName("option")
|
||||||
if option ~= nil then
|
if option ~= nil then
|
||||||
option:setTexts({self.i18n:getText("ui_no"), self.i18n:getText("ui_yes")})
|
option:setTexts({self.i18n:getText("ui_no"), self.i18n:getText("ui_yes")})
|
||||||
@@ -357,6 +360,23 @@ function SmartPickupFrame:addRow(prefab, data)
|
|||||||
return row
|
return row
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Rækker klonet ind i et andet layout (redigeringsvinduet) mens fn kører.
|
||||||
|
function SmartPickupFrame:withRowTarget(layout, fn)
|
||||||
|
local previous = self.rowTarget
|
||||||
|
self.rowTarget = layout
|
||||||
|
local ok, err = pcall(fn, self)
|
||||||
|
self.rowTarget = previous
|
||||||
|
if not ok then error(err, 0) end
|
||||||
|
end
|
||||||
|
|
||||||
|
function SmartPickupFrame:clearPanelRows()
|
||||||
|
for _, row in ipairs(self.panelRows or {}) do
|
||||||
|
FocusManager:removeElement(row)
|
||||||
|
row:delete()
|
||||||
|
end
|
||||||
|
self.panelRows = {}
|
||||||
|
end
|
||||||
|
|
||||||
-- Tekstrække uden valgmuligheder: sektionstitler, Wait-pulje-linjer og statuslinjen.
|
-- Tekstrække uden valgmuligheder: sektionstitler, Wait-pulje-linjer og statuslinjen.
|
||||||
-- Tegn pr. tekstrække før teksten ombrydes (rækken afkorter med "..." ved ca. 70 tegn).
|
-- Tegn pr. tekstrække før teksten ombrydes (rækken afkorter med "..." ved ca. 70 tegn).
|
||||||
SmartPickupFrame.TEXT_ROW_CHARS = 66
|
SmartPickupFrame.TEXT_ROW_CHARS = 66
|
||||||
@@ -375,13 +395,17 @@ end
|
|||||||
-- AutoDrive farver hver række i onCreate; her sker det efter hver genopbygning,
|
-- AutoDrive farver hver række i onCreate; her sker det efter hver genopbygning,
|
||||||
-- fordi rækkerne først findes på det tidspunkt.
|
-- fordi rækkerne først findes på det tidspunkt.
|
||||||
function SmartPickupFrame:colorRows()
|
function SmartPickupFrame:colorRows()
|
||||||
|
self:colorLayout(self.boxLayout)
|
||||||
|
end
|
||||||
|
|
||||||
|
function SmartPickupFrame:colorLayout(layout)
|
||||||
local colors = InGameMenuSettingsFrame ~= nil and InGameMenuSettingsFrame.COLOR_ALTERNATING or nil
|
local colors = InGameMenuSettingsFrame ~= nil and InGameMenuSettingsFrame.COLOR_ALTERNATING or nil
|
||||||
if colors == nil or self.boxLayout == nil then
|
if colors == nil or layout == nil then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local unpackFn = table.unpack or unpack
|
local unpackFn = table.unpack or unpack
|
||||||
local isEvenRow = false
|
local isEvenRow = false
|
||||||
for _, element in ipairs(self.boxLayout.elements) do
|
for _, element in ipairs(layout.elements) do
|
||||||
if element.setImageColor ~= nil and colors[isEvenRow] ~= nil then
|
if element.setImageColor ~= nil and colors[isEvenRow] ~= nil then
|
||||||
element:setImageColor(nil, unpackFn(colors[isEvenRow]))
|
element:setImageColor(nil, unpackFn(colors[isEvenRow]))
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user