Don't make the user category item selectable in the nick list
[quassel.git] / src / client / networkmodel.cpp
index 45cb33b..b52ab3a 100644 (file)
@@ -326,6 +326,9 @@ QVariant QueryBufferItem::data(int column, int role) const {
 }
 
 bool QueryBufferItem::setData(int column, const QVariant &value, int role) {
+  if(column != 0)
+    return BufferItem::setData(column, value, role);
+
   switch(role) {
   case Qt::EditRole:
     {
@@ -605,6 +608,7 @@ UserCategoryItem::UserCategoryItem(int category, AbstractTreeItem *parent)
   : PropertyMapItem(QStringList() << "categoryName", parent),
     _category(category)
 {
+  setFlags(Qt::ItemIsEnabled);
   setTreeItemFlags(AbstractTreeItem::DeleteOnLastChildRemoved);
   setObjectName(parent->data(0, Qt::DisplayRole).toString() + "/" + QString::number(category));
 }
@@ -888,49 +892,6 @@ QMimeData *NetworkModel::mimeData(const QModelIndexList &indexes) const {
   return mimeData;
 }
 
-bool NetworkModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) {
-  Q_UNUSED(action)
-  Q_UNUSED(row)
-  Q_UNUSED(column)
-
-  if(!mimeContainsBufferList(data))
-    return false;
-
-  // target must be a query
-  BufferInfo::Type targetType = (BufferInfo::Type)parent.data(NetworkModel::BufferTypeRole).toInt();
-  if(targetType != BufferInfo::QueryBuffer)
-    return false;
-
-  QList< QPair<NetworkId, BufferId> > bufferList = mimeDataToBufferList(data);
-
-  // exactly one buffer has to be dropped
-  if(bufferList.count() != 1)
-    return false;
-
-  NetworkId netId = bufferList.first().first;
-  BufferId bufferId = bufferList.first().second;
-
-  // no self merges (would kill us)
-  if(bufferId == parent.data(BufferIdRole).value<BufferId>())
-    return false;
-
-  NetworkItem *netItem = findNetworkItem(netId);
-  Q_ASSERT(netItem);
-
-  BufferItem *bufferItem = netItem->findBufferItem(bufferId);
-  Q_ASSERT(bufferItem);
-
-  // source must be a query too
-  if(bufferItem->bufferType() != BufferInfo::QueryBuffer)
-    return false;
-
-  // TODO: warn user about buffermerge!
-  qDebug() << "merging" << bufferId << parent.data(BufferIdRole).value<BufferId>();
-  removeRow(parent.row(), parent.parent());
-
-  return true;
-}
-
 void NetworkModel::attachNetwork(Network *net) {
   NetworkItem *netItem = networkItem(net->networkId());
   netItem->attachNetwork(net);
@@ -1081,3 +1042,35 @@ BufferId NetworkModel::bufferId(NetworkId networkId, const QString &bufferName,
   }
   return BufferId();
 }
+
+void NetworkModel::sortBufferIds(QList<BufferId> &bufferIds) const {
+  QList<BufferItem *> bufferItems;
+  foreach(BufferId bufferId, bufferIds) {
+    if(_bufferItemCache.contains(bufferId))
+      bufferItems << _bufferItemCache[bufferId];
+  }
+
+  qSort(bufferItems.begin(), bufferItems.end(), bufferItemLessThan);
+
+  bufferIds.clear();
+  foreach(BufferItem *bufferItem, bufferItems) {
+    bufferIds << bufferItem->bufferId();
+  }
+}
+
+QList<BufferId> NetworkModel::allBufferIdsSorted() const {
+  QList<BufferId> bufferIds = allBufferIds();
+  sortBufferIds(bufferIds);
+  return bufferIds;
+}
+
+bool NetworkModel::bufferItemLessThan(const BufferItem *left, const BufferItem *right) {
+  int leftType = left->bufferType();
+  int rightType = right->bufferType();
+
+  if(leftType != rightType)
+    return leftType < rightType;
+  else
+    return QString::compare(left->bufferName(), right->bufferName(), Qt::CaseInsensitive) < 0;
+}
+