+
+ // Warning icon
+ 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)
+{
+ updateCoreSupportStatus(state);
+ setEnabled(state);
+ if (state) {
+ load();
+ } else {
+ revert();
+ }
+}
+
+void CoreHighlightSettingsPage::setupRuleTable(QTableWidget *table) const
+{
+ table->verticalHeader()->hide();
+ table->setShowGrid(false);
+
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::EnableColumn)->setToolTip(
+ tr("Enable/disable this rule"));
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::EnableColumn)->setWhatsThis(
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::EnableColumn)->toolTip());
+
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::NameColumn)->setToolTip(
+ tr("Phrase to match"));
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::NameColumn)->setWhatsThis(
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::NameColumn)->toolTip());
+
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::RegExColumn)->setToolTip(
+ tr("<b>RegEx</b>: This option determines if the highlight rule, <i>Sender</i>, and "
+ "<i>Channel</i> should be interpreted as <b>regular expressions</b> or just as "
+ "keywords."));
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::RegExColumn)->setWhatsThis(
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::RegExColumn)->toolTip());
+
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::CsColumn)->setToolTip(
+ tr("<b>CS</b>: This option determines if the highlight rule, <i>Sender</i>, and "
+ "<i>Channel</i> should be interpreted <b>case sensitive</b>."));
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::CsColumn)->setWhatsThis(
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::CsColumn)->toolTip());
+
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::SenderColumn)->setToolTip(
+ tr("<p><b>Sender</b>: Semicolon separated list of <i>nick!ident@host</i> names, "
+ "leave blank to match any nickname.</p>"
+ "<p><i>Example:</i><br />"
+ "<i>Alice!*; Bob!*@example.com; Carol*!*; !Caroline!*</i><br />"
+ "would match on <i>Alice</i>, <i>Bob</i> with hostmask <i>example.com</i>, and "
+ "any nickname starting with <i>Carol</i> except for <i>Caroline</i><br />"
+ "<p>If only inverted names are specified, it will match anything except for "
+ "what's specified (implicit wildcard).</p>"
+ "<p><i>Example:</i><br />"
+ "<i>!Announce*!*; !Wheatley!aperture@*</i><br />"
+ "would match anything except for <i>Wheatley</i> with ident <i>aperture</i> or "
+ "any nickname starting with <i>Announce</i></p>"));
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::SenderColumn)->setWhatsThis(
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::SenderColumn)->toolTip());
+
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::ChanColumn)->setToolTip(
+ tr("<p><b>Channel</b>: Semicolon separated list of channel names, leave blank to "
+ "match any name.</p>"
+ "<p><i>Example:</i><br />"
+ "<i>#quassel*; #foobar; !#quasseldroid</i><br />"
+ "would match on <i>#foobar</i> and any channel starting with <i>#quassel</i> "
+ "except for <i>#quasseldroid</i><br />"
+ "<p>If only inverted names are specified, it will match anything except for "
+ "what's specified (implicit wildcard).</p>"
+ "<p><i>Example:</i><br />"
+ "<i>!#quassel*; !#foobar</i><br />"
+ "would match anything except for <i>#foobar</i> or any channel starting with "
+ "<i>#quassel</i></p>"));
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::ChanColumn)->setWhatsThis(
+ table->horizontalHeaderItem(CoreHighlightSettingsPage::ChanColumn)->toolTip());
+
+#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
+ table->horizontalHeader()->setResizeMode(CoreHighlightSettingsPage::EnableColumn, QHeaderView::ResizeToContents);
+ table->horizontalHeader()->setResizeMode(CoreHighlightSettingsPage::NameColumn, QHeaderView::Stretch);
+ table->horizontalHeader()->setResizeMode(CoreHighlightSettingsPage::RegExColumn, QHeaderView::ResizeToContents);
+ table->horizontalHeader()->setResizeMode(CoreHighlightSettingsPage::CsColumn, QHeaderView::ResizeToContents);
+ table->horizontalHeader()->setResizeMode(CoreHighlightSettingsPage::ChanColumn, QHeaderView::ResizeToContents);
+#else
+ table->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::EnableColumn, QHeaderView::ResizeToContents);
+ table->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::NameColumn, QHeaderView::Stretch);
+ table->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::RegExColumn, QHeaderView::ResizeToContents);
+ table->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::CsColumn, QHeaderView::ResizeToContents);
+ table->horizontalHeader()->setSectionResizeMode(CoreHighlightSettingsPage::ChanColumn, QHeaderView::ResizeToContents);
+#endif
+}
+
+void CoreHighlightSettingsPage::updateCoreSupportStatus(bool state)
+{
+ // Assume connected state as enforced by the settings page UI
+ if (!state || Client::isCoreFeatureEnabled(Quassel::Feature::CoreSideHighlights)) {
+ // Either disconnected or core supports highlights, enable highlight configuration and hide
+ // warning. Don't show the warning needlessly when disconnected.
+ ui.highlightsConfigWidget->setEnabled(true);
+ ui.coreUnsupportedWidget->setVisible(false);
+ } else {
+ // Core does not support highlights, show warning and disable highlight configuration
+ ui.highlightsConfigWidget->setEnabled(false);
+ ui.coreUnsupportedWidget->setVisible(true);
+ }