From 4088f4ce4d6e5f48dd68f2b63f595b8123347621 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 1 Jun 2017 13:04:12 +0200 Subject: QAbstractItemView: add isPersistentEditorOpen() [ChangeLog][QtWidgets][QAbstractItemView/QTreeWidget/QTableWidget/QListWidget] Added isPersistentEditorOpen(). Task-number: QTBUG-61139 Change-Id: I74997d9626812fed83591d32c503680575ec0f7c Reviewed-by: Friedemann Kleint Reviewed-by: Giuseppe D'Angelo --- src/widgets/itemviews/qabstractitemview.cpp | 17 +++++++++++++++-- src/widgets/itemviews/qabstractitemview.h | 1 + src/widgets/itemviews/qlistwidget.cpp | 18 ++++++++++++++++-- src/widgets/itemviews/qlistwidget.h | 2 ++ src/widgets/itemviews/qtablewidget.cpp | 18 ++++++++++++++++-- src/widgets/itemviews/qtablewidget.h | 2 ++ src/widgets/itemviews/qtreewidget.cpp | 19 +++++++++++++++++-- src/widgets/itemviews/qtreewidget.h | 2 ++ .../qabstractitemview/tst_qabstractitemview.cpp | 4 ++++ 9 files changed, 75 insertions(+), 8 deletions(-) diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index baeba1759c..e1b6f52225 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -3138,7 +3138,7 @@ int QAbstractItemView::sizeHintForColumn(int column) const Opens a persistent editor on the item at the given \a index. If no editor exists, the delegate will create a new editor. - \sa closePersistentEditor() + \sa closePersistentEditor(), isPersistentEditorOpen() */ void QAbstractItemView::openPersistentEditor(const QModelIndex &index) { @@ -3157,7 +3157,7 @@ void QAbstractItemView::openPersistentEditor(const QModelIndex &index) /*! Closes the persistent editor for the item at the given \a index. - \sa openPersistentEditor() + \sa openPersistentEditor(), isPersistentEditorOpen() */ void QAbstractItemView::closePersistentEditor(const QModelIndex &index) { @@ -3171,6 +3171,19 @@ void QAbstractItemView::closePersistentEditor(const QModelIndex &index) } } +/*! + \since 5.10 + + Returns whether a persistent editor is open for the item at index \a index. + + \sa openPersistentEditor(), closePersistentEditor() +*/ +bool QAbstractItemView::isPersistentEditorOpen(const QModelIndex &index) const +{ + Q_D(const QAbstractItemView); + return d->editorForIndex(index).widget; +} + /*! \since 4.1 diff --git a/src/widgets/itemviews/qabstractitemview.h b/src/widgets/itemviews/qabstractitemview.h index f315ea6e4c..e2249ec3aa 100644 --- a/src/widgets/itemviews/qabstractitemview.h +++ b/src/widgets/itemviews/qabstractitemview.h @@ -213,6 +213,7 @@ public: void openPersistentEditor(const QModelIndex &index); void closePersistentEditor(const QModelIndex &index); + bool isPersistentEditorOpen(const QModelIndex &index) const; void setIndexWidget(const QModelIndex &index, QWidget *widget); QWidget *indexWidget(const QModelIndex &index) const; diff --git a/src/widgets/itemviews/qlistwidget.cpp b/src/widgets/itemviews/qlistwidget.cpp index 0a1f85facb..7611e5c1ca 100644 --- a/src/widgets/itemviews/qlistwidget.cpp +++ b/src/widgets/itemviews/qlistwidget.cpp @@ -1617,7 +1617,7 @@ void QListWidget::editItem(QListWidgetItem *item) Opens an editor for the given \a item. The editor remains open after editing. - \sa closePersistentEditor() + \sa closePersistentEditor(), isPersistentEditorOpen() */ void QListWidget::openPersistentEditor(QListWidgetItem *item) { @@ -1629,7 +1629,7 @@ void QListWidget::openPersistentEditor(QListWidgetItem *item) /*! Closes the persistent editor for the given \a item. - \sa openPersistentEditor() + \sa openPersistentEditor(), isPersistentEditorOpen() */ void QListWidget::closePersistentEditor(QListWidgetItem *item) { @@ -1638,6 +1638,20 @@ void QListWidget::closePersistentEditor(QListWidgetItem *item) QAbstractItemView::closePersistentEditor(index); } +/*! + \since 5.10 + + Returns whether a persistent editor is open for item \a item. + + \sa openPersistentEditor(), closePersistentEditor() +*/ +bool QListWidget::isPersistentEditorOpen(QListWidgetItem *item) const +{ + Q_D(const QListWidget); + const QModelIndex index = d->listModel()->index(item); + return QAbstractItemView::isPersistentEditorOpen(index); +} + /*! \since 4.1 diff --git a/src/widgets/itemviews/qlistwidget.h b/src/widgets/itemviews/qlistwidget.h index 85ca639e50..2dbdbdf48b 100644 --- a/src/widgets/itemviews/qlistwidget.h +++ b/src/widgets/itemviews/qlistwidget.h @@ -240,6 +240,8 @@ public: void editItem(QListWidgetItem *item); void openPersistentEditor(QListWidgetItem *item); void closePersistentEditor(QListWidgetItem *item); + using QAbstractItemView::isPersistentEditorOpen; + bool isPersistentEditorOpen(QListWidgetItem *item) const; QWidget *itemWidget(QListWidgetItem *item) const; void setItemWidget(QListWidgetItem *item, QWidget *widget); diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp index 663cd4adc6..7bb11aef14 100644 --- a/src/widgets/itemviews/qtablewidget.cpp +++ b/src/widgets/itemviews/qtablewidget.cpp @@ -2221,7 +2221,7 @@ void QTableWidget::editItem(QTableWidgetItem *item) /*! Opens an editor for the give \a item. The editor remains open after editing. - \sa closePersistentEditor() + \sa closePersistentEditor(), isPersistentEditorOpen() */ void QTableWidget::openPersistentEditor(QTableWidgetItem *item) { @@ -2235,7 +2235,7 @@ void QTableWidget::openPersistentEditor(QTableWidgetItem *item) /*! Closes the persistent editor for \a item. - \sa openPersistentEditor() + \sa openPersistentEditor(), isPersistentEditorOpen() */ void QTableWidget::closePersistentEditor(QTableWidgetItem *item) { @@ -2246,6 +2246,20 @@ void QTableWidget::closePersistentEditor(QTableWidgetItem *item) QAbstractItemView::closePersistentEditor(index); } +/*! + \since 5.10 + + Returns whether a persistent editor is open for item \a item. + + \sa openPersistentEditor(), closePersistentEditor() +*/ +bool QTableWidget::isPersistentEditorOpen(QTableWidgetItem *item) const +{ + Q_D(const QTableWidget); + const QModelIndex index = d->tableModel()->index(item); + return QAbstractItemView::isPersistentEditorOpen(index); +} + /*! \since 4.1 diff --git a/src/widgets/itemviews/qtablewidget.h b/src/widgets/itemviews/qtablewidget.h index b91bcf7ce4..8b827bc16b 100644 --- a/src/widgets/itemviews/qtablewidget.h +++ b/src/widgets/itemviews/qtablewidget.h @@ -263,6 +263,8 @@ public: void editItem(QTableWidgetItem *item); void openPersistentEditor(QTableWidgetItem *item); void closePersistentEditor(QTableWidgetItem *item); + using QAbstractItemView::isPersistentEditorOpen; + bool isPersistentEditorOpen(QTableWidgetItem *item) const; QWidget *cellWidget(int row, int column) const; void setCellWidget(int row, int column, QWidget *widget); diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index 8ce36ab47e..a58da489aa 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -2907,7 +2907,7 @@ void QTreeWidget::editItem(QTreeWidgetItem *item, int column) /*! Opens a persistent editor for the \a item in the given \a column. - \sa closePersistentEditor() + \sa closePersistentEditor(), isPersistentEditorOpen() */ void QTreeWidget::openPersistentEditor(QTreeWidgetItem *item, int column) @@ -2922,7 +2922,7 @@ void QTreeWidget::openPersistentEditor(QTreeWidgetItem *item, int column) This function has no effect if no persistent editor is open for this combination of item and column. - \sa openPersistentEditor() + \sa openPersistentEditor(), isPersistentEditorOpen() */ void QTreeWidget::closePersistentEditor(QTreeWidgetItem *item, int column) @@ -2931,6 +2931,21 @@ void QTreeWidget::closePersistentEditor(QTreeWidgetItem *item, int column) QAbstractItemView::closePersistentEditor(d->index(item, column)); } +/*! + \since 5.10 + + Returns whether a persistent editor is open for item \a item in + column \a column. + + \sa openPersistentEditor(), closePersistentEditor() +*/ + +bool QTreeWidget::isPersistentEditorOpen(QTreeWidgetItem *item, int column) const +{ + Q_D(const QTreeWidget); + return QAbstractItemView::isPersistentEditorOpen(d->index(item, column)); +} + /*! \since 4.1 diff --git a/src/widgets/itemviews/qtreewidget.h b/src/widgets/itemviews/qtreewidget.h index fc0bccf2fe..70f7d1507b 100644 --- a/src/widgets/itemviews/qtreewidget.h +++ b/src/widgets/itemviews/qtreewidget.h @@ -300,6 +300,8 @@ public: void editItem(QTreeWidgetItem *item, int column = 0); void openPersistentEditor(QTreeWidgetItem *item, int column = 0); void closePersistentEditor(QTreeWidgetItem *item, int column = 0); + using QAbstractItemView::isPersistentEditorOpen; + bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const; QWidget *itemWidget(QTreeWidgetItem *item, int column) const; void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget); diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp index f2cf78e8ac..4a27d63cba 100644 --- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp @@ -626,7 +626,9 @@ void tst_QAbstractItemView::rowDelegate() QVERIFY(QTest::qWaitForWindowExposed(&view)); QModelIndex index = model.index(3, 0); + QVERIFY(!view.isPersistentEditorOpen(index)); view.openPersistentEditor(index); + QVERIFY(view.isPersistentEditorOpen(index)); QWidget *w = view.indexWidget(index); QVERIFY(w); QCOMPARE(w->metaObject()->className(), "QWidget"); @@ -646,7 +648,9 @@ void tst_QAbstractItemView::columnDelegate() QVERIFY(QTest::qWaitForWindowExposed(&view)); QModelIndex index = model.index(0, 3); + QVERIFY(!view.isPersistentEditorOpen(index)); view.openPersistentEditor(index); + QVERIFY(view.isPersistentEditorOpen(index)); QWidget *w = view.indexWidget(index); QVERIFY(w); QCOMPARE(w->metaObject()->className(), "QWidget"); -- cgit v1.2.3