X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferviewfilter.cpp;h=22e62fc9cdf101e67aaffcfd8e6a5a33a9504569;hp=970f037a845b0f9691a46d9cc55fcf8469e7c842;hb=35ca85f1c4371ee28d00d5ff0195a5b44aadb299;hpb=b65b9f7615165e8700a44d59b7275a55558dd45b diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 970f037a..22e62fc9 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -33,13 +33,6 @@ #include "networkmodel.h" #include "uistyle.h" -class CheckRemovalEvent : public QEvent -{ -public: - CheckRemovalEvent(const QModelIndex &source_index) : QEvent(QEvent::User), index(source_index) {}; - QPersistentModelIndex index; -}; - /***************************************** * The Filter for the Tree View @@ -57,9 +50,6 @@ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig * setDynamicSortFilter(true); - connect(this, SIGNAL(_dataChanged(const QModelIndex &, const QModelIndex &)), - this, SLOT(_q_sourceDataChanged(QModelIndex, QModelIndex))); - _enableEditMode.setCheckable(true); _enableEditMode.setChecked(_editMode); connect(&_enableEditMode, SIGNAL(toggled(bool)), this, SLOT(enableEditMode(bool))); @@ -161,12 +151,12 @@ void BufferViewFilter::enableEditMode(bool enable) if (enable == false) { addBuffers(QList::fromSet(_toAdd)); QSet::const_iterator iter; - for (iter = _toTempRemove.constBegin(); iter != _toTempRemove.constEnd(); iter++) { + for (iter = _toTempRemove.constBegin(); iter != _toTempRemove.constEnd(); ++iter) { if (config()->temporarilyRemovedBuffers().contains(*iter)) continue; config()->requestRemoveBuffer(*iter); } - for (iter = _toRemove.constBegin(); iter != _toRemove.constEnd(); iter++) { + for (iter = _toRemove.constBegin(); iter != _toRemove.constEnd(); ++iter) { if (config()->removedBuffers().contains(*iter)) continue; config()->requestRemoveBufferPermanently(*iter); @@ -185,23 +175,23 @@ Qt::ItemFlags BufferViewFilter::flags(const QModelIndex &index) const QModelIndex source_index = mapToSource(index); Qt::ItemFlags flags = sourceModel()->flags(source_index); if (config()) { - NetworkModel::ItemType itemType = (NetworkModel::ItemType)sourceModel()->data(source_index, NetworkModel::ItemTypeRole).toInt(); BufferInfo::Type bufferType = (BufferInfo::Type)sourceModel()->data(source_index, NetworkModel::BufferTypeRole).toInt(); - if (source_index == QModelIndex() || itemType == NetworkModel::NetworkItemType) { - flags |= Qt::ItemIsDropEnabled; - } - else if (_editMode) { - flags |= Qt::ItemIsUserCheckable | Qt::ItemIsTristate; - } - // prohibit dragging of most items. and most drop places - // only query to query is allowed for merging - if (bufferType != BufferInfo::QueryBuffer) { + // We need Status Buffers to be a drop target, to allow for rearranging buffers. + // The Status Buffer "owns" the space between Channel/Query buffers in the tree. + // 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! ClientBufferViewConfig *clientConf = qobject_cast(config()); - if (clientConf && clientConf->isLocked()) { - flags &= ~(Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled); + if (clientConf && !clientConf->isLocked()) { + flags |= Qt::ItemIsDropEnabled; } } + + // If we're in Edit Mode, everything except Status Buffers should be hideable. + if (_editMode && bufferType != BufferInfo::StatusBuffer) { + flags |= Qt::ItemIsUserCheckable | Qt::ItemIsTristate; + } } return flags; } @@ -542,34 +532,6 @@ bool BufferViewFilter::setCheckedState(const QModelIndex &index, Qt::CheckState } -void BufferViewFilter::checkPreviousCurrentForRemoval(const QModelIndex ¤t, const QModelIndex &previous) -{ - Q_UNUSED(current); - if (previous.isValid()) - QCoreApplication::postEvent(this, new CheckRemovalEvent(previous)); -} - - -void BufferViewFilter::customEvent(QEvent *event) -{ - if (event->type() != QEvent::User) - return; - - CheckRemovalEvent *removalEvent = static_cast(event); - checkItemForRemoval(removalEvent->index); - - event->accept(); -} - - -void BufferViewFilter::checkItemsForRemoval(const QModelIndex &topLeft, const QModelIndex &bottomRight) -{ - QModelIndex source_topLeft = mapToSource(topLeft); - QModelIndex source_bottomRight = mapToSource(bottomRight); - emit _dataChanged(source_topLeft, source_bottomRight); -} - - bool BufferViewFilter::bufferIdLessThan(const BufferId &left, const BufferId &right) { Q_CHECK_PTR(Client::networkModel());