: QSortFilterProxyModel(model),
_config(0),
_sortOrder(Qt::AscendingOrder),
+ _channelJoinedIcon(SmallIcon("irc-channel-active")),
+ _channelPartedIcon(SmallIcon("irc-channel-inactive")),
_userOfflineIcon(SmallIcon("im-user-offline")),
_userAwayIcon(SmallIcon("im-user-away")),
_userOnlineIcon(SmallIcon("im-user")),
return;
if(enable == false) {
- int numBuffers = config()->bufferList().count();
+ addBuffers(QList<BufferId>::fromSet(_toAdd));
QSet<BufferId>::const_iterator iter;
- for(iter = _toAdd.constBegin(); iter != _toAdd.constEnd(); iter++) {
- if(config()->bufferList().contains(*iter))
- continue;
- config()->requestAddBuffer(*iter, numBuffers);
- }
for(iter = _toTempRemove.constBegin(); iter != _toTempRemove.constEnd(); iter++) {
if(config()->temporarilyRemovedBuffers().contains(*iter))
continue;
pos = 0;
}
- if(config()->bufferList().contains(bufferId)) {
+ if(config()->bufferList().contains(bufferId) && !config()->sortAlphabetically()) {
if(config()->bufferList().indexOf(bufferId) < pos)
pos--;
- config()->requestMoveBuffer(bufferId, pos);
+ ClientBufferViewConfig *clientConf = qobject_cast<ClientBufferViewConfig *>(config());
+ if(!clientConf || !clientConf->isLocked())
+ config()->requestMoveBuffer(bufferId, pos);
} else {
config()->requestAddBuffer(bufferId, pos);
}
config()->requestAddBuffer(bufferId, pos);
}
+void BufferViewFilter::addBuffers(const QList<BufferId> &bufferIds) const {
+ if(!config())
+ return;
+
+ QList<BufferId> bufferList = config()->bufferList();
+ foreach(BufferId bufferId, bufferIds) {
+ if(bufferList.contains(bufferId))
+ continue;
+
+ int pos = bufferList.count();
+ bool lt;
+ for(int i = 0; i < bufferList.count(); i++) {
+ if(config() && config()->sortAlphabetically())
+ lt = bufferIdLessThan(bufferId, bufferList[i]);
+ else
+ lt = bufferId < config()->bufferList()[i];
+
+ if(lt) {
+ pos = i;
+ bufferList.insert(pos, bufferId);
+ break;
+ }
+ }
+ config()->requestAddBuffer(bufferId, pos);
+ }
+}
+
bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) const {
// no config -> "all buffers" -> accept everything
if(!config())
return QVariant();
QModelIndex source_index = mapToSource(index);
- if(sourceModel()->data(source_index, NetworkModel::ItemTypeRole).toInt() != NetworkModel::BufferItemType)
- return QVariant();
+ NetworkModel::ItemType itemType = (NetworkModel::ItemType)sourceModel()->data(source_index, NetworkModel::ItemTypeRole).toInt();
+ BufferInfo::Type bufferType = (BufferInfo::Type)sourceModel()->data(source_index, NetworkModel::BufferTypeRole).toInt();
+ bool isActive = sourceModel()->data(source_index, NetworkModel::ItemActiveRole).toBool();
- if(sourceModel()->data(source_index, NetworkModel::BufferTypeRole).toInt() != BufferInfo::QueryBuffer)
+ if(itemType != NetworkModel::BufferItemType)
return QVariant();
- if(!sourceModel()->data(source_index, NetworkModel::ItemActiveRole).toBool())
- return _userOfflineIcon;
-
- if(sourceModel()->data(source_index, NetworkModel::UserAwayRole).toBool())
- return _userAwayIcon;
- else
- return _userOnlineIcon;
-
- return QVariant();
+ switch(bufferType) {
+ case BufferInfo::ChannelBuffer:
+ if(isActive)
+ return _channelJoinedIcon;
+ else
+ return _channelPartedIcon;
+ case BufferInfo::QueryBuffer:
+ if(!isActive)
+ return _userOfflineIcon;
+ if(sourceModel()->data(source_index, NetworkModel::UserAwayRole).toBool())
+ return _userAwayIcon;
+ else
+ return _userOnlineIcon;
+ default:
+ return QVariant();
+ }
}
QVariant BufferViewFilter::checkedState(const QModelIndex &index) const {