From edfd69a55e4f52576ab58306da8a82b1df890d5f Mon Sep 17 00:00:00 2001 From: Tobias Markmann Date: Sun, 18 Jan 2015 20:12:02 +0100 Subject: Add "Reset defaults" button to highlight editor window. The button is only shown if the current rules are *not* the default set of rules. Test-Information: Tested on Mac OS X 10.9.5. Change-Id: Ibf1856af04c6bdacf6102d240e6fe5f6071cb46a diff --git a/Swift/Controllers/HighlightAction.cpp b/Swift/Controllers/HighlightAction.cpp index 492d4d2..80d9d85 100644 --- a/Swift/Controllers/HighlightAction.cpp +++ b/Swift/Controllers/HighlightAction.cpp @@ -4,6 +4,12 @@ * See Documentation/Licenses/BSD-simplified.txt for more information. */ +/* + * Copyright (c) 2015 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ + #include namespace Swift { @@ -25,4 +31,32 @@ void HighlightAction::setPlaySound(bool playSound) } } +bool operator ==(HighlightAction const& a, HighlightAction const& b) { + if (a.highlightAllText() != b.highlightAllText()) { + return false; + } + + if (a.getTextColor() != b.getTextColor()) { + return false; + } + + if (a.getTextBackground() != b.getTextBackground()) { + return false; + } + + if (a.playSound() != b.playSound()) { + return false; + } + + if (a.getSoundFile() != b.getSoundFile()) { + return false; + } + + return true; +} + +bool operator !=(HighlightAction const& a, HighlightAction const& b) { + return !(a == b); +} + } diff --git a/Swift/Controllers/HighlightAction.h b/Swift/Controllers/HighlightAction.h index 8136c62..a9e0cee 100644 --- a/Swift/Controllers/HighlightAction.h +++ b/Swift/Controllers/HighlightAction.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2014 Isode Limited. + * Copyright (c) 2014-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -66,6 +66,9 @@ namespace Swift { std::string soundFile_; }; + bool operator ==(HighlightAction const& a, HighlightAction const& b); + bool operator !=(HighlightAction const& a, HighlightAction const& b); + template void HighlightAction::serialize(Archive& ar, const unsigned int /*version*/) { diff --git a/Swift/Controllers/HighlightManager.cpp b/Swift/Controllers/HighlightManager.cpp index ee1e9ed..383f5df 100644 --- a/Swift/Controllers/HighlightManager.cpp +++ b/Swift/Controllers/HighlightManager.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2014 Isode Limited. + * Copyright (c) 2014-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -75,6 +75,7 @@ std::vector HighlightManager::getDefaultRules() HighlightRule r; r.setMatchChat(true); r.getAction().setPlaySound(true); + r.setMatchWholeWords(true); rules.push_back(r); return rules; } @@ -136,4 +137,12 @@ Highlighter* HighlightManager::createHighlighter() return new Highlighter(this); } +bool HighlightManager::isDefaultRulesList() const { + return getDefaultRules() == rules_->list_; +} + +void HighlightManager::resetToDefaultRulesList() { + rules_->list_ = getDefaultRules(); +} + } diff --git a/Swift/Controllers/HighlightManager.h b/Swift/Controllers/HighlightManager.h index 4d94bd2..d37643d 100644 --- a/Swift/Controllers/HighlightManager.h +++ b/Swift/Controllers/HighlightManager.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2014 Isode Limited. + * Copyright (c) 2014-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -48,6 +48,9 @@ namespace Swift { boost::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); diff --git a/Swift/Controllers/HighlightRule.cpp b/Swift/Controllers/HighlightRule.cpp index f1a7cef..40b7560 100644 --- a/Swift/Controllers/HighlightRule.cpp +++ b/Swift/Controllers/HighlightRule.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2014 Isode Limited. + * Copyright (c) 2014-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -149,4 +149,40 @@ bool HighlightRule::isEmpty() const return senders_.empty() && keywords_.empty() && !nickIsKeyword_ && !matchChat_ && !matchMUC_ && action_.isEmpty(); } +bool operator ==(HighlightRule const& a, HighlightRule const& b) { + if (a.getSenders() != b.getSenders()) { + return false; + } + + if (a.getKeywords() != b.getKeywords()) { + return false; + } + + if (a.getNickIsKeyword() != b.getNickIsKeyword()) { + return false; + } + + if (a.getMatchChat() != b.getMatchChat()) { + return false; + } + + if (a.getMatchMUC() != b.getMatchMUC()) { + return false; + } + + if (a.getMatchCase() != b.getMatchCase()) { + return false; + } + + if (a.getMatchWholeWords() != b.getMatchWholeWords()) { + return false; + } + + if (a.getAction() != b.getAction()) { + return false; + } + + return true; +} + } diff --git a/Swift/Controllers/HighlightRule.h b/Swift/Controllers/HighlightRule.h index fdc6109..02b4864 100644 --- a/Swift/Controllers/HighlightRule.h +++ b/Swift/Controllers/HighlightRule.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2014 Isode Limited. + * Copyright (c) 2014-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -84,6 +84,8 @@ namespace Swift { HighlightAction action_; }; + bool operator ==(HighlightRule const& a, HighlightRule const& b); + template void HighlightRule::serialize(Archive& ar, const unsigned int /*version*/) { diff --git a/Swift/QtUI/QtHighlightEditor.cpp b/Swift/QtUI/QtHighlightEditor.cpp index df9f6b2..c6e4319 100644 --- a/Swift/QtUI/QtHighlightEditor.cpp +++ b/Swift/QtUI/QtHighlightEditor.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2014 Isode Limited. + * Copyright (c) 2014-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -38,6 +38,7 @@ QtHighlightEditor::QtHighlightEditor(QtSettingsProvider* settings, QWidget* pare connect(ui_.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), SLOT(onApplyButtonClick())); connect(ui_.buttonBox->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), SLOT(onCancelButtonClick())); connect(ui_.buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), SLOT(onOkButtonClick())); + connect(ui_.buttonBox->button(QDialogButtonBox::RestoreDefaults), SIGNAL(clicked()), SLOT(onResetToDefaultRulesClicked())); connect(ui_.noColorRadio, SIGNAL(clicked()), SLOT(colorOtherSelect())); connect(ui_.customColorRadio, SIGNAL(clicked()), SLOT(colorCustomSelect())); @@ -122,6 +123,8 @@ void QtHighlightEditor::show() selectRow(0); } + updateResetToDefaultRulesVisibility(); + /* prepare default states */ widgetClick(); @@ -246,6 +249,8 @@ void QtHighlightEditor::onCurrentRowChanged(int currentRow) } previousRow_ = currentRow; + + updateResetToDefaultRulesVisibility(); } void QtHighlightEditor::onApplyButtonClick() @@ -350,6 +355,12 @@ void QtHighlightEditor::selectSoundFile() ui_.soundFile->setText(path); } +void QtHighlightEditor::onResetToDefaultRulesClicked() { + highlightManager_->resetToDefaultRulesList(); + populateList(); + updateResetToDefaultRulesVisibility(); +} + void QtHighlightEditor::handleOnUserSelected(const Contact::ref& contact) { /* this might seem like it should be standard behaviour for the suggesting input box, but is not desirable in all cases */ if (contact->jid.isValid()) { @@ -539,4 +550,8 @@ void QtHighlightEditor::ruleToDialog(const HighlightRule& rule) setChildWidgetStates(); } +void QtHighlightEditor::updateResetToDefaultRulesVisibility() { + ui_.buttonBox->button(QDialogButtonBox::RestoreDefaults)->setVisible(!highlightManager_->isDefaultRulesList()); +} + } diff --git a/Swift/QtUI/QtHighlightEditor.h b/Swift/QtUI/QtHighlightEditor.h index ad51820..bcceb72 100644 --- a/Swift/QtUI/QtHighlightEditor.h +++ b/Swift/QtUI/QtHighlightEditor.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2014 Isode Limited. + * Copyright (c) 2014-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -51,6 +51,7 @@ namespace Swift { void disableDialog(); void handleContactSuggestionRequested(const QString& text); void selectSoundFile(); + void onResetToDefaultRulesClicked(); private: void handleOnUserSelected(const Contact::ref& contact); @@ -59,6 +60,7 @@ namespace Swift { int getSelectedRow() const; HighlightRule ruleFromDialog(); void ruleToDialog(const HighlightRule& rule); + void updateResetToDefaultRulesVisibility(); Ui::QtHighlightEditor ui_; QtSettingsProvider* settings_; diff --git a/Swift/QtUI/QtHighlightEditor.ui b/Swift/QtUI/QtHighlightEditor.ui index 775771f..6d2338d 100644 --- a/Swift/QtUI/QtHighlightEditor.ui +++ b/Swift/QtUI/QtHighlightEditor.ui @@ -444,22 +444,9 @@ - - - Qt::Horizontal - - - - 40 - 20 - - - - - - QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults -- cgit v0.10.2-6-g49f6