The panel now highlights unused title block templates.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@1477 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier
2012-01-23 20:36:51 +00:00
parent 6d5570404a
commit 7f9d792368
8 changed files with 113 additions and 5 deletions

View File

@@ -761,6 +761,10 @@ void Diagram::setTitleBlockTemplate(const QString &template_name) {
QString current_name = border_and_titleblock.titleBlockTemplateName(); QString current_name = border_and_titleblock.titleBlockTemplateName();
const TitleBlockTemplate *titleblock_template = project_ -> getTemplateByName(template_name); const TitleBlockTemplate *titleblock_template = project_ -> getTemplateByName(template_name);
border_and_titleblock.titleBlockTemplateRemoved(current_name, titleblock_template); border_and_titleblock.titleBlockTemplateRemoved(current_name, titleblock_template);
if (template_name != current_name) {
emit(usedTitleBlockTemplateChanged(template_name));
}
} }
/** /**
@@ -900,6 +904,15 @@ bool Diagram::usesElement(const ElementsLocation &location) {
return(false); return(false);
} }
/**
@param a title block template name
@return true if the provided template is used by this diagram, false
otherwise.
*/
bool Diagram::usesTitleBlockTemplate(const QString &name) {
return(name == border_and_titleblock.titleBlockTemplateName());
}
/** /**
Cette methode permet d'appliquer de nouvelles options de rendu tout en Cette methode permet d'appliquer de nouvelles options de rendu tout en
accedant aux proprietes de rendu en cours. accedant aux proprietes de rendu en cours.

View File

@@ -165,6 +165,7 @@ class Diagram : public QGraphicsScene {
void continueMoveElementTexts(const QPointF &); void continueMoveElementTexts(const QPointF &);
void endMoveElementTexts(); void endMoveElementTexts();
bool usesElement(const ElementsLocation &); bool usesElement(const ElementsLocation &);
bool usesTitleBlockTemplate(const QString &);
QUndoStack &undoStack(); QUndoStack &undoStack();
QGIManager &qgiManager(); QGIManager &qgiManager();
@@ -183,6 +184,7 @@ class Diagram : public QGraphicsScene {
signals: signals:
void written(); void written();
void readOnlyChanged(bool); void readOnlyChanged(bool);
void usedTitleBlockTemplateChanged(const QString &);
}; };
/** /**

View File

@@ -760,11 +760,7 @@ QTreeWidgetItem *ElementsPanel::addElement(QTreeWidgetItem *qtwi_parent, Element
if (QETProject *element_project = element -> location().project()) { if (QETProject *element_project = element -> location().project()) {
// affiche en rouge les elements inutilises dans un projet // affiche en rouge les elements inutilises dans un projet
if (!element_project -> usesElement(element -> location())) { if (!element_project -> usesElement(element -> location())) {
QLinearGradient t(0, 0, 200, 0); markItemAsUnused(qtwi);
t.setColorAt(0, QColor("#ffc0c0"));
t.setColorAt(1, QColor("#ffffff"));
qtwi -> setBackground(0, QBrush(t));
qtwi -> setToolTip(0, QString(tr("%1 [non utilis\351 dans le projet]")).arg(qtwi -> toolTip(0)));
} }
} }
locations_.insert(qtwi, element -> location()); locations_.insert(qtwi, element -> location());
@@ -788,6 +784,8 @@ QTreeWidgetItem *ElementsPanel::addTitleBlockTemplatesCollection(
) { ) {
if (!collection) return(0); if (!collection) return(0);
QString selected_template;
// check whether we have an item for the given collection // check whether we have an item for the given collection
QTreeWidgetItem *qtwi_tbt_collection = title_blocks_collections_.key(collection); QTreeWidgetItem *qtwi_tbt_collection = title_blocks_collections_.key(collection);
if (!qtwi_tbt_collection) { if (!qtwi_tbt_collection) {
@@ -809,7 +807,24 @@ QTreeWidgetItem *ElementsPanel::addTitleBlockTemplatesCollection(
this, this,
SLOT(titleBlockTemplatesCollectionChanged(TitleBlockTemplatesCollection*, const QString &)) SLOT(titleBlockTemplatesCollectionChanged(TitleBlockTemplatesCollection*, const QString &))
); );
// if the added collection is rattached to a project, we're interested in
// knowing how many times each template is used.
if (QETProject *project = collection -> parentProject()) {
connect(
project, SIGNAL(diagramUsedTemplate(TitleBlockTemplatesCollection *, const QString &)),
this, SLOT(titleBlockTemplatesCollectionChanged(TitleBlockTemplatesCollection *, const QString &))
);
}
} else { } else {
// save the currently selected template, if any
if (QTreeWidgetItem *current_qtwi = currentItem()) {
for (int i = 0 ; i < qtwi_tbt_collection -> childCount() ; ++ i) {
if (qtwi_tbt_collection -> child(i) == current_qtwi) {
selected_template = nameOfTitleBlockTemplate(qtwi_tbt_collection -> child(i));
}
}
}
// the collection has already been added // the collection has already been added
// remove the child title block templates // remove the child title block templates
foreach(QTreeWidgetItem *qtwi_tbt, qtwi_tbt_collection -> takeChildren()) { foreach(QTreeWidgetItem *qtwi_tbt, qtwi_tbt_collection -> takeChildren()) {
@@ -839,8 +854,26 @@ QTreeWidgetItem *ElementsPanel::addTitleBlockTemplatesCollection(
); );
qtwi_tbt -> setToolTip(0, template_location.toString()); qtwi_tbt -> setToolTip(0, template_location.toString());
qtwi_tbt -> setIcon(0, QET::Icons::TitleBlock); qtwi_tbt -> setIcon(0, QET::Icons::TitleBlock);
// special action for templates that belong to a project
if (QETProject *tbt_project = template_location.parentProject()) {
// display unused templates using a red background
if (!tbt_project -> usesTitleBlockTemplate(template_location)) {
markItemAsUnused(qtwi_tbt);
}
}
title_blocks_.insert(qtwi_tbt, template_location); title_blocks_.insert(qtwi_tbt, template_location);
} }
// restore the previously selected template, if any
if (!selected_template.isEmpty()) {
TitleBlockTemplateLocation location = collection -> location(selected_template);
QTreeWidgetItem *previously_selected_item = title_blocks_.key(location, 0);
if (previously_selected_item) {
setCurrentItem(previously_selected_item);
}
}
return(qtwi_tbt_collection); return(qtwi_tbt_collection);
} }
@@ -892,6 +925,11 @@ void ElementsPanel::reload(bool reload_collections) {
} }
// vide l'arbre et le hash // vide l'arbre et le hash
foreach (TitleBlockTemplatesCollection *tbt_collection, title_blocks_collections_) {
if (QETProject *project = tbt_collection -> parentProject()) {
disconnect(project, 0, this, 0);
}
}
clear(); clear();
locations_.clear(); locations_.clear();
projects_.clear(); projects_.clear();
@@ -1399,3 +1437,15 @@ void ElementsPanel::ensureHierarchyIsVisible(QList<QTreeWidgetItem *> items) {
} }
} }
/**
Mark the provided QTreeWidgetItem as unused in its parent project.
@param qtwi A QTreeWidgetItem
*/
void ElementsPanel::markItemAsUnused(QTreeWidgetItem *qtwi) {
QLinearGradient t(0, 0, 200, 0);
t.setColorAt(0, QColor("#ffc0c0"));
t.setColorAt(1, QColor("#ffffff"));
qtwi -> setBackground(0, QBrush(t));
qtwi -> setToolTip(0, QString(tr("%1 [non utilis\351 dans le projet]")).arg(qtwi -> toolTip(0)));
}

View File

@@ -137,6 +137,7 @@ class ElementsPanel : public QTreeWidget {
QString diagramTitleToDisplay(Diagram *) const; QString diagramTitleToDisplay(Diagram *) const;
QString titleBlockTemplateNameToDisplay(const QString &) const; QString titleBlockTemplateNameToDisplay(const QString &) const;
void ensureHierarchyIsVisible(QList<QTreeWidgetItem *>); void ensureHierarchyIsVisible(QList<QTreeWidgetItem *>);
void markItemAsUnused(QTreeWidgetItem *);
// attributs // attributs
private: private:

View File

@@ -723,6 +723,23 @@ bool QETProject::usesElement(const ElementsLocation &location) {
return(false); return(false);
} }
/**
@param location Location of a title block template
@return true if the provided template is used by at least one diagram
within this project, false otherwise
*/
bool QETProject::usesTitleBlockTemplate(const TitleBlockTemplateLocation &location) {
// a diagram can only use a title block template embedded wihtin its parent project
if (location.parentProject() != this) return(false);
foreach (Diagram *diagram, diagrams()) {
if (diagram -> usesTitleBlockTemplate(location.name())) {
return(true);
}
}
return(false);
}
/** /**
Supprime tous les elements inutilises dans le projet Supprime tous les elements inutilises dans le projet
@param handler Gestionnaire d'erreur @param handler Gestionnaire d'erreur
@@ -1047,6 +1064,10 @@ void QETProject::addDiagram(Diagram *diagram) {
this, this,
SLOT(updateDiagramsFolioData()) SLOT(updateDiagramsFolioData())
); );
connect(
diagram, SIGNAL(usedTitleBlockTemplateChanged(const QString &)),
this, SLOT(usedTitleBlockTemplateChanged(const QString &))
);
// ajoute le schema au projet // ajoute le schema au projet
diagrams_ << diagram; diagrams_ << diagram;
@@ -1175,6 +1196,14 @@ void QETProject::removeDiagramsTitleBlockTemplate(TitleBlockTemplatesCollection
} }
} }
/**
Handles the fact a digram changed the title block template it used
@param template_name Name of the template
*/
void QETProject::usedTitleBlockTemplateChanged(const QString &template_name) {
emit(diagramUsedTemplate(embeddedTitleBlockTemplatesCollection(), template_name));
}
/** /**
Copie l'element integ_elmt dans la categorie target_cat en utilisant le Copie l'element integ_elmt dans la categorie target_cat en utilisant le
gestionnaire handler ; en cas d'erreur, error_message est rempli. gestionnaire handler ; en cas d'erreur, error_message est rempli.

View File

@@ -108,6 +108,7 @@ class QETProject : public QObject {
QString integrateElement(const QString &, MoveElementsHandler *, QString &); QString integrateElement(const QString &, MoveElementsHandler *, QString &);
QString integrateTitleBlockTemplate(const TitleBlockTemplateLocation &, MoveTitleBlockTemplatesHandler *handler); QString integrateTitleBlockTemplate(const TitleBlockTemplateLocation &, MoveTitleBlockTemplatesHandler *handler);
bool usesElement(const ElementsLocation &); bool usesElement(const ElementsLocation &);
bool usesTitleBlockTemplate(const TitleBlockTemplateLocation &);
void cleanUnusedElements(MoveElementsHandler *); void cleanUnusedElements(MoveElementsHandler *);
void cleanEmptyCategories(MoveElementsHandler *); void cleanEmptyCategories(MoveElementsHandler *);
bool projectWasModified(); bool projectWasModified();
@@ -126,12 +127,14 @@ class QETProject : public QObject {
void projectInformationsChanged(QETProject *); void projectInformationsChanged(QETProject *);
void diagramAdded(QETProject *, Diagram *); void diagramAdded(QETProject *, Diagram *);
void diagramRemoved(QETProject *, Diagram *); void diagramRemoved(QETProject *, Diagram *);
void diagramUsedTemplate(TitleBlockTemplatesCollection *, const QString &);
void readOnlyChanged(QETProject *, bool); void readOnlyChanged(QETProject *, bool);
private slots: private slots:
void updateDiagramsFolioData(); void updateDiagramsFolioData();
void updateDiagramsTitleBlockTemplate(TitleBlockTemplatesCollection *, const QString &); void updateDiagramsTitleBlockTemplate(TitleBlockTemplatesCollection *, const QString &);
void removeDiagramsTitleBlockTemplate(TitleBlockTemplatesCollection *, const QString &); void removeDiagramsTitleBlockTemplate(TitleBlockTemplatesCollection *, const QString &);
void usedTitleBlockTemplateChanged(const QString &);
private: private:
void setupTitleBlockTemplatesCollection(); void setupTitleBlockTemplatesCollection();

View File

@@ -153,3 +153,12 @@ bool TitleBlockTemplateLocation::isReadOnly() const {
if (!collection_) return(false); if (!collection_) return(false);
return(collection_ -> isReadOnly(name_)); return(collection_ -> isReadOnly(name_));
} }
/**
@param location other location that should be compared to this one
@return true if locations are equal, false otherwise
*/
bool TitleBlockTemplateLocation::operator==(const TitleBlockTemplateLocation &location) const {
return(location.collection_ == collection_ && location.name_ == name_);
}

View File

@@ -50,6 +50,7 @@ class TitleBlockTemplateLocation {
QDomElement getTemplateXmlDescription() const; QDomElement getTemplateXmlDescription() const;
TitleBlockTemplate *getTemplate() const; TitleBlockTemplate *getTemplate() const;
bool isReadOnly() const; bool isReadOnly() const;
bool operator==(const TitleBlockTemplateLocation &) const;
// attributes // attributes
private: private: