- else //if we scroll into a the parent node...
- {
- QModelIndex parent = currentIndex.parent();
- QModelIndex aunt = parent.sibling( parent.row() + rowDelta, parent.column() );
- if( rowDelta == -1 )
- resultingIndex = aunt.child( model()->rowCount( aunt ) - 1, 0 );
- else
- resultingIndex = aunt.child( 0, 0 );
- if( !resultingIndex.isValid() )
- return;
- }
- selectionModel()->setCurrentIndex( resultingIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows );
- selectionModel()->select( resultingIndex, QItemSelectionModel::ClearAndSelect );
+ else {
+ //If we have a toplevel node, try and get an adjacent child
+ if (direction == Backward) {
+ QModelIndex newParent = currentIndex.sibling(currentIndex.row() - 1, 0);
+ if (model()->hasChildren(newParent))
+ resultingIndex = newParent.child(model()->rowCount(newParent) - 1, 0);
+ else
+ resultingIndex = newParent;
+ }
+ else {
+ if (model()->hasChildren(currentIndex))
+ resultingIndex = currentIndex.child(0, 0);
+ else
+ resultingIndex = currentIndex.sibling(currentIndex.row() + 1, 0);
+ }
+ }
+
+ if (!resultingIndex.isValid())
+ return;
+
+ selectionModel()->setCurrentIndex(resultingIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
+ selectionModel()->select(resultingIndex, QItemSelectionModel::ClearAndSelect);
+}
+
+
+void BufferView::wheelEvent(QWheelEvent *event)
+{
+ if (ItemViewSettings().mouseWheelChangesBuffer() == (bool)(event->modifiers() & Qt::AltModifier))
+ return QTreeView::wheelEvent(event);
+
+ int rowDelta = (event->delta() > 0) ? -1 : 1;
+ changeBuffer((Direction)rowDelta);
+}
+
+
+void BufferView::hideCurrentBuffer()
+{
+ QModelIndex index = selectionModel()->currentIndex();
+ if (index.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType)
+ return;
+
+ BufferId bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+
+ //The check above means we won't be looking at a network, which should always be the first row, so we can just go backwards.
+ changeBuffer(Backward);