Files
qt-creator/src/plugins/cmakeprojectmanager/cmakespecificsettings.cpp

127 lines
5.3 KiB
C++
Raw Normal View History

// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "cmakespecificsettings.h"
#include "cmakeprojectconstants.h"
#include "cmakeprojectmanagertr.h"
#include <coreplugin/icore.h>
#include <coreplugin/dialogs/ioptionspage.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <utils/hostosinfo.h>
#include <utils/layoutbuilder.h>
using namespace Utils;
namespace CMakeProjectManager::Internal {
CMakeSpecificSettings &settings()
{
static CMakeSpecificSettings theSettings;
return theSettings;
}
CMakeSpecificSettings::CMakeSpecificSettings()
{
setLayouter([this] {
using namespace Layouting;
return Column {
autorunCMake,
packageManagerAutoSetup,
askBeforeReConfigureInitialParams,
askBeforePresetsReload,
showSourceSubFolders,
showAdvancedOptionsByDefault,
useJunctionsForSourceAndBuildDirectories,
st
};
});
// TODO: fixup of QTCREATORBUG-26289 , remove in Qt Creator 7 or so
Core::ICore::settings()->remove("CMakeSpecificSettings/NinjaPath");
setSettingsGroup("CMakeSpecificSettings");
setAutoApply(false);
autorunCMake.setSettingsKey("AutorunCMake");
autorunCMake.setDefaultValue(true);
autorunCMake.setLabelText(::CMakeProjectManager::Tr::tr("Autorun CMake"));
autorunCMake.setToolTip(::CMakeProjectManager::Tr::tr(
"Automatically run CMake after changes to CMake project files."));
ninjaPath.setSettingsKey("NinjaPath");
// never save this to the settings:
ninjaPath.setToSettingsTransformation(
[](const QVariant &) { return QVariant::fromValue(QString()); });
ninjaPath.setFromSettingsTransformation([](const QVariant &from) {
// Sometimes the installer appends the same ninja path to the qtcreator.ini file
const QString path = from.canConvert<QStringList>() ? from.toStringList().last()
: from.toString();
return FilePath::fromUserInput(path).toVariant();
});
packageManagerAutoSetup.setSettingsKey("PackageManagerAutoSetup");
packageManagerAutoSetup.setDefaultValue(true);
packageManagerAutoSetup.setLabelText(::CMakeProjectManager::Tr::tr("Package manager auto setup"));
packageManagerAutoSetup.setToolTip(::CMakeProjectManager::Tr::tr("Add the CMAKE_PROJECT_INCLUDE_BEFORE variable "
"pointing to a CMake script that will install dependencies from the conanfile.txt, "
"conanfile.py, or vcpkg.json file from the project source directory."));
askBeforeReConfigureInitialParams.setSettingsKey("AskReConfigureInitialParams");
askBeforeReConfigureInitialParams.setDefaultValue(true);
askBeforeReConfigureInitialParams.setLabelText(::CMakeProjectManager::Tr::tr("Ask before re-configuring with "
"initial parameters"));
askBeforePresetsReload.setSettingsKey("AskBeforePresetsReload");
askBeforePresetsReload.setDefaultValue(true);
askBeforePresetsReload.setLabelText(::CMakeProjectManager::Tr::tr("Ask before reloading CMake Presets"));
showSourceSubFolders.setSettingsKey("ShowSourceSubFolders");
showSourceSubFolders.setDefaultValue(true);
showSourceSubFolders.setLabelText(
::CMakeProjectManager::Tr::tr("Show subfolders inside source group folders"));
showAdvancedOptionsByDefault.setSettingsKey("ShowAdvancedOptionsByDefault");
showAdvancedOptionsByDefault.setDefaultValue(false);
showAdvancedOptionsByDefault.setLabelText(
::CMakeProjectManager::Tr::tr("Show advanced options by default"));
useJunctionsForSourceAndBuildDirectories.setSettingsKey(
"UseJunctionsForSourceAndBuildDirectories");
useJunctionsForSourceAndBuildDirectories.setDefaultValue(false);
useJunctionsForSourceAndBuildDirectories.setLabelText(::CMakeProjectManager::Tr::tr(
"Use junctions for CMake configuration and build operations"));
useJunctionsForSourceAndBuildDirectories.setVisible(Utils::HostOsInfo().isWindowsHost());
useJunctionsForSourceAndBuildDirectories.setToolTip(::CMakeProjectManager::Tr::tr(
"Create and use junctions for the source and build directories to overcome "
"issues with long paths on Windows.<br><br>"
"Junctions are stored under <tt>C:\\ProgramData\\QtCreator\\Links</tt> (overridable via "
"the <tt>QTC_CMAKE_JUNCTIONS_DIR</tt> environment variable).<br><br>"
"With <tt>QTC_CMAKE_JUNCTIONS_HASH_LENGTH</tt>, you can shorten the MD5 hash key length "
"to a value smaller than the default length value of 32.<br><br>"
"Junctions are used for CMake configure, build and install operations."));
readSettings();
}
class CMakeSpecificSettingsPage final : public Core::IOptionsPage
{
public:
CMakeSpecificSettingsPage()
{
setId(Constants::Settings::GENERAL_ID);
setDisplayName(::CMakeProjectManager::Tr::tr("General"));
setDisplayCategory("CMake");
setCategory(Constants::Settings::CATEGORY);
setCategoryIconPath(Constants::Icons::SETTINGS_CATEGORY);
setSettingsProvider([] { return &settings(); });
}
};
const CMakeSpecificSettingsPage settingsPage;
} // CMakeProjectManager::Internal