/***************************************************************************
- * Copyright (C) 2005-2015 by the Quassel Project *
+ * Copyright (C) 2005-2016 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
return actionList;
}
+void BufferViewFilter::setFilterString(const QString string)
+{
+ beginResetModel();
+ _filterString = string;
+ endResetModel();
+ enableEditMode(!string.isEmpty());
+}
+
void BufferViewFilter::enableEditMode(bool enable)
{
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<ClientBufferViewConfig *>(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;
}
return false;
}
+ if (!_filterString.isEmpty()) {
+ const BufferInfo info = qvariant_cast<BufferInfo>(Client::bufferModel()->data(source_bufferIndex, NetworkModel::BufferInfoRole));
+ QString name = info.bufferName();
+ if (name.contains(_filterString)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
// the following dynamic filters may not trigger if the buffer is currently selected.
QModelIndex currentIndex = Client::bufferModel()->standardSelectionModel()->currentIndex();
if (bufferId == Client::bufferModel()->data(currentIndex, NetworkModel::BufferIdRole).value<BufferId>())