/***************************************************************************
- * 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 *
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 );
}
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);
+
+ /*if(removedRows.contains(bufferId))
+ continue;
+
+ removedRows << bufferId;*/
+ /*if(permanently)
+ config()->requestRemoveBufferPermanently(bufferId);
+ else*/
+ config()->requestRemoveBuffer(bufferId);
+}
+
QSize BufferView::sizeHint() const {
return QTreeView::sizeHint();