#include "client.h"
#include "corehighlightsettingspage.h"
+#include "icon.h"
#include "qtui.h"
CoreHighlightSettingsPage::CoreHighlightSettingsPage(QWidget *parent)
- : SettingsPage(tr("Interface"), tr("Remote Highlights"), parent)
+ : SettingsPage(tr("Interface"),
+ // In Monolithic mode, local highlights are replaced by remote highlights
+ Quassel::runMode() == Quassel::Monolithic ?
+ tr("Highlights") : tr("Remote Highlights"),
+ parent)
{
ui.setupUi(this);
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) {
+ // We're running in Monolithic mode, local highlights are considered legacy
+ ui.highlightImport->setText(tr("Import Legacy"));
+ ui.highlightImport->setToolTip(tr("Import highlight rules configured in <i>%1</i>.")
+ .arg(tr("Legacy Highlights").replace(" ", " ")));
+ // Re-use translations of "Legacy Highlights" as this is a word-for-word reference, forcing
+ // all spaces to be non-breaking
+ } else {
+ // We're running in client/split mode, local highlights are distinguished from remote
+ ui.highlightImport->setText(tr("Import Local"));
+ ui.highlightImport->setToolTip(tr("Import highlight rules configured in <i>%1</i>.")
+ .arg(tr("Local Highlights").replace(" ", " ")));
+ // Re-use translations of "Local Highlights" as this is a word-for-word reference, forcing
+ // all spaces to be non-breaking
+ }
}
void CoreHighlightSettingsPage::coreConnectionStateChanged(bool state)
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("");
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("");
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()
for (auto &rule : ruleManager->highlightRuleList()) {
if (rule.isInverse) {
addNewIgnoredRow(rule.isEnabled,
+ rule.id,
rule.name,
rule.isRegEx,
rule.isCaseSensitive,
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);
}
}
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);
}
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);
const auto localHighlightList = notificationSettings.highlightList();
- // Re-use translations of "Local Highlights" as this is a word-for-word reference, forcing all
- // spaces to non-breaking
- const QString localHighlightsName = tr("Local Highlights").replace(" ", " ");
+ // Re-use translations of "Legacy/Local Highlights" as this is a word-for-word reference,
+ // forcing all spaces to non-breaking
+ QString localHighlightsName;
+ if (Quassel::runMode() == Quassel::Monolithic) {
+ localHighlightsName = tr("Legacy Highlights").replace(" ", " ");
+ } else {
+ localHighlightsName = tr("Local Highlights").replace(" ", " ");
+ }
if (localHighlightList.count() == 0) {
// No highlight rules exist to import, do nothing
QMessageBox::information(this,
- tr("No local highlights"),
+ tr("No highlights to import"),
tr("No highlight rules in <i>%1</i>."
).arg(localHighlightsName));
return;
}
int ret = QMessageBox::question(this,
- tr("Import local highlights?"),
+ tr("Import highlights?"),
tr("Import all highlight rules from <i>%1</i>?"
).arg(localHighlightsName),
QMessageBox::Yes|QMessageBox::No,
QMessageBox::No);
- if (ret == QMessageBox::No) {
- // Only two options, Yes or No, just return if No
+ if (ret != QMessageBox::Yes) {
+ // Only two options, Yes or No, return if not Yes
return;
}
auto highlightRule = variant.toMap();
clonedManager.addHighlightRule(
+ clonedManager.nextId(),
highlightRule["Name"].toString(),
highlightRule["RegEx"].toBool(),
highlightRule["CS"].toBool(),
// Give a heads-up that all succeeded
QMessageBox::information(this,
- tr("Imported local highlights"),
+ tr("Imported highlights"),
tr("%1 highlight rules successfully imported."
).arg(QString::number(localHighlightList.count())));
}