mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-08 13:04:13 +02:00
Merge pull request #1384 from bhangart/fix/borderproperties-qreal-sizes
Read the default border's column width and row height as decimals
This commit is contained in:
@@ -117,9 +117,15 @@ void BorderProperties::toXml(QDomElement &e) const
|
||||
*/
|
||||
void BorderProperties::fromXml(QDomElement &e) {
|
||||
if (e.hasAttribute("cols")) columns_count = e.attribute("cols").toInt();
|
||||
if (e.hasAttribute("colsize")) columns_width = e.attribute("colsize").toInt();
|
||||
if (e.hasAttribute("rows")) rows_count = e.attribute("rows").toInt();
|
||||
if (e.hasAttribute("rowsize")) rows_height = e.attribute("rowsize").toInt();
|
||||
// The sizes are decimals (toXml() writes them with %1), read as
|
||||
// BorderTitleBlock::borderFromXml() does; an unreadable value is
|
||||
// left as it was.
|
||||
bool ok;
|
||||
qreal size = e.attribute("colsize").toDouble(&ok);
|
||||
if (ok && qIsFinite(size)) columns_width = size;
|
||||
size = e.attribute("rowsize").toDouble(&ok);
|
||||
if (ok && qIsFinite(size)) rows_height = size;
|
||||
if (e.hasAttribute("displaycols")) display_columns = e.attribute("displaycols") == "true";
|
||||
if (e.hasAttribute("displayrows")) display_rows = e.attribute("displayrows") == "true";
|
||||
}
|
||||
|
||||
@@ -1001,6 +1001,16 @@ add_test(NAME tst_xrefpos COMMAND tst_xrefpos)
|
||||
target_include_directories(tst_xrefpos PRIVATE ${QET_DIR}/sources)
|
||||
target_link_libraries(tst_xrefpos PRIVATE Qt::Test Qt::Widgets Qt::Xml pugixml::pugixml)
|
||||
|
||||
# BorderProperties::fromXml() -- the project's <border> for new folios:
|
||||
# column width and row height are decimals and are read as such.
|
||||
add_executable(
|
||||
tst_borderpropertiesxml
|
||||
tst_borderpropertiesxml.cpp
|
||||
${QET_DIR}/sources/borderproperties.cpp)
|
||||
add_test(NAME tst_borderpropertiesxml COMMAND tst_borderpropertiesxml)
|
||||
target_include_directories(tst_borderpropertiesxml PRIVATE ${QET_DIR}/sources)
|
||||
target_link_libraries(tst_borderpropertiesxml PRIVATE Qt::Test Qt::Xml)
|
||||
|
||||
# Qt 6.4.2 writes the attributes of an element in an order that changes from
|
||||
# one process to the next, so a project saved twice by two runs of the binary
|
||||
# differs in bytes only (seen on projects without any numbering, too). A fixed
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
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 "borderproperties.h"
|
||||
|
||||
#include <QtTest>
|
||||
#include <QDomDocument>
|
||||
|
||||
/**
|
||||
BorderProperties::fromXml() -- the <border> element a project keeps for
|
||||
its new folios. Its column width and row height are decimals, written
|
||||
by toXml() as "%1"; they used to be read with toInt(), which is 0 for
|
||||
"60.5", and 0 is then clamped to the 5 px minimum by the folio.
|
||||
*/
|
||||
class tst_borderpropertiesxml : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
static QDomElement border(const QString &attributes)
|
||||
{
|
||||
static QDomDocument doc;
|
||||
doc.setContent(QStringLiteral("<border %1/>").arg(attributes));
|
||||
return doc.documentElement();
|
||||
}
|
||||
|
||||
static BorderProperties base()
|
||||
{
|
||||
BorderProperties p;
|
||||
p.columns_count = 17;
|
||||
p.columns_width = 60;
|
||||
p.rows_count = 8;
|
||||
p.rows_height = 80;
|
||||
p.display_columns = true;
|
||||
p.display_rows = true;
|
||||
return p;
|
||||
}
|
||||
|
||||
private slots:
|
||||
void sizesAreReadAsDecimals_data()
|
||||
{
|
||||
QTest::addColumn<QString>("colsize");
|
||||
QTest::addColumn<QString>("rowsize");
|
||||
QTest::addColumn<qreal>("width");
|
||||
QTest::addColumn<qreal>("height");
|
||||
QTest::newRow("whole numbers") << "50" << "100" << 50.0 << 100.0;
|
||||
QTest::newRow("decimals") << "60.5" << "80.25" << 60.5 << 80.25;
|
||||
QTest::newRow("rounds down") << "61.3" << "61.3" << 61.3 << 61.3;
|
||||
QTest::newRow("rounds up") << "61.7" << "61.7" << 61.7 << 61.7;
|
||||
}
|
||||
|
||||
void sizesAreReadAsDecimals()
|
||||
{
|
||||
QFETCH(QString, colsize);
|
||||
QFETCH(QString, rowsize);
|
||||
QFETCH(qreal, width);
|
||||
QFETCH(qreal, height);
|
||||
|
||||
BorderProperties p = base();
|
||||
QDomElement e = border(QStringLiteral("cols=\"17\" colsize=\"%1\" rows=\"8\" rowsize=\"%2\"")
|
||||
.arg(colsize, rowsize));
|
||||
p.fromXml(e);
|
||||
QCOMPARE(p.columns_width, width);
|
||||
QCOMPARE(p.rows_height, height);
|
||||
QCOMPARE(p.columns_count, 17);
|
||||
QCOMPARE(p.rows_count, 8);
|
||||
}
|
||||
|
||||
void savedSizesComeBack()
|
||||
{
|
||||
BorderProperties saved = base();
|
||||
saved.columns_width = 60.5;
|
||||
saved.rows_height = 80.25;
|
||||
QDomDocument doc;
|
||||
QDomElement e = doc.createElement(QStringLiteral("border"));
|
||||
saved.toXml(e);
|
||||
|
||||
BorderProperties loaded = base();
|
||||
loaded.fromXml(e);
|
||||
QCOMPARE(loaded.columns_width, 60.5);
|
||||
QCOMPARE(loaded.rows_height, 80.25);
|
||||
}
|
||||
|
||||
// An unreadable size leaves the previous value, as a missing one does.
|
||||
void unreadableSizeIsLeftAlone_data()
|
||||
{
|
||||
QTest::addColumn<QString>("attributes");
|
||||
QTest::newRow("missing") << "cols=\"17\" rows=\"8\"";
|
||||
QTest::newRow("text") << "colsize=\"wide\" rowsize=\"tall\"";
|
||||
QTest::newRow("nan") << "colsize=\"nan\" rowsize=\"nan\"";
|
||||
QTest::newRow("inf") << "colsize=\"inf\" rowsize=\"-inf\"";
|
||||
}
|
||||
|
||||
void unreadableSizeIsLeftAlone()
|
||||
{
|
||||
QFETCH(QString, attributes);
|
||||
BorderProperties p = base();
|
||||
QDomElement e = border(attributes);
|
||||
p.fromXml(e);
|
||||
QCOMPARE(p.columns_width, 60.0);
|
||||
QCOMPARE(p.rows_height, 80.0);
|
||||
}
|
||||
};
|
||||
|
||||
QTEST_GUILESS_MAIN(tst_borderpropertiesxml)
|
||||
#include "tst_borderpropertiesxml.moc"
|
||||
Reference in New Issue
Block a user