X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnetworkmodel.cpp;h=b52ab3a2316f5e6960eace408ececc6064b0df94;hp=9202036064785307fe8ed1c8f5315548de7d16ba;hb=ff87e964d7bd93f7a851d570c27b97943578a734;hpb=7857ea0a520226e856af8d275550b76627f59c56 diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 92020360..b52ab3a2 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -244,7 +244,6 @@ QVariant BufferItem::data(int column, int role) const { } bool BufferItem::setData(int column, const QVariant &value, int role) { - qDebug() << "BufferItem::setData(int column, const QVariant &value, int role):" << this << column << value << role; switch(role) { case NetworkModel::BufferActivityRole: setActivityLevel((BufferInfo::ActivityLevel)value.toInt()); @@ -304,7 +303,7 @@ QueryBufferItem::QueryBufferItem(const BufferInfo &bufferInfo, NetworkItem *pare : BufferItem(bufferInfo, parent), _ircUser(0) { - setFlags(flags() | Qt::ItemIsDropEnabled); + setFlags(flags() | Qt::ItemIsDropEnabled | Qt::ItemIsEditable); const Network *net = Client::network(bufferInfo.networkId()); if(!net) @@ -326,6 +325,27 @@ 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: + { + QString newName = value.toString(); + if(!newName.isEmpty()) { + Client::renameBuffer(bufferId(), newName); + return true; + } else { + return false; + } + } + break; + default: + return BufferItem::setData(column, value, role); + } +} + QString QueryBufferItem::toolTip(int column) const { // pretty much code duplication of IrcUserItem::toolTip() but inheritance won't solve this... Q_UNUSED(column); @@ -588,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)); } @@ -871,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 > 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()) - 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(); - removeRow(parent.row(), parent.parent()); - - return true; -} - void NetworkModel::attachNetwork(Network *net) { NetworkItem *netItem = networkItem(net->networkId()); netItem->attachNetwork(net); @@ -1064,3 +1042,35 @@ BufferId NetworkModel::bufferId(NetworkId networkId, const QString &bufferName, } return BufferId(); } + +void NetworkModel::sortBufferIds(QList &bufferIds) const { + QList 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 NetworkModel::allBufferIdsSorted() const { + QList 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; +} +