mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-29 05:44:14 +02:00
Fix bugtracker #973: unset title-block custom variable shows its own name
BorderTitleBlock::updateDiagramContextForTitleBlock() skips merging a page-level custom variable into the title block's render context whenever its value is empty -- added by PR #572 to fix #531, where an empty page-level value was shadowing a real project-level one of the same name. But skipping the merge removes the key from the context entirely, and TitleBlockTemplate::interpreteVariables() only replaces "%name"/"%{name}" when "name" is an actual key in that context -- anything absent is left as its own literal placeholder text. Folio Properties auto-adds every one of a template's custom variables to the Custom tab with an empty value (#271/ #495) precisely so the user only has to fill in what's missing; until they do, that variable now renders as e.g. "%label1" instead of blank. Reproduced two ways: a synthetic fixture, and examples/2612_ats_singlephase.qet itself, which already carries three such auto-added-but-unset properties ("label1", "label2", "label3") and renders all three literally on current master. Fix: skip the empty page-level value only when a project-level one already exists to show through (preserving #531's guarantee); otherwise still merge it in empty, so the placeholder resolves to blank rather than falling out of the context altogether. Verified against the shipped example (--export-png, before/after crop of the rendered title block): "%label1"/"%label2"/"%label3" now blank. A variable never added to the Custom tab at all ("%client", also present in the same example) is unaffected -- nothing was ever configured for it, and that is a separate, narrower case. Qt 6.10.2, ctest 11/11. A related but distinct issue -- DiagramContext::toXml() trims a stored value before saving, so an all-whitespace value is written as empty -- explains a second symptom from the same report (a single-space "workaround" value vanishing after the project is reopened) but touches every context-backed property, not just title blocks, and is left for a separate fix. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -896,10 +896,20 @@ void BorderTitleBlock::updateDiagramContextForTitleBlock(
|
||||
// An empty page-level value means the variable was auto-added to the
|
||||
// folio's Custom tab (#495) but never actually set by the user, so it
|
||||
// must not shadow a real project-level value of the same name (#531).
|
||||
//
|
||||
// That guard has to stop short of removing the key outright, though
|
||||
// (#973). TitleBlockTemplate::interpreteVariables() only replaces a
|
||||
// "%name"/"%{name}" placeholder when "name" is a key in this context at
|
||||
// all -- an unset variable that never makes it in is left as its own
|
||||
// literal placeholder text in the rendered title block, not blank.
|
||||
// So an empty page-level value is skipped only when a real project-level
|
||||
// one is already there to show through; otherwise it still goes in
|
||||
// empty, which is what makes the placeholder resolve to nothing.
|
||||
DiagramContext context = initial_context;
|
||||
foreach (QString key, additional_fields_.keys()) {
|
||||
if (!additional_fields_[key].toString().isEmpty())
|
||||
context.addValue(key, additional_fields_[key]);
|
||||
const QVariant value = additional_fields_[key];
|
||||
if (!value.toString().isEmpty() || !context.contains(key))
|
||||
context.addValue(key, value);
|
||||
}
|
||||
|
||||
// ... overridden by the historical and/or dynamically generated fields
|
||||
|
||||
Reference in New Issue
Block a user