X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtgui%2Fbufferview.cpp;h=17f637b57602d29f10a5c1d5cb38f4b911a258cc;hp=33eab930e7e14edddc0a970906febaec140830a3;hb=c7ad7451b1e899ba0de2ded9ac08359dff5cca61;hpb=64ff44560cc13569ab4968e3d974b0b7e9820607 diff --git a/src/qtgui/bufferview.cpp b/src/qtgui/bufferview.cpp index 33eab930..17f637b5 100644 --- a/src/qtgui/bufferview.cpp +++ b/src/qtgui/bufferview.cpp @@ -30,10 +30,12 @@ BufferView::BufferView(QWidget *parent) : QTreeView(parent) { void BufferView::init() { setIndentation(10); - //header()->hide(); + header()->hide(); header()->hideSection(1); expandAll(); + setAnimated(true); + setDragEnabled(true); setAcceptDrops(true); setDropIndicatorShown(true); @@ -47,7 +49,10 @@ void BufferView::init() { connect(this, SIGNAL(doubleClicked(const QModelIndex &)), model(), SLOT(doubleClickReceived(const QModelIndex &))); - connect(model(), SIGNAL(updateSelection(const QModelIndex &, QItemSelectionModel::SelectionFlags)), + connect(model(), SIGNAL(selectionChanged(const QModelIndex &)), + this, SLOT(select(const QModelIndex &))); + + connect(this, SIGNAL(selectionChanged(const QModelIndex &, QItemSelectionModel::SelectionFlags)), selectionModel(), SLOT(select(const QModelIndex &, QItemSelectionModel::SelectionFlags))); } @@ -55,8 +60,8 @@ void BufferView::init() { void BufferView::setFilteredModel(QAbstractItemModel *model, BufferViewFilter::Modes mode, QStringList nets) { BufferViewFilter *filter = new BufferViewFilter(model, mode, nets); setModel(filter); - connect(this, SIGNAL(dragEnter()), filter, SLOT(enterDrag())); - connect(this, SIGNAL(dragLeave()), filter, SLOT(leaveDrag())); + connect(this, SIGNAL(eventDropped(QDropEvent *)), filter, SLOT(dropEvent(QDropEvent *))); + connect(this, SIGNAL(removeBuffer(const QModelIndex &)), filter, SLOT(removeBuffer(const QModelIndex &))); } void BufferView::setModel(QAbstractItemModel *model) { @@ -64,20 +69,34 @@ void BufferView::setModel(QAbstractItemModel *model) { init(); } -// dragEnterEvent and dragLeaveEvent are needed to keep track of the active -// view when customizing them via drag and drop -void BufferView::dragEnterEvent(QDragEnterEvent *event) { - emit dragEnter(); - QTreeView::dragEnterEvent(event); +void BufferView::select(const QModelIndex ¤t) { + emit selectionChanged(current, QItemSelectionModel::ClearAndSelect); +} + +void BufferView::dropEvent(QDropEvent *event) { + if(event->source() != this) { + // another view(?) or widget is the source. maybe it's a drag 'n drop + // view customization -> we tell our friend the filter: + emit eventDropped(event); + } + // in the case that the filter did not accept the event or if it's a merge + QTreeView::dropEvent(event); } -void BufferView::dragLeaveEvent(QDragLeaveEvent *event) { - emit dragLeave(); - QTreeView::dragLeaveEvent(event); +void BufferView::keyPressEvent(QKeyEvent *event) { + if(event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete) { + event->accept(); + QModelIndex index = selectionModel()->selectedIndexes().first(); + if(index.isValid()) { + emit removeBuffer(index); + } + } + QTreeView::keyPressEvent(event); } // ensure that newly inserted network nodes are expanded per default void BufferView::rowsInserted(const QModelIndex & parent, int start, int end) { - if(parent.parent() == QModelIndex()) setExpanded(parent, true); + if(parent == QModelIndex()) + setExpanded(model()->index(start, 0, parent), true); QTreeView::rowsInserted(parent, start, end); }