diff --git a/FS25_ADSmartPickup/gui/SmartPickupFieldGuide.lua b/FS25_ADSmartPickup/gui/SmartPickupFieldGuide.lua
index 859d836..9a2bbb9 100644
--- a/FS25_ADSmartPickup/gui/SmartPickupFieldGuide.lua
+++ b/FS25_ADSmartPickup/gui/SmartPickupFieldGuide.lua
@@ -11,7 +11,8 @@ function SmartPickupFrame:initFieldButtons(i18n)
self.fieldSetupButtonInfo = {inputAction = InputAction.MENU_EXTRA_1, text = i18n:getText("spu_guide_field_open"), callback = function() self:onClickFieldSetup() end}
self.fieldFleetButtonInfo = {inputAction = InputAction.MENU_EXTRA_2, text = i18n:getText("spu_guide_fleet_open"), callback = function() self:onClickFieldFleet(true) end}
self.fieldFleetCloseButtonInfo = {inputAction = InputAction.MENU_EXTRA_2, text = i18n:getText("spu_guide_fleet_close"), callback = function() self:onClickFieldFleet(false) end}
- self.fieldButtons = {self.backButtonInfo, self.fieldStartButtonInfo, self.fieldSetupButtonInfo, self.fieldFleetButtonInfo}
+ -- v1.59: listen har Start/Stop pr. række; Opsæt mark ligger i redigeringsvinduet
+ self.fieldButtons = {self.backButtonInfo, self.fieldFleetButtonInfo}
self.fieldFleetButtons = {self.backButtonInfo, self.fieldFleetCloseButtonInfo}
end
diff --git a/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua b/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua
index 4c66555..132b642 100644
--- a/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua
+++ b/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua
@@ -104,13 +104,14 @@ function SmartPickupFrame:fieldCells(row)
for _, assignment in ipairs(ADFieldJobs.assignmentsFor(info.id)) do
table.insert(names, ADRuns.vehicleLabel(assignment.vehicle))
end
- local name = string.format("%s%sF%d", info.id == self.selectedFieldId and "> " or "", info.markerId == nil and "! " or "", info.id)
+ local name = string.format("%sF%d", info.markerId == nil and "! " or "", info.id)
local crop = ADFieldView.cropText(info, function(key) return self.i18n:getText(key) end)
return {
name, crop, self:fieldPlanText(field, info),
self.i18n:getText(field.plan.mode == "auto" and "spu_field_mode_auto" or "spu_field_mode_manual"),
self:fieldStatusText(field, info, true),
ADFlowView.joinCounted(names, ", ", "-"),
+ self:fieldActionText(info.id),
}
end
@@ -133,32 +134,68 @@ function SmartPickupFrame:fillFieldRows(adEnv)
if ADFieldJobs.state.fleetMode == "ticked" and next(ADFieldJobs.state.fleet or {}) == nil then
self:addTextRow(i18n:getText("spu_field_fleetEmpty"))
end
- self:addCellRow(self.fieldPrefab, {i18n:getText("spu_col_field"), i18n:getText("spu_col_crop"), i18n:getText("spu_col_plan"), i18n:getText("spu_col_mode"), i18n:getText("spu_col_status"), i18n:getText("spu_col_tractors")})
+ self:addCellRow(self.fieldListPrefab, {i18n:getText("spu_col_field"), i18n:getText("spu_col_crop"), i18n:getText("spu_col_plan"), i18n:getText("spu_col_mode"), i18n:getText("spu_col_status"), i18n:getText("spu_col_tractors"), ""})
for _, row in ipairs(ADFieldView.rows(infos, ADFieldJobs.state.fields)) do
- local cells = self:addCellRow(self.fieldPrefab, self:fieldCells(row))
+ local cells = self:addCellRow(self.fieldListPrefab, self:fieldCells(row))
local fieldId = row.info.id
if cells[1] ~= nil and cells[1].parent ~= nil then
+ local actionCell = cells[7]
self:makeRowClickable(cells[1].parent, function(frame)
- frame.selectedFieldId = fieldId
- frame:requestRebuild()
+ -- klik på [Start]/[Stop]-feltet = handling (kun denne mark); ellers åbn redigeringsvinduet
+ if frame.lastClickX ~= nil and actionCell ~= nil and actionCell.absPosition ~= nil and frame.lastClickX >= actionCell.absPosition[1] then
+ frame:toggleField(fieldId)
+ else
+ frame.selectedFieldId = fieldId
+ frame:openEditPanel("field", fieldId)
+ end
end)
end
table.insert(self.fieldRows, {id = fieldId, cells = cells})
end
end
- local selected = self.selectedFieldId ~= nil and ADFields.getInfo(self.selectedFieldId) or nil
- if selected ~= nil then
- self:fillFieldOverview(adEnv, selected)
+ self:refreshFieldLevels()
+end
+
+-- Prik og statusfarve pr. mark i listen.
+function SmartPickupFrame:refreshFieldLevels()
+ local unpackFn = table.unpack or unpack
+ for _, entry in ipairs(self.fieldRows or {}) do
+ local color = ADFlowView.LEVEL_COLORS[self:fieldLevel(entry.id)]
+ local row = entry.cells[1] ~= nil and entry.cells[1].parent or nil
+ local dot = row ~= nil and row:getDescendantByName("dot") or nil
+ if dot ~= nil and dot.setImageColor ~= nil then dot:setImageColor(nil, unpackFn(color)) end
+ if entry.cells[5] ~= nil and entry.cells[5].setTextColor ~= nil then entry.cells[5]:setTextColor(unpackFn(color)) end
end
end
+function SmartPickupFrame:fieldLevel(id)
+ local field, info = ADFieldJobs.getField(id), ADFields.getInfo(id)
+ if field == nil or info == nil then return "stopped" end
+ local reason = type(field.reason) == "table" and field.reason.key or nil
+ return ADFieldView.fieldStatus({hasMarker = info.markerId ~= nil, working = ADFieldModel.isWorking(field),
+ awaiting = ADFieldJobs.awaitingPlayer(id) ~= nil,
+ startRequested = ADFieldJobs.isStartRequested ~= nil and ADFieldJobs.isStartRequested(id) or false,
+ reasonKey = reason})
+end
+
+-- forButton: knaplinjens tekst (Start/Stop) i stedet for listens [Start]/[Stop].
+function SmartPickupFrame:fieldActionText(id, forButton)
+ local field = ADFieldJobs.getField(id)
+ if ADFieldJobs.awaitingPlayer(id) ~= nil then return self.i18n:getText("spu_field_button_takeover") end
+ local isWorking = field ~= nil and ADFieldModel.isWorking(field)
+ if forButton then return self.i18n:getText(isWorking and "spu_field_button_stop" or "spu_field_button_start") end
+ return self.i18n:getText(isWorking and "spu_flowList_stop" or "spu_flowList_start")
+end
+
-- Den valgte marks resumé: én klikbar linje pr. emne ([Ret] åbner kun det trin), hele status, markør og
-- advarsel om marksilo der ikke tømmes hjem.
function SmartPickupFrame:fillFieldOverview(adEnv, info)
local i18n = self.i18n
local field = ADFieldJobs.getField(info.id)
local crop = ADFieldView.cropText(info, function(key) return i18n:getText(key) end)
- self:addTextRow(string.format(i18n:getText("spu_field_section"), info.id, crop))
+ if not self.editPanelOpen then
+ self:addTextRow(string.format(i18n:getText("spu_field_section"), info.id, crop))
+ end
self:addTextRow(" " .. i18n:getText("spu_guide_sum_hint"))
local context = self:fieldGuideContext(adEnv, info, field.plan, field.plan.storeBuildingIds)
local guide = ADFieldGuide.open(field, context)
@@ -283,7 +320,7 @@ end
-- ---- live ----
function SmartPickupFrame:refreshFieldRows(adEnv)
- if self:hasGuideOn(SmartPickupFrame.TAB_FIELDS) or self.fieldView == "fleet" then
+ if (not self.editPanelOpen and self:hasGuideOn(SmartPickupFrame.TAB_FIELDS)) or self.fieldView == "fleet" then
self:setStatusText(self.statusOverride or "")
return
end
@@ -298,6 +335,7 @@ function SmartPickupFrame:refreshFieldRows(adEnv)
if ADFieldModel.isWorking(row.field) then working = working + 1 end
end
end
+ self:refreshFieldLevels()
self:setStatusText(self.statusOverride or string.format(self.i18n:getText("spu_field_status"), working, total))
local selected = self.selectedFieldId ~= nil and ADFieldJobs.getField(self.selectedFieldId) or nil
local info = self.selectedFieldId ~= nil and ADFields.getInfo(self.selectedFieldId) or nil
@@ -327,8 +365,12 @@ end
-- Start nu: pleje hvis marken trænger (og vokser), ellers hele kæden (høst/slå, eller klargøring på bar mark).
function SmartPickupFrame:onClickFieldStartStop()
+ self:toggleField(self.selectedFieldId)
+end
+
+-- Start/Stop/Overtag for én mark (rækkens felt, vinduets knap og knaplinjen).
+function SmartPickupFrame:toggleField(id)
self:safe(function(frame)
- local id = frame.selectedFieldId
if id == nil then return end
local field = ADFieldJobs.getField(id)
if ADFieldJobs.awaitingPlayer(id) ~= nil then
@@ -350,3 +392,24 @@ function SmartPickupFrame:onClickFieldStartStop()
frame:requestRebuild()
end)
end
+
+-- Redigeringsvinduet for en mark (gui/SmartPickupEditPanel.lua).
+SmartPickupFrame.EDIT_PANEL_KINDS = SmartPickupFrame.EDIT_PANEL_KINDS or {}
+SmartPickupFrame.EDIT_PANEL_KINDS.field = {
+ canDelete = false,
+ exists = function(frame, id) return ADFields.getInfo(id) ~= nil and ADFieldJobs.getField(id) ~= nil end,
+ title = function(frame, id) return string.format(frame.i18n:getText("spu_panel_fieldTitle"), id) end,
+ fill = function(frame, adEnv, id)
+ frame:fillFieldOverview(adEnv, ADFields.getInfo(id))
+ frame:addLinkRow(" " .. frame.i18n:getText("spu_guide_field_open"), function(f)
+ f.selectedFieldId = id
+ f:onClickFieldSetup()
+ end)
+ end,
+ status = function(frame, adEnv, id)
+ return {text = frame:fieldStatusText(ADFieldJobs.getField(id), ADFields.getInfo(id), true), level = frame:fieldLevel(id)}
+ end,
+ startStopText = function(frame, adEnv, id) return frame:fieldActionText(id, true) end,
+ startStop = function(frame, id) frame:toggleField(id) end,
+ delete = function() end,
+}
diff --git a/FS25_ADSmartPickup/gui/SmartPickupFrame.lua b/FS25_ADSmartPickup/gui/SmartPickupFrame.lua
index d17f4fa..c1b8212 100644
--- a/FS25_ADSmartPickup/gui/SmartPickupFrame.lua
+++ b/FS25_ADSmartPickup/gui/SmartPickupFrame.lua
@@ -86,7 +86,7 @@ end
-- Prefabs skal ud af layoutet før de klones, ellers vises de selv som rækker.
function SmartPickupFrame:initialize()
- for _, name in ipairs({"ingredientPrefab", "vehiclePrefab", "textPrefab", "productPrefab", "statPrefab", "gridPrefab", "flowPrefab", "flowListPrefab", "fieldPrefab", "kpiPrefab", "alertPrefab", "itemPrefab", "subPrefab"}) do
+ for _, name in ipairs({"ingredientPrefab", "vehiclePrefab", "textPrefab", "productPrefab", "statPrefab", "gridPrefab", "flowPrefab", "flowListPrefab", "fieldPrefab", "fieldListPrefab", "kpiPrefab", "alertPrefab", "itemPrefab", "subPrefab"}) do
local prefab = self[name]
if prefab ~= nil then
prefab:unlinkElement()
diff --git a/FS25_ADSmartPickup/gui/SmartPickupFrame.xml b/FS25_ADSmartPickup/gui/SmartPickupFrame.xml
index 5ee6a65..3db1ee6 100644
--- a/FS25_ADSmartPickup/gui/SmartPickupFrame.xml
+++ b/FS25_ADSmartPickup/gui/SmartPickupFrame.xml
@@ -107,6 +107,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FS25_ADSmartPickup/l10n/l10n_da.xml b/FS25_ADSmartPickup/l10n/l10n_da.xml
index 77c7bef..25b1873 100644
--- a/FS25_ADSmartPickup/l10n/l10n_da.xml
+++ b/FS25_ADSmartPickup/l10n/l10n_da.xml
@@ -259,6 +259,7 @@
+
diff --git a/FS25_ADSmartPickup/l10n/l10n_en.xml b/FS25_ADSmartPickup/l10n/l10n_en.xml
index a0f8ac0..bd79ade 100644
--- a/FS25_ADSmartPickup/l10n/l10n_en.xml
+++ b/FS25_ADSmartPickup/l10n/l10n_en.xml
@@ -259,6 +259,7 @@
+