Introduced project-wide properties, i.e. key/value pairs defined at the project scope available in all child diagrams.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@1892 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier
2012-07-01 21:54:07 +00:00
parent 317d149c89
commit d5efc331a1
6 changed files with 78 additions and 11 deletions

View File

@@ -192,8 +192,8 @@ void BorderTitleBlock::importTitleBlock(const TitleBlockProperties &ip) {
setFolio(ip.folio);
additional_fields_ = ip.context;
emit(needFolioData());
updateDiagramContextForTitleBlock();
emit(needFolioData()); // Note: we expect additional data to be provided
// through setFolioData(), which in turn calls updateDiagramContextForTitleBlock().
emit(needTitleBlockTemplate(ip.template_name));
}
@@ -572,10 +572,16 @@ DiagramPosition BorderTitleBlock::convertPosition(const QPointF &pos) {
/**
Update the informations given to the titleblock template by regenerating a
DiagramContext object.
@param initial_context Base diagram context that will be overridden by
diagram-wide values
*/
void BorderTitleBlock::updateDiagramContextForTitleBlock() {
// our final DiagramContext object is the "additional fields" one
DiagramContext context = additional_fields_;
void BorderTitleBlock::updateDiagramContextForTitleBlock(const DiagramContext &initial_context) {
// Our final DiagramContext is the initial one (which is supposed to bring
// project-wide properties), overridden by the "additional fields" one...
DiagramContext context = initial_context;
foreach (QString key, additional_fields_.keys()) {
context.addValue(key, additional_fields_[key]);
}
// ... overridden by the historical and/or dynamically generated fields
context.addValue("author", bi_author);
@@ -609,8 +615,9 @@ QString BorderTitleBlock::incrementLetters(const QString &string) {
/**
@param index numero du schema (de 1 a total)
@param total nombre total de schemas dans le projet
@param project_properties Project-wide properties, to be merged with diagram-wide ones.
*/
void BorderTitleBlock::setFolioData(int index, int total) {
void BorderTitleBlock::setFolioData(int index, int total, const DiagramContext &project_properties) {
if (index < 1 || total < 1 || index > total) return;
// memorise les informations
@@ -622,5 +629,5 @@ void BorderTitleBlock::setFolioData(int index, int total) {
bi_final_folio.replace("%id", QString::number(folio_index_));
bi_final_folio.replace("%total", QString::number(folio_total_));
updateDiagramContextForTitleBlock();
updateDiagramContextForTitleBlock(project_properties);
}

View File

@@ -142,7 +142,7 @@ class BorderTitleBlock : public QObject {
}
/// @param folio le nouveau contenu du champ "Folio"
void setFolio (const QString &folio) { bi_folio = folio; }
void setFolioData(int, int);
void setFolioData(int, int, const DiagramContext & = DiagramContext());
/// @param filename le nouveau contenu du champ "Fichier"
void setFileName (const QString &filename) { bi_filename = filename; }
@@ -172,7 +172,7 @@ class BorderTitleBlock : public QObject {
private:
void updateRectangles();
void updateDiagramContextForTitleBlock();
void updateDiagramContextForTitleBlock(const DiagramContext & = DiagramContext());
QString incrementLetters(const QString &);
// signaux

View File

@@ -3,6 +3,7 @@
#include "qetproject.h"
#include "borderpropertieswidget.h"
#include "conductorpropertieswidget.h"
#include "diagramcontextwidget.h"
#include "titleblockpropertieswidget.h"
#include <QtGui>
@@ -105,6 +106,7 @@ QIcon ProjectMainConfigPage::icon() const {
*/
void ProjectMainConfigPage::applyProjectConf() {
project_ -> setTitle(title_value_ -> text());
project_ -> setProjectProperties(project_variables_ -> context());
}
/**
@@ -120,6 +122,14 @@ QString ProjectMainConfigPage::projectTitle() const {
void ProjectMainConfigPage::initWidgets() {
title_label_ = new QLabel(tr("Titre du projet\240:", "label when configuring"));
title_value_ = new QLineEdit();
project_variables_label_ = new QLabel(
tr(
"Vous pouvez d\351finir ci-dessous des variables qui seront disponibles pour tous les sch\351mas de ce projet (typiquement pour les cartouches).",
"informative label"
)
);
project_variables_ = new DiagramContextWidget();
project_variables_ -> setContext(DiagramContext());
}
/**
@@ -131,7 +141,8 @@ void ProjectMainConfigPage::initLayout() {
title_layout0 -> addWidget(title_label_);
title_layout0 -> addWidget(title_value_);
main_layout0 -> addLayout(title_layout0);
main_layout0 -> addStretch();
main_layout0 -> addWidget(project_variables_label_);
main_layout0 -> addWidget(project_variables_);
setLayout(main_layout0);
}
@@ -140,6 +151,7 @@ void ProjectMainConfigPage::initLayout() {
*/
void ProjectMainConfigPage::readValuesFromProject() {
title_value_ -> setText(project_ -> title());
project_variables_ -> setContext(project_ -> projectProperties());
}
/**

View File

@@ -7,6 +7,7 @@ class QETProject;
class BorderPropertiesWidget;
class TitleBlockPropertiesWidget;
class ConductorPropertiesWidget;
class DiagramContextWidget;
/**
This class, derived from ConfigPage, aims at providing the basic skeleton
@@ -88,6 +89,8 @@ class ProjectMainConfigPage : public ProjectConfigPage {
protected:
QLabel *title_label_;
QLineEdit *title_value_;
QLabel *project_variables_label_;
DiagramContextWidget *project_variables_;
};
/**

View File

@@ -417,6 +417,11 @@ QDomDocument QETProject::toXml() {
project_root.appendChild(titleblocktemplates_elmt);
}
// project-wide properties
QDomElement project_properties = xml_doc.createElement("properties");
writeProjectPropertiesXml(project_properties);
project_root.appendChild(project_properties);
// proprietes pour les nouveaux schemas
QDomElement new_diagrams_properties = xml_doc.createElement("newdiagrams");
writeDefaultPropertiesXml(new_diagrams_properties);
@@ -900,6 +905,9 @@ void QETProject::readProjectXml() {
state_ = ProjectParsingFailed;
}
// load the project-wide properties
readProjectPropertiesXml();
// charge les proprietes par defaut pour les nouveaux schemas
readDefaultPropertiesXml();
@@ -979,6 +987,22 @@ void QETProject::readElementsCollectionXml() {
connect(collection_, SIGNAL(written()), this, SLOT(componentWritten()));
}
/**
Load project properties from the XML description of the project
*/
void QETProject::readProjectPropertiesXml() {
foreach (QDomElement e, QET::findInDomElement(document_root_.documentElement(), "properties")) {
project_properties_.fromXml(e);
}
}
/**
Export project properties under the \a xml_element XML element.
*/
void QETProject::writeProjectPropertiesXml(QDomElement &xml_element) {
project_properties_.toXml(xml_element);
}
/**
Charge les proprietes par defaut des nouveaux schemas depuis la description
XML du projet :
@@ -1139,6 +1163,21 @@ bool QETProject::diagramsWereModified() {
return(!(diagrams_[0] -> undoStack().isClean()));
}
/**
@return the project-wide properties made available to child diagrams.
*/
DiagramContext QETProject::projectProperties() {
return(project_properties_);
}
/**
Use \a context as project-wide properties made available to child diagrams.
*/
void QETProject::setProjectProperties(const DiagramContext &context) {
project_properties_ = context;
updateDiagramsFolioData();
}
/**
Cette methode sert a reperer un projet vide, c-a-d un projet identique a ce
que l'on obtient en faisant Fichier > Nouveau.
@@ -1166,7 +1205,7 @@ bool QETProject::projectWasModified() {
void QETProject::updateDiagramsFolioData() {
int total_folio = diagrams_.count();
for (int i = 0 ; i < total_folio ; ++ i) {
diagrams_[i] -> border_and_titleblock.setFolioData(i + 1, total_folio);
diagrams_[i] -> border_and_titleblock.setFolioData(i + 1, total_folio, project_properties_);
}
}

View File

@@ -115,6 +115,8 @@ class QETProject : public QObject {
bool projectWasModified();
bool embeddedCollectionWasModified();
bool diagramsWereModified();
DiagramContext projectProperties();
void setProjectProperties(const DiagramContext &);
public slots:
void componentWritten();
@@ -146,6 +148,8 @@ class QETProject : public QObject {
void readDiagramsXml();
void readElementsCollectionXml();
void readEmbeddedTemplatesXml();
void readProjectPropertiesXml();
void writeProjectPropertiesXml(QDomElement &);
void readDefaultPropertiesXml();
void writeDefaultPropertiesXml(QDomElement &);
void addDiagram(Diagram *);
@@ -182,6 +186,8 @@ class QETProject : public QObject {
TitleBlockProperties default_titleblock_properties_;
/// Embedded title block templates collection
TitleBlockTemplatesProjectCollection titleblocks_;
/// project-wide variables that will be made available to child diagrams
DiagramContext project_properties_;
};
Q_DECLARE_METATYPE(QETProject *)
#endif