QElectroTech 0.200.1-dev
Loading...
Searching...
No Matches
titleblocktemplate.h
Go to the documentation of this file.
1/*
2 Copyright 2006-2026 The QElectroTech Team
3 This file is part of QElectroTech.
4
5 QElectroTech is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 2 of the License, or
8 (at your option) any later version.
9
10 QElectroTech is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
17*/
18#ifndef TITLEBLOCK_TEMPLATE_H
19#define TITLEBLOCK_TEMPLATE_H
20#include "diagramcontext.h"
21#include "qet.h"
23#include "titleblockcell.h"
24
25#include <QtSvg>
26#include <QtXml>
27#include <optional>
28
38class TitleBlockTemplate : public QObject {
39 Q_OBJECT
40
41 public:
105
106 // constructors, destructor
107 TitleBlockTemplate(QObject * = nullptr);
108 ~TitleBlockTemplate() override;
109 private:
111
112 // methods
113 public:
114 TitleBlockCell *createCell(const TitleBlockCell * = nullptr);
115 static QFont fontForCell(const TitleBlockCell &);
116 bool loadFromXmlFile(const QString &);
117 bool loadFromXmlElement(const QDomElement &);
118 bool saveToXmlFile(const QString &);
119 bool saveToXmlElement(QDomElement &) const;
120 void exportCellToXml(TitleBlockCell *,QDomElement &) const;
121 TitleBlockTemplate *clone() const;
122 QString name() const;
123 QString information() const;
124 void setInformation(const QString &);
125 int rowDimension(int);
126 void setRowDimension(int, const TitleBlockDimension &);
128 void setColumnDimension(int, const TitleBlockDimension &);
129 int columnsCount() const;
130 int rowsCount() const;
131 QList<int> columnsWidth(int) const;
132 QList<int> rowsHeights() const;
135 int minimumWidth();
136 int maximumWidth();
137 int width(int);
138 int height() const;
139
140 bool moveRow(int, int);
141 void addRow(int = -1);
142 bool insertRow(int, const QList<TitleBlockCell *> &, int = -1);
143 QList<TitleBlockCell *> takeRow(int);
144 QList<TitleBlockCell *> createRow();
145
146 bool moveColumn(int, int);
147 void addColumn(int = -1);
149 const QList<TitleBlockCell *> &, int = -1);
150 QList<TitleBlockCell *> takeColumn(int);
151 QList<TitleBlockCell *> createColumn();
152
153 TitleBlockCell *cell(int, int) const;
154 QSet<TitleBlockCell *> spannedCells(
155 const TitleBlockCell *, bool = false) const;
156 QHash<TitleBlockCell *, QPair<int, int> > getAllSpans() const;
157 void setAllSpans(const QHash<TitleBlockCell *, QPair<int, int> > &);
158 bool addLogo(
159 const QString &,
160 QByteArray *,
161 const QString & = "svg",
162 const QString & = "xml");
163 bool addLogoFromFile(const QString &, const QString & = QString());
164 bool saveLogoToFile(const QString &, const QString &);
165 bool removeLogo(const QString &);
166 bool renameLogo(const QString &, const QString &);
167 void setLogoStorage(const QString &, const QString &);
168 QList<QString> logos() const;
169 QString logoType(const QString &) const;
170 QSvgRenderer *vectorLogo(const QString &) const;
171 QPixmap bitmapLogo(const QString &) const;
172
173 void render(QPainter &, const DiagramContext &, int) const;
174 void renderDxf(
175 QRectF &,
176 const DiagramContext &,
177 int,
178 QString &,
179 int) const;
180 void renderCell(QPainter &,
181 const TitleBlockCell &,
182 const DiagramContext &,
183 const QRect &) const;
184 void applyCellSpans();
185 void forgetSpanning();
186 void forgetSpanning(TitleBlockCell *, bool = true);
189 void applyRowColNums();
190 void rowColsChanged();
191 QStringList listOfVariables();
192
193 protected:
194 void loadInformation(const QDomElement &);
195 bool loadLogos(const QDomElement &, bool = false);
196 bool loadLogo(const QDomElement &);
197 bool loadGrid(const QDomElement &);
198 bool loadCells(const QDomElement &);
199 void loadCell(const QDomElement &);
200 void saveInformation(QDomElement &) const;
201 void saveLogos(QDomElement &) const;
202 void saveLogo(const QString &, QDomElement &) const;
203 void saveGrid(QDomElement &) const;
204 void saveCells(QDomElement &) const;
205 void saveCell(TitleBlockCell *, QDomElement &, bool = false) const;
206 QList<TitleBlockCell *> createCellsList(int);
207
208 private:
209 void parseRows(const QString &);
210 void parseColumns(const QString &);
211 bool checkCell(const QDomElement &, TitleBlockCell ** = nullptr);
213 void initCells();
227 std::optional<WidthConstraintCase> classifyWidthConstraint(int &abs_total, qreal &remaining_width_fraction);
228 int lengthRange(int, int, const QList<int> &) const;
229 QString finalTextForCell(
230 const TitleBlockCell &,
231 const DiagramContext &) const;
232 QString interpreteVariables(
233 const QString &,
234 const DiagramContext &) const;
235 void renderTextCell(
236 QPainter &,
237 const QString &,
238 const TitleBlockCell &,
239 const QRectF &) const;
241 QString &,
242 const QString &,
243 const TitleBlockCell &,
244 qreal,
245 qreal,
246 qreal,
247 qreal,
248 int) const;
249
250 // attributes
251 private:
256 QString name_;
261 QHash<QString, QByteArray > data_logos_;
266 QHash<QString, QString> storage_logos_;
271 QHash<QString, QString> type_logos_;
275 QHash<QString, QSvgRenderer *> vector_logos_;
279 QHash<QString, QPixmap> bitmap_logos_;
280
281 QList<int> rows_heights_;
286 QList<TitleBlockDimension> columns_width_;
291 QList<TitleBlockCell *> registered_cells_;
292 QList< QList<TitleBlockCell *> > cells_;
293};
294#endif
Definition diagramcontext.h:92
Definition titleblockcell.h:26
QString logoType(const QString &) const
TitleBlockTemplate::logoType.
Definition titleblocktemplate.cpp:1534
void exportCellToXml(TitleBlockCell *, QDomElement &) const
TitleBlockTemplate::exportCellToXml.
Definition titleblocktemplate.cpp:186
void applyRowColNums()
TitleBlockTemplate::applyRowColNums Ensure all cells have the right col+row numbers.
Definition titleblocktemplate.cpp:2167
int maximumWidth()
TitleBlockTemplate::maximumWidth.
Definition titleblocktemplate.cpp:1058
QHash< QString, QString > storage_logos_
storage_logos_ : Logos applied storage type (e.g. "xml" or "base64")
Definition titleblocktemplate.h:266
int height() const
TitleBlockTemplate::height.
Definition titleblocktemplate.cpp:1090
QList< TitleBlockCell * > createRow()
TitleBlockTemplate::createRow.
Definition titleblocktemplate.cpp:1172
void applyCellSpan(TitleBlockCell *)
TitleBlockTemplate::applyCellSpan Ensure the spans of the provided cell are applied within the grid s...
Definition titleblocktemplate.cpp:2133
void saveGrid(QDomElement &) const
TitleBlockTemplate::saveGrid Export this template's cells grid as XML.
Definition titleblocktemplate.cpp:574
bool checkCell(const QDomElement &, TitleBlockCell **=nullptr)
TitleBlockTemplate::checkCell Load the essential attributes of a cell: row and column indices and spa...
Definition titleblocktemplate.cpp:658
QList< TitleBlockDimension > columns_width_
columns_width_ : columns widths –
Definition titleblocktemplate.h:286
bool loadFromXmlFile(const QString &)
TitleBlockTemplate::loadFromXmlFile Load a titleblock template from an XML file.
Definition titleblocktemplate.cpp:94
bool saveToXmlElement(QDomElement &) const
TitleBlockTemplate::saveToXmlElement Save the title block template as XML.
Definition titleblocktemplate.cpp:167
void forgetSpanning()
TitleBlockTemplate::forgetSpanning Set the spanner_cell attribute of every cell to 0.
Definition titleblocktemplate.cpp:2016
bool moveRow(int, int)
TitleBlockTemplate::moveRow Move a row within this template.
Definition titleblocktemplate.cpp:1106
void renderTextCell(QPainter &, const QString &, const TitleBlockCell &, const QRectF &) const
TitleBlockTemplate::renderTextCell This method uses a painter to render the text of a cell into the c...
Definition titleblocktemplate.cpp:1871
void applyCellSpans()
TitleBlockTemplate::applyCellSpans Forget any previously applied span, then apply again all spans def...
Definition titleblocktemplate.cpp:2054
bool renameLogo(const QString &, const QString &)
TitleBlockTemplate::renameLogo Rename the logo_name logo to new_name.
Definition titleblocktemplate.cpp:1482
QList< int > rows_heights_
rows heights – simple integers
Definition titleblocktemplate.h:281
bool addLogo(const QString &, QByteArray *, const QString &="svg", const QString &="xml")
TitleBlockTemplate::addLogo.
Definition titleblocktemplate.cpp:1352
TitleBlockCell * cell(int, int) const
TitleBlockTemplate::cell.
Definition titleblocktemplate.cpp:1253
void renderTextCellDxf(QString &, const QString &, const TitleBlockCell &, qreal, qreal, qreal, qreal, int) const
TitleBlockTemplate::renderTextCellDxf.
Definition titleblocktemplate.cpp:1926
QString name_
name_ : name identifying the Title Block Template within its parent collection
Definition titleblocktemplate.h:256
bool moveColumn(int, int)
TitleBlockTemplate::moveColumn Move the column at index "from" to index "to".
Definition titleblocktemplate.cpp:1184
bool loadLogos(const QDomElement &, bool=false)
TitleBlockTemplate::loadLogos Import the logos from a given XML titleblock template.
Definition titleblocktemplate.cpp:282
QList< TitleBlockCell * > registered_cells_
registered_cells_ : Cells objects created rattached to this template, but not mandatorily used
Definition titleblocktemplate.h:291
int minimumWidth()
TitleBlockTemplate::minimumWidth.
Definition titleblocktemplate.cpp:1026
void initCells()
TitleBlockTemplate::initCells Initialize the internal cells grid with the row and column counts....
Definition titleblocktemplate.cpp:719
QHash< TitleBlockCell *, QPair< int, int > > getAllSpans() const
TitleBlockTemplate::getAllSpans Export the span parameters of all cell in the current grid.
Definition titleblocktemplate.cpp:1311
void setAllSpans(const QHash< TitleBlockCell *, QPair< int, int > > &)
TitleBlockTemplate::setAllSpans Restore a set of span parameters.
Definition titleblocktemplate.cpp:1334
QHash< QString, QByteArray > data_logos_
data_logos_ : Logos raw data
Definition titleblocktemplate.h:261
QString finalTextForCell(const TitleBlockCell &, const DiagramContext &) const
TitleBlockTemplate::finalTextForCell.
Definition titleblocktemplate.cpp:1783
QList< int > rowsHeights() const
TitleBlockTemplate::rowsHeights.
Definition titleblocktemplate.cpp:909
std::optional< WidthConstraintCase > classifyWidthConstraint(int &abs_total, qreal &remaining_width_fraction)
TitleBlockTemplate::classifyWidthConstraint Classifies this template's absolute-width (ABS) and relat...
Definition titleblocktemplate.cpp:984
QStringList listOfVariables()
TitleBlockTemplate::listOfVariables Get list of variables.
Definition titleblocktemplate.cpp:1830
bool checkCellSpan(TitleBlockCell *)
TitleBlockTemplate::checkCellSpan Check whether a given cell can be spanned according to its row_span...
Definition titleblocktemplate.cpp:2077
void loadInformation(const QDomElement &)
TitleBlockTemplate::loadInformation Import text informations from a given XML title block template.
Definition titleblocktemplate.cpp:264
void parseColumns(const QString &)
TitleBlockTemplate::parseColumns Parse the columns widths.
Definition titleblocktemplate.cpp:422
void parseRows(const QString &)
TitleBlockTemplate::parseRows Parse the rows heights.
Definition titleblocktemplate.cpp:391
bool loadGrid(const QDomElement &)
Definition titleblocktemplate.cpp:359
void loadCell(const QDomElement &)
TitleBlockTemplate::loadCell Load a cell into this template.
Definition titleblocktemplate.cpp:495
QHash< QString, QSvgRenderer * > vector_logos_
vector_logos_ : Rendered objects for vector logos
Definition titleblocktemplate.h:275
bool insertColumn(const TitleBlockDimension &, const QList< TitleBlockCell * > &, int=-1)
TitleBlockTemplate::insertColumn.
Definition titleblocktemplate.cpp:1211
static QFont fontForCell(const TitleBlockCell &)
TitleBlockTemplate::fontForCell.
Definition titleblocktemplate.cpp:84
TitleBlockTemplate(const TitleBlockTemplate &)
int rowDimension(int)
TitleBlockTemplate::rowDimension.
Definition titleblocktemplate.cpp:765
int width(int)
TitleBlockTemplate::width.
Definition titleblocktemplate.cpp:1078
QString name() const
TitleBlockTemplate::name.
Definition titleblocktemplate.cpp:738
void render(QPainter &, const DiagramContext &, int) const
TitleBlockTemplate::render Render the titleblock.
Definition titleblocktemplate.cpp:1582
void rowColsChanged()
TitleBlockTemplate::rowColsChanged Take care of consistency and span-related problematics when adding...
Definition titleblocktemplate.cpp:2182
void saveCell(TitleBlockCell *, QDomElement &, bool=false) const
TitleBlockTemplate::saveCell Export a specific cell as XML.
Definition titleblocktemplate.cpp:620
~TitleBlockTemplate() override
TitleBlockTemplate::~TitleBlockTemplate Destructor.
Definition titleblocktemplate.cpp:43
QString interpreteVariables(const QString &, const DiagramContext &) const
TitleBlockTemplate::interpreteVariables.
Definition titleblocktemplate.cpp:1810
int columnTypeTotal(QET::TitleBlockColumnLength)
TitleBlockTemplate::columnTypeTotal.
Definition titleblocktemplate.cpp:934
QString information_
Definition titleblocktemplate.h:257
void setColumnDimension(int, const TitleBlockDimension &)
TitleBlockTemplate::setColumnDimension Set the width of a column.
Definition titleblocktemplate.cpp:806
TitleBlockCell * createCell(const TitleBlockCell *=nullptr)
TitleBlockTemplate::createCell Create a new cell and associate it with this template,...
Definition titleblocktemplate.cpp:56
TitleBlockTemplate(QObject *=nullptr)
TitleBlockTemplate::TitleBlockTemplate Constructor.
Definition titleblocktemplate.cpp:34
int rowsCount() const
TitleBlockTemplate::rowsCount.
Definition titleblocktemplate.cpp:828
void saveInformation(QDomElement &) const
TitleBlockTemplate::saveInformation Export this template's extra information.
Definition titleblocktemplate.cpp:507
QList< TitleBlockCell * > createCellsList(int)
TitleBlockTemplate::createCellsList.
Definition titleblocktemplate.cpp:72
QSet< TitleBlockCell * > spannedCells(const TitleBlockCell *, bool=false) const
TitleBlockTemplate::spannedCells.
Definition titleblocktemplate.cpp:1272
int columnsCount() const
TitleBlockTemplate::columnsCount.
Definition titleblocktemplate.cpp:819
void setRowDimension(int, const TitleBlockDimension &)
TitleBlockTemplate::setRowDimension Set the height of a row.
Definition titleblocktemplate.cpp:779
TitleBlockTemplate * clone() const
TitleBlockTemplate::clone.
Definition titleblocktemplate.cpp:198
QList< int > columnsWidth(int) const
TitleBlockTemplate::columnsWidth.
Definition titleblocktemplate.cpp:838
QList< QString > logos() const
TitleBlockTemplate::logos.
Definition titleblocktemplate.cpp:1522
bool removeLogo(const QString &)
TitleBlockTemplate::removeLogo.
Definition titleblocktemplate.cpp:1456
void setLogoStorage(const QString &, const QString &)
TitleBlockTemplate::setLogoStorage Set the kind of storage for the logo_name logo.
Definition titleblocktemplate.cpp:1511
QHash< QString, QPixmap > bitmap_logos_
bitmap_logos_ : Pixmaps for bitmap logos
Definition titleblocktemplate.h:279
void saveLogo(const QString &, QDomElement &) const
TitleBlockTemplate::saveLogo Export a specific logo as XML.
Definition titleblocktemplate.cpp:543
int columnTypeCount(QET::TitleBlockColumnLength)
TitleBlockTemplate::columnTypeCount.
Definition titleblocktemplate.cpp:919
TitleBlockDimension columnDimension(int)
TitleBlockTemplate::columnDimension.
Definition titleblocktemplate.cpp:792
QHash< QString, QString > type_logos_
type_logos_ : Logos types (e.g. "png", "jpeg", "svg")
Definition titleblocktemplate.h:271
QSvgRenderer * vectorLogo(const QString &) const
TitleBlockTemplate::vectorLogo.
Definition titleblocktemplate.cpp:1549
QList< QList< TitleBlockCell * > > cells_
Cells grid.
Definition titleblocktemplate.h:292
QString information() const
TitleBlockTemplate::information.
Definition titleblocktemplate.cpp:747
void renderDxf(QRectF &, const DiagramContext &, int, QString &, int) const
TitleBlockTemplate::renderDxf Render the titleblock in DXF.
Definition titleblocktemplate.cpp:1644
bool loadLogo(const QDomElement &)
TitleBlockTemplate::loadLogo Import the logo from a given XML logo description.
Definition titleblocktemplate.cpp:321
bool loadCells(const QDomElement &)
TitleBlockTemplate::loadCells Analyze an XML element, looking for grid cells. The grid cells are chec...
Definition titleblocktemplate.cpp:473
void addRow(int=-1)
TitleBlockTemplate::addRow Add a new 25px-wide row at the provided index.
Definition titleblocktemplate.cpp:1123
void saveLogos(QDomElement &) const
TitleBlockTemplate::saveLogos Export this template's logos as XML.
Definition titleblocktemplate.cpp:524
QPixmap bitmapLogo(const QString &) const
TitleBlockTemplate::bitmapLogo.
Definition titleblocktemplate.cpp:1564
void addColumn(int=-1)
TitleBlockTemplate::addColumn Add a new 50px-wide column at the provided index.
Definition titleblocktemplate.cpp:1199
QList< TitleBlockCell * > takeColumn(int)
TitleBlockTemplate::takeColumn Removes the column at index i.
Definition titleblocktemplate.cpp:1227
bool loadFromXmlElement(const QDomElement &)
TitleBlockTemplate::loadFromXmlElement.
Definition titleblocktemplate.cpp:123
int lengthRange(int, int, const QList< int > &) const
TitleBlockTemplate::lengthRange.
Definition titleblocktemplate.cpp:2197
QList< TitleBlockCell * > createColumn()
TitleBlockTemplate::createColumn.
Definition titleblocktemplate.cpp:1242
bool saveToXmlFile(const QString &)
TitleBlockTemplate::saveToXmlFile Save the title block template into an XML file.
Definition titleblocktemplate.cpp:147
WidthConstraintCase
The TitleBlockTemplate::WidthConstraintCase enum Distinguishes the possible outcomes of minimumWidth(...
Definition titleblocktemplate.h:67
@ Unconstrained
Definition titleblocktemplate.h:82
@ RelativeWidthExceeds100Percent
Definition titleblocktemplate.h:92
@ AbsoluteColumnsExceedRemainingWidth
Definition titleblocktemplate.h:103
void saveCells(QDomElement &) const
TitleBlockTemplate::saveCells Export this template's cells as XML (without the grid-related informati...
Definition titleblocktemplate.cpp:599
void renderCell(QPainter &, const TitleBlockCell &, const DiagramContext &, const QRect &) const
TitleBlockTemplate::renderCell Render a titleblock cell.
Definition titleblocktemplate.cpp:1731
QList< TitleBlockCell * > takeRow(int)
TitleBlockTemplate::takeRow Removes the row at index i.
Definition titleblocktemplate.cpp:1156
bool saveLogoToFile(const QString &, const QString &)
TitleBlockTemplate::saveLogoToFile.
Definition titleblocktemplate.cpp:1435
bool insertRow(int, const QList< TitleBlockCell * > &, int=-1)
TitleBlockTemplate::insertRow.
Definition titleblocktemplate.cpp:1137
void setInformation(const QString &)
TitleBlockTemplate::setInformation.
Definition titleblocktemplate.cpp:756
bool addLogoFromFile(const QString &, const QString &=QString())
TitleBlockTemplate::addLogoFromFile.
Definition titleblocktemplate.cpp:1406
TitleBlockColumnLength
enum used to specify the type of a length
Definition qet.h:142
Definition dimension.h:26