SVN commit 1017924 by gopala: Implemented explicit visibility feature for TextItem so that they are not visible when parent item is hidden while the child(TextItem) is shown. M +15 -1 textitem.cpp M +7 -0 textitem.h M +7 -0 textitemgroup.cpp M +2 -0 textitemgroup.h M +10 -10 widgets/activitywidget.cpp M +1 -1 widgets/artifactwidget.cpp M +4 -4 widgets/classifierwidget.cpp M +4 -4 widgets/combinedfragmentwidget.cpp M +1 -1 widgets/componentwidget.cpp M +1 -1 widgets/entitywidget.cpp M +1 -1 widgets/floatingtextwidget.cpp M +1 -1 widgets/nodewidget.cpp M +7 -7 widgets/notewidget.cpp M +2 -2 widgets/objectnodewidget.cpp M +1 -1 widgets/packagewidget.cpp M +2 -2 widgets/statewidget.cpp M +4 -0 widgets/umlwidget.cpp --- branches/work/soc-umbrello/umbrello/textitem.cpp #1017923:1017924 @@ -100,7 +100,8 @@ * @param parent The parent of this item. */ TextItem::TextItem(const QString& text, QGraphicsItem *parent) : - QGraphicsTextItem(text, parent) + QGraphicsTextItem(text, parent), + m_explicitVisiblity(true) { setAcceptHoverEvents(false); } @@ -263,6 +264,19 @@ other->setBackgroundBrush(backgroundBrush()); } +void TextItem::setExplicitVisibility(bool b) +{ + m_explicitVisiblity = b; + updateVisibility(); +} + +void TextItem::updateVisibility() +{ + bool actual = m_explicitVisiblity && + (!parentItem() || parentItem()->isVisible()); + setVisible(actual); +} + void TextItem::hoverEnterEvent(QGraphicsSceneHoverEvent *) { update(); --- branches/work/soc-umbrello/umbrello/textitem.h #1017923:1017924 @@ -80,6 +80,12 @@ void copyAttributesTo(TextItem *other) const; + bool explicitVisiblity() const { + return m_explicitVisiblity; + } + void setExplicitVisibility(bool b); + void updateVisibility(); + protected: void hoverEnterEvent(QGraphicsSceneHoverEvent *event); void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); @@ -89,6 +95,7 @@ QBrush m_hoverBrush; QBrush m_backgroundBrush; + bool m_explicitVisiblity; }; #endif //TEXTITEM_H --- branches/work/soc-umbrello/umbrello/textitemgroup.cpp #1017923:1017924 @@ -193,6 +193,13 @@ m_groupGeometry = rect; } +void TextItemGroup::updateVisibility() +{ + foreach (TextItem *item, m_textItems) { + item->updateVisibility(); + } +} + void TextItemGroup::setAlignment(Qt::Alignment align) { m_alignment = align; --- branches/work/soc-umbrello/umbrello/textitemgroup.h #1017923:1017924 @@ -82,6 +82,8 @@ } void setGroupGeometry(const QRectF& rect); + void updateVisibility(); + Qt::Alignment alignment() const { return m_alignment; } --- branches/work/soc-umbrello/umbrello/widgets/activitywidget.cpp #1017923:1017924 @@ -242,28 +242,28 @@ TextItem *nameItem = grp->textItemAt(NameItemIndex); nameItem->setText(name()); - nameItem->show(); + nameItem->setExplicitVisibility(true); if(m_activityType == Normal || m_activityType == Invok) { - grp->textItemAt(PrecondtionItemIndex)->hide(); - grp->textItemAt(PostconditionItemIndex)->hide(); - nameItem->show(); + grp->textItemAt(PrecondtionItemIndex)->setExplicitVisibility(false); + grp->textItemAt(PostconditionItemIndex)->setExplicitVisibility(false); + nameItem->setExplicitVisibility(true); } else if(m_activityType == Param) { TextItem *preconditionItem = grp->textItemAt(PrecondtionItemIndex); preconditionItem->setText(preconditionText().prepend("<> ")); - preconditionItem->show(); + preconditionItem->setExplicitVisibility(true); TextItem *postconditionItem = grp->textItemAt(PostconditionItemIndex); postconditionItem->setText(postconditionText().prepend("<> ")); - postconditionItem->show(); + postconditionItem->setExplicitVisibility(true); - nameItem->show(); + nameItem->setExplicitVisibility(true); } else { - grp->textItemAt(PrecondtionItemIndex)->hide(); - grp->textItemAt(PostconditionItemIndex)->hide(); - nameItem->hide(); + grp->textItemAt(PrecondtionItemIndex)->setExplicitVisibility(false); + grp->textItemAt(PostconditionItemIndex)->setExplicitVisibility(false); + nameItem->setExplicitVisibility(false); } UMLWidget::updateTextItemGroups(); --- branches/work/soc-umbrello/umbrello/widgets/artifactwidget.cpp #1017923:1017924 @@ -149,7 +149,7 @@ stereoItem->setText(artifact->getStereotype(true)); bool hideStereo = artifact->getStereotype(false).isEmpty() || artifact->getDrawAsType() != UMLArtifact::defaultDraw ; - stereoItem->setVisible(!hideStereo); + stereoItem->setExplicitVisibility(!hideStereo); TextItem *nameItem = grp->textItemAt(ArtifactWidget::NameItemIndex); nameItem->setText(name()); --- branches/work/soc-umbrello/umbrello/widgets/classifierwidget.cpp #1017923:1017924 @@ -622,7 +622,7 @@ for(int i = 0; i < tlist.size(); ++i) { UMLTemplate *t = tlist[i]; templateGroup->textItemAt(i)->setText(t->toString()); - templateGroup->textItemAt(i)->setVisible(!templateHide); + templateGroup->textItemAt(i)->setExplicitVisibility(!templateHide); } // Stereo type and name. @@ -640,7 +640,7 @@ bool v = !shouldDrawAsCircle() && visualProperty(ShowStereotype) && !(umlC->getStereotype(false).isEmpty()); - stereoItem->setVisible(v); + stereoItem->setExplicitVisibility(v); // name item is always visible. TextItem *nameItem = headerGroup->textItemAt(NameItemIndex); @@ -674,7 +674,7 @@ || obj->getVisibility() == Uml::Visibility::Public) && visualProperty(ShowAttributes) == true; - item->setVisible(v); + item->setExplicitVisibility(v); if (v) { ++visibleAttributes; } @@ -718,7 +718,7 @@ || obj->getVisibility() == Uml::Visibility::Public) && visualProperty(ShowOperations); - item->setVisible(v); + item->setExplicitVisibility(v); if (v) { ++visibleOperations; } --- branches/work/soc-umbrello/umbrello/widgets/combinedfragmentwidget.cpp #1017923:1017924 @@ -370,14 +370,14 @@ TextItem *refItem = nameGroup->textItemAt(0); - firstAltItem->hide(); - refItem->hide(); + firstAltItem->setExplicitVisibility(false); + refItem->setExplicitVisibility(false); switch(combinedFragmentType()) { case Ref: typeItem->setText("ref"); refItem->setText(combinedFragmentValue); - refItem->show(); + refItem->setExplicitVisibility(true); break; case Opt: @@ -419,7 +419,7 @@ temp.append(']'); firstAltItem->setText(temp); - firstAltItem->show(); + firstAltItem->setExplicitVisibility(true); } break; --- branches/work/soc-umbrello/umbrello/widgets/componentwidget.cpp #1017923:1017924 @@ -98,7 +98,7 @@ TextItem *stereo = grp->textItemAt(StereoItemIndex); stereo->setText(umlObject()->getStereotype(true)); stereo->setBold(true); - stereo->setVisible(umlObject()->getStereotype(false).isEmpty() == false); + stereo->setExplicitVisibility(umlObject()->getStereotype(false).isEmpty() == false); TextItem *nameItem = grp->textItemAt(NameItemIndex); nameItem->setBold(true); --- branches/work/soc-umbrello/umbrello/widgets/entitywidget.cpp #1017923:1017924 @@ -101,7 +101,7 @@ stereo->setText(classifier->getStereotype(true)); stereo->setBold(true); bool hideStereo = classifier->getStereotype(false).isEmpty(); - stereo->setVisible(!hideStereo); + stereo->setExplicitVisibility(!hideStereo); TextItem *nameItem = grp->textItemAt(EntityWidget::NameItemIndex); nameItem->setText(name()); --- branches/work/soc-umbrello/umbrello/widgets/floatingtextwidget.cpp #1017923:1017924 @@ -484,7 +484,7 @@ TextItem *item = grp->textItemAt(0); item->setText(displayText()); - item->show(); + item->setExplicitVisibility(true); UMLWidget::updateTextItemGroups(); } --- branches/work/soc-umbrello/umbrello/widgets/nodewidget.cpp #1017923:1017924 @@ -94,7 +94,7 @@ TextItem *stereo = grp->textItemAt(NodeWidget::StereoItemIndex); stereo->setText(node->getStereotype(true)); stereo->setBold(true); - stereo->setVisible(!node->getStereotype(false).isEmpty()); + stereo->setExplicitVisibility(!node->getStereotype(false).isEmpty()); TextItem *nameItem = grp->textItemAt(NodeWidget::NameItemIndex); QString nameText = name(); --- branches/work/soc-umbrello/umbrello/widgets/notewidget.cpp #1017923:1017924 @@ -191,9 +191,9 @@ // still. (happens during creation of object) if(grp->textItemCount() > NoteTextItemIndex) { TextItem *noteTextItem = grp->textItemAt(NoteTextItemIndex); - noteTextItem->hide(); + noteTextItem->setExplicitVisibility(false); widthWithoutNote = grp->minimumSize().width(); - noteTextItem->show(); + noteTextItem->setExplicitVisibility(true); } const qreal atleast6Chars = QFontMetricsF(grp->font()).width("w") * 6; @@ -215,24 +215,24 @@ grp->setTextItemCount(TextItemCount); TextItem *diagramLinkItem = grp->textItemAt(DiagramLinkItemIndex); - diagramLinkItem->hide(); + diagramLinkItem->setExplicitVisibility(false); //FIXME: Fixe diagram link drawing TextItem *noteTypeItem = grp->textItemAt(NoteTypeItemIndex); if(m_noteType == NoteWidget::PreCondition) { noteTypeItem->setText(i18n("<< precondition >>")); - noteTypeItem->show(); + noteTypeItem->setExplicitVisibility(true); } else if(m_noteType == NoteWidget::PostCondition) { noteTypeItem->setText(i18n("<< postcondition >>")); - noteTypeItem->show(); + noteTypeItem->setExplicitVisibility(true); } else if(m_noteType == NoteWidget::Transformation) { noteTypeItem->setText(i18n("<< transformation >>")); - noteTypeItem->show(); + noteTypeItem->setExplicitVisibility(true); } else { // = NoteWidget::Normal - noteTypeItem->hide(); + noteTypeItem->setExplicitVisibility(false); } TextItem *noteTextItem = grp->textItemAt(NoteTextItemIndex); --- branches/work/soc-umbrello/umbrello/widgets/objectnodewidget.cpp #1017923:1017924 @@ -284,10 +284,10 @@ } grp->textItemAt(0)->setText(first); - grp->textItemAt(0)->setVisible(visible); + grp->textItemAt(0)->setExplicitVisibility(visible); grp->textItemAt(1)->setText(second); - grp->textItemAt(1)->setVisible(visible); + grp->textItemAt(1)->setExplicitVisibility(visible); UMLWidget::updateTextItemGroups(); } --- branches/work/soc-umbrello/umbrello/widgets/packagewidget.cpp #1017923:1017924 @@ -99,7 +99,7 @@ TextItem *stereo = grp->textItemAt(PackageWidget::StereoTypeItemIndex); stereo->setText(umlObject()->getStereotype(true)); stereo->setBold(true); - stereo->setVisible(umlObject()->getStereotype().isEmpty() == false); + stereo->setExplicitVisibility(umlObject()->getStereotype().isEmpty() == false); TextItem *nameItem = grp->textItemAt(PackageWidget::NameItemIndex); nameItem->setText(name()); --- branches/work/soc-umbrello/umbrello/widgets/statewidget.cpp #1017923:1017924 @@ -423,7 +423,7 @@ TextItemGroup *grp = textItemGroupAt(GroupIndex); if (m_stateType != StateWidget::Normal) { for (int i = 0; i < grp->textItemCount(); ++i) { - grp->textItemAt(i)->hide(); + grp->textItemAt(i)->setExplicitVisibility(false); } } else { @@ -435,7 +435,7 @@ } for (int i = 0; i < sz; ++i) { TextItem *item = grp->textItemAt(i); - item->show(); + item->setExplicitVisibility(true); } grp->textItemAt(StateWidget::NameItemIndex)->setText(name()); grp->textItemAt(StateWidget::NameItemIndex)->setBold(sz > 1); --- branches/work/soc-umbrello/umbrello/widgets/umlwidget.cpp #1017923:1017924 @@ -515,6 +515,10 @@ } else if (change == QGraphicsItem::ItemPositionHasChanged) { // adjust the association lines by new computations. adjustAssociations(); + } else if (change == QGraphicsItem::ItemVisibleHasChanged) { + foreach (TextItemGroup *grp, m_textItemGroups) { + grp->updateVisibility(); + } } return WidgetBase::itemChange(change, value); }