X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferview.cpp;h=74552696193a4484130caf09470385ba7fcc8d9f;hp=7c4e6c5ef5a250c7b18b2dd78689460ec79daef0;hb=a35e9270e608bfbc5b21ba47d49b3139f06b13e9;hpb=09fea00d02da49748b6a040752759eab16ccd392 diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index 7c4e6c5e..74552696 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -36,7 +36,6 @@ #include "buffersyncer.h" #include "client.h" #include "iconloader.h" -#include "mappedselectionmodel.h" #include "network.h" #include "networkmodel.h" #include "networkmodelactionprovider.h" @@ -87,6 +86,7 @@ BufferView::BufferView(QWidget *parent) { connect(this, SIGNAL(collapsed(const QModelIndex &)), SLOT(on_collapse(const QModelIndex &))); connect(this, SIGNAL(expanded(const QModelIndex &)), SLOT(on_expand(const QModelIndex &))); + connect(this, SIGNAL(clicked(const QModelIndex &)), SLOT(on_clicked(const QModelIndex &))); setSelectionMode(QAbstractItemView::ExtendedSelection); @@ -100,7 +100,7 @@ void BufferView::init() { header()->setContextMenuPolicy(Qt::ActionsContextMenu); hideColumn(1); hideColumn(2); - setIndentation(5); + setIndentation(10); expandAll(); setAnimated(true); @@ -201,14 +201,17 @@ void BufferView::setConfig(BufferViewConfig *config) { connect(config, SIGNAL(networkIdSet(const NetworkId &)), this, SLOT(setRootIndexForNetworkId(const NetworkId &))); setRootIndexForNetworkId(config->networkId()); } else { + setIndentation(10); setRootIndex(QModelIndex()); } } void BufferView::setRootIndexForNetworkId(const NetworkId &networkId) { if(!networkId.isValid() || !model()) { + setIndentation(10); setRootIndex(QModelIndex()); } else { + setIndentation(5); int networkCount = model()->rowCount(); QModelIndex child; for(int i = 0; i < networkCount; i++) { @@ -239,27 +242,36 @@ void BufferView::keyPressEvent(QKeyEvent *event) { } void BufferView::dropEvent(QDropEvent *event) { - QList< QPair > bufferList = Client::networkModel()->mimeDataToBufferList(event->mimeData()); + QModelIndex index = indexAt(event->pos()); + + QRect indexRect = visualRect(index); + QPoint cursorPos = event->pos(); + // check if we're really _on_ the item and not indicating a move to just above or below the item + const int margin = 2; + if(cursorPos.y() - indexRect.top() < margin + || indexRect.bottom() - cursorPos.y() < margin) + return QTreeView::dropEvent(event); + + QList< QPair > bufferList = Client::networkModel()->mimeDataToBufferList(event->mimeData()); if(bufferList.count() != 1) return QTreeView::dropEvent(event); NetworkId networkId = bufferList[0].first; BufferId bufferId2 = bufferList[0].second; - QModelIndex index = indexAt(event->pos()); if(index.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType) - return; + return QTreeView::dropEvent(event); if(index.data(NetworkModel::BufferTypeRole) != BufferInfo::QueryBuffer) - return; + return QTreeView::dropEvent(event); if(index.data(NetworkModel::NetworkIdRole).value() != networkId) - return; + return QTreeView::dropEvent(event); BufferId bufferId1 = index.data(NetworkModel::BufferIdRole).value(); if(bufferId1 == bufferId2) - return; + return QTreeView::dropEvent(event); int res = QMessageBox::question(0, tr("Merge buffers permanently?"), tr("Do you want to merge the buffer \"%1\" permanently into buffer \"%2\"?\n This cannot be reversed!").arg(Client::networkModel()->bufferName(bufferId2)).arg(Client::networkModel()->bufferName(bufferId1)), @@ -335,13 +347,17 @@ void BufferView::on_configChanged() { collapse(networkIdx); } - // update selection to current one - MappedSelectionModel *mappedSelectionModel = qobject_cast(selectionModel()); - if(!config() || !mappedSelectionModel) - return; + if(config()) { + // update selection to current one + Client::bufferModel()->synchronizeView(this); + } + + return; +} - mappedSelectionModel->mappedSetCurrentIndex(Client::bufferModel()->standardSelectionModel()->currentIndex(), QItemSelectionModel::Current); - mappedSelectionModel->mappedSelect(Client::bufferModel()->standardSelectionModel()->selection(), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); +void BufferView::on_clicked(const QModelIndex &index) { + Q_UNUSED(index); + setFocus(Qt::MouseFocusReason); } void BufferView::on_collapse(const QModelIndex &index) { @@ -401,7 +417,12 @@ void BufferView::contextMenuEvent(QContextMenuEvent *event) { } void BufferView::addActionsToMenu(QMenu *contextMenu, const QModelIndex &index) { - Client::mainUi()->actionProvider()->addActions(contextMenu, index, this, "menuActionTriggered", (bool)config()); + QModelIndexList indexList = selectedIndexes(); + // make sure the item we clicked on is first + indexList.removeAll(index); + indexList.prepend(index); + + Client::mainUi()->actionProvider()->addActions(contextMenu, indexList, this, "menuActionTriggered", (bool)config()); } void BufferView::addFilterActions(QMenu *contextMenu, const QModelIndex &index) { @@ -487,14 +508,6 @@ BufferViewDock::BufferViewDock(BufferViewConfig *config, QWidget *parent) connect(config, SIGNAL(bufferViewNameSet(const QString &)), this, SLOT(bufferViewRenamed(const QString &))); } -BufferViewDock::BufferViewDock(QWidget *parent) - : QDockWidget(tr("All Buffers"), parent) -{ - setObjectName("BufferViewDock--1"); - toggleViewAction()->setData((int)-1); - setAllowedAreas(Qt::RightDockWidgetArea|Qt::LeftDockWidgetArea); -} - void BufferViewDock::bufferViewRenamed(const QString &newName) { setWindowTitle(newName); toggleViewAction()->setText(newName);