diff --git a/FS25_ADSmartPickup/adFlowView.lua b/FS25_ADSmartPickup/adFlowView.lua index e2e8a82..ff6baaa 100644 --- a/FS25_ADSmartPickup/adFlowView.lua +++ b/FS25_ADSmartPickup/adFlowView.lua @@ -147,3 +147,22 @@ function ADFlowView.joinCounted(names, separator, empty) end return table.concat(parts, separator) end + +-- Lang tekst -> linjer på højst maxChars (ombrydes ved mellemrum; indrykning gentages på hver linje, +-- så en indrykket forklaring forbliver indrykket). Ét ord længere end linjen deles ikke. +function ADFlowView.wrapText(text, maxChars) + text = tostring(text or "") + if #text <= maxChars then return {text} end + local indent = string.match(text, "^%s*") or "" + local lines, line = {}, indent + for word in string.gmatch(string.sub(text, #indent + 1), "%S+") do + if line ~= indent and #line + 1 + #word > maxChars then + table.insert(lines, line) + line = indent .. word + else + line = line == indent and (indent .. word) or (line .. " " .. word) + end + end + if line ~= indent then table.insert(lines, line) end + return lines +end diff --git a/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua b/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua index 399a0f8..f45c593 100644 --- a/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua +++ b/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua @@ -192,6 +192,8 @@ function SmartPickupFrame:fillFieldDetail(adEnv, info) local yesNo = {i18n:getText("ui_no"), i18n:getText("ui_yes")} local crop = ADFieldView.cropText(info, function(key) return i18n:getText(key) end) self:addTextRow(string.format(i18n:getText("spu_field_section"), info.id, crop)) + -- hele statusteksten (tabellens celle afkorter den) + self:addTextRow(" " .. string.format(i18n:getText("spu_field_statusFull"), self:fieldStatusText(field, info))) local targetTexts, targetValues = self:sowFruitChoices("spu_field_target_none") self:addChoiceRow("fieldTarget", i18n:getText("spu_field_target"), targetTexts, targetValues, plan.targetFruit or "") local hasTarget = plan.targetFruit ~= nil and plan.targetFruit ~= "" diff --git a/FS25_ADSmartPickup/gui/SmartPickupFrame.lua b/FS25_ADSmartPickup/gui/SmartPickupFrame.lua index dfafc55..485d36b 100644 --- a/FS25_ADSmartPickup/gui/SmartPickupFrame.lua +++ b/FS25_ADSmartPickup/gui/SmartPickupFrame.lua @@ -340,10 +340,18 @@ function SmartPickupFrame:addRow(prefab, data) 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 + +-- Lange tekster fordeles på flere rækker i stedet for at blive afkortet. Returnerer første rækkes titel. function SmartPickupFrame:addTextRow(text) - local title = self:addRow(self.textPrefab, {kind = "text"}):getDescendantByName("title") - title:setText(text) - return title + local first = nil + for _, line in ipairs(ADFlowView.wrapText(text, SmartPickupFrame.TEXT_ROW_CHARS)) do + local title = self:addRow(self.textPrefab, {kind = "text"}):getDescendantByName("title") + title:setText(line) + first = first or title + end + return first end -- AutoDrive farver hver række i onCreate; her sker det efter hver genopbygning, diff --git a/FS25_ADSmartPickup/l10n/l10n_da.xml b/FS25_ADSmartPickup/l10n/l10n_da.xml index 6f6fdbb..c0f1b52 100644 --- a/FS25_ADSmartPickup/l10n/l10n_da.xml +++ b/FS25_ADSmartPickup/l10n/l10n_da.xml @@ -73,6 +73,7 @@ + diff --git a/FS25_ADSmartPickup/l10n/l10n_en.xml b/FS25_ADSmartPickup/l10n/l10n_en.xml index 5f4af66..1a0f67f 100644 --- a/FS25_ADSmartPickup/l10n/l10n_en.xml +++ b/FS25_ADSmartPickup/l10n/l10n_en.xml @@ -73,6 +73,7 @@ + diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 8da190b..c8db5ba 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.29.3.0 + 1.29.4.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adFlowView.lua b/tests/test_adFlowView.lua index c64d380..ba92bb5 100644 --- a/tests/test_adFlowView.lua +++ b/tests/test_adFlowView.lua @@ -75,5 +75,17 @@ check("FV4 sammenlæg", V.joinCounted({"Chicken Coop", "Chicken Coop", "Cow Barn check("FV4 ingen dubletter", V.joinCounted({"A", "B"}, " + ", "-"), "A + B") check("FV4 tom -> tekst", V.joinCounted({}, " + ", "(ingen)"), "(ingen)") +-- FV-wrap: lange tekstrækker ombrydes ved mellemrum; indrykning gentages; kort tekst uændret +local wrapped = V.wrapText(" Prepared and sown with Sugar Beet as soon as it is sowing time for it", 30) +check("FVwrap flere linjer", #wrapped > 1, true) +check("FVwrap første linje indrykket", string.sub(wrapped[1], 1, 4), " ") +check("FVwrap anden linje indrykket", string.sub(wrapped[2], 1, 4), " ") +local maxLen = 0 +for _, line in ipairs(wrapped) do if #line > maxLen then maxLen = #line end end +check("FVwrap ingen linje over grænsen", maxLen <= 30, true) +check("FVwrap intet ord tabt", table.concat(wrapped, " "):gsub("%s+", " "):gsub("^ ", ""), "Prepared and sown with Sugar Beet as soon as it is sowing time for it") +check("FVwrap kort tekst", V.wrapText("Kort", 30)[1], "Kort") +check("FVwrap langt ord deles ikke", V.wrapText("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 10)[1], "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") + print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)