X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fbuffertreemodel.cpp;h=741215f0915d4fa458a2d43f7003e31d580d851c;hp=7030547e1f6eaeac1cbb4564339070cfdd6dd55a;hb=9a39bcb0e71d45140dc7f2390536cf4f7e13e9fe;hpb=13b2affbdccd1d52479e49affdb81a77258392a6 diff --git a/src/client/buffertreemodel.cpp b/src/client/buffertreemodel.cpp index 7030547e..741215f0 100644 --- a/src/client/buffertreemodel.cpp +++ b/src/client/buffertreemodel.cpp @@ -18,6 +18,8 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include // FIXME Dependency on QtGui! + #include "global.h" #include "buffertreemodel.h" @@ -44,7 +46,7 @@ QString BufferTreeItem::text(int column) const { } } -QColor BufferTreeItem::foreground(int column) const { +QColor BufferTreeItem::foreground(int /*column*/) const { // for the time beeing we ignore the column :) if(activity & Buffer::Highlight) { return QColor(Qt::red); @@ -67,10 +69,14 @@ QVariant BufferTreeItem::data(int column, int role) const { return text(column); case Qt::ForegroundRole: return foreground(column); + case BufferTreeModel::BufferNameRole: + return buf->bufferName(); case BufferTreeModel::BufferTypeRole: return buf->bufferType(); case BufferTreeModel::BufferActiveRole: return buf->isActive(); + case BufferTreeModel::BufferIdRole: + return buf->bufferId().uid(); default: return QVariant(); } @@ -80,7 +86,8 @@ QVariant BufferTreeItem::data(int column, int role) const { * BufferTreeModel *****************************************/ BufferTreeModel::BufferTreeModel(QObject *parent) : TreeModel(BufferTreeModel::defaultHeader(), parent) { - connect(this, SIGNAL(fakeUserInput(BufferId, QString)), ClientProxy::instance(), SLOT(gsUserInput(BufferId, QString))); + connect(this, SIGNAL(fakeUserInput(BufferId, QString)), + ClientProxy::instance(), SLOT(gsUserInput(BufferId, QString))); } QListBufferTreeModel::defaultHeader() { @@ -92,7 +99,8 @@ QListBufferTreeModel::defaultHeader() { Qt::ItemFlags BufferTreeModel::flags(const QModelIndex &index) const { if(!index.isValid()) - return 0; + return Qt::ItemIsDropEnabled; + //return 0; // I think this is pretty ugly.. if(isBufferIndex(index)) { @@ -100,7 +108,7 @@ Qt::ItemFlags BufferTreeModel::flags(const QModelIndex &index) const { if(buffer->bufferType() == Buffer::QueryBuffer) return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled; else - return Qt::ItemIsEnabled | Qt::ItemIsSelectable; + return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; } else { return Qt::ItemIsEnabled | Qt::ItemIsDropEnabled; } @@ -158,7 +166,8 @@ QModelIndex BufferTreeModel::getOrCreateBufferItemIndex(Buffer *buffer) { QStringList BufferTreeModel::mimeTypes() const { QStringList types; types << "application/Quassel/BufferItem/row" - << "application/Quassel/BufferItem/network"; + << "application/Quassel/BufferItem/network" + << "application/Quassel/BufferItem/bufferId"; return types; } @@ -169,25 +178,33 @@ QMimeData *BufferTreeModel::mimeData(const QModelIndexList &indexes) const { mimeData->setData("application/Quassel/BufferItem/row", QByteArray::number(index.row())); mimeData->setData("application/Quassel/BufferItem/network", getBufferByIndex(index)->networkName().toUtf8()); + mimeData->setData("application/Quassel/BufferItem/bufferId", QByteArray::number(getBufferByIndex(index)->bufferId().uid())); return mimeData; } -bool BufferTreeModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { +bool BufferTreeModel::dropMimeData(const QMimeData *data, Qt::DropAction /*action*/, int /*row*/, int /*column*/, const QModelIndex &parent) { + if(!(data->hasFormat("application/Quassel/BufferItem/row") + && data->hasFormat("application/Quassel/BufferItem/network") + && data->hasFormat("application/Quassel/BufferItem/bufferId"))) + return false; // whatever the drop is... it's not a buffer... + int sourcerow = data->data("application/Quassel/BufferItem/row").toInt(); QString network = QString::fromUtf8(data->data("application/Quassel/BufferItem/network")); - if(!networkItem.contains(network)) - return false; + Q_ASSERT(networkItem.contains(network)); - if(!isBufferIndex(parent)) // dropping at a network -> no merging needed + if(parent == QModelIndex()) // can't be a query... return false; - + Buffer *sourceBuffer = static_cast(networkItem[network]->child(sourcerow))->buffer(); Buffer *targetBuffer = getBufferByIndex(parent); + + if(!(sourceBuffer->bufferType() & targetBuffer->bufferType() & Buffer::QueryBuffer)) // only queries can be merged + return false; if(sourceBuffer == targetBuffer) // we won't merge with ourself :) return false; - + /* if(QMessageBox::warning(static_cast(QObject::parent()), tr("Merge Buffers?"), @@ -210,12 +227,12 @@ void BufferTreeModel::bufferUpdated(Buffer *buffer) { } // This Slot indicates that the user has selected a different buffer in the gui -void BufferTreeModel::changeCurrent(const QModelIndex ¤t, const QModelIndex &previous) { +void BufferTreeModel::changeCurrent(const QModelIndex ¤t, const QModelIndex &/*previous*/) { if(isBufferIndex(current)) { currentBuffer = getBufferByIndex(current); bufferActivity(Buffer::NoActivity, currentBuffer); emit bufferSelected(currentBuffer); - emit updateSelection(current, QItemSelectionModel::ClearAndSelect); + emit selectionChanged(current); } } @@ -226,7 +243,6 @@ void BufferTreeModel::doubleClickReceived(const QModelIndex &clicked) { if(!buffer->isStatusBuffer()) emit fakeUserInput(buffer->bufferId(), QString("/join " + buffer->bufferName())); } - } void BufferTreeModel::bufferActivity(Buffer::ActivityLevel level, Buffer *buffer) { @@ -239,5 +255,5 @@ void BufferTreeModel::bufferActivity(Buffer::ActivityLevel level, Buffer *buffer void BufferTreeModel::selectBuffer(Buffer *buffer) { QModelIndex index = getOrCreateBufferItemIndex(buffer); - emit updateSelection(index, QItemSelectionModel::ClearAndSelect); + emit selectionChanged(index); }