/***************************************************************************
- * 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 *
#include "bufferviewfilter.h"
#include <QApplication>
-#include <QPalette>
#include <QBrush>
+#include <QPalette>
#include "bufferinfo.h"
#include "buffermodel.h"
#include "graphicalui.h"
#include "networkmodel.h"
#include "uistyle.h"
-
+#include "util.h"
/*****************************************
-* The Filter for the Tree View
-*****************************************/
-BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig *config)
- : QSortFilterProxyModel(model),
- _config(nullptr),
- _sortOrder(Qt::AscendingOrder),
- _showServerQueries(false),
- _editMode(false),
- _enableEditMode(tr("Show / Hide Chats"), this)
+ * The Filter for the Tree View
+ *****************************************/
+BufferViewFilter::BufferViewFilter(QAbstractItemModel* model, BufferViewConfig* config)
+ : QSortFilterProxyModel(model)
+ , _config(nullptr)
+ , _sortOrder(Qt::AscendingOrder)
+ , _showServerQueries(false)
+ , _editMode(false)
+ , _enableEditMode(tr("Show / Hide Chats"), this)
{
setConfig(config);
setSourceModel(model);
connect(&_enableEditMode, &QAction::toggled, this, &BufferViewFilter::enableEditMode);
BufferSettings defaultSettings;
- defaultSettings.notify("ServerNoticesTarget", this, SLOT(showServerQueriesChanged()));
+ defaultSettings.notify("ServerNoticesTarget", this, &BufferViewFilter::showServerQueriesChanged);
showServerQueriesChanged();
}
-
-void BufferViewFilter::setConfig(BufferViewConfig *config)
+void BufferViewFilter::setConfig(BufferViewConfig* config)
{
if (_config == config)
return;
}
}
-
void BufferViewFilter::configInitialized()
{
if (!config())
return;
-// connect(config(), SIGNAL(bufferViewNameSet(const QString &)), this, SLOT(invalidate()));
connect(config(), &BufferViewConfig::configChanged, this, &QSortFilterProxyModel::invalidate);
-// connect(config(), SIGNAL(networkIdSet(const NetworkId &)), this, SLOT(invalidate()));
-// connect(config(), SIGNAL(addNewBuffersAutomaticallySet(bool)), this, SLOT(invalidate()));
-// connect(config(), SIGNAL(sortAlphabeticallySet(bool)), this, SLOT(invalidate()));
-// connect(config(), SIGNAL(hideInactiveBuffersSet(bool)), this, SLOT(invalidate()));
-// connect(config(), SIGNAL(allowedBufferTypesSet(int)), this, SLOT(invalidate()));
-// connect(config(), SIGNAL(minimumActivitySet(int)), this, SLOT(invalidate()));
-// connect(config(), SIGNAL(bufferListSet()), this, SLOT(invalidate()));
-// connect(config(), SIGNAL(bufferAdded(const BufferId &, int)), this, SLOT(invalidate()));
-// connect(config(), SIGNAL(bufferMoved(const BufferId &, int)), this, SLOT(invalidate()));
-// connect(config(), SIGNAL(bufferRemoved(const BufferId &)), this, SLOT(invalidate()));
-// connect(config(), SIGNAL(bufferPermanentlyRemoved(const BufferId &)), this, SLOT(invalidate()));
disconnect(config(), &SyncableObject::initDone, this, &BufferViewFilter::configInitialized);
emit configChanged();
}
-
void BufferViewFilter::showServerQueriesChanged()
{
BufferSettings bufferSettings;
}
}
-
-QList<QAction *> BufferViewFilter::actions(const QModelIndex &index)
+QList<QAction*> BufferViewFilter::actions(const QModelIndex& index)
{
Q_UNUSED(index)
- QList<QAction *> actionList;
+ QList<QAction*> actionList;
actionList << &_enableEditMode;
return actionList;
}
enableEditMode(!string.isEmpty());
}
-
void BufferViewFilter::enableEditMode(bool enable)
{
if (_editMode == enable) {
return;
if (enable == false) {
- addBuffers(QList<BufferId>::fromSet(_toAdd));
+ addBuffers(_toAdd.values());
QSet<BufferId>::const_iterator iter;
for (iter = _toTempRemove.constBegin(); iter != _toTempRemove.constEnd(); ++iter) {
if (config()->temporarilyRemovedBuffers().contains(*iter))
invalidate();
}
-
-Qt::ItemFlags BufferViewFilter::flags(const QModelIndex &index) const
+Qt::ItemFlags BufferViewFilter::flags(const QModelIndex& index) const
{
QModelIndex source_index = mapToSource(index);
Qt::ItemFlags flags = sourceModel()->flags(source_index);
// This DOES mean that it looks like you can merge a buffer into the Status buffer, but that is restricted in BufferView::dropEvent().
if (bufferType == BufferInfo::StatusBuffer) {
// But only if the layout isn't locked!
- auto *clientConf = qobject_cast<ClientBufferViewConfig *>(config());
+ auto* clientConf = qobject_cast<ClientBufferViewConfig*>(config());
if (clientConf && !clientConf->isLocked()) {
flags |= Qt::ItemIsDropEnabled;
}
return flags;
}
-
-bool BufferViewFilter::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
+bool BufferViewFilter::dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent)
{
if (!config() || !NetworkModel::mimeContainsBufferList(data))
return QSortFilterProxyModel::dropMimeData(data, action, row, column, parent);
if (sourceModel()->data(source_parent, NetworkModel::ItemTypeRole) == NetworkModel::NetworkItemType)
droppedNetworkId = sourceModel()->data(source_parent, NetworkModel::NetworkIdRole).value<NetworkId>();
- QList<QPair<NetworkId, BufferId> > bufferList = NetworkModel::mimeDataToBufferList(data);
+ QList<QPair<NetworkId, BufferId>> bufferList = NetworkModel::mimeDataToBufferList(data);
BufferId bufferId;
NetworkId networkId;
int pos;
if (config()->bufferList().contains(bufferId) && !config()->sortAlphabetically()) {
if (config()->bufferList().indexOf(bufferId) < pos)
pos--;
- auto *clientConf = qobject_cast<ClientBufferViewConfig *>(config());
+ auto* clientConf = qobject_cast<ClientBufferViewConfig*>(config());
if (!clientConf || !clientConf->isLocked())
config()->requestMoveBuffer(bufferId, pos);
}
return true;
}
-
void BufferViewFilter::sort(int column, Qt::SortOrder order)
{
_sortOrder = order;
QSortFilterProxyModel::sort(column, order);
}
-
-void BufferViewFilter::addBuffer(const BufferId &bufferId) const
+void BufferViewFilter::addBuffer(const BufferId& bufferId) const
{
if (!config() || config()->bufferList().contains(bufferId))
return;
config()->requestAddBuffer(bufferId, pos);
}
-
-void BufferViewFilter::addBuffers(const QList<BufferId> &bufferIds) const
+void BufferViewFilter::addBuffers(const QList<BufferId>& bufferIds) const
{
if (!config())
return;
QList<BufferId> bufferList = config()->bufferList();
- foreach(BufferId bufferId, bufferIds) {
+ foreach (BufferId bufferId, bufferIds) {
if (bufferList.contains(bufferId))
continue;
}
}
-
-bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) const
+bool BufferViewFilter::filterAcceptBuffer(const QModelIndex& source_bufferIndex) const
{
// no config -> "all buffers" -> accept everything
if (!config())
if (!config()->bufferList().contains(bufferId) && !_editMode) {
// add the buffer if...
- if (config()->isInitialized()
- && !config()->removedBuffers().contains(bufferId) // it hasn't been manually removed and either
- && ((config()->addNewBuffersAutomatically() && !config()->temporarilyRemovedBuffers().contains(bufferId)) // is totally unknown to us (a new buffer)...
- || (config()->temporarilyRemovedBuffers().contains(bufferId) && activityLevel > BufferInfo::OtherActivity))) { // or was just temporarily hidden and has a new message waiting for us.
+ if (config()->isInitialized() && !config()->removedBuffers().contains(bufferId) // it hasn't been manually removed and either
+ && ((config()->addNewBuffersAutomatically()
+ && !config()->temporarilyRemovedBuffers().contains(bufferId)) // is totally unknown to us (a new buffer)...
+ || (config()->temporarilyRemovedBuffers().contains(bufferId)
+ && activityLevel > BufferInfo::OtherActivity))) { // or was just temporarily hidden and has a new message waiting for us.
addBuffer(bufferId);
}
// note: adding the buffer to the valid list does not temper with the following filters ("show only channels" and stuff)
return false;
}
- if (config()->networkId().isValid() && config()->networkId() != sourceModel()->data(source_bufferIndex, NetworkModel::NetworkIdRole).value<NetworkId>())
+ if (config()->networkId().isValid()
+ && config()->networkId() != sourceModel()->data(source_bufferIndex, NetworkModel::NetworkIdRole).value<NetworkId>())
return false;
int allowedBufferTypes = config()->allowedBufferTypes();
if (!(allowedBufferTypes & bufferType))
return false;
- if (bufferType & BufferInfo::QueryBuffer && !_showServerQueries && sourceModel()->data(source_bufferIndex, Qt::DisplayRole).toString().contains('.')) {
+ if (bufferType & BufferInfo::QueryBuffer && !_showServerQueries
+ && sourceModel()->data(source_bufferIndex, Qt::DisplayRole).toString().contains('.')) {
return false;
}
QString name = info.bufferName();
if (name.contains(_filterString, Qt::CaseInsensitive)) {
return true;
- } else {
+ }
+ else {
return false;
}
}
if (bufferId == Client::bufferModel()->data(currentIndex, NetworkModel::BufferIdRole).value<BufferId>())
return true;
- if (config()->hideInactiveBuffers() && !sourceModel()->data(source_bufferIndex, NetworkModel::ItemActiveRole).toBool() && activityLevel <= BufferInfo::OtherActivity)
+ if (config()->hideInactiveBuffers() && !sourceModel()->data(source_bufferIndex, NetworkModel::ItemActiveRole).toBool()
+ && activityLevel <= BufferInfo::OtherActivity)
return false;
if (config()->minimumActivity() > activityLevel)
return true;
}
-
-bool BufferViewFilter::filterAcceptNetwork(const QModelIndex &source_index) const
+bool BufferViewFilter::filterAcceptNetwork(const QModelIndex& source_index) const
{
if (!config())
return true;
}
}
-
-bool BufferViewFilter::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
+bool BufferViewFilter::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
{
QModelIndex child = sourceModel()->index(source_row, 0, source_parent);
}
}
-
-bool BufferViewFilter::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
+bool BufferViewFilter::lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const
{
int leftItemType = sourceModel()->data(source_left, NetworkModel::ItemTypeRole).toInt();
int rightItemType = sourceModel()->data(source_right, NetworkModel::ItemTypeRole).toInt();
}
}
-
-bool BufferViewFilter::bufferLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
+bool BufferViewFilter::bufferLessThan(const QModelIndex& source_left, const QModelIndex& source_right) const
{
BufferId leftBufferId = sourceModel()->data(source_left, NetworkModel::BufferIdRole).value<BufferId>();
BufferId rightBufferId = sourceModel()->data(source_right, NetworkModel::BufferIdRole).value<BufferId>();
// If filtering, prioritize relevant items first
if (!_filterString.isEmpty()) {
// Get names of the buffers
- QString leftBufferName = sourceModel()->data(source_left, NetworkModel::BufferInfoRole)
- .value<BufferInfo>().bufferName();
- QString rightBufferName = sourceModel()->data(source_right, NetworkModel::BufferInfoRole)
- .value<BufferInfo>().bufferName();
+ QString leftBufferName = sourceModel()->data(source_left, NetworkModel::BufferInfoRole).value<BufferInfo>().bufferName();
+ QString rightBufferName = sourceModel()->data(source_right, NetworkModel::BufferInfoRole).value<BufferInfo>().bufferName();
// Check if there's any differences across types, most important first
if ((QString::compare(leftBufferName, _filterString, Qt::CaseInsensitive) == 0)
- != (QString::compare(rightBufferName, _filterString, Qt::CaseInsensitive) == 0)) {
+ != (QString::compare(rightBufferName, _filterString, Qt::CaseInsensitive) == 0)) {
// One of these buffers is an exact match with the filter string, while the other isn't
// Prioritize whichever one is the exact match
// (If left buffer is exact, return true to set it as less than right)
return (QString::compare(leftBufferName, _filterString, Qt::CaseInsensitive) == 0);
}
else if (leftBufferName.startsWith(_filterString, Qt::CaseInsensitive)
- != rightBufferName.startsWith(_filterString, Qt::CaseInsensitive)) {
+ != rightBufferName.startsWith(_filterString, Qt::CaseInsensitive)) {
// One of these buffers starts with the filter string, while the other doesn't
// Prioritize whichever one starts with the filter string
// (If left buffer starts with, return true to set it as less than right)
return bufferIdLessThan(leftBufferId, rightBufferId);
}
-
-bool BufferViewFilter::networkLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
+bool BufferViewFilter::networkLessThan(const QModelIndex& source_left, const QModelIndex& source_right) const
{
// NetworkId leftNetworkId = sourceModel()->data(source_left, NetworkModel::NetworkIdRole).value<NetworkId>();
// NetworkId rightNetworkId = sourceModel()->data(source_right, NetworkModel::NetworkIdRole).value<NetworkId>();
return QSortFilterProxyModel::lessThan(source_left, source_right);
}
-
-QVariant BufferViewFilter::data(const QModelIndex &index, int role) const
+QVariant BufferViewFilter::data(const QModelIndex& index, int role) const
{
switch (role) {
case Qt::FontRole:
}
}
-
-QVariant BufferViewFilter::checkedState(const QModelIndex &index) const
+QVariant BufferViewFilter::checkedState(const QModelIndex& index) const
{
if (!_editMode || !config())
return QVariant();
return Qt::Unchecked;
}
-
-bool BufferViewFilter::setData(const QModelIndex &index, const QVariant &value, int role)
+bool BufferViewFilter::setData(const QModelIndex& index, const QVariant& value, int role)
{
switch (role) {
case Qt::CheckStateRole:
}
}
-
-bool BufferViewFilter::setCheckedState(const QModelIndex &index, Qt::CheckState state)
+bool BufferViewFilter::setCheckedState(const QModelIndex& index, Qt::CheckState state)
{
QModelIndex source_index = mapToSource(index);
BufferId bufferId = sourceModel()->data(source_index, NetworkModel::BufferIdRole).value<BufferId>();
return true;
}
-
-bool BufferViewFilter::bufferIdLessThan(const BufferId &left, const BufferId &right)
+bool BufferViewFilter::bufferIdLessThan(const BufferId& left, const BufferId& right)
{
Q_CHECK_PTR(Client::networkModel());
if (!Client::networkModel())
if (leftType != rightType)
return leftType < rightType;
else
- return QString::compare(Client::networkModel()->data(leftIndex, Qt::DisplayRole).toString(), Client::networkModel()->data(rightIndex, Qt::DisplayRole).toString(), Qt::CaseInsensitive) < 0;
+ return QString::compare(Client::networkModel()->data(leftIndex, Qt::DisplayRole).toString(),
+ Client::networkModel()->data(rightIndex, Qt::DisplayRole).toString(),
+ Qt::CaseInsensitive)
+ < 0;
}