@@ -5580,7 +5580,8 @@ void ModelWidget::addDependsOnModel(const QString &dependsOnModel)
55805580{
55815581 if (!mDependsOnModelsList .contains (dependsOnModel)) {
55825582 mDependsOnModelsList .append (dependsOnModel);
5583- connect (MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel (), SIGNAL (modelStateChanged (QString)), SLOT (updateModelIfDependsOn (QString)), Qt::UniqueConnection);
5583+ connect (MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel (), SIGNAL (modelStateChanged (QString,bool )),
5584+ SLOT (updateModelIfDependsOn (QString,bool )), Qt::UniqueConnection);
55845585 }
55855586}
55865587
@@ -5637,7 +5638,7 @@ void ModelWidget::drawModel(const ModelInfo &modelInfo)
56375638 mpIconGraphicsView->drawCoordinateSystem ();
56385639 mpDiagramGraphicsView->drawCoordinateSystem ();
56395640 clearDependsOnModels ();
5640- disconnect (MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel (), SIGNAL (modelStateChanged (QString)), this , SLOT (updateModelIfDependsOn (QString)));
5641+ disconnect (MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel (), SIGNAL (modelStateChanged (QString, bool )), this , SLOT (updateModelIfDependsOn (QString, bool )));
56415642 // if we are drawing the model inside the element mode and the parent element is extends so draw the element as inherited.
56425643 ModelInstance::Element *pElement = mpModelInstance->getRootParentElement ();
56435644 if (pElement && pElement->isExtend ()) {
@@ -6194,31 +6195,18 @@ void ModelWidget::reDrawModelWidget()
61946195 } else {
61956196 loadModelInstance (true , ModelInfo ());
61966197 }
6197- // invalidate the simulation options
6198- mpLibraryTreeItem->mSimulationOptions .setIsValid (false );
6199- mpLibraryTreeItem->mSimulationOptions .setDataReconciliationInitialized (false );
6200- // update the icon
6201- mpLibraryTreeItem->handleIconUpdated ();
6202- // if documentation view is visible and this model is the current active model then update it
6203- ModelWidget *pModelWidget = mpModelWidgetContainer->getCurrentModelWidget ();
6204- if (pModelWidget && pModelWidget == this && MainWindow::instance ()->getDocumentationDockWidget ()->isVisible ()) {
6205- MainWindow::instance ()->getDocumentationWidget ()->showDocumentation (getLibraryTreeItem ());
6206- }
6207- // Update Element Browser
6208- if (pModelWidget && pModelWidget->getLibraryTreeItem ()) {
6209- MainWindow::instance ()->getElementWidget ()->getElementTreeModel ()->addElements (pModelWidget->getModelInstance ());
6210- MainWindow::instance ()->getElementWidget ()->selectDeselectElementItem (" " , false );
6211- }
6198+ reDrawModelWidgetHelper ();
62126199 // clear the undo stack
62136200 mpUndoStack->clear ();
6214- // if (mpEditor) {
6215- // mpEditor->getPlainTextEdit()->document()->clearUndoRedoStacks();
6216- // }
6217- updateViewButtonsBasedOnAccess ();
62186201 }
62196202 QApplication::restoreOverrideCursor ();
62206203}
62216204
6205+ /* !
6206+ * \brief ModelWidget::reDrawModelWidget
6207+ * Redraws the ModelWidget with a new ModelInfo.
6208+ * \param modelInfo
6209+ */
62226210void ModelWidget::reDrawModelWidget (const ModelInfo &modelInfo)
62236211{
62246212 QApplication::setOverrideCursor (Qt::WaitCursor);
@@ -6248,10 +6236,20 @@ void ModelWidget::reDrawModelWidget(const ModelInfo &modelInfo)
62486236 if (mpDiagramGraphicsView) {
62496237 mpDiagramGraphicsView->resetCoordinateSystem ();
62506238 }
6239+ // reset if we are inside element mode
6240+ clearGraphicsViewsExceptOutOfSceneItems ();
6241+ mModelInstanceList .clear ();
6242+ mModelInstancesPos = -1 ;
6243+ mpElementModeLabel->setText (" " );
6244+ mPreservedIconShapesList .clear ();
6245+ mPreservedDiagramShapesList .clear ();
6246+ setComponentModified (false );
6247+ updateElementModeButtons ();
62516248 loadModelInstance (false , modelInfo);
6252- // update the icon
6253- mpLibraryTreeItem->handleIconUpdated ();
6254- updateViewButtonsBasedOnAccess ();
6249+ // update the coordinate system according to new values
6250+ mpIconGraphicsView->resetZoom ();
6251+ mpDiagramGraphicsView->resetZoom ();
6252+ reDrawModelWidgetHelper ();
62556253 QApplication::restoreOverrideCursor ();
62566254}
62576255
@@ -6334,7 +6332,7 @@ bool ModelWidget::modelicaEditorTextChanged(LibraryTreeItem **pLibraryTreeItem)
63346332 pParentLibraryTreeItem->setClassText (stringToLoad);
63356333 updateModelText ();
63366334 } else {
6337- MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel ()->emitModelStateChanged (mpLibraryTreeItem->getNameStructure ());
6335+ MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel ()->emitModelStateChanged (mpLibraryTreeItem->getNameStructure (), false );
63386336 }
63396337 // update child classes
63406338 updateChildClasses (mpLibraryTreeItem);
@@ -6347,8 +6345,8 @@ bool ModelWidget::modelicaEditorTextChanged(LibraryTreeItem **pLibraryTreeItem)
63476345 * so we tell unloadLibraryTreeItem to don't try deleteClass since it will only produce error
63486346 */
63496347 pLibraryTreeModel->unloadLibraryTreeItem (mpLibraryTreeItem, !mpLibraryTreeItem->isInPackageOneFile ());
6350- MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel ()->emitModelStateChanged (mpLibraryTreeItem->getNameStructure ());
6351- disconnect (MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel (), SIGNAL (modelStateChanged (QString)), this , SLOT (updateModelIfDependsOn (QString)));
6348+ MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel ()->emitModelStateChanged (mpLibraryTreeItem->getNameStructure (), false );
6349+ disconnect (MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel (), SIGNAL (modelStateChanged (QString, bool )), this , SLOT (updateModelIfDependsOn (QString, bool )));
63526350 mpLibraryTreeItem->setModelWidget (0 );
63536351 QString name = StringHandler::getLastWordAfterDot (className);
63546352 LibraryTreeItem *pNewLibraryTreeItem = pLibraryTreeModel->createLibraryTreeItem (name, mpLibraryTreeItem->parent (), false , false , true , row);
@@ -6502,7 +6500,7 @@ void ModelWidget::updateModelText()
65026500 mUpdateModelTimer .start ();
65036501 callHandleCollidingConnectionsIfNeeded ();
65046502 // announce the change.
6505- MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel ()->emitModelStateChanged (mpLibraryTreeItem->getNameStructure ());
6503+ MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel ()->emitModelStateChanged (mpLibraryTreeItem->getNameStructure (), false );
65066504 // Update Element Browser
65076505 MainWindow::instance ()->getElementWidget ()->getElementTreeModel ()->addElements (mpModelInstance);
65086506 MainWindow::instance ()->getElementWidget ()->selectDeselectElementItem (" " , false );
@@ -6760,14 +6758,20 @@ void ModelWidget::processPendingModelUpdate()
67606758 * Updates the model if it depends on modelName.\n
67616759 * Slot activated when modelStateChanged SIGNAL of LibraryTreeModel is raised.
67626760 * \param modelName
6761+ * \param unload
67636762 */
6764- void ModelWidget::updateModelIfDependsOn (const QString &modelName)
6763+ void ModelWidget::updateModelIfDependsOn (const QString &modelName, bool unload )
67656764{
6766- if (mDiagramViewLoaded && dependsOnModel (modelName)) {
6765+ if (mDiagramViewLoaded && dependsOnModel (modelName, unload )) {
67676766 // if this is the current ModelWidget then update it directly otherwise mark it for update
67686767 if (this == mpModelWidgetContainer->getCurrentModelWidget ()) {
67696768 setRequiresUpdate (false );
6770- reDrawModelWidget (createModelInfo ());
6769+ // if the update is called because of loading a library then postpone the update
6770+ if (MainWindow::instance ()->getLibraryWidget ()->isLoadingLibraries () || MainWindow::instance ()->getLibraryWidget ()->isCreatingAutoLoadedLibrary ()) {
6771+ MainWindow::instance ()->getLibraryWidget ()->addModelToUpdate (mpLibraryTreeItem->getNameStructure ());
6772+ } else {
6773+ reDrawModelWidget (createModelInfo ());
6774+ }
67716775 } else {
67726776 setRequiresUpdate (true );
67736777 }
@@ -7244,12 +7248,18 @@ void ModelWidget::associateBusWithConnectors(Element *pBusComponent, GraphicsVie
72447248 * \brief ModelWidget::dependsOnModel
72457249 * Checks if modelName exists in dependsOnModel list
72467250 * \param modelName
7251+ * \param unload - true if unloading the model
72477252 * \return
72487253 */
7249- bool ModelWidget::dependsOnModel (const QString &modelName)
7254+ bool ModelWidget::dependsOnModel (const QString &modelName, bool unload )
72507255{
72517256 foreach (QString model, mDependsOnModelsList ) {
7252- if ((model.compare (modelName) == 0 )) {
7257+ // when unloading the model we only check if the depends model starts with otherwise we check for exact match
7258+ if (unload) {
7259+ if (model.startsWith (modelName)) {
7260+ return true ;
7261+ }
7262+ } else if ((model.compare (modelName) == 0 )) {
72537263 return true ;
72547264 }
72557265 }
@@ -7282,6 +7292,30 @@ void ModelWidget::updateElementModeButtons()
72827292 }
72837293}
72847294
7295+ /* !
7296+ * \brief ModelWidget::reDrawModelWidgetHelper
7297+ * Helper function to reDrawModelWidget.
7298+ */
7299+ void ModelWidget::reDrawModelWidgetHelper ()
7300+ {
7301+ // invalidate the simulation options
7302+ mpLibraryTreeItem->mSimulationOptions .setIsValid (false );
7303+ mpLibraryTreeItem->mSimulationOptions .setDataReconciliationInitialized (false );
7304+ // update the icon
7305+ mpLibraryTreeItem->handleIconUpdated ();
7306+ // if documentation view is visible and this model is the current active model then update it
7307+ ModelWidget *pModelWidget = mpModelWidgetContainer->getCurrentModelWidget ();
7308+ if (pModelWidget && pModelWidget == this && MainWindow::instance ()->getDocumentationDockWidget ()->isVisible ()) {
7309+ MainWindow::instance ()->getDocumentationWidget ()->showDocumentation (getLibraryTreeItem ());
7310+ }
7311+ // Update Element Browser
7312+ if (pModelWidget && pModelWidget->getLibraryTreeItem ()) {
7313+ MainWindow::instance ()->getElementWidget ()->getElementTreeModel ()->addElements (pModelWidget->getModelInstance ());
7314+ MainWindow::instance ()->getElementWidget ()->selectDeselectElementItem (" " , false );
7315+ }
7316+ updateViewButtonsBasedOnAccess ();
7317+ }
7318+
72857319/* !
72867320 * \brief ModelWidget::showIconView
72877321 * \param checked
@@ -8204,26 +8238,28 @@ void ModelWidgetContainer::currentModelWidgetChanged(QMdiSubWindow *pSubWindow)
82048238 }
82058239 mpLastActiveSubWindow = pSubWindow;
82068240 // update the model if its require update flag is set.
8241+ // reDrawModelWidget updates the documentation and element browser so only try to update them in the else
82078242 if (pModelWidget && pModelWidget->requiresUpdate ()) {
82088243 pModelWidget->setRequiresUpdate (false );
82098244 pModelWidget->reDrawModelWidget (pModelWidget->createModelInfo ());
8210- }
8211- /* ticket:4983 Update the documentation browser when a new ModelWidget is selected.
8212- * Provided that the Documentation Browser is already visible.
8213- */
8214- if (pModelWidget && pModelWidget->getLibraryTreeItem () && MainWindow::instance ()->getDocumentationDockWidget ()->isVisible ()) {
8215- MainWindow::instance ()->getDocumentationWidget ()->showDocumentation (pModelWidget->getLibraryTreeItem ());
8245+ } else {
8246+ /* ticket:4983 Update the documentation browser when a new ModelWidget is selected.
8247+ * Provided that the Documentation Browser is already visible.
8248+ */
8249+ if (pModelWidget && pModelWidget->getLibraryTreeItem () && MainWindow::instance ()->getDocumentationDockWidget ()->isVisible ()) {
8250+ MainWindow::instance ()->getDocumentationWidget ()->showDocumentation (pModelWidget->getLibraryTreeItem ());
8251+ }
8252+ // Update Element Browser
8253+ if (pModelWidget && pModelWidget->getLibraryTreeItem ()) {
8254+ MainWindow::instance ()->getElementWidget ()->getElementTreeModel ()->addElements (pModelWidget->getModelInstance ());
8255+ MainWindow::instance ()->getElementWidget ()->selectDeselectElementItem (" " , false );
8256+ }
82168257 }
82178258 // Update the LibraryTreeView to mark the active model
82188259 MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeView ()->viewport ()->update ();
82198260 if (OptionsDialog::instance ()->getGeneralSettingsPage ()->getSynchronizeWithModelWidgetCheckBox ()->isChecked ()) {
82208261 MainWindow::instance ()->getLibraryWidget ()->scrollToActiveLibraryTreeItem ();
82218262 }
8222- // Update Element Browser
8223- if (pModelWidget && pModelWidget->getLibraryTreeItem ()) {
8224- MainWindow::instance ()->getElementWidget ()->getElementTreeModel ()->addElements (pModelWidget->getModelInstance ());
8225- MainWindow::instance ()->getElementWidget ()->selectDeselectElementItem (" " , false );
8226- }
82278263}
82288264
82298265/* !
0 commit comments