X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fignorelistmodel.cpp;h=d08a280d18df392008c5992bbc8eefa83425028c;hp=d95db34fd4dacebba1e6386d00063e0783b03ccf;hb=673ded0d543cbdc2cf6e746b6bee7c1d21af8f90;hpb=158443f71d48215eea8b47b836b61afd77654b78 diff --git a/src/qtui/settingspages/ignorelistmodel.cpp b/src/qtui/settingspages/ignorelistmodel.cpp index d95db34f..d08a280d 100644 --- a/src/qtui/settingspages/ignorelistmodel.cpp +++ b/src/qtui/settingspages/ignorelistmodel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2018 by the Quassel Project * + * Copyright (C) 2005-2020 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -21,18 +21,18 @@ #include "ignorelistmodel.h" #include -#include #include +#include #include "client.h" #include "signalproxy.h" -IgnoreListModel::IgnoreListModel(QObject *parent) +IgnoreListModel::IgnoreListModel(QObject* parent) : QAbstractItemModel(parent) { // we need this signal for future connects to reset the data; - connect(Client::instance(), SIGNAL(connected()), this, SLOT(clientConnected())); - connect(Client::instance(), SIGNAL(disconnected()), this, SLOT(clientDisconnected())); + connect(Client::instance(), &Client::connected, this, &IgnoreListModel::clientConnected); + connect(Client::instance(), &Client::disconnected, this, &IgnoreListModel::clientDisconnected); if (Client::isConnected()) clientConnected(); @@ -40,8 +40,7 @@ IgnoreListModel::IgnoreListModel(QObject *parent) emit modelReady(false); } - -QVariant IgnoreListModel::data(const QModelIndex &index, int role) const +QVariant IgnoreListModel::data(const QModelIndex& index, int role) const { if (!_modelReady) return QVariant(); @@ -107,8 +106,7 @@ QVariant IgnoreListModel::data(const QModelIndex &index, int role) const } } - -bool IgnoreListModel::setData(const QModelIndex &index, const QVariant &value, int role) +bool IgnoreListModel::setData(const QModelIndex& index, const QVariant& value, int role) { if (!_modelReady) return false; @@ -125,8 +123,7 @@ bool IgnoreListModel::setData(const QModelIndex &index, const QVariant &value, i cloneIgnoreListManager()[index.row()].setIsEnabled(newValue.toBool()); return true; case 1: - cloneIgnoreListManager()[index.row()].setType( - (IgnoreListManager::IgnoreType)newValue.toInt()); + cloneIgnoreListManager()[index.row()].setType((IgnoreListManager::IgnoreType)newValue.toInt()); return true; case 2: if (ignoreListManager().contains(newValue.toString())) { @@ -141,21 +138,17 @@ bool IgnoreListModel::setData(const QModelIndex &index, const QVariant &value, i } } - -bool IgnoreListModel::newIgnoreRule(const IgnoreListManager::IgnoreListItem &item) +bool IgnoreListModel::newIgnoreRule(const IgnoreListManager::IgnoreListItem& item) { - IgnoreListManager &manager = cloneIgnoreListManager(); + IgnoreListManager& manager = cloneIgnoreListManager(); if (manager.contains(item.contents())) return false; beginInsertRows(QModelIndex(), rowCount(), rowCount()); - // manager.addIgnoreListItem(item); - manager.addIgnoreListItem(item.type(), item.contents(), item.isRegEx(), item.strictness(), - item.scope(), item.scopeRule(), item.isEnabled()); + manager.addIgnoreListItem(item.type(), item.contents(), item.isRegEx(), item.strictness(), item.scope(), item.scopeRule(), item.isEnabled()); endInsertRows(); return true; } - void IgnoreListModel::loadDefaults() { /*if(!_modelReady) @@ -179,20 +172,18 @@ void IgnoreListModel::loadDefaults() endInsertRows();*/ } - void IgnoreListModel::removeIgnoreRule(int index) { if (index < 0 || index >= rowCount()) return; - IgnoreListManager &manager = cloneIgnoreListManager(); + IgnoreListManager& manager = cloneIgnoreListManager(); beginRemoveRows(QModelIndex(), index, index); manager.removeAt(index); endRemoveRows(); } - -Qt::ItemFlags IgnoreListModel::flags(const QModelIndex &index) const +Qt::ItemFlags IgnoreListModel::flags(const QModelIndex& index) const { if (!index.isValid()) { return Qt::ItemIsDropEnabled; @@ -202,13 +193,10 @@ Qt::ItemFlags IgnoreListModel::flags(const QModelIndex &index) const } } - QVariant IgnoreListModel::headerData(int section, Qt::Orientation orientation, int role) const { QStringList header; - header << tr("Enabled") - << tr("Type") - << tr("Ignore Rule"); + header << tr("Enabled") << tr("Type") << tr("Ignore Rule"); if (orientation == Qt::Horizontal && role == Qt::DisplayRole) return header[section]; @@ -216,68 +204,55 @@ QVariant IgnoreListModel::headerData(int section, Qt::Orientation orientation, i return QVariant(); } - -QModelIndex IgnoreListModel::index(int row, int column, const QModelIndex &parent) const +QModelIndex IgnoreListModel::index(int row, int column, const QModelIndex& parent) const { Q_UNUSED(parent); if (row >= rowCount() || column >= columnCount()) - return QModelIndex(); + return {}; return createIndex(row, column); } - -const IgnoreListManager &IgnoreListModel::ignoreListManager() const +const IgnoreListManager& IgnoreListModel::ignoreListManager() const { - if (_configChanged) - return _clonedIgnoreListManager; - else - return *Client::ignoreListManager(); + return _clonedIgnoreListManager ? *_clonedIgnoreListManager : *Client::ignoreListManager(); } - -IgnoreListManager &IgnoreListModel::ignoreListManager() +IgnoreListManager& IgnoreListModel::ignoreListManager() { - if (_configChanged) - return _clonedIgnoreListManager; - else - return *Client::ignoreListManager(); + return _clonedIgnoreListManager ? *_clonedIgnoreListManager : *Client::ignoreListManager(); } - -IgnoreListManager &IgnoreListModel::cloneIgnoreListManager() +IgnoreListManager& IgnoreListModel::cloneIgnoreListManager() { - if (!_configChanged) { - _clonedIgnoreListManager = *Client::ignoreListManager(); - _configChanged = true; + if (!_clonedIgnoreListManager) { + _clonedIgnoreListManager = std::make_unique(); + _clonedIgnoreListManager->fromVariantMap(Client::ignoreListManager()->toVariantMap()); emit configChanged(true); } - return _clonedIgnoreListManager; + return *_clonedIgnoreListManager; } - void IgnoreListModel::revert() { - if (!_configChanged) + if (!_clonedIgnoreListManager) return; - _configChanged = false; - emit configChanged(false); beginResetModel(); + _clonedIgnoreListManager.reset(); endResetModel(); + emit configChanged(false); } - void IgnoreListModel::commit() { - if (!_configChanged) + if (!_clonedIgnoreListManager) return; - Client::ignoreListManager()->requestUpdate(_clonedIgnoreListManager.toVariantMap()); + Client::ignoreListManager()->requestUpdate(_clonedIgnoreListManager->toVariantMap()); revert(); } - void IgnoreListModel::initDone() { _modelReady = true; @@ -286,43 +261,37 @@ void IgnoreListModel::initDone() emit modelReady(true); } - void IgnoreListModel::clientConnected() { - connect(Client::ignoreListManager(), SIGNAL(updated()), SLOT(revert())); + connect(Client::ignoreListManager(), &IgnoreListManager::updated, this, &IgnoreListModel::revert); if (Client::ignoreListManager()->isInitialized()) initDone(); else - connect(Client::ignoreListManager(), SIGNAL(initDone()), SLOT(initDone())); + connect(Client::ignoreListManager(), &SyncableObject::initDone, this, &IgnoreListModel::initDone); } - void IgnoreListModel::clientDisconnected() { - // clear - _clonedIgnoreListManager = ClientIgnoreListManager(); _modelReady = false; beginResetModel(); + _clonedIgnoreListManager.reset(); endResetModel(); emit modelReady(false); } - -const IgnoreListManager::IgnoreListItem &IgnoreListModel::ignoreListItemAt(int row) const +const IgnoreListManager::IgnoreListItem& IgnoreListModel::ignoreListItemAt(int row) const { return ignoreListManager()[row]; } - // FIXME use QModelIndex? -void IgnoreListModel::setIgnoreListItemAt(int row, const IgnoreListManager::IgnoreListItem &item) +void IgnoreListModel::setIgnoreListItemAt(int row, const IgnoreListManager::IgnoreListItem& item) { cloneIgnoreListManager()[row] = item; emit dataChanged(createIndex(row, 0), createIndex(row, 2)); } - -const QModelIndex IgnoreListModel::indexOf(const QString &rule) +const QModelIndex IgnoreListModel::indexOf(const QString& rule) { return createIndex(ignoreListManager().indexOf(rule), 2); }