: 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")),
QModelIndex source_index = mapToSource(index);
Qt::ItemFlags flags = sourceModel()->flags(source_index);
if(config()) {
- if(source_index == QModelIndex() || sourceModel()->data(source_index, NetworkModel::ItemTypeRole) == NetworkModel::NetworkItemType) {
+ 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;
}
- ClientBufferViewConfig *clientConf = qobject_cast<ClientBufferViewConfig *>(config());
- if(clientConf && clientConf->isLocked()) {
- flags &= ~(Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled);
+
+ // prohibit dragging of most items. and most drop places
+ // only query to query is allowed for merging
+ if(bufferType != BufferInfo::QueryBuffer) {
+ ClientBufferViewConfig *clientConf = qobject_cast<ClientBufferViewConfig *>(config());
+ if(clientConf && clientConf->isLocked()) {
+ flags &= ~(Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled);
+ }
}
}
return flags;
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 {