diff --git a/sources/bordertitleblock.cpp b/sources/bordertitleblock.cpp
index 48e0b19b1..a3a570fe9 100644
--- a/sources/bordertitleblock.cpp
+++ b/sources/bordertitleblock.cpp
@@ -99,6 +99,7 @@ TitleBlockProperties BorderTitleBlock::exportTitleBlock() {
ip.title = bi_title;
ip.folio = bi_folio;
ip.filename = bi_filename;
+ ip.template_name = titleBlockTemplateName();
return(ip);
}
@@ -113,6 +114,7 @@ void BorderTitleBlock::importTitleBlock(const TitleBlockProperties &ip) {
bi_filename = ip.filename;
updateDiagramContextForTitleBlock();
emit(needFolioData());
+ emit(needTitleBlockTemplate(ip.template_name));
}
/**
@@ -161,6 +163,14 @@ void BorderTitleBlock::setTitleBlockTemplate(const TitleBlockTemplate *titlebloc
titleblock_template_renderer -> setTitleBlockTemplate(titleblock_template);
}
+/**
+ @return The name of the template used to render the titleblock.
+*/
+QString BorderTitleBlock::titleBlockTemplateName() const {
+ QString tbt_name = titleblock_template_renderer -> titleBlockTemplate() -> name();
+ return((tbt_name == "default") ? "" : tbt_name);
+}
+
/**
This slot may be used to inform this class that the given title block
template has changed. The title block-dedicated rendering cache will thus be
@@ -168,7 +178,7 @@ void BorderTitleBlock::setTitleBlockTemplate(const TitleBlockTemplate *titlebloc
@param template_name Name of the title block template that has changed
*/
void BorderTitleBlock::titleBlockTemplateChanged(const QString &template_name) {
- Q_UNUSED(template_name); // this class does not store the name of its template
+ if (titleBlockTemplateName() != template_name) return;
titleblock_template_renderer -> invalidateRenderedTemplate();
}
@@ -181,7 +191,7 @@ void BorderTitleBlock::titleBlockTemplateChanged(const QString &template_name) {
@param new_template (Optional) title block template to use instead
*/
void BorderTitleBlock::titleBlockTemplateRemoved(const QString &removed_template_name, const TitleBlockTemplate *new_template) {
- Q_UNUSED(removed_template_name); // this class does not store the name of its template
+ if (titleBlockTemplateName() != removed_template_name) return;
if (new_template) {
setTitleBlockTemplate(new_template);
diff --git a/sources/bordertitleblock.h b/sources/bordertitleblock.h
index a9502580d..13bef99b1 100644
--- a/sources/bordertitleblock.h
+++ b/sources/bordertitleblock.h
@@ -152,6 +152,7 @@ class BorderTitleBlock : public QObject {
const TitleBlockTemplate *titleBlockTemplate();
void setTitleBlockTemplate(const TitleBlockTemplate *);
+ QString titleBlockTemplateName() const;
public slots:
void titleBlockTemplateChanged(const QString &);
@@ -192,6 +193,13 @@ class BorderTitleBlock : public QObject {
*/
void needFolioData();
+ /**
+ Signal emitted when this object needs to set a specific title block
+ template. This object cannot handle the job since it does not know of
+ its parent project.
+ */
+ void needTitleBlockTemplate(const QString &);
+
// attributs
private:
// informations du cartouche
diff --git a/sources/diagram.cpp b/sources/diagram.cpp
index ae59d956f..40bcb1fd6 100644
--- a/sources/diagram.cpp
+++ b/sources/diagram.cpp
@@ -63,6 +63,11 @@ Diagram::Diagram(QObject *parent) :
// initialise les objets gerant les deplacements
elements_mover_ = new ElementsMover(); // deplacements d'elements/conducteurs/textes
element_texts_mover_ = new ElementTextsMover(); // deplacements d'ElementTextItem
+
+ connect(
+ &border_and_titleblock, SIGNAL(needTitleBlockTemplate(const QString &)),
+ this, SLOT(setTitleBlockTemplate(const QString &))
+ );
}
/**
@@ -272,6 +277,7 @@ QDomDocument Diagram::toXml(bool whole_content) {
if (!border_and_titleblock.title().isNull()) racine.setAttribute("title", border_and_titleblock.title());
if (!border_and_titleblock.fileName().isNull()) racine.setAttribute("filename", border_and_titleblock.fileName());
if (!border_and_titleblock.folio().isNull()) racine.setAttribute("folio", border_and_titleblock.folio());
+
racine.setAttribute("cols", border_and_titleblock.nbColumns());
racine.setAttribute("colsize", QString("%1").arg(border_and_titleblock.columnsWidth()));
racine.setAttribute("rows", border_and_titleblock.nbRows());
@@ -280,8 +286,9 @@ QDomDocument Diagram::toXml(bool whole_content) {
racine.setAttribute("height", QString("%1").arg(border_and_titleblock.diagramHeight()));
racine.setAttribute("displaycols", border_and_titleblock.columnsAreDisplayed() ? "true" : "false");
racine.setAttribute("displayrows", border_and_titleblock.rowsAreDisplayed() ? "true" : "false");
- if (!titleblock_template_name_.isEmpty()) {
- racine.setAttribute("titleblocktemplate", titleblock_template_name_);
+ QString current_template_name = border_and_titleblock.titleBlockTemplateName();
+ if (!current_template_name.isEmpty()) {
+ racine.setAttribute("titleblocktemplate", current_template_name);
}
// type de conducteur par defaut
@@ -422,14 +429,7 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf
border_and_titleblock.setDate(QDate::fromString(root.attribute("date"), "yyyyMMdd"));
border_and_titleblock.setFileName(root.attribute("filename"));
border_and_titleblock.setFolio(root.attribute("folio"));
- if (root.hasAttribute("titleblocktemplate") && project_) {
- QString titleblock_template_name = root.attribute("titleblocktemplate");
- const TitleBlockTemplate *titleblock_template = project_ -> getTemplateByName(titleblock_template_name);
- if (titleblock_template) {
- titleblock_template_name_ = titleblock_template_name;
- border_and_titleblock.setTitleBlockTemplate(titleblock_template);
- }
- }
+ setTitleBlockTemplate(root.attribute("titleblocktemplate", ""));
bool ok;
// nombre de colonnes
@@ -772,9 +772,9 @@ void Diagram::diagramTextChanged(DiagramTextItem *text_item, const QString &old_
@param template_name Name of the title block template that has changed
*/
void Diagram::titleBlockTemplateChanged(const QString &template_name) {
- if (titleblock_template_name_ == template_name) {
- border_and_titleblock.titleBlockTemplateChanged(template_name);
- }
+ if (border_and_titleblock.titleBlockTemplateName() != template_name) return;
+
+ border_and_titleblock.titleBlockTemplateChanged(template_name);
update();
}
@@ -787,12 +787,23 @@ void Diagram::titleBlockTemplateChanged(const QString &template_name) {
@param new_template (Optional) Name of the title block template to use instead
*/
void Diagram::titleBlockTemplateRemoved(const QString &template_name, const QString &new_template) {
- if (titleblock_template_name_ == template_name) {
- const TitleBlockTemplate *final_template = project_ -> getTemplateByName(new_template);
- titleblock_template_name_ = final_template ? new_template : QString();
- border_and_titleblock.titleBlockTemplateRemoved(template_name, final_template);
- update();
- }
+ if (border_and_titleblock.titleBlockTemplateName() != template_name) return;
+
+ const TitleBlockTemplate *final_template = project_ -> getTemplateByName(new_template);
+ border_and_titleblock.titleBlockTemplateRemoved(template_name, final_template);
+ update();
+}
+
+/**
+ Set the template to use to render the title block of this diagram.
+ @param template_name Name of the title block template.
+*/
+void Diagram::setTitleBlockTemplate(const QString &template_name) {
+ if (!project_) return;
+
+ QString current_name = border_and_titleblock.titleBlockTemplateName();
+ const TitleBlockTemplate *titleblock_template = project_ -> getTemplateByName(template_name);
+ border_and_titleblock.titleBlockTemplateRemoved(current_name, titleblock_template);
}
/**
diff --git a/sources/diagram.h b/sources/diagram.h
index efdbd0e93..adc6622bc 100644
--- a/sources/diagram.h
+++ b/sources/diagram.h
@@ -85,7 +85,6 @@ class Diagram : public QGraphicsScene {
QDomDocument xml_document;
QETProject *project_;
bool read_only_;
- QString titleblock_template_name_;
// methodes
protected:
@@ -171,6 +170,7 @@ class Diagram : public QGraphicsScene {
void diagramTextChanged(DiagramTextItem *, const QString &, const QString &);
void titleBlockTemplateChanged(const QString &);
void titleBlockTemplateRemoved(const QString &, const QString & = QString());
+ void setTitleBlockTemplate(const QString &);
// fonctions relative a la selection sur le schema
void selectAll();
diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp
index 709ae47fc..1800a5307 100644
--- a/sources/diagramview.cpp
+++ b/sources/diagramview.cpp
@@ -426,7 +426,15 @@ void DiagramView::editDiagramProperties() {
BorderPropertiesWidget *border_infos = new BorderPropertiesWidget(border, &popup);
border_infos -> setReadOnly(diagram_is_read_only);
+
TitleBlockPropertiesWidget *titleblock_infos = new TitleBlockPropertiesWidget(titleblock, false, &popup);
+ if (QETProject *parent_project = scene -> project()) {
+ titleblock_infos -> setTitleBlockTemplatesList(parent_project -> embeddedTitleBlockTemplates());
+ titleblock_infos -> setTitleBlockTemplatesVisible(true);
+ // we have to parse again the TitleBlockProperties object, since the
+ // first parsing did not know of our templates
+ titleblock_infos -> setTitleBlockProperties(titleblock);
+ }
titleblock_infos -> setReadOnly(diagram_is_read_only);
// boutons
diff --git a/sources/titleblockproperties.cpp b/sources/titleblockproperties.cpp
index e219c5d97..653dcaa2e 100644
--- a/sources/titleblockproperties.cpp
+++ b/sources/titleblockproperties.cpp
@@ -43,7 +43,8 @@ bool TitleBlockProperties::operator==(const TitleBlockProperties &ip) {
ip.author == author &&\
ip.date == date &&\
ip.filename == filename &&\
- ip.folio == folio
+ ip.folio == folio &&\
+ ip.template_name == template_name
);
}
@@ -66,6 +67,9 @@ void TitleBlockProperties::toXml(QDomElement &e) const {
e.setAttribute("filename", filename);
e.setAttribute("folio", folio);
e.setAttribute("date", exportDate());
+ if (!template_name.isEmpty()) {
+ e.setAttribute("titleblocktemplate", template_name);
+ }
}
/**
@@ -78,6 +82,7 @@ void TitleBlockProperties::fromXml(QDomElement &e) {
if (e.hasAttribute("filename")) filename = e.attribute("filename");
if (e.hasAttribute("folio")) folio = e.attribute("folio");
if (e.hasAttribute("date")) setDateFromString(e.attribute("date"));
+ if (e.hasAttribute("titleblocktemplate")) template_name = e.attribute("titleblocktemplate");
}
/**
diff --git a/sources/titleblockproperties.h b/sources/titleblockproperties.h
index 4a8194189..33b46dd52 100644
--- a/sources/titleblockproperties.h
+++ b/sources/titleblockproperties.h
@@ -50,6 +50,7 @@ class TitleBlockProperties {
QString filename; ///< Nom de fichier affiche par le cartouche
QString folio; ///< Folio affiche par le cartouche
DateManagement useDate; ///< Indique s'il faut utiliser ou non l'attribut date
+ QString template_name; ///< Name of the template used to render the title block - an empty string means "the default template provided by the application"
private:
QString exportDate() const;
diff --git a/sources/titleblockpropertieswidget.cpp b/sources/titleblockpropertieswidget.cpp
index b30133861..0006950a8 100644
--- a/sources/titleblockpropertieswidget.cpp
+++ b/sources/titleblockpropertieswidget.cpp
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see .
*/
#include "titleblockpropertieswidget.h"
+#include "qeticons.h"
#include "qetapp.h"
/**
@@ -32,6 +33,9 @@ TitleBlockPropertiesWidget::TitleBlockPropertiesWidget(const TitleBlockPropertie
titleblock_infos -> setMinimumSize(300, 330);
this_layout -> addWidget(titleblock_infos);
+ titleblock_template_label = new QLabel(tr("Mod\350le :"));
+ titleblock_template_name = new QComboBox();
+
titleblock_title = new QLineEdit(this);
titleblock_author = new QLineEdit(this);
@@ -68,23 +72,28 @@ TitleBlockPropertiesWidget::TitleBlockPropertiesWidget(const TitleBlockPropertie
folio_tip -> setWordWrap(true);
QGridLayout *layout_champs = new QGridLayout(titleblock_infos);
-
- layout_champs -> addWidget(new QLabel(tr("Titre : ")), 0, 0);
- layout_champs -> addWidget(titleblock_title, 0, 1);
- layout_champs -> addWidget(new QLabel(tr("Auteur : ")), 1, 0);
- layout_champs -> addWidget(titleblock_author, 1, 1);
- layout_champs -> addWidget(new QLabel(tr("Date : ")), 2, 0, Qt::AlignTop);
- layout_champs -> addLayout(layout_date, 2, 1);
- layout_champs -> addWidget(new QLabel(tr("Fichier : ")), 3, 0);
- layout_champs -> addWidget(titleblock_filename, 3, 1);
- layout_champs -> addWidget(new QLabel(tr("Folio : ")), 4, 0);
- layout_champs -> addWidget(titleblock_folio, 4, 1);
- layout_champs -> addWidget(folio_tip, 5, 1, Qt::AlignTop);
+ layout_champs -> addWidget(titleblock_template_label, 0, 0);
+ layout_champs -> addWidget(titleblock_template_name, 0, 1);
+ layout_champs -> addWidget(new QLabel(tr("Titre : ")), 1, 0);
+ layout_champs -> addWidget(titleblock_title, 1, 1);
+ layout_champs -> addWidget(new QLabel(tr("Auteur : ")), 2, 0);
+ layout_champs -> addWidget(titleblock_author, 2, 1);
+ layout_champs -> addWidget(new QLabel(tr("Date : ")), 3, 0, Qt::AlignTop);
+ layout_champs -> addLayout(layout_date, 3, 1);
+ layout_champs -> addWidget(new QLabel(tr("Fichier : ")), 4, 0);
+ layout_champs -> addWidget(titleblock_filename, 4, 1);
+ layout_champs -> addWidget(new QLabel(tr("Folio : ")), 5, 0);
+ layout_champs -> addWidget(titleblock_folio, 5, 1);
+ layout_champs -> addWidget(folio_tip, 6, 1, Qt::AlignTop);
layout_champs -> setRowStretch(5, 500);
titleblock_current_date -> setVisible(display_current_date = current);
setTitleBlockProperties(titleblock);
setLayout(this_layout);
+
+ // by default, we do not display the template combo box
+ titleblock_template_label -> setVisible(false);
+ titleblock_template_name -> setVisible(false);
}
/// Destructeur
@@ -110,6 +119,12 @@ TitleBlockProperties TitleBlockPropertiesWidget::titleBlockProperties() const {
prop.useDate = TitleBlockProperties::CurrentDate;
prop.date = QDate::currentDate();
}
+
+ int index = titleblock_template_name -> currentIndex();
+ if (index != -1) {
+ prop.template_name = titleblock_template_name -> itemData(index).toString();
+ }
+
return(prop);
}
@@ -146,6 +161,13 @@ void TitleBlockPropertiesWidget::setTitleBlockProperties(const TitleBlockPropert
}
}
}
+
+ if (!titleblock.template_name.isEmpty()) {
+ int matching_index = titleblock_template_name -> findData(titleblock.template_name);
+ if (matching_index != -1) {
+ titleblock_template_name -> setCurrentIndex(matching_index);
+ }
+ }
}
/**
@@ -174,4 +196,27 @@ void TitleBlockPropertiesWidget::setReadOnly(bool ro) {
titleblock_no_date -> setDisabled(ro);
titleblock_current_date -> setDisabled(ro);
titleblock_fixed_date -> setDisabled(ro);
+ titleblock_template_label -> setDisabled(ro);
+ titleblock_template_name -> setDisabled(ro);
+}
+
+/**
+ @param templates List of template names the dedicated combo box should
+ display.
+*/
+void TitleBlockPropertiesWidget::setTitleBlockTemplatesList(const QList &templates) {
+ titleblock_template_name -> clear();
+ titleblock_template_name -> addItem(QET::Icons::TitleBlock, tr("Mod\350le par d\351faut"), QString());
+ foreach (QString template_name, templates) {
+ titleblock_template_name -> addItem(QET::Icons::TitleBlock, template_name, template_name);
+ }
+}
+
+/**
+ @param visible true to display the title block templates list, false to
+ hide it.
+*/
+void TitleBlockPropertiesWidget::setTitleBlockTemplatesVisible(bool visible) {
+ titleblock_template_name -> setVisible(visible);
+ titleblock_template_label -> setVisible(visible);
}
diff --git a/sources/titleblockpropertieswidget.h b/sources/titleblockpropertieswidget.h
index 4095a7a07..1b7408cb4 100644
--- a/sources/titleblockpropertieswidget.h
+++ b/sources/titleblockpropertieswidget.h
@@ -39,6 +39,8 @@ class TitleBlockPropertiesWidget : public QWidget {
bool displayCurrentDate() const;
bool isReadOnly() const;
void setReadOnly(bool);
+ void setTitleBlockTemplatesList(const QList &);
+ void setTitleBlockTemplatesVisible(bool);
// attributs
private:
@@ -51,5 +53,7 @@ class TitleBlockPropertiesWidget : public QWidget {
QRadioButton *titleblock_current_date;
QRadioButton *titleblock_fixed_date;
bool display_current_date;
+ QLabel *titleblock_template_label;
+ QComboBox *titleblock_template_name;
};
#endif
diff --git a/sources/titleblocktemplate.cpp b/sources/titleblocktemplate.cpp
index 46a01fbce..5baf05e41 100644
--- a/sources/titleblocktemplate.cpp
+++ b/sources/titleblocktemplate.cpp
@@ -66,6 +66,10 @@ bool TitleBlockTemplate::loadFromXmlElement(const QDomElement &xml_element) {
if (xml_element.tagName() != "titleblocktemplate") {
return(false);
}
+ if (!xml_element.hasAttribute("name")) {
+ return(false);
+ }
+ name_ = xml_element.attribute("name");
loadLogos(xml_element, true);
loadGrid(xml_element);
@@ -421,6 +425,13 @@ QString TitleBlockTemplate::toString() const {
return(str);
}
+/**
+ @return the name of this template
+*/
+QString TitleBlockTemplate::name() const {
+ return(name_);
+}
+
/**
@param total_width The total width of the titleblock to render
@return the list of the columns widths for this rendering
diff --git a/sources/titleblocktemplate.h b/sources/titleblocktemplate.h
index 8d6a4a9c3..2bc65f84b 100644
--- a/sources/titleblocktemplate.h
+++ b/sources/titleblocktemplate.h
@@ -57,8 +57,7 @@ class TitleBlockTemplate : public QObject {
public:
bool loadFromXmlFile(const QString &);
bool loadFromXmlElement(const QDomElement &);
- void setContext(const DiagramContext &);
-
+ QString name() const;
QList columnsWidth(int) const;
int height() const;
@@ -83,6 +82,7 @@ class TitleBlockTemplate : public QObject {
// attributs
private:
QDomDocument xml_description_;
+ QString name_;
QHash vector_logos_;
QHash bitmap_logos_;
QList rows_heights_;