shift-key + shift-click + key corner cases covered.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2013-05-13 21:42:31 -05:00 committed by Dirk Hohndel
parent 6f74618d9c
commit 009e6a6fa7
3 changed files with 23 additions and 7 deletions

View file

@ -5,7 +5,7 @@ all:
PKGCONFIG=pkg-config PKGCONFIG=pkg-config
XML2CONFIG=xml2-config XML2CONFIG=xml2-config
XSLCONFIG=xslt-config XSLCONFIG=xslt-config
QMAKE=qmake QMAKE=qmake-qt4
MOC=moc MOC=moc
UIC=uic UIC=uic

View file

@ -17,7 +17,6 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec
{ {
setUniformRowHeights(true); setUniformRowHeights(true);
setItemDelegateForColumn(TreeItemDT::RATING, new StarWidgetsDelegate()); setItemDelegateForColumn(TreeItemDT::RATING, new StarWidgetsDelegate());
} }
void DiveListView::setModel(QAbstractItemModel* model) void DiveListView::setModel(QAbstractItemModel* model)
@ -43,8 +42,22 @@ void DiveListView::mouseReleaseEvent(QMouseEvent* event)
QTreeView::mouseReleaseEvent(event); QTreeView::mouseReleaseEvent(event);
} }
void DiveListView::keyPressEvent(QKeyEvent* event)
{
if(event->modifiers())
mouseClickSelection = true;
QTreeView::keyPressEvent(event);
}
void DiveListView::keyReleaseEvent(QKeyEvent* event)
{
mouseClickSelection = false;
QWidget::keyReleaseEvent(event);
}
void DiveListView::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) void DiveListView::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected)
{ {
QList<QModelIndex> parents;
Q_FOREACH(const QModelIndex& index, deselected.indexes()) { Q_FOREACH(const QModelIndex& index, deselected.indexes()) {
const QAbstractItemModel *model = index.model(); const QAbstractItemModel *model = index.model();
struct dive *dive = (struct dive*) model->data(index, TreeItemDT::DIVE_ROLE).value<void*>(); struct dive *dive = (struct dive*) model->data(index, TreeItemDT::DIVE_ROLE).value<void*>();
@ -53,10 +66,11 @@ void DiveListView::selectionChanged(const QItemSelection& selected, const QItemS
expand(index); // leave this - even if it looks like it shouldn't be here. looks like I'v found a Qt bug. expand(index); // leave this - even if it looks like it shouldn't be here. looks like I'v found a Qt bug.
// the subselection is removed, but the painting is not. this cleans the area. // the subselection is removed, but the painting is not. this cleans the area.
} }
} else if (!parents.contains(index.parent())) {
parents.push_back(index.parent());
} }
} }
QList<QModelIndex> parents;
Q_FOREACH(const QModelIndex& index, selected.indexes()) { Q_FOREACH(const QModelIndex& index, selected.indexes()) {
const QAbstractItemModel *model = index.model(); const QAbstractItemModel *model = index.model();
struct dive *dive = (struct dive*) model->data(index, TreeItemDT::DIVE_ROLE).value<void*>(); struct dive *dive = (struct dive*) model->data(index, TreeItemDT::DIVE_ROLE).value<void*>();
@ -66,17 +80,17 @@ void DiveListView::selectionChanged(const QItemSelection& selected, const QItemS
selection.select(index.child(0,0), index.child(model->rowCount(index) -1 , 0)); selection.select(index.child(0,0), index.child(model->rowCount(index) -1 , 0));
selectionModel()->select(selection, QItemSelectionModel::Select | QItemSelectionModel::Rows); selectionModel()->select(selection, QItemSelectionModel::Select | QItemSelectionModel::Rows);
selectionModel()->setCurrentIndex(index, QItemSelectionModel::Select | QItemSelectionModel::NoUpdate); selectionModel()->setCurrentIndex(index, QItemSelectionModel::Select | QItemSelectionModel::NoUpdate);
if (!isExpanded(index)){ if (!isExpanded(index)) {
expand(index); expand(index);
} }
} }
} } else if (!parents.contains(index.parent())) {
else if (!parents.contains(index.parent())){
parents.push_back(index.parent()); parents.push_back(index.parent());
} }
} }
Q_FOREACH(const QModelIndex& index, parents){ Q_FOREACH(const QModelIndex& index, parents) {
qDebug() << "Expanding";
expand(index); expand(index);
} }
} }

View file

@ -26,6 +26,8 @@ public:
void mousePressEvent(QMouseEvent* event); void mousePressEvent(QMouseEvent* event);
void mouseReleaseEvent(QMouseEvent* event); void mouseReleaseEvent(QMouseEvent* event);
void keyPressEvent(QKeyEvent* event);
void keyReleaseEvent(QKeyEvent*);
void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command); void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command);