Skip to content

Commit

Permalink
Clear the DiagramWindow when the ModelWidget is deleted
Browse files Browse the repository at this point in the history
Belonging to [master]:
  - #160
  • Loading branch information
adeas31 authored and OpenModelica-Hudson committed May 3, 2019
1 parent b890c37 commit 882fadf
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 113 deletions.
4 changes: 4 additions & 0 deletions OMEdit/OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp
Expand Up @@ -2822,6 +2822,10 @@ void LibraryTreeModel::unloadClassHelper(LibraryTreeItem *pLibraryTreeItem, Libr
pMdiSubWindow->deleteLater();
}
pLibraryTreeItem->getModelWidget()->clearGraphicsViews();
// if ModelWidget is used by DiagramWindow
if (MainWindow::instance()->getPlotWindowContainer()->getDiagramSubWindowFromMdi()) {
MainWindow::instance()->getPlotWindowContainer()->getDiagramWindow()->removeDiagram(pLibraryTreeItem->getModelWidget());
}
pLibraryTreeItem->getModelWidget()->deleteLater();
pLibraryTreeItem->setModelWidget(0);
}
Expand Down
197 changes: 89 additions & 108 deletions OMEdit/OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp
Expand Up @@ -87,11 +87,11 @@ GraphicsScene::GraphicsScene(StringHandler::ViewType viewType, ModelWidget *pMod
/*!
* \brief GraphicsView::GraphicsView
* \param viewType
* \param parent
* \param animationView
* \param pModelWidget
* \param visualizationView
*/
GraphicsView::GraphicsView(StringHandler::ViewType viewType, ModelWidget *parent, bool visualizationView)
: QGraphicsView(parent), mViewType(viewType), mVisualizationView(visualizationView), mSkipBackground(false)
GraphicsView::GraphicsView(StringHandler::ViewType viewType, ModelWidget *pModelWidget, bool visualizationView)
: QGraphicsView(pModelWidget), mViewType(viewType), mVisualizationView(visualizationView), mSkipBackground(false)
{
/* Ticket #3275
* Set the scroll bars policy to always on to avoid unnecessary resize events.
Expand All @@ -103,7 +103,7 @@ GraphicsView::GraphicsView(StringHandler::ViewType viewType, ModelWidget *parent
setAcceptDrops(true);
setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
setMouseTracking(true);
mpModelWidget = parent;
mpModelWidget = pModelWidget;
// set the coOrdinate System
mCoOrdinateSystem = CoOrdinateSystem();
GraphicalViewsPage *pGraphicalViewsPage;
Expand Down Expand Up @@ -1075,6 +1075,83 @@ void GraphicsView::sendBackward(ShapeAnnotation *pShape)
addClassAnnotation();
}

/*!
* \brief GraphicsView::clearGraphicsView
* Clears everything from the GraphicsView.
*/
void GraphicsView::clearGraphicsView()
{
removeAllShapes();
removeAllConnections();
removeAllTransitions();
removeAllInitialStates();
removeClassComponents();
removeInheritedClassShapes();
removeInheritedClassConnections();
removeInheritedClassComponents();
scene()->clear();
}

/*!
* \brief GraphicsView::removeClassComponents
* Removes all the class components.
*/
void GraphicsView::removeClassComponents()
{
foreach (Component *pComponent, mComponentsList) {
pComponent->removeChildren();
deleteComponentFromList(pComponent);
removeItem(pComponent->getOriginItem());
delete pComponent->getOriginItem();
removeItem(pComponent);
pComponent->emitDeleted();
delete pComponent;
}
}

/*!
* \brief GraphicsView::removeInheritedClassShapes
* Removes all the inherited class shapes.
*/
void GraphicsView::removeInheritedClassShapes()
{
foreach (ShapeAnnotation *pShapeAnnotation, mInheritedShapesList) {
deleteInheritedShapeFromList(pShapeAnnotation);
removeItem(pShapeAnnotation);
delete pShapeAnnotation;
}
}

/*!
* \brief GraphicsView::removeInheritedClassComponents
* Removes all the class inherited components.
*/
void GraphicsView::removeInheritedClassComponents()
{
foreach (Component *pComponent, mInheritedComponentsList) {
pComponent->removeChildren();
deleteInheritedComponentFromList(pComponent);
removeItem(pComponent->getOriginItem());
delete pComponent->getOriginItem();
removeItem(pComponent);
pComponent->emitDeleted();
delete pComponent;
}
}

/*!
* \brief GraphicsView::removeInheritedClassConnections
* Removes all the class inherited class connections.
*/
void GraphicsView::removeInheritedClassConnections()
{
foreach (LineAnnotation *pConnectionLineAnnotation, mInheritedConnectionsList) {
deleteInheritedConnectionFromList(pConnectionLineAnnotation);
removeItem(pConnectionLineAnnotation);
delete pConnectionLineAnnotation;
}
}

void GraphicsView::createLineShape(QPointF point)
{
if (mpModelWidget->getLibraryTreeItem()->isSystemLibrary() || isVisualizationView()) {
Expand Down Expand Up @@ -3547,22 +3624,22 @@ void ModelWidget::fetchExtendsModifiers(QString extendsClass)
*/
void ModelWidget::reDrawModelWidgetInheritedClasses()
{
removeInheritedClassShapes(StringHandler::Icon);
mpIconGraphicsView->removeInheritedClassShapes();
drawModelInheritedClassShapes(this, StringHandler::Icon);
mpIconGraphicsView->reOrderShapes();
if (mComponentsLoaded) {
removeInheritedClassComponents(StringHandler::Icon);
mpIconGraphicsView->removeInheritedClassComponents();
drawModelInheritedClassComponents(this, StringHandler::Icon);
}
if (mDiagramViewLoaded) {
removeInheritedClassShapes(StringHandler::Diagram);
mpDiagramGraphicsView->removeInheritedClassShapes();
drawModelInheritedClassShapes(this, StringHandler::Diagram);
mpDiagramGraphicsView->reOrderShapes();
removeInheritedClassComponents(StringHandler::Diagram);
mpDiagramGraphicsView->removeInheritedClassComponents();
drawModelInheritedClassComponents(this, StringHandler::Diagram);
}
if (mConnectionsLoaded) {
removeInheritedClassConnections();
mpDiagramGraphicsView->removeInheritedClassConnections();
drawModelInheritedClassConnections(this);
}
}
Expand Down Expand Up @@ -4239,26 +4316,11 @@ void ModelWidget::clearGraphicsViews()
{
/* remove everything from the icon view */
if (mpIconGraphicsView) {
removeClassComponents(StringHandler::Icon);
mpIconGraphicsView->removeAllShapes();
mpIconGraphicsView->removeAllConnections();
mpIconGraphicsView->removeAllTransitions();
mpIconGraphicsView->removeAllInitialStates();
removeInheritedClassShapes(StringHandler::Icon);
removeInheritedClassComponents(StringHandler::Icon);
mpIconGraphicsView->scene()->clear();
mpIconGraphicsView->clearGraphicsView();
}
/* remove everything from the diagram view */
if (mpDiagramGraphicsView) {
removeClassComponents(StringHandler::Diagram);
mpDiagramGraphicsView->removeAllShapes();
mpDiagramGraphicsView->removeAllConnections();
mpDiagramGraphicsView->removeAllTransitions();
mpDiagramGraphicsView->removeAllInitialStates();
removeInheritedClassShapes(StringHandler::Diagram);
removeInheritedClassComponents(StringHandler::Diagram);
removeInheritedClassConnections();
mpDiagramGraphicsView->scene()->clear();
mpDiagramGraphicsView->clearGraphicsView();
}
}

Expand Down Expand Up @@ -5487,26 +5549,6 @@ void ModelWidget::drawModelInheritedClassShapes(ModelWidget *pModelWidget, Strin
}
}

/*!
* \brief ModelWidget::removeInheritedClassShapes
* Removes all the inherited class shapes.
* \param viewType
*/
void ModelWidget::removeInheritedClassShapes(StringHandler::ViewType viewType)
{
GraphicsView *pGraphicsView = 0;
if (viewType == StringHandler::Icon) {
pGraphicsView = mpIconGraphicsView;
} else {
pGraphicsView = mpDiagramGraphicsView;
}
foreach (ShapeAnnotation *pShapeAnnotation, pGraphicsView->getInheritedShapesList()) {
pGraphicsView->deleteInheritedShapeFromList(pShapeAnnotation);
pGraphicsView->removeItem(pShapeAnnotation);
delete pShapeAnnotation;
}
}

/*!
* \brief ModelWidget::getModelIconDiagramShapes
* Gets the Modelica model icon & diagram shapes.
Expand Down Expand Up @@ -5649,54 +5691,6 @@ void ModelWidget::drawModelInheritedClassComponents(ModelWidget *pModelWidget, S
}
}

/*!
* \brief ModelWidget::removeInheritedClassComponents
* Removes all the class inherited components.
* \param viewType
*/
void ModelWidget::removeInheritedClassComponents(StringHandler::ViewType viewType)
{
GraphicsView *pGraphicsView = 0;
if (viewType == StringHandler::Icon) {
pGraphicsView = mpIconGraphicsView;
} else {
pGraphicsView = mpDiagramGraphicsView;
}
foreach (Component *pComponent, pGraphicsView->getInheritedComponentsList()) {
pComponent->removeChildren();
pGraphicsView->deleteInheritedComponentFromList(pComponent);
pGraphicsView->removeItem(pComponent->getOriginItem());
delete pComponent->getOriginItem();
pGraphicsView->removeItem(pComponent);
pComponent->emitDeleted();
delete pComponent;
}
}

/*!
* \brief ModelWidget::removeClassComponents
* Removes all the class components.
* \param viewType
*/
void ModelWidget::removeClassComponents(StringHandler::ViewType viewType)
{
GraphicsView *pGraphicsView = 0;
if (viewType == StringHandler::Icon) {
pGraphicsView = mpIconGraphicsView;
} else {
pGraphicsView = mpDiagramGraphicsView;
}
foreach (Component *pComponent, pGraphicsView->getComponentsList()) {
pComponent->removeChildren();
pGraphicsView->deleteComponentFromList(pComponent);
pGraphicsView->removeItem(pComponent->getOriginItem());
delete pComponent->getOriginItem();
pGraphicsView->removeItem(pComponent);
pComponent->emitDeleted();
delete pComponent;
}
}

/*!
* \brief ModelWidget::getModelComponents
* Gets the components of the model and their annotations.
Expand Down Expand Up @@ -5810,19 +5804,6 @@ void ModelWidget::drawModelInheritedClassConnections(ModelWidget *pModelWidget)
}
}

/*!
* \brief ModelWidget::removeInheritedClassConnections
* Removes all the class inherited class connections.
*/
void ModelWidget::removeInheritedClassConnections()
{
foreach (LineAnnotation *pConnectionLineAnnotation, mpDiagramGraphicsView->getInheritedConnectionsList()) {
mpDiagramGraphicsView->deleteInheritedConnectionFromList(pConnectionLineAnnotation);
mpDiagramGraphicsView->removeItem(pConnectionLineAnnotation);
delete pConnectionLineAnnotation;
}
}

/*!
* \brief ModelWidget::getModelTransitions
* Gets the transitions of the model and place them in the diagram GraphicsView.
Expand Down
11 changes: 6 additions & 5 deletions OMEdit/OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.h
Expand Up @@ -136,7 +136,7 @@ class GraphicsView : public QGraphicsView
QAction *mpSetInitialStateAction;
QAction *mpCancelTransitionAction;
public:
GraphicsView(StringHandler::ViewType viewType, ModelWidget *parent, bool visualizationView = false);
GraphicsView(StringHandler::ViewType viewType, ModelWidget *pModelWidget, bool visualizationView = false);
CoOrdinateSystem mCoOrdinateSystem;
bool mSkipBackground; /* Do not draw the background rectangle */
StringHandler::ViewType getViewType() {return mViewType;}
Expand Down Expand Up @@ -233,6 +233,11 @@ class GraphicsView : public QGraphicsView
void bringForward(ShapeAnnotation *pShape);
void sendToBack(ShapeAnnotation *pShape);
void sendBackward(ShapeAnnotation *pShape);
void clearGraphicsView();
void removeClassComponents();
void removeInheritedClassShapes();
void removeInheritedClassComponents();
void removeInheritedClassConnections();
void removeAllComponents() {mComponentsList.clear();}
void removeAllShapes() {mShapesList.clear();}
void removeAllConnections() {mConnectionsList.clear();}
Expand Down Expand Up @@ -476,16 +481,12 @@ class ModelWidget : public QWidget

void getModelInheritedClasses();
void drawModelInheritedClassShapes(ModelWidget *pModelWidget, StringHandler::ViewType viewType);
void removeInheritedClassShapes(StringHandler::ViewType viewType);
void getModelIconDiagramShapes(StringHandler::ViewType viewType);
void drawModelInheritedClassComponents(ModelWidget *pModelWidget, StringHandler::ViewType viewType);
void removeInheritedClassComponents(StringHandler::ViewType viewType);
void removeClassComponents(StringHandler::ViewType viewType);
void getModelComponents();
void drawModelIconComponents();
void drawModelDiagramComponents();
void drawModelInheritedClassConnections(ModelWidget *pModelWidget);
void removeInheritedClassConnections();
void getModelTransitions();
void getModelInitialStates();
void getMetaModelSubModels();
Expand Down
22 changes: 22 additions & 0 deletions OMEdit/OMEdit/OMEditGUI/Plotting/DiagramWindow.cpp
Expand Up @@ -113,3 +113,25 @@ void DiagramWindow::drawDiagram(ModelWidget *pModelWidget)
}
}
}

/*!
* \brief DiagramWindow::removeDiagram
* When the corresponsing ModelWidget is about to delete then clear the DiagramWindow.
* \param pModelWidget
*/
void DiagramWindow::removeDiagram(ModelWidget *pModelWidget)
{
if (mpGraphicsView && mpGraphicsView->getModelWidget() == pModelWidget) {
// Stop any running visualization when we are going to draw a diagram.
MainWindow::instance()->getVariablesWidget()->rewindVisualization();
// set the window title to default
setWindowTitle("Diagram");
// clear the GraphicsView and delete it
mpGraphicsView->clearGraphicsView();
delete mpGraphicsScene;
mpGraphicsScene = 0;
mpMainLayout->removeWidget(mpGraphicsView);
delete mpGraphicsView;
mpGraphicsView = 0;
}
}
1 change: 1 addition & 0 deletions OMEdit/OMEdit/OMEditGUI/Plotting/DiagramWindow.h
Expand Up @@ -48,6 +48,7 @@ class DiagramWindow : public QWidget
explicit DiagramWindow(QWidget *parent = 0);
GraphicsView* getGraphicsView() {return mpGraphicsView;}
void drawDiagram(ModelWidget *pModelWidget);
void removeDiagram(ModelWidget *pModelWidget);
private:
GraphicsScene *mpGraphicsScene;
GraphicsView *mpGraphicsView;
Expand Down

0 comments on commit 882fadf

Please sign in to comment.