Add %T, the target folio's title, to report and cross reference formulas

A folio report could name the folio it points to by position (%f), folio
number (%F), installation (%M) and location (%LM), but not by its title.
EPLAN and other tools print references like "+UV1/1 Versorgung UG/EG.0",
which with %T is the formula "+%LM/%F %T.%c".

- FormulaContext carries the folio title, filled from the title block.
- %T is replaced on its own only, not as the start of a longer word.
- A report whose formula uses %T follows the target folio's title block
  (BorderTitleBlock::informationChanged), as %F already follows its
  folio number.
- The report and cross reference property pages list %T.

tst_reportfoliotitle checks the replacement, that %total and title
block variables keep their values, and an empty title.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
DaTweety
2026-10-17 16:44:43 +02:00
parent 8c5a16d50e
commit 1080188f6e
7 changed files with 98 additions and 1 deletions
+3
View File
@@ -278,6 +278,9 @@ target_compile_definitions(tst_multielementinfo PRIVATE
# collection paths just chosen, not the ones they replace.
qet_add_app_test(tst_assistantinfopaths tst_assistantinfopaths.cpp)
# %T in a report or cross reference formula is the target folio's title.
qet_add_app_test(tst_reportfoliotitle tst_reportfoliotitle.cpp)
# Escape during a picture's resize, rotate or pivot drag puts it back, keeps
# it selected and records no undo step (#1414); the key goes to the view.
qet_add_app_test(tst_imagehandleescape tst_imagehandleescape.cpp)
+80
View File
@@ -0,0 +1,80 @@
/*
Copyright 2006-2026 The QElectroTech Team
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
QElectroTech is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "qetapptest.h"
#include "autoNum/assignvariables.h"
#include <QStandardPaths>
/**
%T in a folio report or cross reference formula is the title of the
folio the reference points to, so a reference can read like the ones
EPLAN prints: "+UV1/1 Versorgung UG/EG.0". %total and the title block
and project variables (lower case only) keep their own values.
*/
class tst_reportfoliotitle : public QObject
{
Q_OBJECT
static QString label(const QString &formula, const autonum::FormulaContext &c)
{
autonum::sequentialNumbers seq;
return autonum::AssignVariables::formulaToLabel(formula, seq, c);
}
static autonum::FormulaContext context()
{
autonum::FormulaContext c;
c.folio = QStringLiteral("1");
c.folio_title = QStringLiteral("Versorgung UG/EG");
c.folio_index = 2;
c.folio_total = 23;
c.locmach = QStringLiteral("UV1");
return c;
}
private slots:
void titleIsReplaced()
{
const QString result = label(QStringLiteral("+%LM/%F %T"), context());
QCOMPARE(result, QStringLiteral("+UV1/1 Versorgung UG/EG"));
}
void otherVariablesKeepTheirValue()
{
autonum::FormulaContext c = context();
c.title_block_fields.addValue(QStringLiteral("typ"), QStringLiteral("SH363N"));
const QString result = label(QStringLiteral("%T / %total / %typ / %{typ}"), c);
QCOMPARE(result, QStringLiteral("Versorgung UG/EG / 23 / SH363N / SH363N"));
}
void emptyTitleLeavesNothing()
{
autonum::FormulaContext c = context();
c.folio_title.clear();
const QString result = label(QStringLiteral("%F%T"), c);
QCOMPARE(result, QStringLiteral("1"));
}
};
int main(int argc, char **argv)
{
QStandardPaths::setTestModeEnabled(true);
return QetAppTest::run<tst_reportfoliotitle>(argc, argv);
}
#include "tst_reportfoliotitle.moc"