// 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 #include #include #include #include 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() ? 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.

" "Junctions are stored under C:\\ProgramData\\QtCreator\\Links (overridable via " "the QTC_CMAKE_JUNCTIONS_DIR environment variable).

" "With QTC_CMAKE_JUNCTIONS_HASH_LENGTH, you can shorten the MD5 hash key length " "to a value smaller than the default length value of 32.

" "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