Skip to content

Commit

Permalink
Fixes #2274 & #2845.
Browse files Browse the repository at this point in the history
Update Libraries browser when user modifies the text.
  • Loading branch information
adeas31 committed Mar 12, 2016
1 parent 2c2c5e9 commit 6247798
Show file tree
Hide file tree
Showing 10 changed files with 162 additions and 31 deletions.
2 changes: 1 addition & 1 deletion OMEdit/OMEditGUI/Editors/BaseEditor.h
Expand Up @@ -182,8 +182,8 @@ class BaseEditor : public QWidget
MainWindow* getMainWindow() {return mpMainWindow;}
PlainTextEdit *getPlainTextEdit() {return mpPlainTextEdit;}
FindReplaceWidget* getFindReplaceWidget() {return mpFindReplaceWidget;}
bool canHaveBreakpoints() {return mCanHaveBreakpoints;}
void setCanHaveBreakpoints(bool canHaveBreakpoints);
bool canHaveBreakpoints() {return mCanHaveBreakpoints;}
QAction *getToggleBreakpointAction() {return mpToggleBreakpointAction;}
DocumentMarker* getDocumentMarker() {return mpDocumentMarker;}
void goToLineNumber(int lineNumber);
Expand Down
6 changes: 4 additions & 2 deletions OMEdit/OMEditGUI/Editors/MetaModelEditor.cpp
Expand Up @@ -73,8 +73,10 @@ bool MetaModelEditor::validateText()
pMessageBox->setText(GUIMessages::getMessage(GUIMessages::ERROR_IN_TEXT).arg("MetaModel")
.append(GUIMessages::getMessage(GUIMessages::CHECK_MESSAGES_BROWSER))
.append(GUIMessages::getMessage(GUIMessages::REVERT_PREVIOUS_OR_FIX_ERRORS_MANUALLY)));
pMessageBox->addButton(tr("Fix error(s) manually"), QMessageBox::AcceptRole);
pMessageBox->addButton(tr("Revert to last correct version"), QMessageBox::RejectRole);
pMessageBox->addButton(Helper::fixErrorsManually, QMessageBox::AcceptRole);
pMessageBox->addButton(Helper::revertToLastCorrectVersion, QMessageBox::RejectRole);
// we set focus to this widget here so when the error dialog is closed Qt gives back the focus to this widget.
mpPlainTextEdit->setFocus(Qt::ActiveWindowFocusReason);
int answer = pMessageBox->exec();
switch (answer) {
case QMessageBox::RejectRole:
Expand Down
6 changes: 4 additions & 2 deletions OMEdit/OMEditGUI/Editors/ModelicaTextEditor.cpp
Expand Up @@ -200,8 +200,10 @@ bool ModelicaTextEditor::validateText(LibraryTreeItem **pLibraryTreeItem)
pMessageBox->setText(GUIMessages::getMessage(GUIMessages::ERROR_IN_TEXT).arg("Modelica")
.append(GUIMessages::getMessage(GUIMessages::CHECK_MESSAGES_BROWSER))
.append(GUIMessages::getMessage(GUIMessages::REVERT_PREVIOUS_OR_FIX_ERRORS_MANUALLY)));
pMessageBox->addButton(tr("Fix error(s) manually"), QMessageBox::AcceptRole);
pMessageBox->addButton(tr("Revert to last correct version"), QMessageBox::RejectRole);
pMessageBox->addButton(Helper::fixErrorsManually, QMessageBox::AcceptRole);
pMessageBox->addButton(Helper::revertToLastCorrectVersion, QMessageBox::RejectRole);
// we set focus to this widget here so when the error dialog is closed Qt gives back the focus to this widget.
mpPlainTextEdit->setFocus(Qt::ActiveWindowFocusReason);
int answer = pMessageBox->exec();
switch (answer) {
case QMessageBox::RejectRole:
Expand Down
88 changes: 82 additions & 6 deletions OMEdit/OMEditGUI/MainWindow.cpp
Expand Up @@ -184,6 +184,7 @@ MainWindow::MainWindow(QSplashScreen *pSplashScreen, bool debug, QWidget *parent
addDockWidget(Qt::RightDockWidgetArea, mpDocumentationDockWidget);
setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
mpDocumentationDockWidget->hide();
connect(mpDocumentationDockWidget, SIGNAL(visibilityChanged(bool)), SLOT(documentationDockWidgetVisibilityChanged(bool)));
// Create VariablesWidget dock
mpVariablesDockWidget = new QDockWidget(Helper::variablesBrowser, this);
mpVariablesDockWidget->setObjectName("Variables");
Expand Down Expand Up @@ -915,8 +916,7 @@ void MainWindow::fetchInterfaceData(LibraryTreeItem *pLibraryTreeItem)
{
/* if MetaModel text is changed manually by user then validate it before fetaching the interface data. */
if (pLibraryTreeItem->getModelWidget()) {
MetaModelEditor *pMetaModelEditor = dynamic_cast<MetaModelEditor*>(pLibraryTreeItem->getModelWidget()->getEditor());
if (pMetaModelEditor && !pMetaModelEditor->validateText()) {
if (!pLibraryTreeItem->getModelWidget()->validateText(&pLibraryTreeItem)) {
return;
}
}
Expand Down Expand Up @@ -963,8 +963,7 @@ void MainWindow::TLMSimulate(LibraryTreeItem *pLibraryTreeItem)
{
/* if MetaModel text is changed manually by user then validate it before starting the TLM co-simulation. */
if (pLibraryTreeItem->getModelWidget()) {
MetaModelEditor *pMetaModelEditor = dynamic_cast<MetaModelEditor*>(pLibraryTreeItem->getModelWidget()->getEditor());
if (pMetaModelEditor && !pMetaModelEditor->validateText()) {
if (!pLibraryTreeItem->getModelWidget()->validateText(&pLibraryTreeItem)) {
return;
}
}
Expand Down Expand Up @@ -2175,8 +2174,21 @@ void MainWindow::toggleShapesButton()
}
}

/*!
* \brief MainWindow::openRecentModelWidget
* Slot activated when mpModelSwitcherActions triggered SIGNAL is raised.\n
* Before switching to new ModelWidget try to update the class contents if user has changed anything.
*/
void MainWindow::openRecentModelWidget()
{
/* if Model text is changed manually by user then validate it before opening recent ModelWidget. */
ModelWidget *pModelWidget = mpModelWidgetContainer->getCurrentModelWidget();
if (pModelWidget && pModelWidget->getLibraryTreeItem()) {
LibraryTreeItem *pLibraryTreeItem = pModelWidget->getLibraryTreeItem();
if (!pModelWidget->validateText(&pLibraryTreeItem)) {
return;
}
}
QAction *pAction = qobject_cast<QAction*>(sender());
QToolButton *pToolButton = qobject_cast<QToolButton*>(sender());
LibraryTreeItem *pLibraryTreeItem;
Expand Down Expand Up @@ -2338,6 +2350,24 @@ void MainWindow::perspectiveTabChanged(int tabIndex)
}
}

/*!
* \brief MainWindow::documentationDockWidgetVisibilityChanged
* Handles the VisibilityChanged signal of Documentation Dock Widget.
* \param visible
*/
void MainWindow::documentationDockWidgetVisibilityChanged(bool visible)
{
if (visible) {
ModelWidget *pModelWidget = mpModelWidgetContainer->getCurrentModelWidget();
if (pModelWidget && pModelWidget->getLibraryTreeItem()) {
LibraryTreeItem *pLibraryTreeItem = pModelWidget->getLibraryTreeItem();
if (pModelWidget->validateText(&pLibraryTreeItem)) {
mpDocumentationWidget->showDocumentation(pLibraryTreeItem);
}
}
}
}

void MainWindow::autoSave()
{
// bool autoSaveForSingleClasses = mpOptionsDialog->getGeneralSettingsPage()->getEnableAutoSaveForSingleClassesCheckBox()->isChecked();
Expand Down Expand Up @@ -2378,16 +2408,31 @@ void MainWindow::autoSave()
// }
}

/*!
* \brief MainWindow::switchToWelcomePerspectiveSlot
* Slot activated when Ctrl+f1 is clicked.
* Switches to welcome perspective.
*/
void MainWindow::switchToWelcomePerspectiveSlot()
{
mpPerspectiveTabbar->setCurrentIndex(0);
}

/*!
* \brief MainWindow::switchToModelingPerspectiveSlot
* Slot activated when Ctrl+f2 is clicked.
* Switches to modeling perspective.
*/
void MainWindow::switchToModelingPerspectiveSlot()
{
mpPerspectiveTabbar->setCurrentIndex(1);
}

/*!
* \brief MainWindow::switchToPlottingPerspectiveSlot
* Slot activated when Ctrl+f3 is clicked.
* Switches to plotting perspective.
*/
void MainWindow::switchToPlottingPerspectiveSlot()
{
mpPerspectiveTabbar->setCurrentIndex(2);
Expand Down Expand Up @@ -2969,8 +3014,22 @@ void MainWindow::storePlotWindowsStateAndGeometry()
}
}

/*!
* \brief MainWindow::switchToWelcomePerspective
* Switches to Welcome perspective.
*/
void MainWindow::switchToWelcomePerspective()
{
ModelWidget *pModelWidget = mpModelWidgetContainer->getCurrentModelWidget();
if (pModelWidget && pModelWidget->getLibraryTreeItem()) {
LibraryTreeItem *pLibraryTreeItem = pModelWidget->getLibraryTreeItem();
if (!pModelWidget->validateText(&pLibraryTreeItem)) {
bool signalsState = mpPerspectiveTabbar->blockSignals(true);
mpPerspectiveTabbar->setCurrentIndex(1);
mpPerspectiveTabbar->blockSignals(signalsState);
return;
}
}
storePlotWindowsStateAndGeometry();
mpPlotWindowContainer->tileSubWindows();
mpCentralStackedWidget->setCurrentWidget(mpWelcomePageWidget);
Expand All @@ -2982,6 +3041,10 @@ void MainWindow::switchToWelcomePerspective()
mpPlotToolBar->setEnabled(false);
}

/*!
* \brief MainWindow::switchToModelingPerspective
* Switches to Modeling perspective.
*/
void MainWindow::switchToModelingPerspective()
{
storePlotWindowsStateAndGeometry();
Expand All @@ -2997,8 +3060,22 @@ void MainWindow::switchToModelingPerspective()
}
}

/*!
* \brief MainWindow::switchToPlottingPerspective
* Switches to plotting perspective.
*/
void MainWindow::switchToPlottingPerspective()
{
ModelWidget *pModelWidget = mpModelWidgetContainer->getCurrentModelWidget();
if (pModelWidget && pModelWidget->getLibraryTreeItem()) {
LibraryTreeItem *pLibraryTreeItem = pModelWidget->getLibraryTreeItem();
if (!pModelWidget->validateText(&pLibraryTreeItem)) {
bool signalsState = mpPerspectiveTabbar->blockSignals(true);
mpPerspectiveTabbar->setCurrentIndex(1);
mpPerspectiveTabbar->blockSignals(signalsState);
return;
}
}
mpCentralStackedWidget->setCurrentWidget(mpPlotWindowContainer);
int i = 0;
foreach (QMdiSubWindow *pWindow, mpPlotWindowContainer->subWindowList()) {
Expand Down Expand Up @@ -3089,8 +3166,7 @@ void MainWindow::fetchInterfaceDataHelper(LibraryTreeItem *pLibraryTreeItem)
{
/* if Modelica text is changed manually by user then validate it before saving. */
if (pLibraryTreeItem->getModelWidget()) {
MetaModelEditor *pMetaModelEditor = dynamic_cast<MetaModelEditor*>(pLibraryTreeItem->getModelWidget()->getEditor());
if (pMetaModelEditor && !pMetaModelEditor->validateText()) {
if (!pLibraryTreeItem->getModelWidget()->validateText(&pLibraryTreeItem)) {
return;
}
}
Expand Down
1 change: 1 addition & 0 deletions OMEdit/OMEditGUI/MainWindow.h
Expand Up @@ -402,6 +402,7 @@ public slots:
void readInterfaceData(LibraryTreeItem *pLibraryTreeItem);
private slots:
void perspectiveTabChanged(int tabIndex);
void documentationDockWidgetVisibilityChanged(bool visible);
void autoSave();
void switchToWelcomePerspectiveSlot();
void switchToModelingPerspectiveSlot();
Expand Down
6 changes: 5 additions & 1 deletion OMEdit/OMEditGUI/Modeling/MessagesWidget.cpp
Expand Up @@ -261,8 +261,12 @@ void MessagesWidget::openErrorMessageClass(QUrl url)
if (className.startsWith("/")) className.remove(0, 1);
LibraryTreeItem *pLibraryTreeItem = mpMainWindow->getLibraryWidget()->getLibraryTreeModel()->findLibraryTreeItem(className);
if (pLibraryTreeItem) {
mpMainWindow->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(pLibraryTreeItem);
ModelWidget *pModelWidget = pLibraryTreeItem->getModelWidget();
if (pModelWidget) {
mpMainWindow->getModelWidgetContainer()->addModelWidget(pModelWidget, false);
} else {
mpMainWindow->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(pLibraryTreeItem);
}
if (pModelWidget && pModelWidget->getEditor()) {
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
QUrlQuery query(url);
Expand Down
76 changes: 58 additions & 18 deletions OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp
Expand Up @@ -2775,6 +2775,10 @@ void ModelWidget::reDrawModelWidget()
mDiagramViewLoaded = true;
mConnectionsLoaded = true;
}
// if documentation view is visible then update it
if (mpModelWidgetContainer->getMainWindow()->getDocumentationDockWidget()->isVisible()) {
mpModelWidgetContainer->getMainWindow()->getDocumentationWidget()->showDocumentation(getLibraryTreeItem());
}
// clear the undo stack
mpUndoStack->clear();
// announce the change.
Expand Down Expand Up @@ -3638,7 +3642,8 @@ void ModelWidget::showIconView(bool checked)
if (pSubWindow) {
pSubWindow->setWindowIcon(QIcon(":/Resources/icons/model.svg"));
}
mpIconGraphicsView->setFocus();
mpModelWidgetContainer->currentModelWidgetChanged(mpModelWidgetContainer->getCurrentMdiSubWindow());
mpIconGraphicsView->setFocus(Qt::ActiveWindowFocusReason);
if (!checked || (checked && mpIconGraphicsView->isVisible())) {
return;
}
Expand Down Expand Up @@ -3669,7 +3674,8 @@ void ModelWidget::showDiagramView(bool checked)
if (pSubWindow) {
pSubWindow->setWindowIcon(QIcon(":/Resources/icons/modeling.png"));
}
mpDiagramGraphicsView->setFocus();
mpModelWidgetContainer->currentModelWidgetChanged(mpModelWidgetContainer->getCurrentMdiSubWindow());
mpDiagramGraphicsView->setFocus(Qt::ActiveWindowFocusReason);
if (!checked || (checked && mpDiagramGraphicsView->isVisible())) {
return;
}
Expand All @@ -3696,11 +3702,12 @@ void ModelWidget::showTextView(bool checked)
if (!checked || (checked && mpEditor->isVisible())) {
return;
}
mpModelWidgetContainer->currentModelWidgetChanged(mpModelWidgetContainer->getCurrentMdiSubWindow());
mpViewTypeLabel->setText(StringHandler::getViewType(StringHandler::ModelicaText));
mpIconGraphicsView->hide();
mpDiagramGraphicsView->hide();
mpEditor->show();
mpEditor->getPlainTextEdit()->setFocus();
mpEditor->getPlainTextEdit()->setFocus(Qt::ActiveWindowFocusReason);
mpModelWidgetContainer->setPreviousViewType(StringHandler::ModelicaText);
updateUndoRedoActions();
}
Expand Down Expand Up @@ -3863,7 +3870,7 @@ void ModelWidgetContainer::addModelWidget(ModelWidget *pModelWidget, bool checkP
}
// get the preferred view to display
QString preferredView = pModelWidget->getLibraryTreeItem()->mClassInformation.preferredView;
if (preferredView.isEmpty()) {
if (!preferredView.isEmpty()) {
if (preferredView.compare("info") == 0) {
pModelWidget->showDocumentationView();
loadPreviousViewType(pModelWidget);
Expand Down Expand Up @@ -3946,6 +3953,17 @@ bool ModelWidgetContainer::eventFilter(QObject *object, QEvent *event)
if (!object || isHidden() || qApp->activeWindow() != mpMainWindow) {
return QMdiArea::eventFilter(object, event);
}
if ((event->type() == QEvent::MouseButtonPress && qobject_cast<QMenuBar*>(object)) ||
(event->type() == QEvent::FocusIn && (qobject_cast<LibraryTreeView*>(object) || qobject_cast<DocumentationViewer*>(object)))) {
ModelWidget *pModelWidget = getCurrentModelWidget();
if (pModelWidget && pModelWidget->getLibraryTreeItem()) {
LibraryTreeItem *pLibraryTreeItem = pModelWidget->getLibraryTreeItem();
/* if Model text is changed manually by user then validate it. */
if (!pModelWidget->validateText(&pLibraryTreeItem)) {
return true;
}
}
}
// Global key events with Ctrl modifier.
if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) {
if (subWindowList(QMdiArea::ActivationHistoryOrder).size() > 0) {
Expand Down Expand Up @@ -3979,7 +3997,9 @@ bool ModelWidgetContainer::eventFilter(QObject *object, QEvent *event)
}
} else {
if (!mpRecentModelsList->selectedItems().isEmpty()) {
openRecentModelWidget(mpRecentModelsList->selectedItems().at(0));
if (!openRecentModelWidget(mpRecentModelsList->selectedItems().at(0))) {
return true;
}
}
mpModelSwitcherDialog->hide();
}
Expand Down Expand Up @@ -4088,12 +4108,32 @@ void ModelWidgetContainer::loadPreviousViewType(ModelWidget *pModelWidget)
}
}

void ModelWidgetContainer::openRecentModelWidget(QListWidgetItem *pItem)
/*!
* \brief ModelWidgetContainer::openRecentModelWidget
* Slot activated when mpRecentModelsList itemClicked SIGNAL is raised.\n
* Before switching to new ModelWidget try to update the class contents if user has changed anything.
* \param pListWidgetItem
*/
bool ModelWidgetContainer::openRecentModelWidget(QListWidgetItem *pListWidgetItem)
{
LibraryTreeItem *pLibraryTreeItem = mpMainWindow->getLibraryWidget()->getLibraryTreeModel()->findLibraryTreeItem(pItem->data(Qt::UserRole).toString());
/* if Model text is changed manually by user then validate it before opening recent ModelWidget. */
ModelWidget *pModelWidget = getCurrentModelWidget();
if (pModelWidget && pModelWidget->getLibraryTreeItem()) {
LibraryTreeItem *pLibraryTreeItem = pModelWidget->getLibraryTreeItem();
if (!pModelWidget->validateText(&pLibraryTreeItem)) {
return false;
}
}
LibraryTreeItem *pLibraryTreeItem = mpMainWindow->getLibraryWidget()->getLibraryTreeModel()->findLibraryTreeItem(pListWidgetItem->data(Qt::UserRole).toString());
addModelWidget(pLibraryTreeItem->getModelWidget(), false);
return true;
}

/*!
* \brief ModelWidgetContainer::currentModelWidgetChanged
* Updates the toolbar and menus items depending on what kind of ModelWidget is activated.
* \param pSubWindow
*/
void ModelWidgetContainer::currentModelWidgetChanged(QMdiSubWindow *pSubWindow)
{
bool enabled, modelica, text, metaModel;
Expand Down Expand Up @@ -4129,17 +4169,17 @@ void ModelWidgetContainer::currentModelWidgetChanged(QMdiSubWindow *pSubWindow)
getMainWindow()->getSaveAsAction()->setEnabled(enabled);
// getMainWindow()->getSaveAllAction()->setEnabled(enabled);
getMainWindow()->getSaveTotalAction()->setEnabled(enabled && modelica);
getMainWindow()->getShowGridLinesAction()->setEnabled(enabled && !pModelWidget->getLibraryTreeItem()->isSystemLibrary());
getMainWindow()->getResetZoomAction()->setEnabled(enabled && modelica);
getMainWindow()->getZoomInAction()->setEnabled(enabled && modelica);
getMainWindow()->getZoomOutAction()->setEnabled(enabled && modelica);
getMainWindow()->getLineShapeAction()->setEnabled(enabled && modelica);
getMainWindow()->getPolygonShapeAction()->setEnabled(enabled && modelica);
getMainWindow()->getRectangleShapeAction()->setEnabled(enabled && modelica);
getMainWindow()->getEllipseShapeAction()->setEnabled(enabled && modelica);
getMainWindow()->getTextShapeAction()->setEnabled(enabled && modelica);
getMainWindow()->getBitmapShapeAction()->setEnabled(enabled && modelica);
getMainWindow()->getConnectModeAction()->setEnabled(enabled && modelica);
getMainWindow()->getShowGridLinesAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked() && !pModelWidget->getLibraryTreeItem()->isSystemLibrary());
getMainWindow()->getResetZoomAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked());
getMainWindow()->getZoomInAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked());
getMainWindow()->getZoomOutAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked());
getMainWindow()->getLineShapeAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked());
getMainWindow()->getPolygonShapeAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked());
getMainWindow()->getRectangleShapeAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked());
getMainWindow()->getEllipseShapeAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked());
getMainWindow()->getTextShapeAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked());
getMainWindow()->getBitmapShapeAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked());
getMainWindow()->getConnectModeAction()->setEnabled(enabled && modelica && !pModelWidget->getTextViewToolButton()->isChecked());
getMainWindow()->getSimulateModelAction()->setEnabled(enabled && modelica && pLibraryTreeItem->isSimulationAllowed());
getMainWindow()->getSimulateWithTransformationalDebuggerAction()->setEnabled(enabled && modelica && pLibraryTreeItem->isSimulationAllowed());
getMainWindow()->getSimulateWithAlgorithmicDebuggerAction()->setEnabled(enabled && modelica && pLibraryTreeItem->isSimulationAllowed());
Expand Down
2 changes: 1 addition & 1 deletion OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.h
Expand Up @@ -447,7 +447,7 @@ class ModelWidgetContainer : public MdiArea
QListWidget *mpRecentModelsList;
void loadPreviousViewType(ModelWidget *pModelWidget);
public slots:
void openRecentModelWidget(QListWidgetItem *pItem);
bool openRecentModelWidget(QListWidgetItem *pListWidgetItem);
void currentModelWidgetChanged(QMdiSubWindow *pSubWindow);
void saveModelWidget();
void saveAsModelWidget();
Expand Down

0 comments on commit 6247798

Please sign in to comment.