X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fqtui%2Fsettingspages%2Fcorehighlightsettingspage.cpp;h=9d2f155bcf867543cffccdc63be080536a433d1f;hb=cefad53d40b08c4271a2150533b747c3ca64b735;hp=8368953ee74b800617d4ab220baab330adc4bc79;hpb=6ff3bc425de913a850d906c8fcb1c8088c10c1fd;p=quassel.git diff --git a/src/qtui/settingspages/corehighlightsettingspage.cpp b/src/qtui/settingspages/corehighlightsettingspage.cpp index 8368953e..9d2f155b 100644 --- a/src/qtui/settingspages/corehighlightsettingspage.cpp +++ b/src/qtui/settingspages/corehighlightsettingspage.cpp @@ -24,6 +24,7 @@ #include "client.h" #include "corehighlightsettingspage.h" +#include "icon.h" #include "qtui.h" CoreHighlightSettingsPage::CoreHighlightSettingsPage(QWidget *parent) @@ -90,7 +91,7 @@ CoreHighlightSettingsPage::CoreHighlightSettingsPage(QWidget *parent) connect(Client::instance(), SIGNAL(connected()), this, SLOT(clientConnected())); // Warning icon - ui.coreUnsupportedIcon->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(16)); + ui.coreUnsupportedIcon->setPixmap(icon::get("dialog-warning").pixmap(16)); // Set up client/monolithic remote highlights information if (Quassel::runMode() == Quassel::Monolithic) { @@ -110,6 +111,7 @@ CoreHighlightSettingsPage::CoreHighlightSettingsPage(QWidget *parent) } } + void CoreHighlightSettingsPage::coreConnectionStateChanged(bool state) { updateCoreSupportStatus(state); @@ -121,6 +123,7 @@ void CoreHighlightSettingsPage::coreConnectionStateChanged(bool state) } } + void CoreHighlightSettingsPage::setupRuleTable(QTableWidget *table) const { table->verticalHeader()->hide(); @@ -196,6 +199,7 @@ void CoreHighlightSettingsPage::setupRuleTable(QTableWidget *table) const #endif } + void CoreHighlightSettingsPage::updateCoreSupportStatus(bool state) { // Assume connected state as enforced by the settings page UI @@ -211,11 +215,13 @@ void CoreHighlightSettingsPage::updateCoreSupportStatus(bool state) } } + void CoreHighlightSettingsPage::clientConnected() { connect(Client::highlightRuleManager(), SIGNAL(updated()), SLOT(revert())); } + void CoreHighlightSettingsPage::revert() { if (!hasChanged()) @@ -225,11 +231,13 @@ void CoreHighlightSettingsPage::revert() load(); } + bool CoreHighlightSettingsPage::hasDefaults() const { return true; } + void CoreHighlightSettingsPage::defaults() { int highlightNickType = HighlightRuleManager::HighlightNickType::CurrentNick; @@ -242,11 +250,16 @@ void CoreHighlightSettingsPage::defaults() widgetHasChanged(); } -void CoreHighlightSettingsPage::addNewHighlightRow(bool enable, const QString &name, bool regex, bool cs, + +void CoreHighlightSettingsPage::addNewHighlightRow(bool enable, int id, const QString &name, bool regex, bool cs, const QString &sender, const QString &chanName, bool self) { ui.highlightTable->setRowCount(ui.highlightTable->rowCount() + 1); + if (id < 0) { + id = nextId(); + } + auto *nameItem = new QTableWidgetItem(name); auto *regexItem = new QTableWidgetItem(""); @@ -321,14 +334,19 @@ void CoreHighlightSettingsPage::addNewHighlightRow(bool enable, const QString &n if (!self) ui.highlightTable->setCurrentItem(nameItem); - highlightList << HighlightRuleManager::HighlightRule(name, regex, cs, enable, false, sender, chanName); + highlightList << HighlightRuleManager::HighlightRule(id, name, regex, cs, enable, false, sender, chanName); } -void CoreHighlightSettingsPage::addNewIgnoredRow(bool enable, const QString &name, bool regex, bool cs, + +void CoreHighlightSettingsPage::addNewIgnoredRow(bool enable, int id, const QString &name, bool regex, bool cs, const QString &sender, const QString &chanName, bool self) { ui.ignoredTable->setRowCount(ui.ignoredTable->rowCount() + 1); + if (id < 0) { + id = nextId(); + } + auto *nameItem = new QTableWidgetItem(name); auto *regexItem = new QTableWidgetItem(""); @@ -391,9 +409,10 @@ void CoreHighlightSettingsPage::addNewIgnoredRow(bool enable, const QString &nam if (!self) ui.ignoredTable->setCurrentItem(nameItem); - ignoredList << HighlightRuleManager::HighlightRule(name, regex, cs, enable, true, sender, chanName); + ignoredList << HighlightRuleManager::HighlightRule(id, name, regex, cs, enable, true, sender, chanName); } + void CoreHighlightSettingsPage::removeSelectedHighlightRows() { QList selectedRows; @@ -412,6 +431,7 @@ void CoreHighlightSettingsPage::removeSelectedHighlightRows() } } + void CoreHighlightSettingsPage::removeSelectedIgnoredRows() { QList selectedRows; @@ -430,12 +450,15 @@ void CoreHighlightSettingsPage::removeSelectedIgnoredRows() } } -void CoreHighlightSettingsPage::highlightNicksChanged(const int index) { + +void CoreHighlightSettingsPage::highlightNicksChanged(const int index) +{ // Only allow toggling "Case sensitive" when a nickname will be highlighted auto highlightNickType = ui.highlightNicksComboBox->itemData(index).value(); ui.nicksCaseSensitive->setEnabled(highlightNickType != HighlightRuleManager::NoNick); } + void CoreHighlightSettingsPage::selectHighlightRow(QTableWidgetItem *item) { int row = item->row(); @@ -445,6 +468,7 @@ void CoreHighlightSettingsPage::selectHighlightRow(QTableWidgetItem *item) selected); } + void CoreHighlightSettingsPage::selectIgnoredRow(QTableWidgetItem *item) { int row = item->row(); @@ -454,6 +478,7 @@ void CoreHighlightSettingsPage::selectIgnoredRow(QTableWidgetItem *item) selected); } + void CoreHighlightSettingsPage::emptyHighlightTable() { // ui.highlight and highlightList should have the same size, but just to make sure. @@ -466,6 +491,7 @@ void CoreHighlightSettingsPage::emptyHighlightTable() highlightList.clear(); } + void CoreHighlightSettingsPage::emptyIgnoredTable() { // ui.highlight and highlightList should have the same size, but just to make sure. @@ -478,6 +504,7 @@ void CoreHighlightSettingsPage::emptyIgnoredTable() ignoredList.clear(); } + void CoreHighlightSettingsPage::highlightTableChanged(QTableWidgetItem *item) { if (item->row() + 1 > highlightList.size()) @@ -516,6 +543,7 @@ void CoreHighlightSettingsPage::highlightTableChanged(QTableWidgetItem *item) emit widgetHasChanged(); } + void CoreHighlightSettingsPage::ignoredTableChanged(QTableWidgetItem *item) { if (item->row() + 1 > ignoredList.size()) @@ -554,6 +582,7 @@ void CoreHighlightSettingsPage::ignoredTableChanged(QTableWidgetItem *item) emit widgetHasChanged(); } + void CoreHighlightSettingsPage::load() { emptyHighlightTable(); @@ -564,6 +593,7 @@ void CoreHighlightSettingsPage::load() for (auto &rule : ruleManager->highlightRuleList()) { if (rule.isInverse) { addNewIgnoredRow(rule.isEnabled, + rule.id, rule.name, rule.isRegEx, rule.isCaseSensitive, @@ -571,7 +601,7 @@ void CoreHighlightSettingsPage::load() rule.chanName); } else { - addNewHighlightRow(rule.isEnabled, rule.name, rule.isRegEx, rule.isCaseSensitive, rule.sender, + addNewHighlightRow(rule.isEnabled, rule.id, rule.name, rule.isRegEx, rule.isCaseSensitive, rule.sender, rule.chanName); } } @@ -589,6 +619,7 @@ void CoreHighlightSettingsPage::load() } } + void CoreHighlightSettingsPage::save() { if (!hasChanged()) @@ -606,12 +637,12 @@ void CoreHighlightSettingsPage::save() clonedManager.clear(); for (auto &rule : highlightList) { - clonedManager.addHighlightRule(rule.name, rule.isRegEx, rule.isCaseSensitive, rule.isEnabled, false, + clonedManager.addHighlightRule(rule.id, rule.name, rule.isRegEx, rule.isCaseSensitive, rule.isEnabled, false, rule.sender, rule.chanName); } for (auto &rule : ignoredList) { - clonedManager.addHighlightRule(rule.name, rule.isRegEx, rule.isCaseSensitive, rule.isEnabled, true, + clonedManager.addHighlightRule(rule.id, rule.name, rule.isRegEx, rule.isCaseSensitive, rule.isEnabled, true, rule.sender, rule.chanName); } @@ -625,11 +656,32 @@ void CoreHighlightSettingsPage::save() load(); } + +int CoreHighlightSettingsPage::nextId() +{ + int max = 0; + for (int i = 0; i < highlightList.count(); i++) { + int id = highlightList[i].id; + if (id > max) { + max = id; + } + } + for (int i = 0; i < ignoredList.count(); i++) { + int id = ignoredList[i].id; + if (id > max) { + max = id; + } + } + return max + 1; +} + + void CoreHighlightSettingsPage::widgetHasChanged() { setChangedState(true); } + void CoreHighlightSettingsPage::on_coreUnsupportedDetails_clicked() { // Re-use translations of "Local Highlights" as this is a word-for-word reference, forcing all @@ -649,7 +701,9 @@ void CoreHighlightSettingsPage::on_coreUnsupportedDetails_clicked() remoteHighlightsMsgText); } -void CoreHighlightSettingsPage::importRules() { + +void CoreHighlightSettingsPage::importRules() +{ NotificationSettings notificationSettings; const auto localHighlightList = notificationSettings.highlightList(); @@ -684,6 +738,11 @@ void CoreHighlightSettingsPage::importRules() { return; } + if (hasChanged()) { + // Save existing changes first to avoid overwriting them + save(); + } + auto clonedManager = HighlightRuleManager(); clonedManager.fromVariantMap(Client::highlightRuleManager()->toVariantMap()); @@ -691,6 +750,7 @@ void CoreHighlightSettingsPage::importRules() { auto highlightRule = variant.toMap(); clonedManager.addHighlightRule( + clonedManager.nextId(), highlightRule["Name"].toString(), highlightRule["RegEx"].toBool(), highlightRule["CS"].toBool(), @@ -712,7 +772,9 @@ void CoreHighlightSettingsPage::importRules() { ).arg(QString::number(localHighlightList.count()))); } -bool CoreHighlightSettingsPage::isSelectable() const { + +bool CoreHighlightSettingsPage::isSelectable() const +{ return Client::isConnected(); // We check for Quassel::Feature::CoreSideHighlights when loading this page, allowing us to show // a friendly error message.