diff options
author | Richard Maudsley <richard.maudsley@isode.com> | 2014-01-23 11:51:53 (GMT) |
---|---|---|
committer | Richard Maudsley <richard.maudsley@isode.com> | 2014-01-23 11:51:53 (GMT) |
commit | 3a41fca4c1c2423c1f13cc3c77f9a70f767ae2dc (patch) | |
tree | 471bb5460ac2f23647282a7e6d37846953ea994d /Swift/Controllers/HighlightManager.cpp | |
parent | d773cc196eb63618fe0c426d4eafd7fe8ec69873 (diff) | |
download | swift-3a41fca4c1c2423c1f13cc3c77f9a70f767ae2dc.zip swift-3a41fca4c1c2423c1f13cc3c77f9a70f767ae2dc.tar.bz2 |
Preventing stale highlight rules by creating list encapsulation.
Change-Id: I8f95d6bfd769fb104d972bd1cabfeb3ad79d308b
Diffstat (limited to 'Swift/Controllers/HighlightManager.cpp')
-rw-r--r-- | Swift/Controllers/HighlightManager.cpp | 52 |
1 files changed, 22 insertions, 30 deletions
diff --git a/Swift/Controllers/HighlightManager.cpp b/Swift/Controllers/HighlightManager.cpp index 17ce776..2d597a7 100644 --- a/Swift/Controllers/HighlightManager.cpp +++ b/Swift/Controllers/HighlightManager.cpp @@ -43,6 +43,7 @@ HighlightManager::HighlightManager(SettingsProvider* settings) : settings_(settings) , storingSettings_(false) { + rules_ = boost::make_shared<HighlightRulesList>(); loadSettings(); settings_->onSettingChanged.connect(boost::bind(&HighlightManager::handleSettingChanged, this, _1)); } @@ -58,26 +59,10 @@ std::string HighlightManager::rulesToString() const { std::stringstream stream; boost::archive::text_oarchive archive(stream); - archive << rules_; + archive << rules_->list_; return stream.str(); } -std::vector<HighlightRule> HighlightManager::rulesFromString(const std::string& rulesString) -{ - std::vector<HighlightRule> rules; - if (rulesString.length()) { - std::stringstream stream; - stream << rulesString; - try { - boost::archive::text_iarchive archive(stream); - archive >> rules; - } catch (boost::archive::archive_exception&) { - /* archive corrupted */ - } - } - return rules; -} - std::vector<HighlightRule> HighlightManager::getDefaultRules() { std::vector<HighlightRule> rules; @@ -90,29 +75,26 @@ std::vector<HighlightRule> HighlightManager::getDefaultRules() HighlightRule HighlightManager::getRule(int index) const { - assert(index >= 0 && static_cast<size_t>(index) < rules_.size()); - return rules_[static_cast<size_t>(index)]; + assert(index >= 0 && static_cast<size_t>(index) < rules_->getSize()); + return rules_->getRule(static_cast<size_t>(index)); } void HighlightManager::setRule(int index, const HighlightRule& rule) { - assert(index >= 0 && static_cast<size_t>(index) < rules_.size()); - rules_[static_cast<size_t>(index)] = rule; - //storeSettings(); + assert(index >= 0 && static_cast<size_t>(index) < rules_->getSize()); + rules_->list_[static_cast<size_t>(index)] = rule; } void HighlightManager::insertRule(int index, const HighlightRule& rule) { - assert(index >= 0 && boost::numeric_cast<std::vector<std::string>::size_type>(index) <= rules_.size()); - rules_.insert(rules_.begin() + index, rule); - //storeSettings(); + assert(index >= 0 && boost::numeric_cast<std::vector<std::string>::size_type>(index) <= rules_->getSize()); + rules_->list_.insert(rules_->list_.begin() + index, rule); } void HighlightManager::removeRule(int index) { - assert(index >= 0 && boost::numeric_cast<std::vector<std::string>::size_type>(index) < rules_.size()); - rules_.erase(rules_.begin() + index); - //storeSettings(); + assert(index >= 0 && boost::numeric_cast<std::vector<std::string>::size_type>(index) < rules_->getSize()); + rules_->list_.erase(rules_->list_.begin() + index); } void HighlightManager::storeSettings() @@ -124,8 +106,18 @@ void HighlightManager::storeSettings() void HighlightManager::loadSettings() { - std::string highlightRules = settings_->getSetting(SettingConstants::HIGHLIGHT_RULES); - rules_ = rulesFromString(highlightRules); + std::string rulesString = settings_->getSetting(SettingConstants::HIGHLIGHT_RULES); + + if (rulesString.length()) { + std::stringstream stream; + stream << rulesString; + try { + boost::archive::text_iarchive archive(stream); + archive >> rules_->list_; + } catch (boost::archive::archive_exception&) { + /* archive corrupted */ + } + } } Highlighter* HighlightManager::createHighlighter() |