Skip to content

Commit b929db6

Browse files
committed
Fixed the crash while saving metamodels.
1 parent 4a5facf commit b929db6

File tree

2 files changed

+37
-21
lines changed

2 files changed

+37
-21
lines changed

OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3512,9 +3512,9 @@ bool LibraryWidget::saveTextLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem)
35123512
bool LibraryWidget::saveMetaModelLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem)
35133513
{
35143514
if (pLibraryTreeItem->getFileName().isEmpty()) {
3515-
return saveAsMetaModelLibraryTreeItem(pLibraryTreeItem);
3515+
return saveAsMetaModelLibraryTreeItem(pLibraryTreeItem);
35163516
} else {
3517-
return saveMetaModelLibraryTreeItem(pLibraryTreeItem, pLibraryTreeItem->getFileName());
3517+
return saveMetaModelLibraryTreeItem(pLibraryTreeItem, pLibraryTreeItem->getFileName());
35183518
}
35193519
}
35203520

@@ -3530,9 +3530,9 @@ bool LibraryWidget::saveAsMetaModelLibraryTreeItem(LibraryTreeItem *pLibraryTree
35303530
QString name = pLibraryTreeItem->getName();
35313531
fileName = StringHandler::getSaveFileName(this, QString(Helper::applicationName).append(" - ").append(tr("Save File")), NULL,
35323532
Helper::xmlFileTypes, NULL, "xml", &name);
3533-
if (fileName.isEmpty()) // if user press ESC
3533+
if (fileName.isEmpty()) { // if user press ESC
35343534
return false;
3535-
3535+
}
35363536
return saveMetaModelLibraryTreeItem(pLibraryTreeItem, fileName);
35373537
}
35383538

@@ -3553,11 +3553,13 @@ bool LibraryWidget::saveMetaModelLibraryTreeItem(LibraryTreeItem *pLibraryTreeIt
35533553
file.close();
35543554
/* mark the file as saved and update the labels. */
35553555
pLibraryTreeItem->setIsSaved(true);
3556+
QString oldMetaModelFile = pLibraryTreeItem->getFileName();
35563557
pLibraryTreeItem->setFileName(fileName);
35573558
if (pLibraryTreeItem->getModelWidget()) {
35583559
pLibraryTreeItem->getModelWidget()->setWindowTitle(pLibraryTreeItem->getNameStructure());
35593560
pLibraryTreeItem->getModelWidget()->setModelFilePathLabel(fileName);
35603561
}
3562+
mpLibraryTreeModel->updateLibraryTreeItem(pLibraryTreeItem);
35613563
// Create folders for the submodels and copy there source file in them.
35623564
MetaModelEditor *pMetaModelEditor = dynamic_cast<MetaModelEditor*>(pLibraryTreeItem->getModelWidget()->getEditor());
35633565
GraphicsView *pGraphicsView = pLibraryTreeItem->getModelWidget()->getDiagramGraphicsView();
@@ -3566,30 +3568,33 @@ bool LibraryWidget::saveMetaModelLibraryTreeItem(LibraryTreeItem *pLibraryTreeIt
35663568
QDomElement subModel = subModels.at(i).toElement();
35673569
QString directoryName = subModel.attribute("Name");
35683570
Component *pComponent = pGraphicsView->getComponentObject(directoryName);
3569-
if (pComponent) {
3570-
// create directory for submodel
3571-
QFileInfo fileInfo(fileName);
3572-
QString directoryPath = fileInfo.absoluteDir().absolutePath() + "/" + directoryName;
3573-
if (!QDir().exists(directoryPath)) {
3574-
QDir().mkpath(directoryPath);
3575-
}
3576-
// copy the submodel file to the created directory
3577-
QString modelFile = pComponent->getLibraryTreeItem()->getFileName();
3578-
QFileInfo modelFileInfo(modelFile);
3579-
QString newFileName = directoryPath + "/" + modelFileInfo.fileName();
3580-
if (modelFileInfo.absoluteFilePath().compare(newFileName) != 0) {
3581-
// first try to remove the file because QFile::copy will not override the file.
3582-
QFile::remove(newFileName);
3583-
}
3584-
QFile::copy(modelFileInfo.absoluteFilePath(), newFileName);
3571+
QString modelFile;
3572+
if (pComponent && pComponent->getLibraryTreeItem()) {
3573+
modelFile = pComponent->getLibraryTreeItem()->getFileName();
3574+
} else {
3575+
QFileInfo fileInfo(oldMetaModelFile);
3576+
modelFile = QString("%1/%2/%3").arg(fileInfo.absolutePath()).arg(directoryName).arg(subModel.attribute("ModelFile"));
3577+
}
3578+
// create directory for submodel
3579+
QFileInfo fileInfo(fileName);
3580+
QString directoryPath = fileInfo.absoluteDir().absolutePath() + "/" + directoryName;
3581+
if (!QDir().exists(directoryPath)) {
3582+
QDir().mkpath(directoryPath);
3583+
}
3584+
// copy the submodel file to the created directory
3585+
QFileInfo modelFileInfo(modelFile);
3586+
QString newFileName = directoryPath + "/" + modelFileInfo.fileName();
3587+
if (modelFileInfo.absoluteFilePath().compare(newFileName) != 0) {
3588+
// first try to remove the file because QFile::copy will not override the file.
3589+
QFile::remove(newFileName);
35853590
}
3591+
QFile::copy(modelFileInfo.absoluteFilePath(), newFileName);
35863592
}
35873593
} else {
35883594
QMessageBox::information(this, Helper::applicationName + " - " + Helper::error, GUIMessages::getMessage(GUIMessages::ERROR_OCCURRED)
35893595
.arg(GUIMessages::getMessage(GUIMessages::UNABLE_TO_SAVE_FILE).arg(file.errorString())), Helper::ok);
35903596
return false;
35913597
}
3592-
getMainWindow()->addRecentFile(pLibraryTreeItem->getFileName(), Helper::utf8);
35933598
return true;
35943599
}
35953600

OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3498,6 +3498,7 @@ void ModelWidget::getModelConnections()
34983498
*/
34993499
void ModelWidget::getTLMSubModels()
35003500
{
3501+
QFileInfo fileInfo(mpLibraryTreeItem->getFileName());
35013502
MetaModelEditor *pMetaModelEditor = dynamic_cast<MetaModelEditor*>(mpEditor);
35023503
QDomNodeList subModels = pMetaModelEditor->getSubModels();
35033504
for (int i = 0; i < subModels.size(); i++) {
@@ -3521,6 +3522,7 @@ void ModelWidget::getTLMSubModels()
35213522
QStringList dialogAnnotation;
35223523
// get the attibutes of the submodel
35233524
ComponentInfo *pComponentInfo = new ComponentInfo;
3525+
pComponentInfo->setName(subModel.attribute("Name"));
35243526
pComponentInfo->setStartCommand(subModel.attribute("StartCommand"));
35253527
bool exactStep;
35263528
if (subModel.attribute("ExactStep").toLower().compare("1") == 0) {
@@ -3532,6 +3534,15 @@ void ModelWidget::getTLMSubModels()
35323534
}
35333535
pComponentInfo->setExactStep(exactStep);
35343536
pComponentInfo->setModelFile(subModel.attribute("ModelFile"));
3537+
QString absoluteModelFilePath = QString("%1/%2/%3").arg(fileInfo.absolutePath()).arg(subModel.attribute("Name"))
3538+
.arg(subModel.attribute("ModelFile"));
3539+
// if ModelFile doesn't exist
3540+
if (!QFile::exists(absoluteModelFilePath)) {
3541+
QString msg = tr("Unable to find ModelFile <b>%1</b> for SubModel <b>%2</b>. The file location should be <b>%3</b>.")
3542+
.arg(subModel.attribute("ModelFile")).arg(subModel.attribute("Name")).arg(absoluteModelFilePath);
3543+
MessagesWidget *pMessagesWidget = mpModelWidgetContainer->getMainWindow()->getMessagesWidget();
3544+
pMessagesWidget->addGUIMessage(MessageItem(MessageItem::Modelica, "", false, 0, 0, 0, 0, msg, Helper::scriptingKind, Helper::errorLevel));
3545+
}
35353546
// add submodel as component to view.
35363547
mpDiagramGraphicsView->addComponentToView(subModel.attribute("Name"), pLibraryTreeItem, transformation, QPointF(0.0, 0.0), dialogAnnotation,
35373548
pComponentInfo, false, true);

0 commit comments

Comments
 (0)