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)
|
||||
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
|
||||
if not used and not eventUsed and isUp and button == MOUSE_LEFT and (element.getIsVisible == nil or element:getIsVisible())
|
||||
and isInside(element, posX, posY) and isInside(frame.boxLayout, posX, posY) then
|
||||
-- klik tæller inde i rækkens eget layout (listen eller redigeringsvinduet); listen er død mens vinduet er åbent
|
||||
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
|
||||
return true
|
||||
end
|
||||
|
||||
@@ -36,6 +36,7 @@ function SmartPickupFrame.new(i18n, getAdEnv)
|
||||
self.runIds, self.targetIds, self.poolGroups = {}, {}, {}
|
||||
self.rowData = {} -- element -> {kind = "ingredient"|"vehicle", ...}
|
||||
self.clonedRows = {}
|
||||
self.panelRows = {}
|
||||
self.refreshTimer = 0
|
||||
self.statusOverride = nil
|
||||
self.statusRow = nil -- Text-elementet i den klonede statusrække
|
||||
@@ -346,9 +347,11 @@ function SmartPickupFrame:addToggleRow(kind, title, texts, isOn)
|
||||
end
|
||||
|
||||
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)
|
||||
table.insert(self.clonedRows, row)
|
||||
table.insert(layout == self.boxLayout and self.clonedRows or self.panelRows, row)
|
||||
local option = row:getDescendantByName("option")
|
||||
if option ~= nil then
|
||||
option:setTexts({self.i18n:getText("ui_no"), self.i18n:getText("ui_yes")})
|
||||
@@ -357,6 +360,23 @@ function SmartPickupFrame:addRow(prefab, data)
|
||||
return row
|
||||
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.
|
||||
-- Tegn pr. tekstrække før teksten ombrydes (rækken afkorter med "..." ved ca. 70 tegn).
|
||||
SmartPickupFrame.TEXT_ROW_CHARS = 66
|
||||
@@ -375,13 +395,17 @@ end
|
||||
-- AutoDrive farver hver række i onCreate; her sker det efter hver genopbygning,
|
||||
-- fordi rækkerne først findes på det tidspunkt.
|
||||
function SmartPickupFrame:colorRows()
|
||||
self:colorLayout(self.boxLayout)
|
||||
end
|
||||
|
||||
function SmartPickupFrame:colorLayout(layout)
|
||||
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
|
||||
end
|
||||
local unpackFn = table.unpack or unpack
|
||||
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
|
||||
element:setImageColor(nil, unpackFn(colors[isEvenRow]))
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user