/* * Copyright (c) 2012 Maciej Niedzielski * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ /* * Copyright (c) 2014-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include namespace Swift { class SettingsProvider; class Highlighter; class HighlightManager { public: class HighlightRulesList { public: friend class HighlightManager; size_t getSize() const { return list_.size(); } const HighlightRule& getRule(const size_t index) const { return list_[index]; } void addRule(const HighlightRule& rule) { list_.push_back(rule); } void combineRules(const HighlightRulesList& rhs) { list_.insert(list_.end(), rhs.list_.begin(), rhs.list_.end()); } void setRule(const size_t index, const HighlightRule& rule) { list_[index] = rule; } private: std::vector list_; }; HighlightManager(SettingsProvider* settings); Highlighter* createHighlighter(); std::shared_ptr getRules() const { return rules_; } bool isDefaultRulesList() const; void resetToDefaultRulesList(); HighlightRule getRule(int index) const; void setRule(int index, const HighlightRule& rule); void insertRule(int index, const HighlightRule& rule); void removeRule(int index); void swapRules(const size_t first, const size_t second); void storeSettings(); void loadSettings(); boost::signals2::signal onHighlight; private: void handleSettingChanged(const std::string& settingPath); std::string rulesToString() const; static std::vector getDefaultRules(); private: SettingsProvider* settings_; bool storingSettings_; std::shared_ptr rules_; boost::signals2::scoped_connection handleSettingChangedConnection_; }; typedef std::shared_ptr HighlightRulesListPtr; }