#include "settings/ApplicationSettings.h" #include "settings/migration/SettingsMigrator.h" #include "settings/migration/MigrationMoveKey.h" #include "utility/ResourcePaths.h" #include "utility/Status.h" #include "utility/utility.h" #include "utility/UserPaths.h" const size_t ApplicationSettings::VERSION = 2; std::shared_ptr ApplicationSettings::s_instance; std::shared_ptr ApplicationSettings::getInstance() { if (!s_instance) { s_instance = std::shared_ptr(new ApplicationSettings()); } return s_instance; } ApplicationSettings::ApplicationSettings() { } ApplicationSettings::~ApplicationSettings() { } bool ApplicationSettings::load(const FilePath& filePath) { bool loaded = Settings::load(filePath); if (!loaded) { return false; } SettingsMigrator migrator; migrator.addMigration(1, std::make_shared( "source/header_search_paths/header_search_path", "indexing/cxx/header_search_paths/header_search_path" )); migrator.addMigration(1, std::make_shared( "source/framework_search_paths/framework_search_path", "indexing/cxx/framework_search_paths/framework_search_path" )); migrator.addMigration(1, std::make_shared( "application/indexer_thread_count", "indexing/indexer_thread_count" )); migrator.addMigration(2, std::make_shared( "network/coati_port", "network/sourcetrail_port" )); bool migrated = migrator.migrate(this, ApplicationSettings::VERSION); if (migrated) { save(); } return true; } bool ApplicationSettings::operator==(const ApplicationSettings& other) const { return utility::isPermutation(getHeaderSearchPaths(), other.getHeaderSearchPaths()) && utility::isPermutation(getFrameworkSearchPaths(), other.getFrameworkSearchPaths()); } int ApplicationSettings::getMaxRecentProjectsCount() const { return 7; } std::string ApplicationSettings::getFontName() const { return getValue("application/font_name", "Source Code Pro"); } void ApplicationSettings::setFontName(const std::string& fontName) { setValue("application/font_name", fontName); } int ApplicationSettings::getFontSize() const { return getValue("application/font_size", 14); } void ApplicationSettings::setFontSize(int fontSize) { setValue("application/font_size", fontSize); } bool ApplicationSettings::getUseAnimations() const { return getValue("application/use_animations", true); } void ApplicationSettings::setUseAnimations(bool useAnimations) { setValue("application/use_animations", useAnimations); } FilePath ApplicationSettings::getColorSchemePath() const { FilePath defaultPath(ResourcePaths::getColorSchemesPath().concat(FilePath("bright.xml"))); FilePath path(getValue("application/color_scheme", defaultPath.str())); if (path != defaultPath && !path.exists()) { return defaultPath; } return path; } void ApplicationSettings::setColorSchemePath(const FilePath& colorSchemePath) { setValue("application/color_scheme", colorSchemePath.str()); } int ApplicationSettings::getFontSizeMax() const { return getValue("application/font_size_max", 24); } void ApplicationSettings::setFontSizeMax(const int fontSizeMax) { setValue("application/font_size_max", fontSizeMax); } int ApplicationSettings::getFontSizeMin() const { return getValue("application/font_size_min", 4); } void ApplicationSettings::setFontSizeMin(const int fontSizeMin) { setValue("application/font_size_min", fontSizeMin); } int ApplicationSettings::getFontSizeStd() const { return getValue("application/font_size_std", 12); } void ApplicationSettings::setFontSizeStd(const int fontSizeStd) { setValue("application/font_size_std", fontSizeStd); } int ApplicationSettings::getWindowBaseWidth() const { return getValue("application/window_base_width", 500); } int ApplicationSettings::getWindowBaseHeight() const { return getValue("application/window_base_height", 500); } float ApplicationSettings::getScrollSpeed() const { return getValue("application/scroll_speed", 1.0f); } void ApplicationSettings::setScrollSpeed(float scrollSpeed) { setValue("application/scroll_speed", scrollSpeed); } bool ApplicationSettings::getGraphControlsVisible() const { return getValue("application/graph_controls_visible", true); } void ApplicationSettings::setGraphControlsVisible(bool visible) { setValue("application/graph_controls_visible", visible); } bool ApplicationSettings::getLoggingEnabled() const { return getValue("application/logging_enabled", false); } void ApplicationSettings::setLoggingEnabled(bool value) { setValue("application/logging_enabled", value); } bool ApplicationSettings::getVerboseIndexerLoggingEnabled() const { return getValue("application/verbose_indexer_logging_enabled", false); } void ApplicationSettings::setVerboseIndexerLoggingEnabled(bool value) { setValue("application/verbose_indexer_logging_enabled", value); } void ApplicationSettings::setLogFilter(int mask) { setValue("application/log_filter", mask); } void ApplicationSettings::setStatusFilter(int mask) { setValue("application/status_filter", mask); } int ApplicationSettings::getStatusFilter() const { return getValue("application/status_filter", StatusType::STATUS_INFO | StatusType::STATUS_ERROR); } int ApplicationSettings::getLogFilter() const { return getValue("application/log_filter", Logger::LOG_WARNINGS | Logger::LOG_ERRORS); } std::vector ApplicationSettings::getIndexingFilePaths() const { return getPathValues("application/state/indexing_paths/indexing_path"); } bool ApplicationSettings::setIndexingFilePaths(const std::vector& indexingFiles) { return setPathValues("application/state/indexing_paths/indexing_path", indexingFiles); } int ApplicationSettings::getIndexerThreadCount() const { return getValue("indexing/indexer_thread_count", 0); } void ApplicationSettings::setIndexerThreadCount(const int count) { setValue("indexing/indexer_thread_count", count); } bool ApplicationSettings::getMultiProcessIndexingEnabled() const { return getValue("indexing/multi_process_indexing", true); } void ApplicationSettings::setMultiProcessIndexingEnabled(bool enabled) { setValue("indexing/multi_process_indexing", enabled); } std::string ApplicationSettings::getJavaPath() const { return getValue("indexing/java/java_path", ""); } void ApplicationSettings::setJavaPath(const std::string path) { setValue("indexing/java/java_path", path); } int ApplicationSettings::getJavaMaximumMemory() const { return getValue("indexing/java/java_maximum_memory", -1); } void ApplicationSettings::setJavaMaximumMemory(int size) { setValue("indexing/java/java_maximum_memory", size); } FilePath ApplicationSettings::getMavenPath() const { return FilePath(getValue("indexing/java/maven_path", "")); } void ApplicationSettings::setMavenPath(const FilePath& path) { setValue("indexing/java/maven_path", path.str()); } std::vector ApplicationSettings::getHeaderSearchPaths() const { return getPathValues("indexing/cxx/header_search_paths/header_search_path"); } std::vector ApplicationSettings::getHeaderSearchPathsExpanded() const { return expandPaths(getHeaderSearchPaths()); } bool ApplicationSettings::setHeaderSearchPaths(const std::vector& headerSearchPaths) { return setPathValues("indexing/cxx/header_search_paths/header_search_path", headerSearchPaths); } std::vector ApplicationSettings::getFrameworkSearchPaths() const { return getPathValues("indexing/cxx/framework_search_paths/framework_search_path"); } std::vector ApplicationSettings::getFrameworkSearchPathsExpanded() const { return expandPaths(getFrameworkSearchPaths()); } bool ApplicationSettings::setFrameworkSearchPaths(const std::vector& frameworkSearchPaths) { return setPathValues("indexing/cxx/framework_search_paths/framework_search_path", frameworkSearchPaths); } int ApplicationSettings::getCodeTabWidth() const { return getValue("code/tab_width", 4); } void ApplicationSettings::setCodeTabWidth(int codeTabWidth) { setValue("code/tab_width", codeTabWidth); } int ApplicationSettings::getCodeSnippetSnapRange() const { return getValue("code/snippet/snap_range", 4); } void ApplicationSettings::setCodeSnippetSnapRange(int range) { setValue("code/snippet/snap_range", range); } int ApplicationSettings::getCodeSnippetExpandRange() const { return getValue("code/snippet/expand_range", 3); } void ApplicationSettings::setCodeSnippetExpandRange(int range) { setValue("code/snippet/expand_range", range); } bool ApplicationSettings::getCodeViewModeSingle() const { return getValue("code/view_mode_single", false); } void ApplicationSettings::setCodeViewModeSingle(bool enabled) { setValue("code/view_mode_single", enabled); } std::vector ApplicationSettings::getRecentProjects() const { std::vector recentProjects; std::vector loadedRecentProjects = getPathValues("user/recent_projects/recent_project"); for (FilePath project: loadedRecentProjects) { if (project.isAbsolute()) { recentProjects.push_back(project); } else { recentProjects.push_back(UserPaths::getSampleProjectsPath().concat(project)); } } return recentProjects; } bool ApplicationSettings::setRecentProjects(const std::vector &recentProjects) { return setPathValues("user/recent_projects/recent_project", recentProjects); } int ApplicationSettings::getPluginPort() const { return getValue("network/plugin_port", 6666); } void ApplicationSettings::setPluginPort(const int pluginPort) { setValue("network/plugin_port", pluginPort); } int ApplicationSettings::getSourcetrailPort() const { return getValue("network/sourcetrail_port", 6667); } void ApplicationSettings::setSourcetrailPort(const int sourcetrailPort) { setValue("network/sourcetrail_port", sourcetrailPort); } int ApplicationSettings::getControlsMouseBackButton() const { return getValue("controls/mouse_back_button", 0x8); } int ApplicationSettings::getControlsMouseForwardButton() const { return getValue("controls/mouse_forward_button", 0x10); } bool ApplicationSettings::getControlsGraphZoomOnMouseWheel() const { return getValue("controls/graph_zoom_on_mouse_wheel", false); } void ApplicationSettings::setControlsGraphZoomOnMouseWheel(bool zoomingDefault) { setValue("controls/graph_zoom_on_mouse_wheel", zoomingDefault); } std::string ApplicationSettings::getLicenseString() const { return getValue("user/license/license", ""); } std::string ApplicationSettings::getLicenseCheck() const { return getValue("user/license/check", ""); } void ApplicationSettings::setLicenseString(const std::string& licenseString) { setValue("user/license/license", licenseString); } void ApplicationSettings::setLicenseCheck(const std::string& hash) { setValue("user/license/check", hash); }