From 84761ec9f2ecafc403eb0e304b89a605e5d9a7d7 Mon Sep 17 00:00:00 2001 From: Jochen Becher Date: Tue, 16 Feb 2016 21:48:50 +0100 Subject: [PATCH] ModelEditor: Add UI for custom configuration path Change-Id: I66fd8a8d89f2a75157d6bf4f6de2a81cc2c93aea Reviewed-by: Tobias Hunger --- .../modeleditor/extpropertiesmview.cpp | 109 ++++++++++++++++++ src/plugins/modeleditor/extpropertiesmview.h | 55 +++++++++ src/plugins/modeleditor/modeleditor.cpp | 6 + src/plugins/modeleditor/modeleditor.pro | 2 + 4 files changed, 172 insertions(+) create mode 100644 src/plugins/modeleditor/extpropertiesmview.cpp create mode 100644 src/plugins/modeleditor/extpropertiesmview.h diff --git a/src/plugins/modeleditor/extpropertiesmview.cpp b/src/plugins/modeleditor/extpropertiesmview.cpp new file mode 100644 index 00000000000..e0ac9d1b528 --- /dev/null +++ b/src/plugins/modeleditor/extpropertiesmview.cpp @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Jochen Becher +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#include "extpropertiesmview.h" + +#include "qmt/model/mpackage.h" +#include "qmt/project/project.h" +#include "qmt/project_controller/projectcontroller.h" + +#include "utils/pathchooser.h" + +#include +#include +#include + +ExtPropertiesMView::ExtPropertiesMView(qmt::PropertiesView *view) + : qmt::PropertiesView::MView(view) +{ +} + +ExtPropertiesMView::~ExtPropertiesMView() +{ +} + +void ExtPropertiesMView::setProjectController(qmt::ProjectController *projectController) +{ + m_projectController = projectController; +} + +void ExtPropertiesMView::visitMPackage(const qmt::MPackage *package) +{ + qmt::PropertiesView::MView::visitMPackage(package); + if (m_modelElements.size() == 1 && !package->owner()) { + qmt::Project *project = m_projectController->project(); + if (m_configPath == 0) { + m_configPath = new Utils::PathChooser(m_topWidget); + m_configPath->setPromptDialogTitle(tr("Select Custom Configuration Folder")); + m_configPath->setExpectedKind(Utils::PathChooser::ExistingDirectory); + m_configPath->setValidationFunction([=](Utils::FancyLineEdit *edit, QString *errorMessage) { + return edit->text().isEmpty() || m_configPath->defaultValidationFunction()(edit, errorMessage); + }); + m_configPath->setInitialBrowsePathBackup(QFileInfo(project->fileName()).absolutePath()); + addRow(tr("Config Path:"), m_configPath, "configpath"); + connect(m_configPath, &Utils::PathChooser::pathChanged, + this, &ExtPropertiesMView::onConfigPathChanged); + } + if (!m_configPath->hasFocus()) { + if (project->configPath().isEmpty()) { + m_configPath->setPath(QString()); + } else { + // make path absolute (may be relative to current project's directory) + QDir projectDir = QFileInfo(project->fileName()).absoluteDir(); + m_configPath->setPath(QFileInfo(projectDir, project->configPath()).canonicalFilePath()); + } + } + if (m_configPathInfo == 0) { + m_configPathInfo = new QLabel(m_topWidget); + addRow(QString(), m_configPathInfo, "configpathinfo"); + } + } +} + +void ExtPropertiesMView::onConfigPathChanged(const QString &path) +{ + bool modified = false; + qmt::Project *project = m_projectController->project(); + if (path.isEmpty()) { + if (!project->configPath().isEmpty()) { + project->setConfigPath(QString()); + m_projectController->setModified(); + modified = true; + } + } else { + // make path relative to current project's directory + QFileInfo absConfigPath(path); + absConfigPath.makeAbsolute(); + QDir projectDir = QFileInfo(project->fileName()).dir(); + QString configPath = projectDir.relativeFilePath(absConfigPath.filePath()); + if (configPath != project->configPath()) { + project->setConfigPath(configPath); + m_projectController->setModified(); + modified = true; + } + } + if (modified && m_configPathInfo) + m_configPathInfo->setText(tr("Model file must be reloaded.")); +} diff --git a/src/plugins/modeleditor/extpropertiesmview.h b/src/plugins/modeleditor/extpropertiesmview.h new file mode 100644 index 00000000000..61fc732377c --- /dev/null +++ b/src/plugins/modeleditor/extpropertiesmview.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Jochen Becher +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#ifndef EXTPROPERTIESMVIEW_H +#define EXTPROPERTIESMVIEW_H + +#include "qmt/model_widgets_ui/propertiesviewmview.h" + +namespace qmt { class ProjectController; } +namespace Utils { class PathChooser; } + +class ExtPropertiesMView : public qmt::PropertiesView::MView +{ + Q_OBJECT + +public: + ExtPropertiesMView(qmt::PropertiesView *view); + ~ExtPropertiesMView(); + + void setProjectController(qmt::ProjectController *projectController); + + void visitMPackage(const qmt::MPackage *package) override; + +private: + void onConfigPathChanged(const QString &path); + +private: + qmt::ProjectController *m_projectController = 0; + Utils::PathChooser *m_configPath = 0; + QLabel *m_configPathInfo = 0; +}; + +#endif // EXTPROPERTIESMVIEW_H diff --git a/src/plugins/modeleditor/modeleditor.cpp b/src/plugins/modeleditor/modeleditor.cpp index c839cb915de..6c8c12684e8 100644 --- a/src/plugins/modeleditor/modeleditor.cpp +++ b/src/plugins/modeleditor/modeleditor.cpp @@ -31,6 +31,7 @@ #include "editordiagramview.h" #include "elementtasks.h" #include "extdocumentcontroller.h" +#include "extpropertiesmview.h" #include "modeldocument.h" #include "modeleditor_constants.h" #include "modeleditor_plugin.h" @@ -339,6 +340,11 @@ void ModelEditor::initDocument() d->propertiesView->setModelController(documentController->modelController()); d->propertiesView->setStereotypeController(documentController->stereotypeController()); d->propertiesView->setStyleController(documentController->styleController()); + d->propertiesView->setMViewFactory([=](qmt::PropertiesView *view) { + auto extView = new ExtPropertiesMView(view); + extView->setProjectController(documentController->projectController()); + return extView; + }); d->modelTreeView->setTreeModel(documentController->sortedTreeModel()); d->modelTreeView->setElementTasks(documentController->elementTasks()); diff --git a/src/plugins/modeleditor/modeleditor.pro b/src/plugins/modeleditor/modeleditor.pro index 35060b048e6..3b37eedf3e5 100644 --- a/src/plugins/modeleditor/modeleditor.pro +++ b/src/plugins/modeleditor/modeleditor.pro @@ -35,6 +35,7 @@ SOURCES += \ editordiagramview.cpp \ elementtasks.cpp \ extdocumentcontroller.cpp \ + extpropertiesmview.cpp \ jsextension.cpp \ modeldocument.cpp \ modeleditor.cpp \ @@ -57,6 +58,7 @@ HEADERS += \ editordiagramview.h \ elementtasks.h \ extdocumentcontroller.h \ + extpropertiesmview.h \ jsextension.h \ modeldocument.h \ modeleditor_constants.h \