Skip to content

Commit

Permalink
When a class is loaded/unloaded then component is not updated.
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Nov 3, 2015
1 parent 11412fe commit 4ed9a22
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 64 deletions.
115 changes: 61 additions & 54 deletions OMEdit/OMEditGUI/Component/Component.cpp
Expand Up @@ -288,9 +288,13 @@ Component::Component(QString name, LibraryTreeItem *pLibraryTreeItem, QString tr
createClassShapes(mpLibraryTreeItem);
createClassInheritedComponents();
createClassComponents(mpLibraryTreeItem, false);
if (!mpLibraryTreeItem->getModelWidget()->getIconGraphicsView()->hasAnnotation()) {
mpDefaultComponentRectangle->setVisible(true);
mpDefaultComponentText->setVisible(true);
if (!hasShapeAnnotation(this)) {
if (hasNonExistingClass()) {
mpNonExistingComponentLine->setVisible(true);
} else {
mpDefaultComponentRectangle->setVisible(true);
mpDefaultComponentText->setVisible(true);
}
}
if (mpGraphicsView->getViewType() == StringHandler::Icon) {
mpCoOrdinateSystem = mpLibraryTreeItem->getModelWidget()->getIconGraphicsView()->getCoOrdinateSystem();
Expand Down Expand Up @@ -318,8 +322,8 @@ Component::Component(QString name, LibraryTreeItem *pLibraryTreeItem, QString tr
createResizerItems();
setToolTip(tr("<b>%1</b> %2").arg(mpComponentInfo->getClassName()).arg(mpComponentInfo->getName()));
if (mpLibraryTreeItem) {
connect(mpLibraryTreeItem, SIGNAL(loaded(LibraryTreeItem*)), SLOT(handleLoaded()));
connect(mpLibraryTreeItem, SIGNAL(unLoaded(LibraryTreeItem*)), SLOT(handleUnloaded()));
connect(mpLibraryTreeItem, SIGNAL(loaded(LibraryTreeItem*)), SLOT(reloadComponent()));
connect(mpLibraryTreeItem, SIGNAL(unLoaded(LibraryTreeItem*)), SLOT(reloadComponent()));
}
connect(this, SIGNAL(transformHasChanged()), SLOT(updatePlacementAnnotation()));
connect(this, SIGNAL(transformHasChanged()), SLOT(updateOriginItem()));
Expand Down Expand Up @@ -416,8 +420,8 @@ Component::Component(Component *pComponent, GraphicsView *pGraphicsView)
setToolTip(tr("<b>%1</b> %2<br /><br />Component declared in %3").arg(mpComponentInfo->getClassName()).arg(mpComponentInfo->getName())
.arg(mpReferenceComponent->getGraphicsView()->getModelWidget()->getLibraryTreeItem()->getNameStructure()));
if (mpLibraryTreeItem) {
connect(mpLibraryTreeItem, SIGNAL(loaded(LibraryTreeItem*)), SLOT(handleLoaded()));
connect(mpLibraryTreeItem, SIGNAL(unLoaded(LibraryTreeItem*)), SLOT(handleUnloaded()));
connect(mpLibraryTreeItem, SIGNAL(loaded(LibraryTreeItem*)), SLOT(reloadComponent()));
connect(mpLibraryTreeItem, SIGNAL(unLoaded(LibraryTreeItem*)), SLOT(reloadComponent()));
}
connect(mpReferenceComponent, SIGNAL(added()), SLOT(referenceComponentAdded()));
connect(mpReferenceComponent, SIGNAL(transformHasChanged()), SLOT(referenceComponentChanged()));
Expand All @@ -427,11 +431,6 @@ Component::Component(Component *pComponent, GraphicsView *pGraphicsView)
connect(mpReferenceComponent, SIGNAL(deleted()), SLOT(referenceComponentDeleted()));
}

QString Component::getInheritedClassName()
{
return "";
}

/*!
* \brief Component::hasShapeAnnotation
* Checks if Component has any ShapeAnnotation
Expand All @@ -445,20 +444,37 @@ bool Component::hasShapeAnnotation(Component *pComponent)
}
bool iconAnnotationFound = false;
foreach (Component *pInheritedComponent, pComponent->getInheritedComponentsList()) {
iconAnnotationFound = hasShapeAnnotation(pInheritedComponent);
if (iconAnnotationFound) {
return iconAnnotationFound;
if (pInheritedComponent->parentItem()) {
iconAnnotationFound = hasShapeAnnotation(pInheritedComponent);
if (iconAnnotationFound) {
return iconAnnotationFound;
}
}
}
foreach (Component *pChildComponent, pComponent->getComponentsList()) {
iconAnnotationFound = hasShapeAnnotation(pChildComponent);
if (iconAnnotationFound) {
return iconAnnotationFound;
if (pChildComponent->parentItem()) {
iconAnnotationFound = hasShapeAnnotation(pChildComponent);
if (iconAnnotationFound) {
return iconAnnotationFound;
}
}
}
return iconAnnotationFound;
}

bool Component::hasNonExistingClass()
{
if (mpLibraryTreeItem && mpLibraryTreeItem->isNonExisting()) {
return true;
}
foreach (ModelWidget::InheritedClass *pInheritedClass, mpLibraryTreeItem->getModelWidget()->getInheritedClassesList()) {
if (pInheritedClass->mpLibraryTreeItem->isNonExisting()) {
return true;
}
}
return false;
}

QRectF Component::boundingRect() const
{
qreal left = mpCoOrdinateSystem->getExtent().at(0).x();
Expand Down Expand Up @@ -892,6 +908,8 @@ void Component::createClassInheritedComponents()
{
foreach (ModelWidget::InheritedClass *pInheritedClass, mpLibraryTreeItem->getModelWidget()->getInheritedClassesList()) {
createClassComponents(pInheritedClass->mpLibraryTreeItem, true);
connect(pInheritedClass->mpLibraryTreeItem, SIGNAL(loaded(LibraryTreeItem*)), SLOT(reloadComponent()), Qt::UniqueConnection);
connect(pInheritedClass->mpLibraryTreeItem, SIGNAL(unLoaded(LibraryTreeItem*)), SLOT(reloadComponent()), Qt::UniqueConnection);
}
}

Expand Down Expand Up @@ -1148,56 +1166,45 @@ void Component::updateOriginItem()
}
}

void Component::handleLoaded()
/*!
* \brief Component::reloadComponent
* Reloads a component.
*/
void Component::reloadComponent()
{
// clear all shapes & components
removeShapes();
removeInheritedComponents();
removeComponents();
if (mComponentType == Component::Port) {
createClassShapes(mpLibraryTreeItem);
if (mpLibraryTreeItem && (!mpLibraryTreeItem->getModelWidget() || mpLibraryTreeItem->getModelWidget()->isReloadNeeded())) {
MainWindow *pMainWindow = mpGraphicsView->getModelWidget()->getModelWidgetContainer()->getMainWindow();
pMainWindow->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(mpLibraryTreeItem, "", false);
}
if (!mpLibraryTreeItem) { // if built in type e.g Real, Boolean etc.
mpDefaultComponentRectangle->setVisible(true);
mpDefaultComponentText->setVisible(true);
update();
} else if (mpLibraryTreeItem->isNonExisting()) { // if class is non existing
mpNonExistingComponentLine->setVisible(true);
update();
} else {
if (mpGraphicsView->getViewType() == StringHandler::Icon) {
mpGraphicsView->addItem(this);
}
if (!mpLibraryTreeItem->getModelWidget() || mpLibraryTreeItem->getModelWidget()->isReloadNeeded()) {
MainWindow *pMainWindow = mpGraphicsView->getModelWidget()->getModelWidgetContainer()->getMainWindow();
pMainWindow->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(mpLibraryTreeItem, "", false);
}
createClassInheritedShapes();
createClassShapes(mpLibraryTreeItem);
createClassInheritedComponents();
createClassComponents(mpLibraryTreeItem, false);
if (!mpLibraryTreeItem->getModelWidget()->getIconGraphicsView()->hasAnnotation()) {
mpDefaultComponentRectangle->setVisible(true);
mpDefaultComponentText->setVisible(true);
if (!hasShapeAnnotation(this)) {
if (hasNonExistingClass()) {
mpNonExistingComponentLine->setVisible(true);
} else {
mpDefaultComponentRectangle->setVisible(true);
mpDefaultComponentText->setVisible(true);
}
}
}
if (mpGraphicsView->getViewType() == StringHandler::Icon) {
mpGraphicsView->getModelWidget()->getLibraryTreeItem()->handleIconUpdated();
}
}

void Component::handleUnloaded()
{
// clear all shapes & components
removeShapes();
removeInheritedComponents();
removeComponents();
// unload component based on type.
if (mComponentType == Component::Port) {
setVisible(false);
} else {
update();
if (mpGraphicsView->getViewType() == StringHandler::Icon) {
mpGraphicsView->removeItem(this);
} else {
// show a non exisitng component
mpNonExistingComponentLine->setVisible(true);
mpGraphicsView->getModelWidget()->getLibraryTreeItem()->handleIconUpdated();
}
}
if (mpGraphicsView->getViewType() == StringHandler::Icon) {
mpGraphicsView->getModelWidget()->getLibraryTreeItem()->handleIconUpdated();
}
}

void Component::handleShapeAdded()
Expand Down
5 changes: 2 additions & 3 deletions OMEdit/OMEditGUI/Component/Component.h
Expand Up @@ -135,8 +135,8 @@ class Component : public QObject, public QGraphicsItem
Component(Component *pComponent, GraphicsView *pGraphicsView, Component *pParent);
Component(Component *pComponent, GraphicsView *pGraphicsView);
bool isInheritedComponent() {return mIsInheritedComponent;}
QString getInheritedClassName();
bool hasShapeAnnotation(Component *pComponent);
bool hasNonExistingClass();
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
LibraryTreeItem* getLibraryTreeItem() {return mpLibraryTreeItem;}
Expand Down Expand Up @@ -252,8 +252,7 @@ class Component : public QObject, public QGraphicsItem
public slots:
void updatePlacementAnnotation();
void updateOriginItem();
void handleLoaded();
void handleUnloaded();
void reloadComponent();
void handleShapeAdded();
void referenceComponentAdded();
void referenceComponentChanged();
Expand Down
1 change: 1 addition & 0 deletions OMEdit/OMEditGUI/Component/CornerItem.cpp
Expand Up @@ -195,6 +195,7 @@ QVariant CornerItem::itemChange(GraphicsItemChange change, const QVariant &value
ResizerItem::ResizerItem(Component *pComponent)
: QGraphicsItem(pComponent), mIsPressed(false)
{
setZValue(2999);
setFlags(QGraphicsItem::ItemIgnoresTransformations | QGraphicsItem::ItemIsSelectable);
setCursor(Qt::ArrowCursor);
setToolTip(Helper::clickAndDragToResize);
Expand Down
22 changes: 15 additions & 7 deletions OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp
Expand Up @@ -1713,13 +1713,6 @@ LibraryTreeItem* LibraryTreeModel::getLibraryTreeItemFromFileHelper(LibraryTreeI
void LibraryTreeModel::unloadClassHelper(LibraryTreeItem *pLibraryTreeItem, LibraryTreeItem *pParentLibraryTreeItem)
{
MainWindow *pMainWindow = mpLibraryWidget->getMainWindow();
// make the class non existing
pLibraryTreeItem->setNonExisting(true);
// notify the inherits classes
pLibraryTreeItem->emitUnLoaded();
// make the class non expanded
pLibraryTreeItem->setExpanded(false);
addNonExistingLibraryTreeItem(pLibraryTreeItem);
/* close the ModelWidget of LibraryTreeItem. */
if (pLibraryTreeItem->getModelWidget()) {
QMdiSubWindow *pMdiSubWindow = pMainWindow->getModelWidgetContainer()->getMdiSubWindow(pLibraryTreeItem->getModelWidget());
Expand All @@ -1728,7 +1721,22 @@ void LibraryTreeModel::unloadClassHelper(LibraryTreeItem *pLibraryTreeItem, Libr
}
pLibraryTreeItem->getModelWidget()->getUndoStack()->clear();
pLibraryTreeItem->getModelWidget()->setReloadNeeded(true);
pLibraryTreeItem->getModelWidget()->getIconGraphicsView()->removeAllShapes();
pLibraryTreeItem->getModelWidget()->getIconGraphicsView()->removeAllComponents();
pLibraryTreeItem->getModelWidget()->getIconGraphicsView()->removeAllConnections();
pLibraryTreeItem->getModelWidget()->getIconGraphicsView()->scene()->clear();
pLibraryTreeItem->getModelWidget()->getDiagramGraphicsView()->removeAllShapes();
pLibraryTreeItem->getModelWidget()->getDiagramGraphicsView()->removeAllComponents();
pLibraryTreeItem->getModelWidget()->getDiagramGraphicsView()->removeAllConnections();
pLibraryTreeItem->getModelWidget()->getDiagramGraphicsView()->scene()->clear();
}
// make the class non existing
pLibraryTreeItem->setNonExisting(true);
// notify the inherits classes
pLibraryTreeItem->emitUnLoaded();
// make the class non expanded
pLibraryTreeItem->setExpanded(false);
addNonExistingLibraryTreeItem(pLibraryTreeItem);
// remove the LibraryTreeItem from Libraries Browser
int row = pLibraryTreeItem->row();
beginRemoveRows(libraryTreeItemIndex(pLibraryTreeItem), row, row);
Expand Down

0 comments on commit 4ed9a22

Please sign in to comment.