#include <QMessageBox>
#include <QString>
#include <QEvent>
-
+#include <QDebug>
#include "iconloader.h"
IgnoreListSettingsPage::IgnoreListSettingsPage(QWidget *parent)
- : SettingsPage(tr("Misc"), tr("Ignorelist"), parent)
+ : SettingsPage(tr("Misc"), tr("Ignore List"), parent)
{
ui.setupUi(this);
_delegate = new IgnoreListDelegate(ui.ignoreListView);
void IgnoreListSettingsPage::load() {
if(_ignoreListModel.configChanged())
_ignoreListModel.revert();
+ ui.ignoreListView->selectionModel()->reset();
+ ui.editIgnoreRuleButton->setEnabled(false);
}
void IgnoreListSettingsPage::defaults() {
if(_ignoreListModel.configChanged()) {
_ignoreListModel.commit();
}
+ ui.ignoreListView->selectionModel()->reset();
+ ui.editIgnoreRuleButton->setEnabled(false);
}
void IgnoreListSettingsPage::enableDialog(bool enabled) {
_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.strictness = IgnoreListManager::SoftStrictness;
+ newItem.scope = IgnoreListManager::GlobalScope;
+ newItem.isRegEx = false;
+ 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())) {
if(QMessageBox::warning(this,
IgnoreListManager::IgnoreListItem item = dlg->ignoreListItem();
delete dlg;
- dlg = new IgnoreListEditDlg(-1, item, this);
+ dlg = new IgnoreListEditDlg(item, this);
}
else {
break;
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();
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);
+ // FIXME patch out the bugger completely if it's good without it
+ ui.isActiveCheckBox->hide();
+
+ // 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);
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()));
connect(ui.buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), this, SLOT(aboutToAccept()));
+ widgetHasChanged();
}
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);
}