mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-17 20:50:34 +01:00
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:
@@ -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.
|
||||||
|
|||||||
@@ -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 &);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user