mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-17 20:50:34 +01:00
Wrap code for better readability + Mod doc
This commit is contained in:
@@ -49,8 +49,11 @@ TitleBlockTemplate::~TitleBlockTemplate() {
|
|||||||
@param existing_cell (optional) An existing cell that will be copied
|
@param existing_cell (optional) An existing cell that will be copied
|
||||||
@return A pointer to the newly created cell
|
@return A pointer to the newly created cell
|
||||||
*/
|
*/
|
||||||
TitleBlockCell *TitleBlockTemplate::createCell(const TitleBlockCell *existing_cell) {
|
TitleBlockCell *TitleBlockTemplate::createCell(
|
||||||
TitleBlockCell *new_cell = existing_cell ? new TitleBlockCell(*existing_cell) : new TitleBlockCell();
|
const TitleBlockCell *existing_cell) {
|
||||||
|
TitleBlockCell *new_cell =
|
||||||
|
existing_cell ? new TitleBlockCell(*existing_cell)
|
||||||
|
: new TitleBlockCell();
|
||||||
registered_cells_ << new_cell;
|
registered_cells_ << new_cell;
|
||||||
return(new_cell);
|
return(new_cell);
|
||||||
}
|
}
|
||||||
@@ -173,7 +176,8 @@ bool TitleBlockTemplate::saveToXmlElement(QDomElement &xml_element) const {
|
|||||||
@param xml_element :
|
@param xml_element :
|
||||||
Parent XML element to be used when exporting \a cell
|
Parent XML element to be used when exporting \a cell
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::exportCellToXml(TitleBlockCell *cell, QDomElement &xml_element) const {
|
void TitleBlockTemplate::exportCellToXml(TitleBlockCell *cell,
|
||||||
|
QDomElement &xml_element) const {
|
||||||
saveCell(cell, xml_element, true);
|
saveCell(cell, xml_element, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,16 +195,22 @@ TitleBlockTemplate *TitleBlockTemplate::clone() const {
|
|||||||
// this does not really duplicates pixmaps,
|
// this does not really duplicates pixmaps,
|
||||||
// only the objects that hold a key to the implicitly shared pixmaps
|
// only the objects that hold a key to the implicitly shared pixmaps
|
||||||
foreach (QString logo_key, bitmap_logos_.keys()) {
|
foreach (QString logo_key, bitmap_logos_.keys()) {
|
||||||
copy -> bitmap_logos_[logo_key] = QPixmap(bitmap_logos_[logo_key]);
|
copy -> bitmap_logos_[logo_key] =
|
||||||
|
QPixmap(bitmap_logos_[logo_key]);
|
||||||
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
||||||
qDebug() << Q_FUNC_INFO << "copying " << bitmap_logos_[logo_key] -> cacheKey() << "to" << copy -> bitmap_logos_[logo_key] -> cacheKey();
|
qDebug() << Q_FUNC_INFO
|
||||||
|
<< "copying "
|
||||||
|
<< bitmap_logos_[logo_key] -> cacheKey()
|
||||||
|
<< "to"
|
||||||
|
<< copy -> bitmap_logos_[logo_key] -> cacheKey();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// we have to create new QSvgRenderer objects from the data
|
// we have to create new QSvgRenderer objects from the data
|
||||||
// (no copy constructor)
|
// (no copy constructor)
|
||||||
foreach (QString logo_key, vector_logos_.keys()) {
|
foreach (QString logo_key, vector_logos_.keys()) {
|
||||||
copy -> vector_logos_[logo_key] = new QSvgRenderer(data_logos_[logo_key]);
|
copy -> vector_logos_[logo_key] =
|
||||||
|
new QSvgRenderer(data_logos_[logo_key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
copy -> data_logos_ = data_logos_;
|
copy -> data_logos_ = data_logos_;
|
||||||
@@ -222,10 +232,13 @@ TitleBlockTemplate *TitleBlockTemplate::clone() const {
|
|||||||
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
||||||
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
||||||
TitleBlockCell *current_cell = copy -> cells_[i][j];
|
TitleBlockCell *current_cell = copy -> cells_[i][j];
|
||||||
if (TitleBlockCell *original_cell = current_cell -> spanner_cell) {
|
if (TitleBlockCell *original_cell
|
||||||
|
= current_cell -> spanner_cell) {
|
||||||
int original_cell_row = original_cell -> num_row;
|
int original_cell_row = original_cell -> num_row;
|
||||||
int original_cell_col = original_cell -> num_col;
|
int original_cell_col = original_cell -> num_col;
|
||||||
TitleBlockCell *copy_cell = copy -> cells_[original_cell_col][original_cell_row];
|
TitleBlockCell *copy_cell =
|
||||||
|
copy -> cells_[original_cell_col]
|
||||||
|
[original_cell_row];
|
||||||
current_cell -> spanner_cell = copy_cell;
|
current_cell -> spanner_cell = copy_cell;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -240,7 +253,9 @@ TitleBlockTemplate *TitleBlockTemplate::clone() const {
|
|||||||
@param xml_element
|
@param xml_element
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::loadInformation(const QDomElement &xml_element) {
|
void TitleBlockTemplate::loadInformation(const QDomElement &xml_element) {
|
||||||
for (QDomNode n = xml_element.firstChild() ; !n.isNull() ; n = n.nextSibling()) {
|
for (QDomNode n = xml_element.firstChild() ;
|
||||||
|
!n.isNull() ;
|
||||||
|
n = n.nextSibling()) {
|
||||||
if (n.isElement() && n.toElement().tagName() == "information") {
|
if (n.isElement() && n.toElement().tagName() == "information") {
|
||||||
setInformation(n.toElement().text());
|
setInformation(n.toElement().text());
|
||||||
}
|
}
|
||||||
@@ -269,10 +284,15 @@ bool TitleBlockTemplate::loadLogos(const QDomElement &xml_element, bool reset) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// we look for //logos/logo elements
|
// we look for //logos/logo elements
|
||||||
for (QDomNode n = xml_element.firstChild() ; !n.isNull() ; n = n.nextSibling()) {
|
for (QDomNode n = xml_element.firstChild() ;
|
||||||
|
!n.isNull() ;
|
||||||
|
n = n.nextSibling()) {
|
||||||
if (n.isElement() && n.toElement().tagName() == "logos") {
|
if (n.isElement() && n.toElement().tagName() == "logos") {
|
||||||
for (QDomNode p = n.firstChild() ; !p.isNull() ; p = p.nextSibling()) {
|
for (QDomNode p = n.firstChild() ;
|
||||||
if (p.isElement() && p.toElement().tagName() == "logo") {
|
!p.isNull() ;
|
||||||
|
p = p.nextSibling()) {
|
||||||
|
if (p.isElement() && p.toElement().tagName()
|
||||||
|
== "logo") {
|
||||||
loadLogo(p.toElement());
|
loadLogo(p.toElement());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -330,14 +350,17 @@ bool TitleBlockTemplate::loadLogo(const QDomElement &xml_element) {
|
|||||||
bool TitleBlockTemplate::loadGrid(const QDomElement &xml_element) {
|
bool TitleBlockTemplate::loadGrid(const QDomElement &xml_element) {
|
||||||
// we parse the first available "grid" XML element
|
// we parse the first available "grid" XML element
|
||||||
QDomElement grid_element;
|
QDomElement grid_element;
|
||||||
for (QDomNode n = xml_element.firstChild() ; !n.isNull() ; n = n.nextSibling()) {
|
for (QDomNode n = xml_element.firstChild() ;
|
||||||
|
!n.isNull() ;
|
||||||
|
n = n.nextSibling()) {
|
||||||
if (n.isElement() && n.toElement().tagName() == "grid") {
|
if (n.isElement() && n.toElement().tagName() == "grid") {
|
||||||
grid_element = n.toElement();
|
grid_element = n.toElement();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!grid_element.hasAttribute("rows") || !grid_element.hasAttribute("cols")) {
|
if (!grid_element.hasAttribute("rows")
|
||||||
|
|| !grid_element.hasAttribute("cols")) {
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,15 +386,20 @@ void TitleBlockTemplate::parseRows(const QString &rows_string) {
|
|||||||
bool conv_ok;
|
bool conv_ok;
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) // ### Qt 6: remove
|
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) // ### Qt 6: remove
|
||||||
QStringList rows_descriptions = rows_string.split(QChar(';'), QString::SkipEmptyParts);
|
QStringList rows_descriptions =
|
||||||
|
rows_string.split(QChar(';'), QString::SkipEmptyParts);
|
||||||
#else
|
#else
|
||||||
#pragma message("@TODO remove code for QT 5.14 or later")
|
#pragma message("@TODO remove code for QT 5.14 or later")
|
||||||
QStringList rows_descriptions = rows_string.split(QChar(';'), Qt::SkipEmptyParts);
|
QStringList rows_descriptions =
|
||||||
|
rows_string.split(QChar(';'), Qt::SkipEmptyParts);
|
||||||
#endif
|
#endif
|
||||||
foreach (QString rows_description, rows_descriptions) {
|
foreach (QString rows_description, rows_descriptions) {
|
||||||
if (row_size_format.exactMatch(rows_description)) {
|
if (row_size_format.exactMatch(rows_description)) {
|
||||||
int row_size = row_size_format.capturedTexts().at(1).toInt(&conv_ok);
|
int row_size =
|
||||||
if (conv_ok) rows_heights_ << row_size;
|
row_size_format.capturedTexts().at(1).toInt(
|
||||||
|
&conv_ok);
|
||||||
|
if (conv_ok)
|
||||||
|
rows_heights_ << row_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
||||||
@@ -393,24 +421,40 @@ void TitleBlockTemplate::parseColumns(const QString &cols_string) {
|
|||||||
bool conv_ok;
|
bool conv_ok;
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) // ### Qt 6: remove
|
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) // ### Qt 6: remove
|
||||||
QStringList cols_descriptions = cols_string.split(QChar(';'), QString::SkipEmptyParts);
|
QStringList cols_descriptions =
|
||||||
|
cols_string.split(QChar(';'), QString::SkipEmptyParts);
|
||||||
#else
|
#else
|
||||||
#pragma message("@TODO remove code for QT 5.14 or later")
|
#pragma message("@TODO remove code for QT 5.14 or later")
|
||||||
QStringList cols_descriptions = cols_string.split(QChar(';'), Qt::SkipEmptyParts);
|
QStringList cols_descriptions =
|
||||||
|
cols_string.split(QChar(';'), Qt::SkipEmptyParts);
|
||||||
#endif
|
#endif
|
||||||
foreach (QString cols_description, cols_descriptions) {
|
foreach (QString cols_description, cols_descriptions) {
|
||||||
if (abs_col_size_format.exactMatch(cols_description)) {
|
if (abs_col_size_format.exactMatch(cols_description)) {
|
||||||
int col_size = abs_col_size_format.capturedTexts().at(1).toInt(&conv_ok);
|
int col_size = abs_col_size_format.capturedTexts().at(1).toInt(&conv_ok);
|
||||||
if (conv_ok) columns_width_ << TitleBlockDimension(col_size, QET::Absolute);
|
if (conv_ok)
|
||||||
|
columns_width_ << TitleBlockDimension(
|
||||||
|
col_size,
|
||||||
|
QET::Absolute);
|
||||||
} else if (rel_col_size_format.exactMatch(cols_description)) {
|
} else if (rel_col_size_format.exactMatch(cols_description)) {
|
||||||
int col_size = rel_col_size_format.capturedTexts().at(2).toInt(&conv_ok);
|
int col_size =
|
||||||
QET::TitleBlockColumnLength col_type = rel_col_size_format.capturedTexts().at(1) == "t" ? QET::RelativeToTotalLength : QET::RelativeToRemainingLength;
|
rel_col_size_format.capturedTexts().at(2).toInt(
|
||||||
if (conv_ok) columns_width_ << TitleBlockDimension(col_size, col_type );
|
&conv_ok);
|
||||||
|
QET::TitleBlockColumnLength col_type =
|
||||||
|
rel_col_size_format.capturedTexts().at(1)
|
||||||
|
== "t"
|
||||||
|
? QET::RelativeToTotalLength
|
||||||
|
: QET::RelativeToRemainingLength;
|
||||||
|
if (conv_ok)
|
||||||
|
columns_width_ << TitleBlockDimension(
|
||||||
|
col_size,
|
||||||
|
col_type );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
||||||
foreach (TitleBlockColDimension icd, columns_width_) {
|
foreach (TitleBlockColDimension icd, columns_width_) {
|
||||||
qDebug() << Q_FUNC_INFO << QString("%1 [%2]").arg(icd.value).arg(QET::titleBlockColumnLengthToString(icd.type));
|
qDebug() << Q_FUNC_INFO
|
||||||
|
<< QString("%1 [%2]").arg(icd.value).arg(
|
||||||
|
QET::titleBlockColumnLengthToString(icd.type));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -425,10 +469,13 @@ void TitleBlockTemplate::parseColumns(const QString &cols_string) {
|
|||||||
bool TitleBlockTemplate::loadCells(const QDomElement &xml_element) {
|
bool TitleBlockTemplate::loadCells(const QDomElement &xml_element) {
|
||||||
// we are interested by the "logo" and "field" elements
|
// we are interested by the "logo" and "field" elements
|
||||||
QDomElement grid_element;
|
QDomElement grid_element;
|
||||||
for (QDomNode n = xml_element.firstChild() ; !n.isNull() ; n = n.nextSibling()) {
|
for (QDomNode n = xml_element.firstChild() ;
|
||||||
|
!n.isNull() ;
|
||||||
|
n = n.nextSibling()) {
|
||||||
if (!n.isElement()) continue;
|
if (!n.isElement()) continue;
|
||||||
QDomElement cell_element = n.toElement();
|
QDomElement cell_element = n.toElement();
|
||||||
if (cell_element.tagName() == "field" || cell_element.tagName() == "logo") {
|
if (cell_element.tagName() == "field"
|
||||||
|
|| cell_element.tagName() == "logo") {
|
||||||
loadCell(cell_element);
|
loadCell(cell_element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -454,9 +501,11 @@ void TitleBlockTemplate::loadCell(const QDomElement &cell_element) {
|
|||||||
XML element under which extra informations will be attached
|
XML element under which extra informations will be attached
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::saveInformation(QDomElement &xml_element) const {
|
void TitleBlockTemplate::saveInformation(QDomElement &xml_element) const {
|
||||||
QDomNode information_text_node = xml_element.ownerDocument().createTextNode(information());
|
QDomNode information_text_node =
|
||||||
|
xml_element.ownerDocument().createTextNode(information());
|
||||||
|
|
||||||
QDomElement information_element = xml_element.ownerDocument().createElement("information");
|
QDomElement information_element =
|
||||||
|
xml_element.ownerDocument().createElement("information");
|
||||||
information_element.appendChild(information_text_node);
|
information_element.appendChild(information_text_node);
|
||||||
xml_element.appendChild(information_element);
|
xml_element.appendChild(information_element);
|
||||||
}
|
}
|
||||||
@@ -468,9 +517,11 @@ void TitleBlockTemplate::saveInformation(QDomElement &xml_element) const {
|
|||||||
XML Element under which the \<logos\> element will be attached
|
XML Element under which the \<logos\> element will be attached
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::saveLogos(QDomElement &xml_element) const {
|
void TitleBlockTemplate::saveLogos(QDomElement &xml_element) const {
|
||||||
QDomElement logos_element = xml_element.ownerDocument().createElement("logos");
|
QDomElement logos_element =
|
||||||
|
xml_element.ownerDocument().createElement("logos");
|
||||||
foreach(QString logo_name, type_logos_.keys()) {
|
foreach(QString logo_name, type_logos_.keys()) {
|
||||||
QDomElement logo_element = xml_element.ownerDocument().createElement("logo");
|
QDomElement logo_element =
|
||||||
|
xml_element.ownerDocument().createElement("logo");
|
||||||
saveLogo(logo_name, logo_element);
|
saveLogo(logo_name, logo_element);
|
||||||
logos_element.appendChild(logo_element);
|
logos_element.appendChild(logo_element);
|
||||||
}
|
}
|
||||||
@@ -483,20 +534,26 @@ void TitleBlockTemplate::saveLogos(QDomElement &xml_element) const {
|
|||||||
@param logo_name : Name of the logo to be exported
|
@param logo_name : Name of the logo to be exported
|
||||||
@param xml_element : XML element in which the logo will be exported
|
@param xml_element : XML element in which the logo will be exported
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::saveLogo(const QString &logo_name, QDomElement &xml_element) const {
|
void TitleBlockTemplate::saveLogo(const QString &logo_name,
|
||||||
|
QDomElement &xml_element) const {
|
||||||
if (!type_logos_.contains(logo_name)) return;
|
if (!type_logos_.contains(logo_name)) return;
|
||||||
|
|
||||||
xml_element.setAttribute("name", logo_name);
|
xml_element.setAttribute("name", logo_name);
|
||||||
xml_element.setAttribute("type", type_logos_[logo_name]);
|
xml_element.setAttribute("type", type_logos_[logo_name]);
|
||||||
xml_element.setAttribute("storage", storage_logos_[logo_name]);
|
xml_element.setAttribute("storage", storage_logos_[logo_name]);
|
||||||
|
|
||||||
if (storage_logos_[logo_name] == "xml" && type_logos_[logo_name] == "svg") {
|
if (storage_logos_[logo_name] == "xml"
|
||||||
|
&& type_logos_[logo_name] == "svg") {
|
||||||
QDomDocument svg_logo;
|
QDomDocument svg_logo;
|
||||||
svg_logo.setContent(data_logos_[logo_name]);
|
svg_logo.setContent(data_logos_[logo_name]);
|
||||||
QDomNode svg_logo_element = xml_element.ownerDocument().importNode(svg_logo.documentElement(), true);
|
QDomNode svg_logo_element =
|
||||||
|
xml_element.ownerDocument().importNode(
|
||||||
|
svg_logo.documentElement(), true);
|
||||||
xml_element.appendChild(svg_logo_element.toElement());
|
xml_element.appendChild(svg_logo_element.toElement());
|
||||||
} else if (storage_logos_[logo_name] == "base64") {
|
} else if (storage_logos_[logo_name] == "base64") {
|
||||||
QDomText base64_logo = xml_element.ownerDocument().createTextNode(data_logos_[logo_name].toBase64());
|
QDomText base64_logo =
|
||||||
|
xml_element.ownerDocument().createTextNode(
|
||||||
|
data_logos_[logo_name].toBase64());
|
||||||
xml_element.appendChild(base64_logo);
|
xml_element.appendChild(base64_logo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -508,11 +565,14 @@ void TitleBlockTemplate::saveLogo(const QString &logo_name, QDomElement &xml_ele
|
|||||||
XML element under which the \<grid\> element will be attached
|
XML element under which the \<grid\> element will be attached
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::saveGrid(QDomElement &xml_element) const {
|
void TitleBlockTemplate::saveGrid(QDomElement &xml_element) const {
|
||||||
QDomElement grid_element = xml_element.ownerDocument().createElement("grid");
|
QDomElement grid_element =
|
||||||
|
xml_element.ownerDocument().createElement("grid");
|
||||||
|
|
||||||
QString rows_attr, cols_attr;
|
QString rows_attr, cols_attr;
|
||||||
foreach(int row_height, rows_heights_) rows_attr += QString("%1;").arg(row_height);
|
foreach(int row_height, rows_heights_)
|
||||||
foreach(TitleBlockDimension col_width, columns_width_) cols_attr += col_width.toShortString();
|
rows_attr += QString("%1;").arg(row_height);
|
||||||
|
foreach(TitleBlockDimension col_width, columns_width_)
|
||||||
|
cols_attr += col_width.toShortString();
|
||||||
grid_element.setAttribute("rows", rows_attr);
|
grid_element.setAttribute("rows", rows_attr);
|
||||||
grid_element.setAttribute("cols", cols_attr);
|
grid_element.setAttribute("cols", cols_attr);
|
||||||
|
|
||||||
@@ -531,7 +591,8 @@ void TitleBlockTemplate::saveGrid(QDomElement &xml_element) const {
|
|||||||
void TitleBlockTemplate::saveCells(QDomElement &xml_element) const {
|
void TitleBlockTemplate::saveCells(QDomElement &xml_element) const {
|
||||||
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
||||||
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
||||||
if (cells_[i][j] -> cell_type != TitleBlockCell::EmptyCell) {
|
if (cells_[i][j] -> cell_type
|
||||||
|
!= TitleBlockCell::EmptyCell) {
|
||||||
saveCell(cells_[i][j], xml_element);
|
saveCell(cells_[i][j], xml_element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -541,24 +602,32 @@ void TitleBlockTemplate::saveCells(QDomElement &xml_element) const {
|
|||||||
/**
|
/**
|
||||||
@brief TitleBlockTemplate::saveCell
|
@brief TitleBlockTemplate::saveCell
|
||||||
Export a specific cell as XML
|
Export a specific cell as XML
|
||||||
@param cell Cell to be exported as XML
|
@param cell : Cell to be exported as XML
|
||||||
@param xml_element XML element under which the \<cell\> element will be attached
|
@param xml_element :
|
||||||
@param save_empty If true, the cell will be saved even if it is an empty one
|
XML element under which the \<cell\> element will be attached
|
||||||
|
@param save_empty :
|
||||||
|
If true, the cell will be saved even if it is an empty one
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::saveCell(TitleBlockCell *cell, QDomElement &xml_element, bool save_empty) const {
|
void TitleBlockTemplate::saveCell(TitleBlockCell *cell,
|
||||||
|
QDomElement &xml_element,
|
||||||
|
bool save_empty) const {
|
||||||
if (!cell) return;
|
if (!cell) return;
|
||||||
if (cell -> spanner_cell) return;
|
if (cell -> spanner_cell) return;
|
||||||
if (!save_empty && cell -> cell_type == TitleBlockCell::EmptyCell) return;
|
if (!save_empty && cell -> cell_type == TitleBlockCell::EmptyCell)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
QDomElement cell_elmt = xml_element.ownerDocument().createElement("cell");
|
QDomElement cell_elmt =
|
||||||
|
xml_element.ownerDocument().createElement("cell");
|
||||||
xml_element.appendChild(cell_elmt);
|
xml_element.appendChild(cell_elmt);
|
||||||
|
|
||||||
// save information dependent from this template
|
// save information dependent from this template
|
||||||
cell_elmt.setAttribute("row", cell -> num_row);
|
cell_elmt.setAttribute("row", cell -> num_row);
|
||||||
cell_elmt.setAttribute("col", cell -> num_col);
|
cell_elmt.setAttribute("col", cell -> num_col);
|
||||||
if (cell -> row_span) cell_elmt.setAttribute("rowspan", cell -> row_span);
|
if (cell -> row_span) cell_elmt.setAttribute("rowspan",
|
||||||
if (cell -> col_span) cell_elmt.setAttribute("colspan", cell -> col_span);
|
cell -> row_span);
|
||||||
|
if (cell -> col_span) cell_elmt.setAttribute("colspan",
|
||||||
|
cell -> col_span);
|
||||||
|
|
||||||
// save other information
|
// save other information
|
||||||
cell -> saveContentToXml(cell_elmt);
|
cell -> saveContentToXml(cell_elmt);
|
||||||
@@ -576,8 +645,10 @@ void TitleBlockTemplate::saveCell(TitleBlockCell *cell, QDomElement &xml_element
|
|||||||
this method returns true, will be filled with the created TitleBlockCell
|
this method returns true, will be filled with the created TitleBlockCell
|
||||||
@return TRUE if the cell appears to be ok, FALSE otherwise
|
@return TRUE if the cell appears to be ok, FALSE otherwise
|
||||||
*/
|
*/
|
||||||
bool TitleBlockTemplate::checkCell(const QDomElement &xml_element, TitleBlockCell **titleblock_cell_ptr) {
|
bool TitleBlockTemplate::checkCell(const QDomElement &xml_element,
|
||||||
int col_count = columns_width_.count(), row_count = rows_heights_.count();
|
TitleBlockCell **titleblock_cell_ptr) {
|
||||||
|
int col_count = columns_width_.count(),
|
||||||
|
row_count = rows_heights_.count();
|
||||||
|
|
||||||
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
||||||
qDebug() << Q_FUNC_INFO << "begin" << row_count << col_count;
|
qDebug() << Q_FUNC_INFO << "begin" << row_count << col_count;
|
||||||
@@ -588,10 +659,14 @@ bool TitleBlockTemplate::checkCell(const QDomElement &xml_element, TitleBlockCel
|
|||||||
row_span = col_span = 0;
|
row_span = col_span = 0;
|
||||||
|
|
||||||
// parse the row and col attributes
|
// parse the row and col attributes
|
||||||
if (!QET::attributeIsAnInteger(xml_element, "row", &row_num) || row_num < 0 || row_num >= row_count) {
|
if (!QET::attributeIsAnInteger(xml_element, "row", &row_num)
|
||||||
|
|| row_num < 0
|
||||||
|
|| row_num >= row_count) {
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
if (!QET::attributeIsAnInteger(xml_element, "col", &col_num) || col_num < 0 || col_num >= col_count) {
|
if (!QET::attributeIsAnInteger(xml_element, "col", &col_num)
|
||||||
|
|| col_num < 0
|
||||||
|
|| col_num >= col_count) {
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -600,7 +675,8 @@ bool TitleBlockTemplate::checkCell(const QDomElement &xml_element, TitleBlockCel
|
|||||||
qDebug() << Q_FUNC_INFO << "cell access" << col_num << row_num;
|
qDebug() << Q_FUNC_INFO << "cell access" << col_num << row_num;
|
||||||
#endif
|
#endif
|
||||||
TitleBlockCell *cell_ptr = cells_[col_num][row_num];
|
TitleBlockCell *cell_ptr = cells_[col_num][row_num];
|
||||||
if (cell_ptr -> cell_type != TitleBlockCell::EmptyCell || cell_ptr -> spanner_cell) {
|
if (cell_ptr -> cell_type != TitleBlockCell::EmptyCell
|
||||||
|
|| cell_ptr -> spanner_cell) {
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
// ensure the num_row and num_col attributes are alright
|
// ensure the num_row and num_col attributes are alright
|
||||||
@@ -608,11 +684,13 @@ bool TitleBlockTemplate::checkCell(const QDomElement &xml_element, TitleBlockCel
|
|||||||
cell_ptr -> num_col = col_num;
|
cell_ptr -> num_col = col_num;
|
||||||
|
|
||||||
// parse the rowspan and colspan attributes
|
// parse the rowspan and colspan attributes
|
||||||
if (QET::attributeIsAnInteger(xml_element, "rowspan", &row_span) && row_span > 0) {
|
if (QET::attributeIsAnInteger(xml_element, "rowspan", &row_span)
|
||||||
|
&& row_span > 0) {
|
||||||
cell_ptr -> row_span = row_span;
|
cell_ptr -> row_span = row_span;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (QET::attributeIsAnInteger(xml_element, "colspan", &col_span) && col_span > 0) {
|
if (QET::attributeIsAnInteger(xml_element, "colspan", &col_span)
|
||||||
|
&& col_span > 0) {
|
||||||
cell_ptr -> col_span = col_span;
|
cell_ptr -> col_span = col_span;
|
||||||
}
|
}
|
||||||
// these attributes are stored "as is" -- whether they can be applied
|
// these attributes are stored "as is" -- whether they can be applied
|
||||||
@@ -685,7 +763,8 @@ int TitleBlockTemplate::rowDimension(int i) {
|
|||||||
@param i : row index
|
@param i : row index
|
||||||
@param dimension : New height of the row at index i
|
@param dimension : New height of the row at index i
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::setRowDimension(int i, const TitleBlockDimension &dimension) {
|
void TitleBlockTemplate::setRowDimension(int i,
|
||||||
|
const TitleBlockDimension &dimension) {
|
||||||
int index = (i == -1) ? rows_heights_.count() - 1 : i;
|
int index = (i == -1) ? rows_heights_.count() - 1 : i;
|
||||||
if (index >= 0 || index < rows_heights_.count()) {
|
if (index >= 0 || index < rows_heights_.count()) {
|
||||||
rows_heights_[index] = dimension.value;
|
rows_heights_[index] = dimension.value;
|
||||||
@@ -711,7 +790,9 @@ TitleBlockDimension TitleBlockTemplate::columnDimension(int i) {
|
|||||||
@param i : column index
|
@param i : column index
|
||||||
@param dimension : New width of the column at index i
|
@param dimension : New width of the column at index i
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::setColumnDimension(int i, const TitleBlockDimension &dimension) {
|
void TitleBlockTemplate::setColumnDimension(
|
||||||
|
int i,
|
||||||
|
const TitleBlockDimension &dimension) {
|
||||||
int index = (i == -1) ? columns_width_.count() - 1 : i;
|
int index = (i == -1) ? columns_width_.count() - 1 : i;
|
||||||
if (index >= 0 || index < columns_width_.count()) {
|
if (index >= 0 || index < columns_width_.count()) {
|
||||||
columns_width_[index] = dimension;
|
columns_width_[index] = dimension;
|
||||||
@@ -767,7 +848,8 @@ QList<int> TitleBlockTemplate::columnsWidth(int total_width) const {
|
|||||||
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
||||||
TitleBlockDimension icd = columns_width_.at(i);
|
TitleBlockDimension icd = columns_width_.at(i);
|
||||||
if (icd.type == QET::RelativeToRemainingLength) {
|
if (icd.type == QET::RelativeToRemainingLength) {
|
||||||
final_widths[i] = qRound(remaining_width * icd.value / 100.0);
|
final_widths[i] =
|
||||||
|
qRound(remaining_width * icd.value / 100.0);
|
||||||
relative_columns << i;
|
relative_columns << i;
|
||||||
rel_widths_sum += final_widths[i];
|
rel_widths_sum += final_widths[i];
|
||||||
}
|
}
|
||||||
@@ -786,7 +868,8 @@ QList<int> TitleBlockTemplate::columnsWidth(int total_width) const {
|
|||||||
// relative_columns_count * 0.5
|
// relative_columns_count * 0.5
|
||||||
// (which means that each percent-based
|
// (which means that each percent-based
|
||||||
// columns can "bring" up to 0.5px of difference).
|
// columns can "bring" up to 0.5px of difference).
|
||||||
qreal max_acceptable_difference = relative_columns.count() * 0.5;
|
qreal max_acceptable_difference =
|
||||||
|
relative_columns.count() * 0.5;
|
||||||
|
|
||||||
int share = difference > 0 ? 1 : -1;
|
int share = difference > 0 ? 1 : -1;
|
||||||
if (qAbs(difference) <= max_acceptable_difference) {
|
if (qAbs(difference) <= max_acceptable_difference) {
|
||||||
@@ -860,7 +943,8 @@ int TitleBlockTemplate::minimumWidth() {
|
|||||||
qRound(
|
qRound(
|
||||||
columnTypeTotal(QET::Absolute)
|
columnTypeTotal(QET::Absolute)
|
||||||
/
|
/
|
||||||
((100.0 - columnTypeTotal(QET::RelativeToTotalLength)) / 100.0)
|
((100.0 - columnTypeTotal(QET::RelativeToTotalLength))
|
||||||
|
/ 100.0)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -942,7 +1026,9 @@ void TitleBlockTemplate::addRow(int i) {
|
|||||||
Index of the column after insertion, -1 meaning "last position"
|
Index of the column after insertion, -1 meaning "last position"
|
||||||
@return true
|
@return true
|
||||||
*/
|
*/
|
||||||
bool TitleBlockTemplate::insertRow(int dimension, const QList<TitleBlockCell *> &row, int i) {
|
bool TitleBlockTemplate::insertRow(int dimension,
|
||||||
|
const QList<TitleBlockCell *> &row,
|
||||||
|
int i) {
|
||||||
int index = (i == -1) ? rows_heights_.count() : i;
|
int index = (i == -1) ? rows_heights_.count() : i;
|
||||||
|
|
||||||
for (int j = 0 ; j < columns_width_.count() ; ++ j) {
|
for (int j = 0 ; j < columns_width_.count() ; ++ j) {
|
||||||
@@ -1013,7 +1099,9 @@ void TitleBlockTemplate::addColumn(int i) {
|
|||||||
Index of the column after insertion, -1 meaning "last position"
|
Index of the column after insertion, -1 meaning "last position"
|
||||||
@return true
|
@return true
|
||||||
*/
|
*/
|
||||||
bool TitleBlockTemplate::insertColumn(const TitleBlockDimension &dimension, const QList<TitleBlockCell *> &column, int i) {
|
bool TitleBlockTemplate::insertColumn(const TitleBlockDimension &dimension,
|
||||||
|
const QList<TitleBlockCell *> &column,
|
||||||
|
int i) {
|
||||||
int index = (i == -1) ? columns_width_.count() : i;
|
int index = (i == -1) ? columns_width_.count() : i;
|
||||||
cells_.insert(index, column);
|
cells_.insert(index, column);
|
||||||
columns_width_.insert(index, dimension);
|
columns_width_.insert(index, dimension);
|
||||||
@@ -1070,18 +1158,32 @@ TitleBlockCell *TitleBlockTemplate::cell(int row, int col) const {
|
|||||||
@return the set of cells spanned by the provided cell
|
@return the set of cells spanned by the provided cell
|
||||||
Note the returned set does not include the spanning, provided cell
|
Note the returned set does not include the spanning, provided cell
|
||||||
*/
|
*/
|
||||||
QSet<TitleBlockCell *> TitleBlockTemplate::spannedCells(const TitleBlockCell *given_cell, bool ignore_span_state) const {
|
QSet<TitleBlockCell *> TitleBlockTemplate::spannedCells(
|
||||||
|
const TitleBlockCell *given_cell,
|
||||||
|
bool ignore_span_state) const {
|
||||||
QSet<TitleBlockCell *> set;
|
QSet<TitleBlockCell *> set;
|
||||||
if (!given_cell) return(set);
|
if (!given_cell) return(set);
|
||||||
if (!ignore_span_state && given_cell -> span_state == TitleBlockCell::Disabled) return(set);
|
if (!ignore_span_state && given_cell -> span_state
|
||||||
|
== TitleBlockCell::Disabled)
|
||||||
int final_row_span = ignore_span_state ? given_cell -> row_span : given_cell -> applied_row_span;
|
return(set);
|
||||||
int final_col_span = ignore_span_state ? given_cell -> col_span : given_cell -> applied_col_span;
|
|
||||||
|
int final_row_span = ignore_span_state
|
||||||
|
? given_cell -> row_span
|
||||||
|
: given_cell -> applied_row_span;
|
||||||
|
int final_col_span = ignore_span_state
|
||||||
|
? given_cell -> col_span
|
||||||
|
: given_cell -> applied_col_span;
|
||||||
if (!final_row_span && !final_col_span) return(set);
|
if (!final_row_span && !final_col_span) return(set);
|
||||||
|
|
||||||
for (int i = given_cell -> num_col ; i <= given_cell -> num_col + final_col_span ; ++ i) {
|
for (int i = given_cell -> num_col ;
|
||||||
for (int j = given_cell -> num_row ; j <= given_cell -> num_row + final_row_span ; ++ j) {
|
i <= given_cell -> num_col + final_col_span ;
|
||||||
if (i == given_cell -> num_col && j == given_cell -> num_row) continue;
|
++ i) {
|
||||||
|
for (int j = given_cell -> num_row ;
|
||||||
|
j <= given_cell -> num_row + final_row_span ;
|
||||||
|
++ j) {
|
||||||
|
if (i == given_cell -> num_col && j
|
||||||
|
== given_cell -> num_row)
|
||||||
|
continue;
|
||||||
TitleBlockCell *current_cell = cell(j, i);
|
TitleBlockCell *current_cell = cell(j, i);
|
||||||
if (current_cell) set << current_cell;
|
if (current_cell) set << current_cell;
|
||||||
}
|
}
|
||||||
@@ -1094,7 +1196,8 @@ QSet<TitleBlockCell *> TitleBlockTemplate::spannedCells(const TitleBlockCell *gi
|
|||||||
Export the span parameters of all cell in the current grid.
|
Export the span parameters of all cell in the current grid.
|
||||||
@return
|
@return
|
||||||
*/
|
*/
|
||||||
QHash<TitleBlockCell *, QPair<int, int> > TitleBlockTemplate::getAllSpans() const {
|
QHash<TitleBlockCell *, QPair<int, int> > TitleBlockTemplate::getAllSpans(
|
||||||
|
) const {
|
||||||
QHash<TitleBlockCell *, QPair<int, int> > spans;
|
QHash<TitleBlockCell *, QPair<int, int> > spans;
|
||||||
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
||||||
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
||||||
@@ -1115,7 +1218,8 @@ QHash<TitleBlockCell *, QPair<int, int> > TitleBlockTemplate::getAllSpans() cons
|
|||||||
Restore a set of span parameters.
|
Restore a set of span parameters.
|
||||||
@param spans :
|
@param spans :
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::setAllSpans(const QHash<TitleBlockCell *, QPair<int, int> > &spans) {
|
void TitleBlockTemplate::setAllSpans(const QHash<TitleBlockCell *,
|
||||||
|
QPair<int, int> > &spans) {
|
||||||
foreach (TitleBlockCell *cell, spans.keys()) {
|
foreach (TitleBlockCell *cell, spans.keys()) {
|
||||||
cell -> row_span = spans[cell].first;
|
cell -> row_span = spans[cell].first;
|
||||||
cell -> col_span = spans[cell].second;
|
cell -> col_span = spans[cell].second;
|
||||||
@@ -1132,7 +1236,10 @@ void TitleBlockTemplate::setAllSpans(const QHash<TitleBlockCell *, QPair<int, in
|
|||||||
@param logo_storage :
|
@param logo_storage :
|
||||||
@return true or false
|
@return true or false
|
||||||
*/
|
*/
|
||||||
bool TitleBlockTemplate::addLogo(const QString &logo_name, QByteArray *logo_data, const QString &logo_type, const QString &logo_storage) {
|
bool TitleBlockTemplate::addLogo(const QString &logo_name,
|
||||||
|
QByteArray *logo_data,
|
||||||
|
const QString &logo_type,
|
||||||
|
const QString &logo_storage) {
|
||||||
if (data_logos_.contains(logo_name)) {
|
if (data_logos_.contains(logo_name)) {
|
||||||
// we are replacing the logo
|
// we are replacing the logo
|
||||||
removeLogo(logo_name);
|
removeLogo(logo_name);
|
||||||
@@ -1183,7 +1290,8 @@ bool TitleBlockTemplate::addLogo(const QString &logo_name, QByteArray *logo_data
|
|||||||
basename of the first argument is used.
|
basename of the first argument is used.
|
||||||
@return true if the logo could be deleted, false otherwise
|
@return true if the logo could be deleted, false otherwise
|
||||||
*/
|
*/
|
||||||
bool TitleBlockTemplate::addLogoFromFile(const QString &filepath, const QString &name) {
|
bool TitleBlockTemplate::addLogoFromFile(const QString &filepath,
|
||||||
|
const QString &name) {
|
||||||
QFileInfo filepath_info(filepath);
|
QFileInfo filepath_info(filepath);
|
||||||
QString filename = name.isEmpty() ? filepath_info.fileName() : name;
|
QString filename = name.isEmpty() ? filepath_info.fileName() : name;
|
||||||
QString filetype = filepath_info.suffix();
|
QString filetype = filepath_info.suffix();
|
||||||
@@ -1197,7 +1305,10 @@ bool TitleBlockTemplate::addLogoFromFile(const QString &filepath, const QString
|
|||||||
if (addLogo(filename, &file_content, "svg", "xml")) return(true);
|
if (addLogo(filename, &file_content, "svg", "xml")) return(true);
|
||||||
|
|
||||||
// we then try to add it as a bitmap image
|
// we then try to add it as a bitmap image
|
||||||
return addLogo(filename, &file_content, filepath_info.suffix(), "base64");
|
return addLogo(filename,
|
||||||
|
&file_content,
|
||||||
|
filepath_info.suffix(),
|
||||||
|
"base64");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1208,7 +1319,8 @@ bool TitleBlockTemplate::addLogoFromFile(const QString &filepath, const QString
|
|||||||
Path the logo will be saved as
|
Path the logo will be saved as
|
||||||
@return true if the logo could be exported, false otherwise
|
@return true if the logo could be exported, false otherwise
|
||||||
*/
|
*/
|
||||||
bool TitleBlockTemplate::saveLogoToFile(const QString &logo_name, const QString &filepath) {
|
bool TitleBlockTemplate::saveLogoToFile(const QString &logo_name,
|
||||||
|
const QString &filepath) {
|
||||||
if (!data_logos_.contains(logo_name)) {
|
if (!data_logos_.contains(logo_name)) {
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
@@ -1248,11 +1360,14 @@ bool TitleBlockTemplate::removeLogo(const QString &logo_name) {
|
|||||||
/**
|
/**
|
||||||
@brief TitleBlockTemplate::renameLogo
|
@brief TitleBlockTemplate::renameLogo
|
||||||
Rename the \a logo_name logo to \a new_name
|
Rename the \a logo_name logo to \a new_name
|
||||||
@param logo_name Name of the logo to be renamed
|
@param logo_name : Name of the logo to be renamed
|
||||||
@param new_name New name of the renamed logo
|
@param new_name : New name of the renamed logo
|
||||||
|
@return
|
||||||
*/
|
*/
|
||||||
bool TitleBlockTemplate::renameLogo(const QString &logo_name, const QString &new_name) {
|
bool TitleBlockTemplate::renameLogo(const QString &logo_name,
|
||||||
if (!data_logos_.contains(logo_name) || data_logos_.contains(new_name)) {
|
const QString &new_name) {
|
||||||
|
if (!data_logos_.contains(logo_name)
|
||||||
|
|| data_logos_.contains(new_name)) {
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1276,7 +1391,8 @@ bool TitleBlockTemplate::renameLogo(const QString &logo_name, const QString &new
|
|||||||
@param storage :
|
@param storage :
|
||||||
The kind of storage to use for the logo, e.g. "xml" or "base64".
|
The kind of storage to use for the logo, e.g. "xml" or "base64".
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::setLogoStorage(const QString &logo_name, const QString &storage) {
|
void TitleBlockTemplate::setLogoStorage(const QString &logo_name,
|
||||||
|
const QString &storage) {
|
||||||
if (storage_logos_.contains(logo_name)) {
|
if (storage_logos_.contains(logo_name)) {
|
||||||
storage_logos_[logo_name] = storage;
|
storage_logos_[logo_name] = storage;
|
||||||
}
|
}
|
||||||
@@ -1335,11 +1451,16 @@ QPixmap TitleBlockTemplate::bitmapLogo(const QString &logo_name) const {
|
|||||||
/**
|
/**
|
||||||
@brief TitleBlockTemplate::render
|
@brief TitleBlockTemplate::render
|
||||||
Render the titleblock.
|
Render the titleblock.
|
||||||
@param painter Painter to use to render the titleblock
|
@param painter :
|
||||||
@param diagram_context Diagram context to use to generate the titleblock strings
|
Painter to use to render the titleblock
|
||||||
@param titleblock_width Width of the titleblock to render
|
@param diagram_context :
|
||||||
|
Diagram context to use to generate the titleblock strings
|
||||||
|
@param titleblock_width :
|
||||||
|
Width of the titleblock to render
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::render(QPainter &painter, const DiagramContext &diagram_context, int titleblock_width) const {
|
void TitleBlockTemplate::render(QPainter &painter,
|
||||||
|
const DiagramContext &diagram_context,
|
||||||
|
int titleblock_width) const {
|
||||||
QList<int> widths = columnsWidth(titleblock_width);
|
QList<int> widths = columnsWidth(titleblock_width);
|
||||||
int titleblock_height = height();
|
int titleblock_height = height();
|
||||||
|
|
||||||
@@ -1355,22 +1476,34 @@ void TitleBlockTemplate::render(QPainter &painter, const DiagramContext &diagram
|
|||||||
// run through each individual cell
|
// run through each individual cell
|
||||||
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
||||||
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
||||||
if (cells_[i][j] -> spanner_cell || cells_[i][j] -> cell_type == TitleBlockCell::EmptyCell) continue;
|
if (cells_[i][j] -> spanner_cell
|
||||||
|
|| cells_[i][j] -> cell_type
|
||||||
|
== TitleBlockCell::EmptyCell)
|
||||||
|
continue;
|
||||||
|
|
||||||
// calculate the border rect of the current cell
|
// calculate the border rect of the current cell
|
||||||
int x = lengthRange(0, cells_[i][j] -> num_col, widths);
|
int x = lengthRange(0, cells_[i][j] -> num_col, widths);
|
||||||
int y = lengthRange(0, cells_[i][j] -> num_row, rows_heights_);
|
int y = lengthRange(0,
|
||||||
|
cells_[i][j] -> num_row,
|
||||||
|
rows_heights_);
|
||||||
|
|
||||||
int row_span = 0, col_span = 0;
|
int row_span = 0, col_span = 0;
|
||||||
if (cells_[i][j] -> span_state != TitleBlockCell::Disabled) {
|
if (cells_[i][j] -> span_state
|
||||||
|
!= TitleBlockCell::Disabled) {
|
||||||
row_span = cells_[i][j] -> applied_row_span;
|
row_span = cells_[i][j] -> applied_row_span;
|
||||||
col_span = cells_[i][j] -> applied_col_span;
|
col_span = cells_[i][j] -> applied_col_span;
|
||||||
}
|
}
|
||||||
int w = lengthRange(cells_[i][j] -> num_col, cells_[i][j] -> num_col + 1 + col_span, widths);
|
int w = lengthRange(cells_[i][j] -> num_col,
|
||||||
int h = lengthRange(cells_[i][j] -> num_row, cells_[i][j] -> num_row + 1 + row_span, rows_heights_);
|
cells_[i][j] -> num_col + 1 + col_span,
|
||||||
|
widths);
|
||||||
|
int h = lengthRange(cells_[i][j] -> num_row,
|
||||||
|
cells_[i][j] -> num_row + 1 + row_span,
|
||||||
|
rows_heights_);
|
||||||
QRect cell_rect(x, y, w, h);
|
QRect cell_rect(x, y, w, h);
|
||||||
|
|
||||||
renderCell(painter, *cells_[i][j], diagram_context, cell_rect);
|
renderCell(painter, *cells_[i][j],
|
||||||
|
diagram_context,
|
||||||
|
cell_rect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
painter.restore();
|
painter.restore();
|
||||||
@@ -1379,36 +1512,62 @@ void TitleBlockTemplate::render(QPainter &painter, const DiagramContext &diagram
|
|||||||
/**
|
/**
|
||||||
@brief TitleBlockTemplate::renderDxf
|
@brief TitleBlockTemplate::renderDxf
|
||||||
Render the titleblock in DXF.
|
Render the titleblock in DXF.
|
||||||
@param diagram_context Diagram context to use to generate the titleblock strings
|
@param title_block_rect :
|
||||||
@param titleblock_width Width of the titleblock to render
|
@param diagram_context :
|
||||||
|
Diagram context to use to generate the titleblock strings
|
||||||
|
@param titleblock_width :
|
||||||
|
Width of the titleblock to render
|
||||||
|
@param file_path :
|
||||||
|
@param color :
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::renderDxf(QRectF &title_block_rect, const DiagramContext &diagram_context,
|
void TitleBlockTemplate::renderDxf(QRectF &title_block_rect,
|
||||||
int titleblock_width, QString &file_path, int color) const {
|
const DiagramContext &diagram_context,
|
||||||
|
int titleblock_width,
|
||||||
|
QString &file_path,
|
||||||
|
int color) const {
|
||||||
QList<int> widths = columnsWidth(titleblock_width);
|
QList<int> widths = columnsWidth(titleblock_width);
|
||||||
|
|
||||||
// draw the titleblock border
|
// draw the titleblock border
|
||||||
double xCoord = title_block_rect.topLeft().x();
|
double xCoord = title_block_rect.topLeft().x();
|
||||||
double yCoord = Createdxf::sheetHeight - title_block_rect.bottomLeft().y()*Createdxf::yScale;
|
double yCoord =
|
||||||
|
Createdxf::sheetHeight
|
||||||
|
- title_block_rect.bottomLeft().y()
|
||||||
|
*Createdxf::yScale;
|
||||||
double recWidth = title_block_rect.width() * Createdxf::xScale;
|
double recWidth = title_block_rect.width() * Createdxf::xScale;
|
||||||
double recHeight = title_block_rect.height() * Createdxf::yScale;
|
double recHeight = title_block_rect.height() * Createdxf::yScale;
|
||||||
Createdxf::drawRectangle(file_path, xCoord, yCoord, recWidth, recHeight, color);
|
Createdxf::drawRectangle(file_path,
|
||||||
|
xCoord,
|
||||||
|
yCoord,
|
||||||
|
recWidth,
|
||||||
|
recHeight,
|
||||||
|
color);
|
||||||
|
|
||||||
// run through each individual cell
|
// run through each individual cell
|
||||||
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
||||||
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
||||||
if (cells_[i][j] -> spanner_cell || cells_[i][j] -> cell_type == TitleBlockCell::EmptyCell) continue;
|
if (cells_[i][j] -> spanner_cell
|
||||||
|
|| cells_[i][j] -> cell_type
|
||||||
|
== TitleBlockCell::EmptyCell)
|
||||||
|
continue;
|
||||||
|
|
||||||
// calculate the border rect of the current cell
|
// calculate the border rect of the current cell
|
||||||
double x = lengthRange(0, cells_[i][j] -> num_col, widths);
|
double x = lengthRange(0, cells_[i][j] -> num_col,
|
||||||
double y = lengthRange(0, cells_[i][j] -> num_row, rows_heights_);
|
widths);
|
||||||
|
double y = lengthRange(0, cells_[i][j] -> num_row,
|
||||||
|
rows_heights_);
|
||||||
|
|
||||||
int row_span = 0, col_span = 0;
|
int row_span = 0, col_span = 0;
|
||||||
if (cells_[i][j] -> span_state != TitleBlockCell::Disabled) {
|
if (cells_[i][j] -> span_state
|
||||||
|
!= TitleBlockCell::Disabled) {
|
||||||
row_span = cells_[i][j] -> applied_row_span;
|
row_span = cells_[i][j] -> applied_row_span;
|
||||||
col_span = cells_[i][j] -> applied_col_span;
|
col_span = cells_[i][j] -> applied_col_span;
|
||||||
}
|
}
|
||||||
double w = lengthRange(cells_[i][j] -> num_col, cells_[i][j] -> num_col + 1 + col_span, widths);
|
double w = lengthRange(cells_[i][j] -> num_col,
|
||||||
double h = lengthRange(cells_[i][j] -> num_row, cells_[i][j] -> num_row + 1 + row_span, rows_heights_);
|
cells_[i][j] -> num_col + 1 + col_span,
|
||||||
|
widths);
|
||||||
|
double h = lengthRange(cells_[i][j] -> num_row,
|
||||||
|
cells_[i][j] -> num_row + 1 + row_span,
|
||||||
|
rows_heights_);
|
||||||
|
|
||||||
x = xCoord + x*Createdxf::xScale;
|
x = xCoord + x*Createdxf::xScale;
|
||||||
h *= Createdxf::yScale;
|
h *= Createdxf::yScale;
|
||||||
@@ -1416,9 +1575,19 @@ void TitleBlockTemplate::renderDxf(QRectF &title_block_rect, const DiagramContex
|
|||||||
w *= Createdxf::xScale;
|
w *= Createdxf::xScale;
|
||||||
|
|
||||||
Createdxf::drawRectangle(file_path, x, y, w, h, color);
|
Createdxf::drawRectangle(file_path, x, y, w, h, color);
|
||||||
if (cells_[i][j] -> type() == TitleBlockCell::TextCell) {
|
if (cells_[i][j] -> type() == TitleBlockCell::TextCell)
|
||||||
QString final_text = finalTextForCell(*cells_[i][j], diagram_context);
|
{
|
||||||
renderTextCellDxf(file_path, final_text, *cells_[i][j], x, y, w, h, color);
|
QString final_text =
|
||||||
|
finalTextForCell(*cells_[i][j],
|
||||||
|
diagram_context);
|
||||||
|
renderTextCellDxf(file_path,
|
||||||
|
final_text,
|
||||||
|
*cells_[i][j],
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
w,
|
||||||
|
h,
|
||||||
|
color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1429,11 +1598,18 @@ void TitleBlockTemplate::renderDxf(QRectF &title_block_rect, const DiagramContex
|
|||||||
/**
|
/**
|
||||||
@brief TitleBlockTemplate::renderCell
|
@brief TitleBlockTemplate::renderCell
|
||||||
Render a titleblock cell.
|
Render a titleblock cell.
|
||||||
@param painter Painter to use to render the titleblock
|
@param painter :
|
||||||
@param diagram_context Diagram context to use to generate the titleblock strings
|
Painter to use to render the titleblock
|
||||||
@param rect Rectangle the cell must be rendered into.
|
@param cell :
|
||||||
|
@param diagram_context :
|
||||||
|
Diagram context to use to generate the titleblock strings
|
||||||
|
@param cell_rect :
|
||||||
|
Rectangle the cell must be rendered into.
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::renderCell(QPainter &painter, const TitleBlockCell &cell, const DiagramContext &diagram_context, const QRect &cell_rect) const {
|
void TitleBlockTemplate::renderCell(QPainter &painter,
|
||||||
|
const TitleBlockCell &cell,
|
||||||
|
const DiagramContext &diagram_context,
|
||||||
|
const QRect &cell_rect) const {
|
||||||
// draw the border rect of the current cell
|
// draw the border rect of the current cell
|
||||||
QPen pen(QBrush(), 0.0, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
|
QPen pen(QBrush(), 0.0, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
|
||||||
pen.setColor(Qt::black);
|
pen.setColor(Qt::black);
|
||||||
@@ -1451,9 +1627,12 @@ void TitleBlockTemplate::renderCell(QPainter &painter, const TitleBlockCell &cel
|
|||||||
* (or, at least, not resolution-limited) rendering
|
* (or, at least, not resolution-limited) rendering
|
||||||
*/
|
*/
|
||||||
if (vector_logos_.contains(cell.logo_reference)) {
|
if (vector_logos_.contains(cell.logo_reference)) {
|
||||||
vector_logos_[cell.logo_reference] -> render(&painter, cell_rect);
|
vector_logos_[cell.logo_reference] -> render(
|
||||||
|
&painter,
|
||||||
|
cell_rect);
|
||||||
} else if (bitmap_logos_.contains(cell.logo_reference)) {
|
} else if (bitmap_logos_.contains(cell.logo_reference)) {
|
||||||
painter.drawPixmap(cell_rect, bitmap_logos_[cell.logo_reference]);
|
painter.drawPixmap(cell_rect,
|
||||||
|
bitmap_logos_[cell.logo_reference]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (cell.type() == TitleBlockCell::TextCell) {
|
} else if (cell.type() == TitleBlockCell::TextCell) {
|
||||||
@@ -1478,7 +1657,9 @@ void TitleBlockTemplate::renderCell(QPainter &painter, const TitleBlockCell &cel
|
|||||||
Diagram context to use to generate the final text for the given cell
|
Diagram context to use to generate the final text for the given cell
|
||||||
@return the final text that has to be drawn in the given cell
|
@return the final text that has to be drawn in the given cell
|
||||||
*/
|
*/
|
||||||
QString TitleBlockTemplate::finalTextForCell(const TitleBlockCell &cell, const DiagramContext &diagram_context) const {
|
QString TitleBlockTemplate::finalTextForCell(
|
||||||
|
const TitleBlockCell &cell,
|
||||||
|
const DiagramContext &diagram_context) const {
|
||||||
QString cell_text = cell.value.name();
|
QString cell_text = cell.value.name();
|
||||||
QString cell_label = cell.label.name();
|
QString cell_label = cell.label.name();
|
||||||
|
|
||||||
@@ -1502,11 +1683,16 @@ QString TitleBlockTemplate::finalTextForCell(const TitleBlockCell &cell, const D
|
|||||||
@return the provided string with variables replaced by the values
|
@return the provided string with variables replaced by the values
|
||||||
from the diagram context
|
from the diagram context
|
||||||
*/
|
*/
|
||||||
QString TitleBlockTemplate::interpreteVariables(const QString &string, const DiagramContext &diagram_context) const {
|
QString TitleBlockTemplate::interpreteVariables(
|
||||||
|
const QString &string,
|
||||||
|
const DiagramContext &diagram_context) const {
|
||||||
QString interpreted_string = string;
|
QString interpreted_string = string;
|
||||||
foreach (QString key, diagram_context.keys(DiagramContext::DecreasingLength)) {
|
foreach (QString key,
|
||||||
interpreted_string.replace("%{" + key + "}", diagram_context[key].toString());
|
diagram_context.keys(DiagramContext::DecreasingLength)) {
|
||||||
interpreted_string.replace("%" + key, diagram_context[key].toString());
|
interpreted_string.replace("%{" + key + "}",
|
||||||
|
diagram_context[key].toString());
|
||||||
|
interpreted_string.replace("%" + key,
|
||||||
|
diagram_context[key].toString());
|
||||||
}
|
}
|
||||||
return(interpreted_string);
|
return(interpreted_string);
|
||||||
}
|
}
|
||||||
@@ -1536,33 +1722,48 @@ QStringList TitleBlockTemplate::listOfVariables() {
|
|||||||
into the \a cell_rect rectangle.
|
into the \a cell_rect rectangle.
|
||||||
The alignment, font_size and other cell parameters are taken into account
|
The alignment, font_size and other cell parameters are taken into account
|
||||||
when rendering.
|
when rendering.
|
||||||
@param painter QPainter used to render the text
|
@param painter :
|
||||||
@param text Text to render
|
QPainter used to render the text
|
||||||
@param cell Cell the rendered text is rattached to
|
@param text :
|
||||||
@param cell_rect Rectangle delimiting the cell area
|
Text to render
|
||||||
|
@param cell :
|
||||||
|
Cell the rendered text is rattached to
|
||||||
|
@param cell_rect :
|
||||||
|
Rectangle delimiting the cell area
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::renderTextCell(QPainter &painter, const QString &text, const TitleBlockCell &cell, const QRectF &cell_rect) const {
|
void TitleBlockTemplate::renderTextCell(QPainter &painter,
|
||||||
|
const QString &text,
|
||||||
|
const TitleBlockCell &cell,
|
||||||
|
const QRectF &cell_rect) const {
|
||||||
if (text.isEmpty()) return;
|
if (text.isEmpty()) return;
|
||||||
QFont text_font = TitleBlockTemplate::fontForCell(cell);
|
QFont text_font = TitleBlockTemplate::fontForCell(cell);
|
||||||
painter.setFont(text_font);
|
painter.setFont(text_font);
|
||||||
|
|
||||||
if (cell.hadjust) {
|
if (cell.hadjust) {
|
||||||
QFontMetricsF font_metrics(text_font);
|
QFontMetricsF font_metrics(text_font);
|
||||||
QRectF font_rect = font_metrics.boundingRect(QRect(-10000, -10000, 10000, 10000), cell.alignment, text);
|
QRectF font_rect = font_metrics.boundingRect(
|
||||||
|
QRect(-10000, -10000, 10000, 10000),
|
||||||
|
cell.alignment,
|
||||||
|
text);
|
||||||
|
|
||||||
if (font_rect.width() > cell_rect.width()) {
|
if (font_rect.width() > cell_rect.width()) {
|
||||||
qreal ratio = qreal(cell_rect.width()) / qreal(font_rect.width());
|
qreal ratio = qreal(cell_rect.width())
|
||||||
|
/ qreal(font_rect.width());
|
||||||
painter.save();
|
painter.save();
|
||||||
|
|
||||||
painter.translate(cell_rect.topLeft());
|
painter.translate(cell_rect.topLeft());
|
||||||
qreal vertical_adjustment = cell_rect.height() * (1 - ratio) / 2.0;
|
qreal vertical_adjustment =
|
||||||
|
cell_rect.height() * (1 - ratio) / 2.0;
|
||||||
painter.translate(0.0, vertical_adjustment);
|
painter.translate(0.0, vertical_adjustment);
|
||||||
painter.scale(ratio, ratio);
|
painter.scale(ratio, ratio);
|
||||||
|
|
||||||
QRectF new_world_cell_rect(cell_rect);
|
QRectF new_world_cell_rect(cell_rect);
|
||||||
new_world_cell_rect.moveTo(0, 0.0);
|
new_world_cell_rect.moveTo(0, 0.0);
|
||||||
new_world_cell_rect.setWidth(new_world_cell_rect.width() / ratio);
|
new_world_cell_rect.setWidth(new_world_cell_rect.width()
|
||||||
painter.drawText(new_world_cell_rect, cell.alignment, text);
|
/ ratio);
|
||||||
|
painter.drawText(new_world_cell_rect,
|
||||||
|
cell.alignment,
|
||||||
|
text);
|
||||||
|
|
||||||
painter.restore();
|
painter.restore();
|
||||||
return;
|
return;
|
||||||
@@ -1573,10 +1774,25 @@ void TitleBlockTemplate::renderTextCell(QPainter &painter, const QString &text,
|
|||||||
painter.drawText(cell_rect, cell.alignment, text);
|
painter.drawText(cell_rect, cell.alignment, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
void TitleBlockTemplate::renderTextCellDxf(QString &file_path, const QString &text,
|
@brief TitleBlockTemplate::renderTextCellDxf
|
||||||
const TitleBlockCell &cell,
|
@param file_path
|
||||||
qreal x, qreal y, qreal w, qreal h, int color) const {
|
@param text
|
||||||
|
@param cell
|
||||||
|
@param x
|
||||||
|
@param y
|
||||||
|
@param w
|
||||||
|
@param h
|
||||||
|
@param color
|
||||||
|
*/
|
||||||
|
void TitleBlockTemplate::renderTextCellDxf(QString &file_path,
|
||||||
|
const QString &text,
|
||||||
|
const TitleBlockCell &cell,
|
||||||
|
qreal x,
|
||||||
|
qreal y,
|
||||||
|
qreal w,
|
||||||
|
qreal h,
|
||||||
|
int color) const {
|
||||||
if (text.isEmpty()) return;
|
if (text.isEmpty()) return;
|
||||||
QFont text_font = TitleBlockTemplate::fontForCell(cell);
|
QFont text_font = TitleBlockTemplate::fontForCell(cell);
|
||||||
double textHeight = text_font.pointSizeF();
|
double textHeight = text_font.pointSizeF();
|
||||||
@@ -1618,16 +1834,31 @@ void TitleBlockTemplate::renderTextCellDxf(QString &file_path, const QString &te
|
|||||||
|
|
||||||
if (cell.hadjust) {
|
if (cell.hadjust) {
|
||||||
QFontMetricsF font_metrics(text_font);
|
QFontMetricsF font_metrics(text_font);
|
||||||
QRectF font_rect = font_metrics.boundingRect(QRect(-10000, -10000, 10000, 10000), cell.alignment, text);
|
QRectF font_rect = font_metrics.boundingRect(
|
||||||
|
QRect(-10000, -10000, 10000, 10000),
|
||||||
|
cell.alignment,
|
||||||
|
text);
|
||||||
|
|
||||||
if (font_rect.width()*Createdxf::xScale > w) {
|
if (font_rect.width()*Createdxf::xScale > w) {
|
||||||
qreal ratio = qreal(w) / qreal(font_rect.width()*Createdxf::xScale);
|
qreal ratio = qreal(w)
|
||||||
|
/ qreal(font_rect.width()
|
||||||
|
*Createdxf::xScale);
|
||||||
textHeight *= ratio;
|
textHeight *= ratio;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Createdxf::drawTextAligned(file_path, text, x,
|
Createdxf::drawTextAligned(file_path,
|
||||||
y, textHeight*Createdxf::yScale, 0, 0, hAlign, vAlign, x2, color, 0);
|
text,
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
textHeight*Createdxf::yScale,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
hAlign,
|
||||||
|
vAlign,
|
||||||
|
x2,
|
||||||
|
color,
|
||||||
|
0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1653,7 +1884,8 @@ void TitleBlockTemplate::forgetSpanning() {
|
|||||||
(Optional, defaults to true)
|
(Optional, defaults to true)
|
||||||
Whether to set row_span and col_span of \a spanning_cell to 0.
|
Whether to set row_span and col_span of \a spanning_cell to 0.
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplate::forgetSpanning(TitleBlockCell *spanning_cell, bool modify_cell) {
|
void TitleBlockTemplate::forgetSpanning(TitleBlockCell *spanning_cell,
|
||||||
|
bool modify_cell) {
|
||||||
if (!spanning_cell) return;
|
if (!spanning_cell) return;
|
||||||
foreach (TitleBlockCell *spanned_cell, spannedCells(spanning_cell)) {
|
foreach (TitleBlockCell *spanned_cell, spannedCells(spanning_cell)) {
|
||||||
spanned_cell -> spanner_cell = nullptr;
|
spanned_cell -> spanner_cell = nullptr;
|
||||||
@@ -1712,14 +1944,26 @@ bool TitleBlockTemplate::checkCellSpan(TitleBlockCell *cell) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ensure cells that will be spanned are either empty or free
|
// ensure cells that will be spanned are either empty or free
|
||||||
for (int i = cell -> num_col ; i <= cell -> num_col + cell -> applied_col_span ; ++ i) {
|
for (int i = cell -> num_col ;
|
||||||
for (int j = cell -> num_row ; j <= cell -> num_row + cell -> applied_row_span ; ++ j) {
|
i <= cell -> num_col + cell -> applied_col_span ;
|
||||||
if (i == cell -> num_col && j == cell -> num_row) continue;
|
++ i) {
|
||||||
|
for (int j = cell -> num_row ;
|
||||||
|
j <= cell -> num_row + cell -> applied_row_span ;
|
||||||
|
++ j) {
|
||||||
|
if (i == cell -> num_col && j == cell -> num_row)
|
||||||
|
continue;
|
||||||
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
||||||
qDebug() << Q_FUNC_INFO << "span check" << i << j;
|
qDebug() << Q_FUNC_INFO << "span check" << i << j;
|
||||||
#endif
|
#endif
|
||||||
TitleBlockCell *current_cell = cells_[i][j];
|
TitleBlockCell *current_cell = cells_[i][j];
|
||||||
if (current_cell -> cell_type != TitleBlockCell::EmptyCell || (current_cell -> spanner_cell && current_cell -> spanner_cell != cell)) {
|
if (current_cell -> cell_type
|
||||||
|
!= TitleBlockCell::EmptyCell
|
||||||
|
|| (
|
||||||
|
current_cell -> spanner_cell
|
||||||
|
&& current_cell -> spanner_cell
|
||||||
|
!= cell
|
||||||
|
)
|
||||||
|
) {
|
||||||
cell -> span_state = TitleBlockCell::Disabled;
|
cell -> span_state = TitleBlockCell::Disabled;
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
@@ -1743,12 +1987,23 @@ void TitleBlockTemplate::applyCellSpan(TitleBlockCell *cell) {
|
|||||||
if (cell -> span_state == TitleBlockCell::Disabled) return;
|
if (cell -> span_state == TitleBlockCell::Disabled) return;
|
||||||
|
|
||||||
// goes through every spanned cell
|
// goes through every spanned cell
|
||||||
for (int i = cell -> num_col ; i <= cell -> num_col + cell -> applied_col_span ; ++ i) {
|
for (int i = cell -> num_col ;
|
||||||
for (int j = cell -> num_row ; j <= cell -> num_row + cell -> applied_row_span ; ++ j) {
|
i <= cell -> num_col + cell -> applied_col_span ;
|
||||||
|
++ i) {
|
||||||
|
for (int j = cell -> num_row ;
|
||||||
|
j <= cell -> num_row + cell -> applied_row_span ;
|
||||||
|
++ j) {
|
||||||
// avoid the spanning cell itself
|
// avoid the spanning cell itself
|
||||||
if (i == cell -> num_col && j == cell -> num_row) continue;
|
if (i == cell -> num_col && j == cell -> num_row)
|
||||||
|
continue;
|
||||||
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
||||||
qDebug() << Q_FUNC_INFO << "marking cell at" << j << i << "as spanned by cell at" << cell -> num_row << cell -> num_col;
|
qDebug() << Q_FUNC_INFO
|
||||||
|
<< "marking cell at"
|
||||||
|
<< j
|
||||||
|
<< i
|
||||||
|
<< "as spanned by cell at"
|
||||||
|
<< cell -> num_row
|
||||||
|
<< cell -> num_col;
|
||||||
#endif
|
#endif
|
||||||
// marks all spanned cells with the spanning cell
|
// marks all spanned cells with the spanning cell
|
||||||
cells_[i][j] -> spanner_cell = cell;
|
cells_[i][j] -> spanner_cell = cell;
|
||||||
@@ -1788,8 +2043,12 @@ void TitleBlockTemplate::rowColsChanged() {
|
|||||||
@param lengths_list :
|
@param lengths_list :
|
||||||
@return the width between two borders
|
@return the width between two borders
|
||||||
*/
|
*/
|
||||||
int TitleBlockTemplate::lengthRange(int start, int end, const QList<int> &lengths_list) const {
|
int TitleBlockTemplate::lengthRange(int start,
|
||||||
if (start > end || start >= lengths_list.count() || end > lengths_list.count()) {
|
int end,
|
||||||
|
const QList<int> &lengths_list) const {
|
||||||
|
if (start > end
|
||||||
|
|| start >= lengths_list.count()
|
||||||
|
|| end > lengths_list.count()) {
|
||||||
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
|
||||||
qDebug() << Q_FUNC_INFO << "wont use" << start << "and" << end;
|
qDebug() << Q_FUNC_INFO << "wont use" << start << "and" << end;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -25,10 +25,12 @@
|
|||||||
#include "qet.h"
|
#include "qet.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@brief The TitleBlockTemplate class
|
||||||
This class represents an title block template for an electric diagram.
|
This class represents an title block template for an electric diagram.
|
||||||
It can read from an XML document the layout of the table that graphically
|
It can read from an XML document the layout of the table
|
||||||
represents the title block, and can produce a graphical rendering of it from a
|
that graphically represents the title block,
|
||||||
diagram context (object embedding the informations of the diagram we want to
|
and can produce a graphical rendering of it from a diagram context
|
||||||
|
(object embedding the informations of the diagram we want to
|
||||||
represent the title block.
|
represent the title block.
|
||||||
*/
|
*/
|
||||||
class TitleBlockTemplate : public QObject {
|
class TitleBlockTemplate : public QObject {
|
||||||
@@ -77,15 +79,20 @@ class TitleBlockTemplate : public QObject {
|
|||||||
|
|
||||||
bool moveColumn(int, int);
|
bool moveColumn(int, int);
|
||||||
void addColumn(int = -1);
|
void addColumn(int = -1);
|
||||||
bool insertColumn(const TitleBlockDimension &, const QList<TitleBlockCell *> &, int = -1);
|
bool insertColumn(const TitleBlockDimension &,
|
||||||
|
const QList<TitleBlockCell *> &, int = -1);
|
||||||
QList<TitleBlockCell *> takeColumn(int);
|
QList<TitleBlockCell *> takeColumn(int);
|
||||||
QList<TitleBlockCell *> createColumn();
|
QList<TitleBlockCell *> createColumn();
|
||||||
|
|
||||||
TitleBlockCell *cell(int, int) const;
|
TitleBlockCell *cell(int, int) const;
|
||||||
QSet<TitleBlockCell *> spannedCells(const TitleBlockCell *, bool = false) const;
|
QSet<TitleBlockCell *> spannedCells(const TitleBlockCell *,
|
||||||
|
bool = false) const;
|
||||||
QHash<TitleBlockCell *, QPair<int, int> > getAllSpans() const;
|
QHash<TitleBlockCell *, QPair<int, int> > getAllSpans() const;
|
||||||
void setAllSpans(const QHash<TitleBlockCell *, QPair<int, int> > &);
|
void setAllSpans(const QHash<TitleBlockCell *, QPair<int, int> > &);
|
||||||
bool addLogo(const QString &, QByteArray *, const QString & = "svg", const QString & = "xml");
|
bool addLogo(const QString &,
|
||||||
|
QByteArray *,
|
||||||
|
const QString & = "svg",
|
||||||
|
const QString & = "xml");
|
||||||
bool addLogoFromFile(const QString &, const QString & = QString());
|
bool addLogoFromFile(const QString &, const QString & = QString());
|
||||||
bool saveLogoToFile(const QString &, const QString &);
|
bool saveLogoToFile(const QString &, const QString &);
|
||||||
bool removeLogo(const QString &);
|
bool removeLogo(const QString &);
|
||||||
@@ -97,8 +104,15 @@ class TitleBlockTemplate : public QObject {
|
|||||||
QPixmap bitmapLogo(const QString &) const;
|
QPixmap bitmapLogo(const QString &) const;
|
||||||
|
|
||||||
void render(QPainter &, const DiagramContext &, int) const;
|
void render(QPainter &, const DiagramContext &, int) const;
|
||||||
void renderDxf(QRectF &, const DiagramContext &, int, QString &, int) const;
|
void renderDxf(QRectF &,
|
||||||
void renderCell(QPainter &, const TitleBlockCell &, const DiagramContext &, const QRect &) const;
|
const DiagramContext &,
|
||||||
|
int,
|
||||||
|
QString &,
|
||||||
|
int) const;
|
||||||
|
void renderCell(QPainter &,
|
||||||
|
const TitleBlockCell &,
|
||||||
|
const DiagramContext &,
|
||||||
|
const QRect &) const;
|
||||||
void applyCellSpans();
|
void applyCellSpans();
|
||||||
void forgetSpanning();
|
void forgetSpanning();
|
||||||
void forgetSpanning(TitleBlockCell *, bool = true);
|
void forgetSpanning(TitleBlockCell *, bool = true);
|
||||||
@@ -130,25 +144,65 @@ class TitleBlockTemplate : public QObject {
|
|||||||
void flushCells();
|
void flushCells();
|
||||||
void initCells();
|
void initCells();
|
||||||
int lengthRange(int, int, const QList<int> &) const;
|
int lengthRange(int, int, const QList<int> &) const;
|
||||||
QString finalTextForCell(const TitleBlockCell &, const DiagramContext &) const;
|
QString finalTextForCell(const TitleBlockCell &,
|
||||||
QString interpreteVariables(const QString &, const DiagramContext &) const;
|
const DiagramContext &) const;
|
||||||
void renderTextCell(QPainter &, const QString &, const TitleBlockCell &, const QRectF &) const;
|
QString interpreteVariables(const QString &,
|
||||||
void renderTextCellDxf(QString &, const QString &, const TitleBlockCell &, qreal, qreal, qreal, qreal, int) const;
|
const DiagramContext &) const;
|
||||||
|
void renderTextCell(QPainter &,
|
||||||
|
const QString &,
|
||||||
|
const TitleBlockCell &,
|
||||||
|
const QRectF &) const;
|
||||||
|
void renderTextCellDxf(QString &,
|
||||||
|
const QString &,
|
||||||
|
const TitleBlockCell &,
|
||||||
|
qreal,
|
||||||
|
qreal,
|
||||||
|
qreal,
|
||||||
|
qreal,
|
||||||
|
int) const;
|
||||||
|
|
||||||
// attributes
|
// attributes
|
||||||
private:
|
private:
|
||||||
QString name_; ///< name identifying the Title Block Template within its parent collection
|
/**
|
||||||
|
@brief name_ : name identifying
|
||||||
|
the Title Block Template within its parent collection
|
||||||
|
*/
|
||||||
|
QString name_;
|
||||||
QString information_;
|
QString information_;
|
||||||
|
/**
|
||||||
|
@brief data_logos_ : Logos raw data
|
||||||
|
*/
|
||||||
|
QHash<QString, QByteArray > data_logos_;
|
||||||
|
/**
|
||||||
|
@brief storage_logos_ :
|
||||||
|
Logos applied storage type (e.g. "xml" or "base64")
|
||||||
|
*/
|
||||||
|
QHash<QString, QString> storage_logos_;
|
||||||
|
/**
|
||||||
|
@brief type_logos_ :
|
||||||
|
Logos types (e.g. "png", "jpeg", "svg")
|
||||||
|
*/
|
||||||
|
QHash<QString, QString> type_logos_;
|
||||||
|
/**
|
||||||
|
@brief vector_logos_ : Rendered objects for vector logos
|
||||||
|
*/
|
||||||
|
QHash<QString, QSvgRenderer *> vector_logos_;
|
||||||
|
/**
|
||||||
|
@brief bitmap_logos_ : Pixmaps for bitmap logos
|
||||||
|
*/
|
||||||
|
QHash<QString, QPixmap> bitmap_logos_;
|
||||||
|
|
||||||
QHash<QString, QByteArray > data_logos_; ///< Logos raw data
|
QList<int> rows_heights_; ///< rows heights -- simple integers
|
||||||
QHash<QString, QString> storage_logos_; ///< Logos applied storage type (e.g. "xml" or "base64")
|
/**
|
||||||
QHash<QString, QString> type_logos_; ///< Logos types (e.g. "png", "jpeg", "svg")
|
@brief columns_width_ :
|
||||||
QHash<QString, QSvgRenderer *> vector_logos_; ///< Rendered objects for vector logos
|
columns widths -- @see TitleBlockColDimension
|
||||||
QHash<QString, QPixmap> bitmap_logos_; ///< Pixmaps for bitmap logos
|
*/
|
||||||
|
QList<TitleBlockDimension> columns_width_;
|
||||||
QList<int> rows_heights_; ///< rows heights -- simple integers
|
/**
|
||||||
QList<TitleBlockDimension> columns_width_; ///< columns widths -- @see TitleBlockColDimension
|
@brief registered_cells_ : Cells objects created rattached
|
||||||
QList<TitleBlockCell *> registered_cells_; ///< Cells objects created rattached to this template, but not mandatorily used
|
to this template, but not mandatorily used
|
||||||
|
*/
|
||||||
|
QList<TitleBlockCell *> registered_cells_;
|
||||||
QList< QList<TitleBlockCell *> > cells_; ///< Cells grid
|
QList< QList<TitleBlockCell *> > cells_; ///< Cells grid
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -76,12 +76,14 @@ int TitleBlockTemplateRenderer::height() const {
|
|||||||
@param provided_painter : QPainter to use to render the titleblock.
|
@param provided_painter : QPainter to use to render the titleblock.
|
||||||
@param titleblock_width : The total width of the titleblock to render
|
@param titleblock_width : The total width of the titleblock to render
|
||||||
*/
|
*/
|
||||||
void TitleBlockTemplateRenderer::render(QPainter *provided_painter, int titleblock_width) {
|
void TitleBlockTemplateRenderer::render(QPainter *provided_painter,
|
||||||
|
int titleblock_width) {
|
||||||
if (!m_titleblock_template) return;
|
if (!m_titleblock_template) return;
|
||||||
|
|
||||||
if (m_use_cache) {
|
if (m_use_cache) {
|
||||||
// Do we really need to calculate all this again?
|
// Do we really need to calculate all this again?
|
||||||
if (titleblock_width != m_last_known_titleblock_width || m_rendered_template.isNull()) {
|
if (titleblock_width != m_last_known_titleblock_width
|
||||||
|
|| m_rendered_template.isNull()) {
|
||||||
renderToQPicture(titleblock_width);
|
renderToQPicture(titleblock_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,14 +91,28 @@ void TitleBlockTemplateRenderer::render(QPainter *provided_painter, int titleblo
|
|||||||
m_rendered_template.play(provided_painter);
|
m_rendered_template.play(provided_painter);
|
||||||
provided_painter -> restore();
|
provided_painter -> restore();
|
||||||
} else {
|
} else {
|
||||||
m_titleblock_template -> render(*provided_painter, m_context, titleblock_width);
|
m_titleblock_template -> render(*provided_painter,
|
||||||
|
m_context,
|
||||||
|
titleblock_width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
void TitleBlockTemplateRenderer::renderDxf(QRectF &title_block_rect, int titleblock_width, QString &file_path, int color) {
|
@brief TitleBlockTemplateRenderer::renderDxf
|
||||||
|
@param title_block_rect
|
||||||
|
@param titleblock_width
|
||||||
|
@param file_path
|
||||||
|
@param color
|
||||||
|
*/
|
||||||
|
void TitleBlockTemplateRenderer::renderDxf(QRectF &title_block_rect,
|
||||||
|
int titleblock_width,
|
||||||
|
QString &file_path,
|
||||||
|
int color) {
|
||||||
if (!m_titleblock_template) return;
|
if (!m_titleblock_template) return;
|
||||||
m_titleblock_template -> renderDxf(title_block_rect, m_context, titleblock_width, file_path, color);
|
m_titleblock_template -> renderDxf(title_block_rect,
|
||||||
|
m_context,
|
||||||
|
titleblock_width,
|
||||||
|
file_path, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user