diff options
author | Thorbjørn Lund Martsum <tmartsum@gmail.com> | 2012-10-30 15:25:02 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-11-02 19:49:22 +0100 |
commit | e0fc088c0c8bc61dbcaf5928b24986cd61a22777 (patch) | |
tree | 40c475ef334eb309f332f80a3187e9dcab382732 /src | |
parent | 3c2bfbff5f4c836de32628710ab7701b0db083f7 (diff) |
Qt 5.0 QTreeView. Prevent manual moving of the first section
This prevents the user of moving the leftmost column.
There will be no API to allow move of the tree-structure.
It is very weird to do that, so it shouldn't be a problem.
In case it is a big problem somewhere it can be hacked with:
QTableView unused;
unused.setVerticalHeader(tree->header());
tree->header()->setParent(tree);
unused.setVerticalHeader(new QHeaderView(Qt::Horizontal));
Task-number: QTBUG-332
Change-Id: I3a251c8d0fd472ec0ad7edb20a7f3e00af7e0da8
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/itemviews/qheaderview.cpp | 10 | ||||
-rw-r--r-- | src/widgets/itemviews/qheaderview.h | 3 | ||||
-rw-r--r-- | src/widgets/itemviews/qheaderview_p.h | 6 | ||||
-rw-r--r-- | src/widgets/itemviews/qtableview.cpp | 3 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 2 |
5 files changed, 23 insertions, 1 deletions
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index 541d40d421..fa774b5074 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -2268,7 +2268,12 @@ void QHeaderView::mousePressEvent(QMouseEvent *e) d->pressed = logicalIndexAt(pos); if (d->clickableSections) emit sectionPressed(d->pressed); - if (d->movableSections) { + + bool acceptMoveSection = d->movableSections; + if (acceptMoveSection && d->pressed == 0 && !d->allowUserMoveOfSection0) + acceptMoveSection = false; // Do not allow moving the tree nod + + if (acceptMoveSection) { d->section = d->target = d->pressed; if (d->section == -1) return; @@ -2332,6 +2337,9 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e) int visual = visualIndexAt(pos); if (visual == -1) return; + if (visual == 0 && logicalIndex(0) == 0 && !d->allowUserMoveOfSection0) + return; + int posThreshold = d->headerSectionPosition(visual) - d->offset + d->headerSectionSize(visual) / 2; int moving = visualIndex(d->section); if (visual < moving) { diff --git a/src/widgets/itemviews/qheaderview.h b/src/widgets/itemviews/qheaderview.h index 1054e10ba1..847758aa12 100644 --- a/src/widgets/itemviews/qheaderview.h +++ b/src/widgets/itemviews/qheaderview.h @@ -240,6 +240,9 @@ protected: QRegion visualRegionForSelection(const QItemSelection &selection) const; void initStyleOption(QStyleOptionHeader *option) const; + friend class QTableView; + friend class QTreeView; + private: Q_PRIVATE_SLOT(d_func(), void _q_sectionsRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast)) Q_PRIVATE_SLOT(d_func(), void _q_layoutAboutToBeChanged()) diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h index 4d9d0b8c93..7dcfcad01b 100644 --- a/src/widgets/itemviews/qheaderview_p.h +++ b/src/widgets/itemviews/qheaderview_p.h @@ -91,6 +91,7 @@ public: stretchLastSection(false), cascadingResizing(false), resizeRecursionBlock(false), + allowUserMoveOfSection0(true), // will be false for QTreeView and true for QTableView stretchSections(0), contentsSections(0), minimumSectionSize(-1), @@ -234,6 +235,10 @@ public: } } + inline void setAllowUserMoveOfSection0(bool b) { + allowUserMoveOfSection0 = b; + } + void clear(); void flipSortIndicator(int section); void cascadingResize(int visual, int newSize); @@ -274,6 +279,7 @@ public: bool stretchLastSection; bool cascadingResizing; bool resizeRecursionBlock; + bool allowUserMoveOfSection0; int stretchSections; int contentsSections; int defaultSectionSize; diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp index d84dc608b9..32869ad292 100644 --- a/src/widgets/itemviews/qtableview.cpp +++ b/src/widgets/itemviews/qtableview.cpp @@ -53,6 +53,7 @@ #include <qscrollbar.h> #include <qabstractbutton.h> #include <private/qtableview_p.h> +#include <private/qheaderview_p.h> #ifndef QT_NO_ACCESSIBILITY #include <qaccessible.h> #endif @@ -1181,6 +1182,7 @@ void QTableView::setHorizontalHeader(QHeaderView *header) delete d->horizontalHeader; d->horizontalHeader = header; d->horizontalHeader->setParent(this); + d->horizontalHeader->d_func()->setAllowUserMoveOfSection0(true); if (!d->horizontalHeader->model()) { d->horizontalHeader->setModel(d->model); if (d->selectionModel) @@ -1218,6 +1220,7 @@ void QTableView::setVerticalHeader(QHeaderView *header) delete d->verticalHeader; d->verticalHeader = header; d->verticalHeader->setParent(this); + d->verticalHeader->d_func()->setAllowUserMoveOfSection0(true); if (!d->verticalHeader->model()) { d->verticalHeader->setModel(d->model); if (d->selectionModel) diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index bcaf8dc2c3..cf3d7155c1 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -58,6 +58,7 @@ #endif #include <private/qtreeview_p.h> +#include <private/qheaderview_p.h> QT_BEGIN_NAMESPACE @@ -313,6 +314,7 @@ void QTreeView::setHeader(QHeaderView *header) delete d->header; d->header = header; d->header->setParent(this); + d->header->d_func()->setAllowUserMoveOfSection0(false); if (!d->header->model()) { d->header->setModel(d->model); |