forked from qt-creator/qt-creator
Add Specific settings page to CMakePLugin and create checkable dialog box for user after add new file action
Change-Id: If5702764fa81f2fdda3ef59780b217e47643b030 Reviewed-by: pawelrutka <prutka13@gmail.com> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -2,5 +2,6 @@
|
|||||||
<qresource prefix="/cmakeproject">
|
<qresource prefix="/cmakeproject">
|
||||||
<file>images/fileoverlay_cmake.png</file>
|
<file>images/fileoverlay_cmake.png</file>
|
||||||
<file>images/fileoverlay_cmake@2x.png</file>
|
<file>images/fileoverlay_cmake@2x.png</file>
|
||||||
|
<file>images/project_type_settings_icon.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@@ -30,6 +30,8 @@ HEADERS = builddirmanager.h \
|
|||||||
cmakebuildsettingswidget.h \
|
cmakebuildsettingswidget.h \
|
||||||
cmakeindenter.h \
|
cmakeindenter.h \
|
||||||
cmakeautocompleter.h \
|
cmakeautocompleter.h \
|
||||||
|
cmakespecificsettings.h \
|
||||||
|
cmakespecificsettingspage.h \
|
||||||
configmodel.h \
|
configmodel.h \
|
||||||
configmodelitemdelegate.h \
|
configmodelitemdelegate.h \
|
||||||
servermode.h \
|
servermode.h \
|
||||||
@@ -63,11 +65,16 @@ SOURCES = builddirmanager.cpp \
|
|||||||
cmakebuildsettingswidget.cpp \
|
cmakebuildsettingswidget.cpp \
|
||||||
cmakeindenter.cpp \
|
cmakeindenter.cpp \
|
||||||
cmakeautocompleter.cpp \
|
cmakeautocompleter.cpp \
|
||||||
|
cmakespecificsettings.cpp \
|
||||||
|
cmakespecificsettingspage.cpp \
|
||||||
configmodel.cpp \
|
configmodel.cpp \
|
||||||
configmodelitemdelegate.cpp \
|
configmodelitemdelegate.cpp \
|
||||||
servermode.cpp \
|
servermode.cpp \
|
||||||
servermodereader.cpp \
|
servermodereader.cpp \
|
||||||
tealeafreader.cpp \
|
tealeafreader.cpp \
|
||||||
treescanner.cpp
|
treescanner.cpp \
|
||||||
|
|
||||||
RESOURCES += cmakeproject.qrc
|
RESOURCES += cmakeproject.qrc
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
cmakespecificsettingspage.ui
|
||||||
|
@@ -26,10 +26,12 @@
|
|||||||
#include "cmakeprojectnodes.h"
|
#include "cmakeprojectnodes.h"
|
||||||
|
|
||||||
#include "cmakeprojectconstants.h"
|
#include "cmakeprojectconstants.h"
|
||||||
|
#include "cmakeprojectplugin.h"
|
||||||
#include <coreplugin/fileiconprovider.h>
|
#include <coreplugin/fileiconprovider.h>
|
||||||
|
#include <coreplugin/icore.h>
|
||||||
#include <cpptools/cpptoolsconstants.h>
|
#include <cpptools/cpptoolsconstants.h>
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
|
#include <utils/checkablemessagebox.h>
|
||||||
#include <utils/mimetypes/mimedatabase.h>
|
#include <utils/mimetypes/mimedatabase.h>
|
||||||
#include <utils/optional.h>
|
#include <utils/optional.h>
|
||||||
|
|
||||||
@@ -43,6 +45,15 @@ using namespace CMakeProjectManager;
|
|||||||
using namespace CMakeProjectManager::Internal;
|
using namespace CMakeProjectManager::Internal;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
void copySourcePathToClipboard(Utils::optional<QString> srcPath,
|
||||||
|
const ProjectExplorer::ProjectNode *node)
|
||||||
|
{
|
||||||
|
QClipboard *clip = QGuiApplication::clipboard();
|
||||||
|
|
||||||
|
QDir projDir{node->filePath().toFileInfo().absoluteFilePath()};
|
||||||
|
clip->setText(QDir::cleanPath(projDir.relativeFilePath(srcPath.value())));
|
||||||
|
}
|
||||||
|
|
||||||
void noAutoAdditionNotify(const QStringList &filePaths, const ProjectExplorer::ProjectNode *node)
|
void noAutoAdditionNotify(const QStringList &filePaths, const ProjectExplorer::ProjectNode *node)
|
||||||
{
|
{
|
||||||
Utils::optional<QString> srcPath{};
|
Utils::optional<QString> srcPath{};
|
||||||
@@ -55,17 +66,40 @@ void noAutoAdditionNotify(const QStringList &filePaths, const ProjectExplorer::P
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (srcPath) {
|
if (srcPath) {
|
||||||
QMessageBox::StandardButton reply =
|
CMakeSpecificSettings *settings = CMakeProjectPlugin::projectTypeSpecificSettings();
|
||||||
QMessageBox::question(nullptr, QMessageBox::tr("Copy to Clipboard?"),
|
switch (settings->afterAddFileSetting()) {
|
||||||
QMessageBox::tr("Files are not automatically added to the CMakeLists.txt file of the CMake project."
|
case CMakeProjectManager::Internal::ASK_USER: {
|
||||||
|
bool checkValue{false};
|
||||||
|
QDialogButtonBox::StandardButton reply =
|
||||||
|
Utils::CheckableMessageBox::question(nullptr,
|
||||||
|
QMessageBox::tr("Copy to Clipboard?"),
|
||||||
|
QMessageBox::tr("Files are not automatically added to the "
|
||||||
|
"CMakeLists.txt file of the CMake project."
|
||||||
"\nCopy the path to the source files to the clipboard?"),
|
"\nCopy the path to the source files to the clipboard?"),
|
||||||
QMessageBox::Yes | QMessageBox::No);
|
"Remember My Choice", &checkValue, QDialogButtonBox::Yes | QDialogButtonBox::No,
|
||||||
|
QDialogButtonBox::Yes);
|
||||||
|
if (true == checkValue) {
|
||||||
|
if (QDialogButtonBox::Yes == reply)
|
||||||
|
settings->setAfterAddFileSetting(AfterAddFileAction::COPY_FILE_PATH);
|
||||||
|
else if (QDialogButtonBox::No == reply)
|
||||||
|
settings->setAfterAddFileSetting(AfterAddFileAction::NEVER_COPY_FILE_PATH);
|
||||||
|
|
||||||
if (QMessageBox::Yes == reply) {
|
settings->toSettings(Core::ICore::settings());
|
||||||
QClipboard *clip = QGuiApplication::clipboard();
|
}
|
||||||
|
|
||||||
QDir projDir{node->filePath().toFileInfo().absoluteFilePath()};
|
if (QDialogButtonBox::Yes == reply) {
|
||||||
clip->setText(QDir::cleanPath(projDir.relativeFilePath(srcPath.value())));
|
copySourcePathToClipboard(srcPath, node);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CMakeProjectManager::Internal::COPY_FILE_PATH: {
|
||||||
|
copySourcePathToClipboard(srcPath, node);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CMakeProjectManager::Internal::NEVER_COPY_FILE_PATH:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -42,11 +42,10 @@
|
|||||||
#include <coreplugin/actionmanager/actioncontainer.h>
|
#include <coreplugin/actionmanager/actioncontainer.h>
|
||||||
#include <coreplugin/actionmanager/actionmanager.h>
|
#include <coreplugin/actionmanager/actionmanager.h>
|
||||||
#include <coreplugin/fileiconprovider.h>
|
#include <coreplugin/fileiconprovider.h>
|
||||||
|
#include <coreplugin/icore.h>
|
||||||
#include <projectexplorer/kitmanager.h>
|
#include <projectexplorer/kitmanager.h>
|
||||||
#include <projectexplorer/projectmanager.h>
|
#include <projectexplorer/projectmanager.h>
|
||||||
#include <projectexplorer/projecttree.h>
|
#include <projectexplorer/projecttree.h>
|
||||||
|
|
||||||
#include <texteditor/snippets/snippetprovider.h>
|
#include <texteditor/snippets/snippetprovider.h>
|
||||||
|
|
||||||
#include <utils/parameteraction.h>
|
#include <utils/parameteraction.h>
|
||||||
@@ -64,6 +63,7 @@ public:
|
|||||||
QMetaObject::Connection m_actionConnect;
|
QMetaObject::Connection m_actionConnect;
|
||||||
|
|
||||||
CMakeSettingsPage settingsPage;
|
CMakeSettingsPage settingsPage;
|
||||||
|
static const std::unique_ptr<CMakeSpecificSettings> projectTypeSpecificSettings;
|
||||||
CMakeManager manager;
|
CMakeManager manager;
|
||||||
CMakeBuildStepFactory buildStepFactory;
|
CMakeBuildStepFactory buildStepFactory;
|
||||||
CMakeRunConfigurationFactory runConfigFactory;
|
CMakeRunConfigurationFactory runConfigFactory;
|
||||||
@@ -72,6 +72,14 @@ public:
|
|||||||
CMakeLocatorFilter locatorFiler;
|
CMakeLocatorFilter locatorFiler;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const std::unique_ptr<CMakeSpecificSettings>
|
||||||
|
CMakeProjectPluginPrivate::projectTypeSpecificSettings{std::make_unique<CMakeSpecificSettings>()};
|
||||||
|
|
||||||
|
CMakeSpecificSettings *CMakeProjectPlugin::projectTypeSpecificSettings()
|
||||||
|
{
|
||||||
|
return CMakeProjectPluginPrivate::projectTypeSpecificSettings.get();
|
||||||
|
}
|
||||||
|
|
||||||
CMakeProjectPlugin::~CMakeProjectPlugin()
|
CMakeProjectPlugin::~CMakeProjectPlugin()
|
||||||
{
|
{
|
||||||
delete d;
|
delete d;
|
||||||
@@ -82,11 +90,15 @@ bool CMakeProjectPlugin::initialize(const QStringList & /*arguments*/, QString *
|
|||||||
Q_UNUSED(errorMessage)
|
Q_UNUSED(errorMessage)
|
||||||
|
|
||||||
d = new CMakeProjectPluginPrivate;
|
d = new CMakeProjectPluginPrivate;
|
||||||
|
CMakeProjectPluginPrivate::projectTypeSpecificSettings->fromSettings(ICore::settings());
|
||||||
|
new CMakeSpecificSettingsPage(CMakeProjectPluginPrivate::projectTypeSpecificSettings.get(),
|
||||||
|
this); //do not store as this will be cleaned after program close
|
||||||
|
|
||||||
const Context projectContext(CMakeProjectManager::Constants::CMAKEPROJECT_ID);
|
const Context projectContext(CMakeProjectManager::Constants::CMAKEPROJECT_ID);
|
||||||
|
|
||||||
Core::FileIconProvider::registerIconOverlayForSuffix(Constants::FILEOVERLAY_CMAKE, "cmake");
|
Core::FileIconProvider::registerIconOverlayForSuffix(Constants::FILEOVERLAY_CMAKE, "cmake");
|
||||||
Core::FileIconProvider::registerIconOverlayForFilename(Constants::FILEOVERLAY_CMAKE, "CMakeLists.txt");
|
Core::FileIconProvider::registerIconOverlayForFilename(Constants::FILEOVERLAY_CMAKE,
|
||||||
|
"CMakeLists.txt");
|
||||||
|
|
||||||
TextEditor::SnippetProvider::registerGroup(Constants::CMAKE_SNIPPETS_GROUP_ID,
|
TextEditor::SnippetProvider::registerGroup(Constants::CMAKE_SNIPPETS_GROUP_ID,
|
||||||
tr("CMake", "SnippetProvider"));
|
tr("CMake", "SnippetProvider"));
|
||||||
@@ -108,7 +120,8 @@ bool CMakeProjectPlugin::initialize(const QStringList & /*arguments*/, QString *
|
|||||||
d->m_buildTargetContextAction = new Utils::ParameterAction(tr("Build"), tr("Build \"%1\""),
|
d->m_buildTargetContextAction = new Utils::ParameterAction(tr("Build"), tr("Build \"%1\""),
|
||||||
Utils::ParameterAction::AlwaysEnabled/*handled manually*/,
|
Utils::ParameterAction::AlwaysEnabled/*handled manually*/,
|
||||||
this);
|
this);
|
||||||
command = ActionManager::registerAction(d->m_buildTargetContextAction, Constants::BUILD_TARGET_CONTEXTMENU, projectContext);
|
command = ActionManager::registerAction(d->m_buildTargetContextAction,
|
||||||
|
Constants::BUILD_TARGET_CONTEXTMENU, projectContext);
|
||||||
command->setAttribute(Command::CA_Hide);
|
command->setAttribute(Command::CA_Hide);
|
||||||
command->setAttribute(Command::CA_UpdateText);
|
command->setAttribute(Command::CA_UpdateText);
|
||||||
command->setDescription(d->m_buildTargetContextAction->text());
|
command->setDescription(d->m_buildTargetContextAction->text());
|
||||||
@@ -143,7 +156,9 @@ void CMakeProjectPlugin::updateContextActions()
|
|||||||
d->m_buildTargetContextAction->setVisible(targetNode);
|
d->m_buildTargetContextAction->setVisible(targetNode);
|
||||||
if (cmProject && targetNode) {
|
if (cmProject && targetNode) {
|
||||||
d->m_actionConnect = connect(d->m_buildTargetContextAction, &Utils::ParameterAction::triggered,
|
d->m_actionConnect = connect(d->m_buildTargetContextAction, &Utils::ParameterAction::triggered,
|
||||||
cmProject, [cmProject, targetDisplayName]() { cmProject->buildCMakeTarget(targetDisplayName); });
|
cmProject, [cmProject, targetDisplayName]() {
|
||||||
|
cmProject->buildCMakeTarget(targetDisplayName);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -25,8 +25,9 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "cmakespecificsettingspage.h"
|
||||||
#include <extensionsystem/iplugin.h>
|
#include <extensionsystem/iplugin.h>
|
||||||
|
#include <memory>
|
||||||
namespace CMakeProjectManager {
|
namespace CMakeProjectManager {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ class CMakeProjectPlugin : public ExtensionSystem::IPlugin
|
|||||||
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "CMakeProjectManager.json")
|
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "CMakeProjectManager.json")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
static CMakeSpecificSettings *projectTypeSpecificSettings();
|
||||||
~CMakeProjectPlugin() override;
|
~CMakeProjectPlugin() override;
|
||||||
|
|
||||||
#ifdef WITH_TESTS
|
#ifdef WITH_TESTS
|
||||||
|
51
src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp
Normal file
51
src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2018 The Qt Company Ltd.
|
||||||
|
** 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 "cmakespecificsettings.h"
|
||||||
|
|
||||||
|
namespace CMakeProjectManager {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
static const char SETTINGS_KEY[] = "CMakeSpecificSettings";
|
||||||
|
static const char AFTER_ADD_FILE_ACTION_KEY[] = "ProjectPopupSetting";
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSpecificSettings::fromSettings(QSettings *settings)
|
||||||
|
{
|
||||||
|
const QString rootKey = QString(SETTINGS_KEY) + '/';
|
||||||
|
afterAddFileToProjectSetting = static_cast<AfterAddFileAction>(
|
||||||
|
settings->value(rootKey + AFTER_ADD_FILE_ACTION_KEY,
|
||||||
|
static_cast<int>(AfterAddFileAction::ASK_USER)).toInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSpecificSettings::toSettings(QSettings *settings) const
|
||||||
|
{
|
||||||
|
settings->beginGroup(QString(SETTINGS_KEY));
|
||||||
|
settings->setValue(QString(AFTER_ADD_FILE_ACTION_KEY), static_cast<int>(afterAddFileToProjectSetting));
|
||||||
|
settings->endGroup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
53
src/plugins/cmakeprojectmanager/cmakespecificsettings.h
Normal file
53
src/plugins/cmakeprojectmanager/cmakespecificsettings.h
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2018 The Qt Company Ltd.
|
||||||
|
** 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.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
namespace CMakeProjectManager {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
enum AfterAddFileAction : int {
|
||||||
|
ASK_USER,
|
||||||
|
COPY_FILE_PATH,
|
||||||
|
NEVER_COPY_FILE_PATH
|
||||||
|
};
|
||||||
|
|
||||||
|
class CMakeSpecificSettings
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CMakeSpecificSettings() = default;
|
||||||
|
void fromSettings(QSettings *settings);
|
||||||
|
void toSettings(QSettings *settings) const;
|
||||||
|
|
||||||
|
void setAfterAddFileSetting(AfterAddFileAction settings) { afterAddFileToProjectSetting = settings; }
|
||||||
|
AfterAddFileAction afterAddFileSetting() const { return afterAddFileToProjectSetting; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
AfterAddFileAction afterAddFileToProjectSetting;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
110
src/plugins/cmakeprojectmanager/cmakespecificsettingspage.cpp
Normal file
110
src/plugins/cmakeprojectmanager/cmakespecificsettingspage.cpp
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2018 The Qt Company Ltd.
|
||||||
|
** 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 "cmakespecificsettingspage.h"
|
||||||
|
#include <coreplugin/icore.h>
|
||||||
|
|
||||||
|
namespace CMakeProjectManager {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
const char PROJECT_TYPE_ICON[] = ":/cmakeproject/images/project_type_settings_icon.png";
|
||||||
|
}
|
||||||
|
|
||||||
|
CMakeSpecificSettingWidget::CMakeSpecificSettingWidget(QWidget *parent):
|
||||||
|
QWidget(parent)
|
||||||
|
{
|
||||||
|
m_ui.setupUi(this);
|
||||||
|
m_ui.newFileAddedCopyToCpliSettingGroup->setId(m_ui.alwaysAskRadio,
|
||||||
|
AfterAddFileAction::ASK_USER);
|
||||||
|
m_ui.newFileAddedCopyToCpliSettingGroup->setId(m_ui.neverCopyRadio,
|
||||||
|
AfterAddFileAction::NEVER_COPY_FILE_PATH);
|
||||||
|
m_ui.newFileAddedCopyToCpliSettingGroup->setId(m_ui.alwaysCopyRadio,
|
||||||
|
AfterAddFileAction::COPY_FILE_PATH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSpecificSettingWidget::setSettings(const CMakeSpecificSettings &settings)
|
||||||
|
{
|
||||||
|
setProjectPopupSetting(settings.afterAddFileSetting());
|
||||||
|
}
|
||||||
|
|
||||||
|
CMakeSpecificSettings CMakeSpecificSettingWidget::settings() const
|
||||||
|
{
|
||||||
|
CMakeSpecificSettings set;
|
||||||
|
|
||||||
|
int popupSetting = m_ui.newFileAddedCopyToCpliSettingGroup->checkedId();
|
||||||
|
set.setAfterAddFileSetting( (popupSetting == -1) ? AfterAddFileAction::ASK_USER :
|
||||||
|
static_cast<AfterAddFileAction>(popupSetting));
|
||||||
|
return set;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSpecificSettingWidget::setProjectPopupSetting(AfterAddFileAction mode)
|
||||||
|
{
|
||||||
|
switch (mode) {
|
||||||
|
case CMakeProjectManager::Internal::ASK_USER:
|
||||||
|
m_ui.alwaysAskRadio->setChecked(true);
|
||||||
|
break;
|
||||||
|
case CMakeProjectManager::Internal::COPY_FILE_PATH:
|
||||||
|
m_ui.alwaysCopyRadio->setChecked(true);
|
||||||
|
break;
|
||||||
|
case CMakeProjectManager::Internal::NEVER_COPY_FILE_PATH:
|
||||||
|
m_ui.neverCopyRadio->setChecked(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CMakeSpecificSettingsPage::CMakeSpecificSettingsPage(CMakeSpecificSettings *settings,
|
||||||
|
QObject *parent):
|
||||||
|
Core::IOptionsPage{parent}, m_settings{settings}
|
||||||
|
{
|
||||||
|
setCategory("ProjectTypeSettingsPage");
|
||||||
|
setDisplayName("Project-Type Settings");
|
||||||
|
setCategoryIcon(Utils::Icon((PROJECT_TYPE_ICON)));
|
||||||
|
setId("CMakeSpecificSettings");
|
||||||
|
setDisplayName(tr("CMake"));
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *CMakeSpecificSettingsPage::widget()
|
||||||
|
{
|
||||||
|
if (!m_widget) {
|
||||||
|
m_widget = new CMakeSpecificSettingWidget();
|
||||||
|
m_widget->setSettings(*m_settings);
|
||||||
|
}
|
||||||
|
return m_widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSpecificSettingsPage::apply()
|
||||||
|
{
|
||||||
|
if (!m_widget) // page was never shown
|
||||||
|
return;
|
||||||
|
const CMakeSpecificSettings newSettings = m_widget->settings();
|
||||||
|
*m_settings = newSettings;
|
||||||
|
m_settings->toSettings(Core::ICore::settings());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
70
src/plugins/cmakeprojectmanager/cmakespecificsettingspage.h
Normal file
70
src/plugins/cmakeprojectmanager/cmakespecificsettingspage.h
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2018 The Qt Company Ltd.
|
||||||
|
** 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.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <coreplugin/dialogs/ioptionspage.h>
|
||||||
|
#include "cmakespecificsettings.h"
|
||||||
|
#include <memory>
|
||||||
|
#include "ui_cmakespecificsettingspage.h"
|
||||||
|
|
||||||
|
namespace CMakeProjectManager {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
|
||||||
|
class CMakeSpecificSettingWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit CMakeSpecificSettingWidget(QWidget *parent = 0);
|
||||||
|
void setSettings(const CMakeSpecificSettings &settings);
|
||||||
|
CMakeSpecificSettings settings() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::CMakeSpecificSettingForm m_ui;
|
||||||
|
|
||||||
|
void setProjectPopupSetting(AfterAddFileAction mode);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CMakeSpecificSettingsPage : public Core::IOptionsPage
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CMakeSpecificSettingsPage(CMakeSpecificSettings *settings, QObject *parent);
|
||||||
|
|
||||||
|
QWidget *widget() override;
|
||||||
|
void apply() override;
|
||||||
|
void finish() override { }
|
||||||
|
|
||||||
|
private:
|
||||||
|
CMakeSpecificSettings * const m_settings;
|
||||||
|
QPointer<CMakeSpecificSettingWidget> m_widget;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
83
src/plugins/cmakeprojectmanager/cmakespecificsettingspage.ui
Normal file
83
src/plugins/cmakeprojectmanager/cmakespecificsettingspage.ui
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>CMakeProjectManager::Internal::CMakeSpecificSettingForm</class>
|
||||||
|
<widget class="QWidget" name="CMakeProjectManager::Internal::CMakeSpecificSettingForm">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>852</width>
|
||||||
|
<height>567</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string notr="true">Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Determines whether file paths are copied to the clipboard for pasting to the CMakeLists.txt file when you add new files to CMake projects.</string>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Adding Files</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="alwaysAskRadio">
|
||||||
|
<property name="text">
|
||||||
|
<string>Ask about copying file paths</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">newFileAddedCopyToCpliSettingGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="neverCopyRadio">
|
||||||
|
<property name="text">
|
||||||
|
<string>Do not copy file paths</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">newFileAddedCopyToCpliSettingGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="alwaysCopyRadio">
|
||||||
|
<property name="text">
|
||||||
|
<string>Copy file paths</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">newFileAddedCopyToCpliSettingGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
<buttongroups>
|
||||||
|
<buttongroup name="newFileAddedCopyToCpliSettingGroup"/>
|
||||||
|
</buttongroups>
|
||||||
|
</ui>
|
Binary file not shown.
After Width: | Height: | Size: 514 B |
Reference in New Issue
Block a user