Improved the GenericPanel class: added generic updateItem() and fillItem() methods and a panelContentChanged() signal.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@1495 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier
2012-02-12 15:29:57 +00:00
parent 815c973050
commit bde78d0412
2 changed files with 84 additions and 32 deletions

View File

@@ -222,7 +222,7 @@ QTreeWidgetItem *GenericPanel::updateProjectItem(QTreeWidgetItem *project_qtwi,
); );
} }
project_qtwi -> setToolTip(0, final_tooltip); project_qtwi -> setToolTip(0, final_tooltip);
return(project_qtwi); return(updateItem(project_qtwi, options, freshly_created));
} }
/** /**
@@ -279,7 +279,7 @@ QTreeWidgetItem *GenericPanel::fillProjectItem(QTreeWidgetItem *project_qtwi, QE
options options
); );
} }
return(project_qtwi); return(fillItem(project_qtwi, options, freshly_created));
} }
/** /**
@@ -361,7 +361,7 @@ QTreeWidgetItem *GenericPanel::updateDiagramItem(QTreeWidgetItem *diagram_qtwi,
); );
} }
return(diagram_qtwi); return(updateItem(diagram_qtwi, options, freshly_created));
} }
/** /**
@@ -371,7 +371,7 @@ QTreeWidgetItem *GenericPanel::fillDiagramItem(QTreeWidgetItem *diagram_qtwi, Di
Q_UNUSED(diagram) Q_UNUSED(diagram)
Q_UNUSED(options) Q_UNUSED(options)
Q_UNUSED(freshly_created) Q_UNUSED(freshly_created)
return(diagram_qtwi); return(fillItem(diagram_qtwi, options, freshly_created));
} }
/** /**
@@ -429,7 +429,7 @@ QTreeWidgetItem *GenericPanel::updateTemplatesCollectionItem(QTreeWidgetItem *tb
tb_templates_.insert(tbt_collection -> location(), tbt_collection_qtwi); tb_templates_.insert(tbt_collection -> location(), tbt_collection_qtwi);
} }
return(tbt_collection_qtwi); return(updateItem(tbt_collection_qtwi, options, freshly_created));
} }
/** /**
@@ -462,7 +462,7 @@ QTreeWidgetItem *GenericPanel::fillTemplatesCollectionItem(QTreeWidgetItem *tbt_
} }
} }
return(tbt_collection_qtwi); return(fillItem(tbt_collection_qtwi, options, freshly_created));
} }
/** /**
@@ -526,7 +526,7 @@ QTreeWidgetItem *GenericPanel::updateTemplateItem(QTreeWidgetItem *tb_template_q
tb_template_qtwi -> setData(0, GenericPanel::Item, qVariantFromValue(tb_template)); tb_template_qtwi -> setData(0, GenericPanel::Item, qVariantFromValue(tb_template));
tb_templates_.insert(tb_template, tb_template_qtwi); tb_templates_.insert(tb_template, tb_template_qtwi);
} }
return(tb_template_qtwi); return(updateItem(tb_template_qtwi, options, freshly_created));
} }
/** /**
@@ -536,7 +536,7 @@ QTreeWidgetItem *GenericPanel::fillTemplateItem(QTreeWidgetItem *tb_template_qtw
Q_UNUSED(tb_template) Q_UNUSED(tb_template)
Q_UNUSED(options) Q_UNUSED(options)
Q_UNUSED(freshly_created) Q_UNUSED(freshly_created)
return(tb_template_qtwi); return(fillItem(tb_template_qtwi, options, freshly_created));
} }
/** /**
@@ -606,7 +606,7 @@ QTreeWidgetItem *GenericPanel::updateElementsCollectionItem(QTreeWidgetItem *col
); );
} }
return(collection_qtwi); return(updateItem(collection_qtwi, options, freshly_created));
} }
/** /**
@@ -630,7 +630,7 @@ QTreeWidgetItem *GenericPanel::fillElementsCollectionItem(QTreeWidgetItem *colle
if (restore_previous_cache) { if (restore_previous_cache) {
setElementsCache(previous_cache); setElementsCache(previous_cache);
} }
return(collection_qtwi); return(fillItem(collection_qtwi, options, freshly_created));
} }
/** /**
@@ -698,7 +698,7 @@ QTreeWidgetItem *GenericPanel::updateElementsCategoryItem(QTreeWidgetItem *categ
category_qtwi -> setData(0, GenericPanel::Item, qVariantFromValue(category -> location())); category_qtwi -> setData(0, GenericPanel::Item, qVariantFromValue(category -> location()));
elements_.insert(category -> location(), category_qtwi); elements_.insert(category -> location(), category_qtwi);
} }
return(category_qtwi); return(updateItem(category_qtwi, options, freshly_created));
} }
/** /**
@@ -738,7 +738,7 @@ QTreeWidgetItem *GenericPanel::fillElementsCategoryItem(QTreeWidgetItem *categor
} }
} }
return(category_qtwi); return(fillItem(category_qtwi, options, freshly_created));
} }
/** /**
@@ -787,11 +787,13 @@ QTreeWidgetItem *GenericPanel::getItemForElement(ElementDefinition *element, boo
QTreeWidgetItem *GenericPanel::updateElementItem(QTreeWidgetItem *element_qtwi, ElementDefinition *element, PanelOptions options, bool freshly_created) { QTreeWidgetItem *GenericPanel::updateElementItem(QTreeWidgetItem *element_qtwi, ElementDefinition *element, PanelOptions options, bool freshly_created) {
Q_UNUSED(options) Q_UNUSED(options)
Q_UNUSED(freshly_created) Q_UNUSED(freshly_created)
if (!element_qtwi || !element) return(element_qtwi); if (!element_qtwi || !element) {
return(updateItem(element_qtwi, options, freshly_created));
}
ElementsCollectionCache *cache = getElementsCache(); ElementsCollectionCache *cache = getElementsCache();
if (!cache -> fetchElement(element)) { if (!cache -> fetchElement(element)) {
return(element_qtwi); return(updateItem(element_qtwi, options, freshly_created));
} }
ElementsLocation element_location = element -> location(); ElementsLocation element_location = element -> location();
@@ -814,7 +816,7 @@ QTreeWidgetItem *GenericPanel::updateElementItem(QTreeWidgetItem *element_qtwi,
elements_.insert(element_location, element_qtwi); elements_.insert(element_location, element_qtwi);
} }
return(element_qtwi); return(updateItem(element_qtwi, options, freshly_created));
} }
/** /**
@@ -825,7 +827,31 @@ QTreeWidgetItem *GenericPanel::fillElementItem (QTreeWidgetItem *element_qtwi, E
Q_UNUSED(element) Q_UNUSED(element)
Q_UNUSED(options) Q_UNUSED(options)
Q_UNUSED(freshly_created) Q_UNUSED(freshly_created)
return(element_qtwi); return(fillItem(element_qtwi, options, freshly_created));
}
/**
This generic method is called at the end of each update*Item method. Its
only purpose is being reimplemented in a subclass. The default
implementation does nothing.
*/
QTreeWidgetItem *GenericPanel::updateItem(QTreeWidgetItem *qtwi, PanelOptions options, bool freshly_created) {
Q_UNUSED(qtwi);
Q_UNUSED(options);
Q_UNUSED(freshly_created);
return(qtwi);
}
/**
This generic method is called at the end of each fill*Item method. Its
only purpose is being reimplemented in a subclass. The default
implementation does nothing.
*/
QTreeWidgetItem *GenericPanel::fillItem(QTreeWidgetItem *qtwi, PanelOptions options, bool freshly_created) {
Q_UNUSED(qtwi);
Q_UNUSED(options);
Q_UNUSED(freshly_created);
return(qtwi);
} }
/** /**
@@ -833,6 +859,7 @@ QTreeWidgetItem *GenericPanel::fillElementItem (QTreeWidgetItem *element_qtwi, E
*/ */
void GenericPanel::projectInformationsChanged(QETProject *project) { void GenericPanel::projectInformationsChanged(QETProject *project) {
addProject(project, 0, 0); addProject(project, 0, 0);
emit(panelContentChanged());
} }
/** /**
@@ -841,6 +868,7 @@ void GenericPanel::projectInformationsChanged(QETProject *project) {
void GenericPanel::diagramAdded(QETProject *project, Diagram *diagram) { void GenericPanel::diagramAdded(QETProject *project, Diagram *diagram) {
Q_UNUSED(diagram) Q_UNUSED(diagram)
addProject(project, 0, GenericPanel::AddChildDiagrams); addProject(project, 0, GenericPanel::AddChildDiagrams);
emit(panelContentChanged());
} }
/** /**
@@ -849,6 +877,7 @@ void GenericPanel::diagramAdded(QETProject *project, Diagram *diagram) {
void GenericPanel::diagramRemoved(QETProject *project, Diagram *diagram) { void GenericPanel::diagramRemoved(QETProject *project, Diagram *diagram) {
Q_UNUSED(diagram) Q_UNUSED(diagram)
addProject(project, 0, GenericPanel::AddChildDiagrams); addProject(project, 0, GenericPanel::AddChildDiagrams);
emit(panelContentChanged());
} }
/** /**
@@ -884,6 +913,7 @@ void GenericPanel::projectDiagramsOrderChanged(QETProject *project, int from, in
if (was_selected) { if (was_selected) {
setCurrentItem(moved_qtwi_diagram); setCurrentItem(moved_qtwi_diagram);
} }
emit(panelContentChanged());
} }
/** /**
@@ -892,6 +922,7 @@ void GenericPanel::projectDiagramsOrderChanged(QETProject *project, int from, in
void GenericPanel::diagramTitleChanged(Diagram *diagram, const QString &title) { void GenericPanel::diagramTitleChanged(Diagram *diagram, const QString &title) {
Q_UNUSED(title) Q_UNUSED(title)
GenericPanel::addDiagram(diagram); GenericPanel::addDiagram(diagram);
emit(panelContentChanged());
} }
/** /**
@@ -901,6 +932,7 @@ void GenericPanel::diagramTitleChanged(Diagram *diagram, const QString &title) {
void GenericPanel::templatesCollectionChanged(TitleBlockTemplatesCollection*collection, const QString &template_name) { void GenericPanel::templatesCollectionChanged(TitleBlockTemplatesCollection*collection, const QString &template_name) {
Q_UNUSED(template_name) Q_UNUSED(template_name)
addTemplatesCollection(collection); addTemplatesCollection(collection);
emit(panelContentChanged());
} }
/** /**
@@ -910,6 +942,7 @@ void GenericPanel::diagramUsedTemplate(TitleBlockTemplatesCollection *collection
Q_UNUSED(collection) Q_UNUSED(collection)
Q_UNUSED(name) Q_UNUSED(name)
addTemplatesCollection(collection); addTemplatesCollection(collection);
emit(panelContentChanged());
} }
/** /**
@@ -917,6 +950,7 @@ void GenericPanel::diagramUsedTemplate(TitleBlockTemplatesCollection *collection
*/ */
void GenericPanel::elementsCollectionChanged(ElementsCollection *collection) { void GenericPanel::elementsCollectionChanged(ElementsCollection *collection) {
addElementsCollection(collection, 0, 0); addElementsCollection(collection, 0, 0);
emit(panelContentChanged());
} }
/** /**
@@ -972,12 +1006,16 @@ QTreeWidgetItem *GenericPanel::makeItem(QET::ItemType type, QTreeWidgetItem *par
} }
/** /**
Delete and item and its children.
@param item item to delete
@param deleted_on_cascade true if the item is not being directly deleted
but is undergoing the deletion of its parent.
*/ */
void GenericPanel::deleteItem(QTreeWidgetItem *item) { void GenericPanel::deleteItem(QTreeWidgetItem *item, bool deleted_on_cascade) {
Q_UNUSED(deleted_on_cascade)
// recursively delete child items first // recursively delete child items first
for (int i = 0 ; i < item -> childCount() ; ++ i) { for (int i = 0 ; i < item -> childCount() ; ++ i) {
deleteItem(item -> child(i)); deleteItem(item -> child(i), true);
} }
// delete the item itself // delete the item itself
@@ -1019,6 +1057,9 @@ void GenericPanel::reparent(QTreeWidgetItem *item, QTreeWidgetItem *parent) {
/** /**
@return the child items of \a item of type \a type @return the child items of \a item of type \a type
@param item Parent item that will be searched.
@param type Type of items to look for.
@param recursive Whether to search recursively.
*/ */
QList<QTreeWidgetItem *> GenericPanel::childItems(QTreeWidgetItem *item, QET::ItemType type, bool recursive) const { QList<QTreeWidgetItem *> GenericPanel::childItems(QTreeWidgetItem *item, QET::ItemType type, bool recursive) const {
QList<QTreeWidgetItem *> items; QList<QTreeWidgetItem *> items;
@@ -1037,12 +1078,17 @@ QList<QTreeWidgetItem *> GenericPanel::childItems(QTreeWidgetItem *item, QET::It
} }
/** /**
This variant of childItems() removes any child considered obsolete, i.e.
not found in \a expected_items.
@param expected_items A list of non-obsolete values
@param item Parent item that will be searched.
@param type Type of items to look for.
@param recursive Whether to search recursively.
@see GenericPanel::childItems()
*/ */
template<typename T> template<typename T>
void GenericPanel::removeObsoleteItems(const QList<T> &expected_items, QTreeWidgetItem *item, QET::ItemType type, bool recursive) { void GenericPanel::removeObsoleteItems(const QList<T> &expected_items, QTreeWidgetItem *item, QET::ItemType type, bool recursive) {
// remove items unknown to the project (presumably removed) // remove items not found in expected_items
foreach (QTreeWidgetItem *child_item, childItems(item, type, recursive)) { foreach (QTreeWidgetItem *child_item, childItems(item, type, recursive)) {
T child_value = valueForItem<T>(child_item); T child_value = valueForItem<T>(child_item);
if (!expected_items.contains(child_value)) { if (!expected_items.contains(child_value)) {
@@ -1052,7 +1098,7 @@ void GenericPanel::removeObsoleteItems(const QList<T> &expected_items, QTreeWidg
} }
/** /**
@return the value stored in \a item
*/ */
template<typename T> template<typename T>
T GenericPanel::valueForItem(QTreeWidgetItem *item) const { T GenericPanel::valueForItem(QTreeWidgetItem *item) const {

View File

@@ -153,23 +153,28 @@ class GenericPanel : public QTreeWidget {
virtual QTreeWidgetItem *updateElementItem(QTreeWidgetItem *, ElementDefinition *, PanelOptions = AddAllChild, bool = false); virtual QTreeWidgetItem *updateElementItem(QTreeWidgetItem *, ElementDefinition *, PanelOptions = AddAllChild, bool = false);
virtual QTreeWidgetItem *fillElementItem (QTreeWidgetItem *, ElementDefinition *, PanelOptions = AddAllChild, bool = false); virtual QTreeWidgetItem *fillElementItem (QTreeWidgetItem *, ElementDefinition *, PanelOptions = AddAllChild, bool = false);
// generic methods
protected:
virtual QTreeWidgetItem *updateItem(QTreeWidgetItem *, PanelOptions = AddAllChild, bool = false);
virtual QTreeWidgetItem *fillItem (QTreeWidgetItem *, PanelOptions = AddAllChild, bool = false);
// slots used to receive change notifications from added objects // slots used to receive change notifications from added objects
protected slots: protected slots:
void projectInformationsChanged(QETProject *); virtual void projectInformationsChanged(QETProject *);
void diagramAdded(QETProject *, Diagram *); virtual void diagramAdded(QETProject *, Diagram *);
void diagramRemoved(QETProject *, Diagram *); virtual void diagramRemoved(QETProject *, Diagram *);
void projectDiagramsOrderChanged(QETProject *, int, int); virtual void projectDiagramsOrderChanged(QETProject *, int, int);
void diagramTitleChanged(Diagram *, const QString &); virtual void diagramTitleChanged(Diagram *, const QString &);
void templatesCollectionChanged(TitleBlockTemplatesCollection*, const QString &); virtual void templatesCollectionChanged(TitleBlockTemplatesCollection*, const QString &);
void diagramUsedTemplate(TitleBlockTemplatesCollection *, const QString &); virtual void diagramUsedTemplate(TitleBlockTemplatesCollection *, const QString &);
void elementsCollectionChanged(ElementsCollection *); virtual void elementsCollectionChanged(ElementsCollection *);
// various other methods // various other methods
protected: protected:
virtual QString defaultText(QET::ItemType); virtual QString defaultText(QET::ItemType);
virtual QIcon defaultIcon(QET::ItemType); virtual QIcon defaultIcon(QET::ItemType);
virtual QTreeWidgetItem *makeItem(QET::ItemType, QTreeWidgetItem * = 0, const QString & = QString(), const QIcon & = QIcon()); virtual QTreeWidgetItem *makeItem(QET::ItemType, QTreeWidgetItem * = 0, const QString & = QString(), const QIcon & = QIcon());
virtual void deleteItem(QTreeWidgetItem *); virtual void deleteItem(QTreeWidgetItem *, bool = false);
virtual void markItemAsContainer(QTreeWidgetItem *); virtual void markItemAsContainer(QTreeWidgetItem *);
virtual void markItemAsUnused(QTreeWidgetItem *); virtual void markItemAsUnused(QTreeWidgetItem *);
virtual void reparent(QTreeWidgetItem *, QTreeWidgetItem *); virtual void reparent(QTreeWidgetItem *, QTreeWidgetItem *);
@@ -183,6 +188,7 @@ class GenericPanel : public QTreeWidget {
signals: signals:
bool firstActivated(); bool firstActivated();
void panelContentChanged();
private slots: private slots:
void emitFirstActivated(); void emitFirstActivated();