void CoreHighlightSettingsPage::ignoredTableChanged(QTableWidgetItem *item) { if (item->row() + 1 > ignoredList.size()) return; auto ignoredRule = ignoredList.value(item->row()); switch (item->column()) { case CoreHighlightSettingsPage::EnableColumn: ignoredRule.isEnabled = (item->checkState() == Qt::Checked); break; case CoreHighlightSettingsPage::NameColumn: ignoredRule.name = item->text(); break; case CoreHighlightSettingsPage::RegExColumn: ignoredRule.isRegEx = (item->checkState() == Qt::Checked); break; case CoreHighlightSettingsPage::CsColumn: ignoredRule.isCaseSensitive = (item->checkState() == Qt::Checked); break; case CoreHighlightSettingsPage::SenderColumn: if (!item->text().isEmpty() && item->text().trimmed().isEmpty()) item->setText(""); ignoredRule.sender = item->text(); break; case CoreHighlightSettingsPage::ChanColumn: if (!item->text().isEmpty() && item->text().trimmed().isEmpty()) item->setText(""); ignoredRule.chanName = item->text(); break; } ignoredList[item->row()] = ignoredRule; emit widgetHasChanged(); }
void HighlightSettingsPage::defaults() { ui.highlightNoNick->setChecked(true); ui.nicksCaseSensitive->setChecked(false); emptyTable(); widgetHasChanged(); }
void CoreAccountSettingsPage::on_addAccountButton_clicked() { CoreAccountEditDlg dlg(CoreAccount(), this); if(dlg.exec() == QDialog::Accepted) { AccountId id =model()->createOrUpdateAccount(dlg.account()); ui.accountView->setCurrentIndex(filteredModel()->mapFromSource(model()->accountIndex(id))); widgetHasChanged(); } }
HighlightSettingsPage::HighlightSettingsPage(QWidget *parent) : SettingsPage(tr("Interface"), tr("Highlight"), parent) { ui.setupUi(this); ui.highlightTable->verticalHeader()->hide(); ui.highlightTable->setShowGrid(false); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::RegExColumn)->setToolTip("<b>RegEx</b>: This option determines if the highlight rule should be interpreted as a <b>regular expression</b> or just as a keyword."); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::RegExColumn)->setWhatsThis("<b>RegEx</b>: This option determines if the highlight rule should be interpreted as a <b>regular expression</b> or just as a keyword."); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->setToolTip("<b>CS</b>: This option determines if the highlight rule should be interpreted <b>case sensitive</b>."); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->setWhatsThis("<b>CS</b>: This option determines if the highlight rule should be interpreted <b>case sensitive</b>."); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::ChanColumn)->setToolTip("<b>Channel</b>: This regular expression determines for which <b>channels</b> the highlight rule works. Leave blank to match any channel. Put <b>!</b> in the beginning to negate. Case insensitive."); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::ChanColumn)->setWhatsThis("<b>Channel</b>: This regular expression determines for which <b>channels</b> the highlight rule works. Leave blank to match any channel. Put <b>!</b> in the beginning to negate. Case insensitive."); #if QT_VERSION < 0x050000 ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::NameColumn, QHeaderView::Stretch); ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::RegExColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::CsColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::EnableColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::ChanColumn, QHeaderView::ResizeToContents); #else ui.highlightTable->horizontalHeader()->setSectionResizeMode(HighlightSettingsPage::NameColumn, QHeaderView::Stretch); ui.highlightTable->horizontalHeader()->setSectionResizeMode(HighlightSettingsPage::RegExColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setSectionResizeMode(HighlightSettingsPage::CsColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setSectionResizeMode(HighlightSettingsPage::EnableColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setSectionResizeMode(HighlightSettingsPage::ChanColumn, QHeaderView::ResizeToContents); #endif connect(ui.add, SIGNAL(clicked(bool)), this, SLOT(addNewRow())); connect(ui.remove, SIGNAL(clicked(bool)), this, SLOT(removeSelectedRows())); //TODO: search for a better signal (one that emits everytime a selection has been changed for one item) connect(ui.highlightTable, SIGNAL(itemClicked(QTableWidgetItem *)), this, SLOT(selectRow(QTableWidgetItem *))); connect(ui.highlightAllNicks, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.highlightCurrentNick, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.highlightNoNick, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.nicksCaseSensitive, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.add, SIGNAL(clicked()), this, SLOT(widgetHasChanged())); connect(ui.remove, SIGNAL(clicked()), this, SLOT(widgetHasChanged())); connect(ui.highlightTable, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(tableChanged(QTableWidgetItem *))); }
void IdentityEditWidget::on_deleteNick_clicked() { // no confirmation, since a nickname is really nothing hard to recreate if (ui.nicknameList->selectedItems().count()) { delete ui.nicknameList->takeItem(ui.nicknameList->row(ui.nicknameList->selectedItems()[0])); ui.nicknameList->setCurrentRow(qMin(ui.nicknameList->currentRow()+1, ui.nicknameList->count()-1)); setWidgetStates(); emit widgetHasChanged(); } }
void CoreAccountSettingsPage::on_deleteAccountButton_clicked() { if(!ui.accountView->selectionModel()->selectedIndexes().count()) return; AccountId id = ui.accountView->selectionModel()->selectedIndexes().at(0).data(CoreAccountModel::AccountIdRole).value<AccountId>(); if(id.isValid()) { model()->removeAccount(id); widgetHasChanged(); } }
void IdentityEditWidget::on_nickDown_clicked() { if (!ui.nicknameList->selectedItems().count()) return; int row = ui.nicknameList->row(ui.nicknameList->selectedItems()[0]); if (row < ui.nicknameList->count()-1) { ui.nicknameList->insertItem(row+1, ui.nicknameList->takeItem(row)); ui.nicknameList->setCurrentRow(row+1); setWidgetStates(); emit widgetHasChanged(); } }
void CoreHighlightSettingsPage::defaults() { int highlightNickType = HighlightRuleManager::HighlightNickType::CurrentNick; int defaultIndex = ui.highlightNicksComboBox->findData(QVariant(highlightNickType)); ui.highlightNicksComboBox->setCurrentIndex(defaultIndex); ui.nicksCaseSensitive->setChecked(false); emptyHighlightTable(); emptyIgnoredTable(); widgetHasChanged(); }
void CoreAccountSettingsPage::editAccount(const QModelIndex &index) { if(!index.isValid()) return; CoreAccountEditDlg dlg(model()->account(filteredModel()->mapToSource(index)), this); if(dlg.exec() == QDialog::Accepted) { AccountId id = model()->createOrUpdateAccount(dlg.account()); ui.accountView->setCurrentIndex(filteredModel()->mapFromSource(model()->accountIndex(id))); widgetHasChanged(); } }
void IdentityEditWidget::on_addNick_clicked() { QStringList existing; for (int i = 0; i < ui.nicknameList->count(); i++) existing << ui.nicknameList->item(i)->text(); NickEditDlg dlg(QString(), existing, this); if (dlg.exec() == QDialog::Accepted) { ui.nicknameList->addItem(dlg.nick()); ui.nicknameList->setCurrentRow(ui.nicknameList->count()-1); setWidgetStates(); emit widgetHasChanged(); } }
void IdentityEditWidget::on_clearOrLoadCertButton_clicked() { QSslCertificate cert; if (ui.certOrgLabel->property("sslCert").toByteArray().isEmpty()) cert = certByFilename(QFileDialog::getOpenFileName(this, tr("Load a Certificate"), #if QT_VERSION < 0x050000 QDesktopServices::storageLocation(QDesktopServices::HomeLocation))); #else QStandardPaths::writableLocation(QStandardPaths::HomeLocation))); #endif showCertState(cert); emit widgetHasChanged(); }
void IdentityEditWidget::on_clearOrLoadKeyButton_clicked() { QSslKey key; if (ui.keyTypeLabel->property("sslKey").toByteArray().isEmpty()) key = keyByFilename(QFileDialog::getOpenFileName(this, tr("Load a Key"), #if QT_VERSION < 0x050000 QDesktopServices::storageLocation(QDesktopServices::HomeLocation))); #else QStandardPaths::writableLocation(QStandardPaths::HomeLocation))); #endif showKeyState(key); emit widgetHasChanged(); }
AppearanceSettingsPage::AppearanceSettingsPage(QWidget *parent) : SettingsPage(tr("Interface"), QString(), parent) { ui.setupUi(this); #ifdef QT_NO_SYSTEMTRAYICON ui.useSystemTrayIcon->hide(); #endif initAutoWidgets(); initStyleComboBox(); initLanguageComboBox(); initIconThemeComboBox(); foreach(QComboBox *comboBox, findChildren<QComboBox *>()) { connect(comboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(widgetHasChanged())); }
void IdentityEditWidget::sslDropEvent(QDropEvent *event, bool isCert) { QByteArray rawUris; if (event->mimeData()->hasFormat("text/uri-list")) rawUris = event->mimeData()->data("text/uri-list"); else rawUris = event->mimeData()->data("text/uri"); QTextStream uriStream(rawUris); QString filename = QUrl(uriStream.readLine()).toLocalFile(); if (isCert) { QSslCertificate cert = certByFilename(filename); if (!cert.isNull()) showCertState(cert); } else { QSslKey key = keyByFilename(filename); if (!key.isNull()) showKeyState(key); } event->accept(); emit widgetHasChanged(); }
foreach(QCheckBox *checkBox, findChildren<QCheckBox *>()) { connect(checkBox, SIGNAL(clicked()), this, SLOT(widgetHasChanged())); }
HighlightSettingsPage::HighlightSettingsPage(QWidget *parent) : SettingsPage(tr("Interface"), // In Monolithic mode, local highlights are replaced by remote highlights Quassel::runMode() == Quassel::Monolithic ? tr("Legacy Highlights") : tr("Local Highlights"), parent) { ui.setupUi(this); ui.highlightTable->verticalHeader()->hide(); ui.highlightTable->setShowGrid(false); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::EnableColumn)->setToolTip( tr("Enable/disable this rule")); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::EnableColumn)->setWhatsThis( ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::EnableColumn)->toolTip()); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::NameColumn)->setToolTip( tr("Phrase to match")); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::NameColumn)->setWhatsThis( ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::NameColumn)->toolTip()); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::RegExColumn)->setToolTip( tr("<b>RegEx</b>: This option determines if the highlight rule and <i>Channel</i> " "should be interpreted as <b>regular expressions</b> or just as keywords.")); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::RegExColumn)->setWhatsThis( ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::RegExColumn)->toolTip()); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->setToolTip( tr("<b>CS</b>: This option determines if the highlight rule and <i>Channel</i> " "should be interpreted <b>case sensitive</b>.")); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->setWhatsThis( ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::CsColumn)->toolTip()); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::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>")); ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::ChanColumn)->setWhatsThis( ui.highlightTable->horizontalHeaderItem(HighlightSettingsPage::ChanColumn)->toolTip()); #if QT_VERSION < 0x050000 ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::NameColumn, QHeaderView::Stretch); ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::RegExColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::CsColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::EnableColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setResizeMode(HighlightSettingsPage::ChanColumn, QHeaderView::ResizeToContents); #else ui.highlightTable->horizontalHeader()->setSectionResizeMode(HighlightSettingsPage::NameColumn, QHeaderView::Stretch); ui.highlightTable->horizontalHeader()->setSectionResizeMode(HighlightSettingsPage::RegExColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setSectionResizeMode(HighlightSettingsPage::CsColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setSectionResizeMode(HighlightSettingsPage::EnableColumn, QHeaderView::ResizeToContents); ui.highlightTable->horizontalHeader()->setSectionResizeMode(HighlightSettingsPage::ChanColumn, QHeaderView::ResizeToContents); #endif // Information icon ui.localHighlightsIcon->setPixmap(icon::get("dialog-information").pixmap(16)); // Set up client/monolithic local highlights information if (Quassel::runMode() == Quassel::Monolithic) { // We're running in Monolithic mode, core/client version in total sync. Discourage the use // of local (legacy) highlights as it's identical to setting remote highlights. ui.localHighlightsLabel->setText( tr("Legacy Highlights are replaced by Highlights")); } else { // We're running in client/split mode, allow for splitting the details. ui.localHighlightsLabel->setText(tr("Local Highlights apply to this device only")); } connect(ui.add, SIGNAL(clicked(bool)), this, SLOT(addNewRow())); connect(ui.remove, SIGNAL(clicked(bool)), this, SLOT(removeSelectedRows())); //TODO: search for a better signal (one that emits everytime a selection has been changed for one item) connect(ui.highlightTable, SIGNAL(itemClicked(QTableWidgetItem *)), this, SLOT(selectRow(QTableWidgetItem *))); connect(ui.highlightAllNicks, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.highlightCurrentNick, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.highlightNoNick, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.nicksCaseSensitive, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.add, SIGNAL(clicked()), this, SLOT(widgetHasChanged())); connect(ui.remove, SIGNAL(clicked()), this, SLOT(widgetHasChanged())); connect(ui.highlightTable, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(tableChanged(QTableWidgetItem *))); }
CoreHighlightSettingsPage::CoreHighlightSettingsPage(QWidget *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); setupRuleTable(ui.highlightTable); setupRuleTable(ui.ignoredTable); ui.highlightNicksComboBox->addItem(tr("All Nicks from Identity"), QVariant(HighlightRuleManager::AllNicks)); ui.highlightNicksComboBox->addItem(tr("Current Nick"), QVariant(HighlightRuleManager::CurrentNick)); ui.highlightNicksComboBox->addItem(tr("None"), QVariant(HighlightRuleManager::NoNick)); coreConnectionStateChanged(Client::isConnected()); // need a core connection! connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool))); connect(ui.highlightAdd, SIGNAL(clicked(bool)), this, SLOT(addNewHighlightRow())); connect(ui.highlightRemove, SIGNAL(clicked(bool)), this, SLOT(removeSelectedHighlightRows())); connect(ui.highlightImport, SIGNAL(clicked(bool)), this, SLOT(importRules())); connect(ui.ignoredAdd, SIGNAL(clicked(bool)), this, SLOT(addNewIgnoredRow())); connect(ui.ignoredRemove, SIGNAL(clicked(bool)), this, SLOT(removeSelectedIgnoredRows())); // TODO: search for a better signal (one that emits everytime a selection has been changed for one item) connect(ui.highlightTable, SIGNAL(itemClicked(QTableWidgetItem * )), this, SLOT(selectHighlightRow(QTableWidgetItem * ))); connect(ui.ignoredTable, SIGNAL(itemClicked(QTableWidgetItem * )), this, SLOT(selectIgnoredRow(QTableWidgetItem * ))); // Update the "Case sensitive" checkbox connect(ui.highlightNicksComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(highlightNicksChanged(int))); connect(ui.highlightNicksComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.nicksCaseSensitive, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.highlightAdd, SIGNAL(clicked()), this, SLOT(widgetHasChanged())); connect(ui.highlightRemove, SIGNAL(clicked()), this, SLOT(widgetHasChanged())); connect(ui.ignoredAdd, SIGNAL(clicked()), this, SLOT(widgetHasChanged())); connect(ui.ignoredRemove, SIGNAL(clicked()), this, SLOT(widgetHasChanged())); connect(ui.highlightTable, SIGNAL(itemChanged(QTableWidgetItem * )), this, SLOT(highlightTableChanged(QTableWidgetItem * ))); connect(ui.ignoredTable, SIGNAL(itemChanged(QTableWidgetItem * )), this, SLOT(ignoredTableChanged(QTableWidgetItem * ))); connect(Client::instance(), SIGNAL(connected()), this, SLOT(clientConnected())); // 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 } }
} ui.sendEncoding->model()->sort(0); ui.recvEncoding->model()->sort(0); ui.serverEncoding->model()->sort(0); currentId = 0; setEnabled(Client::isConnected()); // need a core connection! setWidgetStates(); connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool))); connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(clientNetworkAdded(NetworkId))); connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), this, SLOT(clientNetworkRemoved(NetworkId))); connect(Client::instance(), SIGNAL(identityCreated(IdentityId)), this, SLOT(clientIdentityAdded(IdentityId))); connect(Client::instance(), SIGNAL(identityRemoved(IdentityId)), this, SLOT(clientIdentityRemoved(IdentityId))); connect(ui.identityList, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); //connect(ui.randomServer, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.performEdit, SIGNAL(textChanged()), this, SLOT(widgetHasChanged())); connect(ui.autoIdentify, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.autoIdentifyService, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); connect(ui.autoIdentifyPassword, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); connect(ui.sasl, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.saslAccount, SIGNAL(textEdited(QString)), this, SLOT(widgetHasChanged())); connect(ui.saslPassword, SIGNAL(textEdited(QString)), this, SLOT(widgetHasChanged())); connect(ui.useCustomEncodings, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.sendEncoding, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.recvEncoding, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.serverEncoding, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.autoReconnect, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.reconnectInterval, SIGNAL(valueChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.reconnectRetries, SIGNAL(valueChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.unlimitedRetries, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.rejoinOnReconnect, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged()));
void BlankSettingsPage::defaults() { ui.exampleCheckbox->setChecked(true); widgetHasChanged(); }