X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fuisupport%2Fbufferview.cpp;h=1a183577aadcd26aa80e6d39a858bdd4b0929272;hb=3202bf5340396b5c6b467e8d92d808b1cbbbf7fb;hp=ef1d927d66d3137d008591e9b3ea5c77532b7a09;hpb=79d9606c41f65c25df54758e064697208895d402;p=quassel.git diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index ef1d927d..1a183577 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2010 by the Quassel Project * + * Copyright (C) 2005-2012 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -442,20 +442,37 @@ void BufferView::previousBuffer() { void BufferView::changeBuffer(Direction direction) { QModelIndex currentIndex = selectionModel()->currentIndex(); QModelIndex resultingIndex; - if(model()->hasIndex( currentIndex.row() + direction, currentIndex.column(), currentIndex.parent())) - resultingIndex = currentIndex.sibling(currentIndex.row() + direction, currentIndex.column()); - - else { - //if we scroll into a the parent node... - QModelIndex parent = currentIndex.parent(); - QModelIndex aunt = parent.sibling(parent.row() + direction, parent.column()); - if(direction == Backward) - resultingIndex = aunt.child(model()->rowCount(aunt) - 1, 0); - else - resultingIndex = aunt.child(0, 0); - if(!resultingIndex.isValid()) - return; + + if(currentIndex.parent().isValid()) { + //If we are a child node just switch among siblings unless it's the first/last child + resultingIndex = currentIndex.sibling(currentIndex.row() + direction, 0); + + if(!resultingIndex.isValid()) { + QModelIndex parent = currentIndex.parent(); + if(direction == Backward) + resultingIndex = parent; + else + resultingIndex = parent.sibling(parent.row() + direction, 0); + } + } 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 ); } @@ -468,6 +485,26 @@ void BufferView::wheelEvent(QWheelEvent* event) { 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(); + + //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); + + /*if(removedRows.contains(bufferId)) + continue; + + removedRows << bufferId;*/ + /*if(permanently) + config()->requestRemoveBufferPermanently(bufferId); + else*/ + config()->requestRemoveBuffer(bufferId); +} + QSize BufferView::sizeHint() const { return QTreeView::sizeHint();