X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fignorelistsettingspage.cpp;h=61f0864565837d1c8d7b72b776c0deca510cd469;hp=62dfc889c74e8dc15aaf7b598cb15e8a23aecca4;hb=f19fea582ace1d8f3dfe29c1096c48758079e56e;hpb=7203282c4d87cbe21cc07b4c4a652110ae84c4a9 diff --git a/src/qtui/settingspages/ignorelistsettingspage.cpp b/src/qtui/settingspages/ignorelistsettingspage.cpp index 62dfc889..61f08645 100644 --- a/src/qtui/settingspages/ignorelistsettingspage.cpp +++ b/src/qtui/settingspages/ignorelistsettingspage.cpp @@ -27,7 +27,7 @@ #include #include #include - +#include #include "iconloader.h" IgnoreListSettingsPage::IgnoreListSettingsPage(QWidget *parent) @@ -72,6 +72,8 @@ IgnoreListSettingsPage::~IgnoreListSettingsPage() { void IgnoreListSettingsPage::load() { if(_ignoreListModel.configChanged()) _ignoreListModel.revert(); + ui.ignoreListView->selectionModel()->reset(); + ui.editIgnoreRuleButton->setEnabled(false); } void IgnoreListSettingsPage::defaults() { @@ -82,6 +84,8 @@ void IgnoreListSettingsPage::save() { if(_ignoreListModel.configChanged()) { _ignoreListModel.commit(); } + ui.ignoreListView->selectionModel()->reset(); + ui.editIgnoreRuleButton->setEnabled(false); } void IgnoreListSettingsPage::enableDialog(bool enabled) { @@ -102,8 +106,18 @@ void IgnoreListSettingsPage::deleteSelectedIgnoreRule() { _ignoreListModel.removeIgnoreRule(ui.ignoreListView->selectionModel()->selectedIndexes()[0].row()); } -void IgnoreListSettingsPage::newIgnoreRule() { - IgnoreListEditDlg *dlg = new IgnoreListEditDlg(-1, IgnoreListManager::IgnoreListItem(), this); +void IgnoreListSettingsPage::newIgnoreRule(QString rule) { + IgnoreListManager::IgnoreListItem newItem = IgnoreListManager::IgnoreListItem(); + newItem.isActive = true; + bool enableOkButton = false; + if(!rule.isEmpty()) { + // we're called from contextmenu + newItem.ignoreRule = rule; + enableOkButton = true; + } + + IgnoreListEditDlg *dlg = new IgnoreListEditDlg(newItem, this, enableOkButton); + dlg->enableOkButton(enableOkButton); while(dlg->exec() == QDialog::Accepted) { if(!_ignoreListModel.newIgnoreRule(dlg->ignoreListItem())) { @@ -117,7 +131,7 @@ void IgnoreListSettingsPage::newIgnoreRule() { IgnoreListManager::IgnoreListItem item = dlg->ignoreListItem(); delete dlg; - dlg = new IgnoreListEditDlg(-1, item, this); + dlg = new IgnoreListEditDlg(item, this); } else { break; @@ -130,13 +144,24 @@ void IgnoreListSettingsPage::editSelectedIgnoreRule() { if(!ui.ignoreListView->selectionModel()->hasSelection()) return; int row = ui.ignoreListView->selectionModel()->selectedIndexes()[0].row(); - IgnoreListEditDlg dlg(row, _ignoreListModel.ignoreListItemAt(row), this); + IgnoreListEditDlg dlg(_ignoreListModel.ignoreListItemAt(row), this); dlg.setAttribute(Qt::WA_DeleteOnClose, false); if(dlg.exec() == QDialog::Accepted) { _ignoreListModel.setIgnoreListItemAt(row, dlg.ignoreListItem()); } } +void IgnoreListSettingsPage::editIgnoreRule(const QString &ignoreRule) { + ui.ignoreListView->selectionModel()->select(_ignoreListModel.indexOf(ignoreRule), QItemSelectionModel::Select); + if(ui.ignoreListView->selectionModel()->hasSelection())// && ui.ignoreListView->selectionModel()->selectedIndexes()[0].row() != -1) + editSelectedIgnoreRule(); + else + newIgnoreRule(ignoreRule); +} + +/* + IgnoreListDelegate +*/ void IgnoreListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if(index.column() == 0) { QStyle *style = QApplication::style(); @@ -155,12 +180,41 @@ void IgnoreListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op QStyledItemDelegate::paint(painter, option, index); } -IgnoreListEditDlg::IgnoreListEditDlg(int row, const IgnoreListManager::IgnoreListItem &item, QWidget *parent) - : QDialog(parent), _selectedRow(row), _ignoreListItem(item), _hasChanged(false) { +// provide interactivity for the checkboxes +bool IgnoreListDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, + const QStyleOptionViewItem &option, const QModelIndex &index) { + Q_UNUSED(option) + switch(event->type()) { + case QEvent::MouseButtonRelease: + model->setData(index, !index.data().toBool()); + return true; + // don't show the default editor for the column + case QEvent::MouseButtonDblClick: + return true; + default: + return false; + } +} + +/* + IgnoreListEditDlg +*/ +IgnoreListEditDlg::IgnoreListEditDlg(const IgnoreListManager::IgnoreListItem &item, QWidget *parent, bool enabled) + : QDialog(parent), _ignoreListItem(item), _hasChanged(enabled) { ui.setupUi(this); setAttribute(Qt::WA_DeleteOnClose, false); setModal(true); + // setup buttongroups + // this could be moved to .ui file with qt4.5 + _typeButtonGroup.addButton(ui.senderTypeButton, 0); + _typeButtonGroup.addButton(ui.messageTypeButton, 1); + _strictnessButtonGroup.addButton(ui.dynamicStrictnessButton, 0); + _strictnessButtonGroup.addButton(ui.permanentStrictnessButton, 1); + _scopeButtonGroup.addButton(ui.globalScopeButton, 0); + _scopeButtonGroup.addButton(ui.networkScopeButton, 1); + _scopeButtonGroup.addButton(ui.channelScopeButton, 2); + ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); ui.ignoreRuleLineEdit->setText(item.ignoreRule); @@ -199,11 +253,9 @@ IgnoreListEditDlg::IgnoreListEditDlg(int row, const IgnoreListManager::IgnoreLis connect(ui.ignoreRuleLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(widgetHasChanged())); connect(ui.scopeRuleTextEdit, SIGNAL(textChanged()), this, SLOT(widgetHasChanged())); - connect(ui.typeButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(widgetHasChanged())); - connect(ui.strictnessButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(widgetHasChanged())); - connect(ui.scopeButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(widgetHasChanged())); - connect(ui.typeButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(widgetHasChanged())); - connect(ui.isRegExCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetHasChanged())); + connect(&_typeButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(widgetHasChanged())); + connect(&_strictnessButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(widgetHasChanged())); + connect(&_scopeButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(widgetHasChanged())); connect(ui.isRegExCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.isActiveCheckBox, SIGNAL(stateChanged(int)), this, SLOT(widgetHasChanged())); @@ -257,18 +309,6 @@ void IgnoreListEditDlg::widgetHasChanged() { ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(_hasChanged); } -// provide interactivity for the checkboxes -bool IgnoreListDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, - const QStyleOptionViewItem &option, const QModelIndex &index) { - Q_UNUSED(option) - switch(event->type()) { - case QEvent::MouseButtonRelease: - model->setData(index, !index.data().toBool()); - return true; - // don't show the default editor for the column - case QEvent::MouseButtonDblClick: - return true; - default: - return false; - } +void IgnoreListEditDlg::enableOkButton(bool state) { + ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(state); }