Skip to content

Commit

Permalink
Deprecate ItemIsTristate in favor of ItemIsAutoTristate.
Browse files Browse the repository at this point in the history
This makes the behavior much more clear. You can get a tristate checkbox
just by setting the CheckStateRole to PartiallyChecked, no tristate flag needed.

The flag, on the other hand, enables the automatic-tristate behavior in
QTreeViews (and only there), hence the new name for it.

Change-Id: I18d292a8b8294c863eab806f3874d15dfb72556c
Reviewed-by: Jarek Kobus <[email protected]>
  • Loading branch information
dfaure-kdab committed May 7, 2015
1 parent 87155a8 commit ae8406d
Show file tree
Hide file tree
Showing 9 changed files with 24 additions and 19 deletions.
2 changes: 1 addition & 1 deletion examples/widgets/painting/fontsampler/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ void MainWindow::setupFontTree()
QTreeWidgetItem *familyItem = new QTreeWidgetItem(fontTree);
familyItem->setText(0, family);
familyItem->setCheckState(0, Qt::Unchecked);
familyItem->setFlags(familyItem->flags() | Qt::ItemIsTristate);
familyItem->setFlags(familyItem->flags() | Qt::ItemIsAutoTristate);

foreach (QString style, styles) {
QTreeWidgetItem *styleItem = new QTreeWidgetItem(familyItem);
Expand Down
5 changes: 4 additions & 1 deletion src/corelib/global/qnamespace.h
Original file line number Diff line number Diff line change
Expand Up @@ -1458,7 +1458,10 @@ Qt {
ItemIsDropEnabled = 8,
ItemIsUserCheckable = 16,
ItemIsEnabled = 32,
ItemIsTristate = 64,
ItemIsAutoTristate = 64,
#if QT_DEPRECATED_SINCE(5, 6)
ItemIsTristate = ItemIsAutoTristate,
#endif
ItemNeverHasChildren = 128,
ItemIsUserTristate = 256
};
Expand Down
4 changes: 3 additions & 1 deletion src/corelib/global/qnamespace.qdoc
Original file line number Diff line number Diff line change
Expand Up @@ -2642,10 +2642,12 @@
\value ItemIsDropEnabled It can be used as a drop target.
\value ItemIsUserCheckable It can be checked or unchecked by the user.
\value ItemIsEnabled The user can interact with the item.
\value ItemIsTristate The item can show three separate states.
\value ItemIsAutoTristate The item's state depends on the state of its children.
This enables automatic management of the state of parent items in QTreeWidget
(checked if all children are checked, unchecked if all children are unchecked,
or partially checked if only some children are checked).
\value ItemIsTristate \e{This enum value is deprecated.} Use Qt::ItemIsAutoTristate
instead.
\value ItemNeverHasChildren The item never has child items.
\value ItemIsUserTristate The user can cycle through three separate states.
This value has been added in Qt 5.5.
Expand Down
2 changes: 1 addition & 1 deletion src/gui/itemmodels/qstandarditemmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1258,7 +1258,7 @@ void QStandardItem::setCheckable(bool checkable)
void QStandardItem::setTristate(bool tristate)
{
Q_D(QStandardItem);
d->changeFlags(tristate, Qt::ItemIsTristate);
d->changeFlags(tristate, Qt::ItemIsAutoTristate);
}

/*!
Expand Down
2 changes: 1 addition & 1 deletion src/gui/itemmodels/qstandarditemmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ class Q_GUI_EXPORT QStandardItem
void setCheckable(bool checkable);

inline bool isTristate() const {
return (flags() & Qt::ItemIsTristate) != 0;
return (flags() & Qt::ItemIsAutoTristate) != 0;
}
void setTristate(bool tristate);

Expand Down
8 changes: 4 additions & 4 deletions src/widgets/itemviews/qtreewidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1720,12 +1720,12 @@ void QTreeWidgetItem::setData(int column, int role, const QVariant &value)
}
} break;
case Qt::CheckStateRole:
if ((itemFlags & Qt::ItemIsTristate) && value != Qt::PartiallyChecked) {
if ((itemFlags & Qt::ItemIsAutoTristate) && value != Qt::PartiallyChecked) {
for (int i = 0; i < children.count(); ++i) {
QTreeWidgetItem *child = children.at(i);
if (child->data(column, role).isValid()) {// has a CheckState
Qt::ItemFlags f = itemFlags; // a little hack to avoid multiple dataChanged signals
itemFlags &= ~Qt::ItemIsTristate;
itemFlags &= ~Qt::ItemIsAutoTristate;
child->setData(column, role, value);
itemFlags = f;
}
Expand Down Expand Up @@ -1760,7 +1760,7 @@ void QTreeWidgetItem::setData(int column, int role, const QVariant &value)
model->emitDataChanged(this, column);
if (role == Qt::CheckStateRole) {
QTreeWidgetItem *p;
for (p = par; p && (p->itemFlags & Qt::ItemIsTristate); p = p->par)
for (p = par; p && (p->itemFlags & Qt::ItemIsAutoTristate); p = p->par)
model->emitDataChanged(p, column);
}
}
Expand All @@ -1779,7 +1779,7 @@ QVariant QTreeWidgetItem::data(int column, int role) const
break;
case Qt::CheckStateRole:
// special case for check state in tristate
if (children.count() && (itemFlags & Qt::ItemIsTristate))
if (children.count() && (itemFlags & Qt::ItemIsAutoTristate))
return childrenCheckState(column);
// fallthrough intended
default:
Expand Down
4 changes: 2 additions & 2 deletions tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ void tst_QStandardItem::getSetFlags()
QVERIFY(item.flags() & Qt::ItemIsUserCheckable);
item.setTristate(true);
QVERIFY(item.isTristate());
QVERIFY(item.flags() & Qt::ItemIsTristate);
QVERIFY(item.flags() & Qt::ItemIsAutoTristate);
#ifndef QT_NO_DRAGANDDROP
item.setDragEnabled(true);
QVERIFY(item.isDragEnabled());
Expand Down Expand Up @@ -308,7 +308,7 @@ void tst_QStandardItem::getSetFlags()
QVERIFY(item.isTristate());
item.setTristate(false);
QVERIFY(!item.isTristate());
QVERIFY(!(item.flags() & Qt::ItemIsTristate));
QVERIFY(!(item.flags() & Qt::ItemIsAutoTristate));
#ifndef QT_NO_DRAGANDDROP
QVERIFY(item.isDragEnabled());
item.setDragEnabled(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1154,7 +1154,7 @@ void tst_QItemDelegate::editorEvent_data()

QTest::newRow("unchecked, tristate, release")
<< (int)(Qt::Unchecked)
<< (int)(defaultFlags | Qt::ItemIsTristate)
<< (int)(defaultFlags | Qt::ItemIsAutoTristate)
<< true
<< (int)(QEvent::MouseButtonRelease)
<< (int)(Qt::LeftButton)
Expand All @@ -1163,7 +1163,7 @@ void tst_QItemDelegate::editorEvent_data()

QTest::newRow("partially checked, tristate, release")
<< (int)(Qt::PartiallyChecked)
<< (int)(defaultFlags | Qt::ItemIsTristate)
<< (int)(defaultFlags | Qt::ItemIsAutoTristate)
<< true
<< (int)(QEvent::MouseButtonRelease)
<< (int)(Qt::LeftButton)
Expand All @@ -1172,7 +1172,7 @@ void tst_QItemDelegate::editorEvent_data()

QTest::newRow("checked, tristate, release")
<< (int)(Qt::Checked)
<< (int)(defaultFlags | Qt::ItemIsTristate)
<< (int)(defaultFlags | Qt::ItemIsAutoTristate)
<< true
<< (int)(QEvent::MouseButtonRelease)
<< (int)(Qt::LeftButton)
Expand Down
10 changes: 5 additions & 5 deletions tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1037,7 +1037,7 @@ void tst_QTreeWidget::checkState()
QCOMPARE(firstChild->checkState(0), Qt::Checked);
QCOMPARE(seccondChild->checkState(0), Qt::Unchecked);

item->setFlags(item->flags()|Qt::ItemIsTristate);
item->setFlags(item->flags()|Qt::ItemIsAutoTristate);
QCOMPARE(item->checkState(0), Qt::PartiallyChecked);
QCOMPARE(firstChild->checkState(0), Qt::Checked);
QCOMPARE(seccondChild->checkState(0), Qt::Unchecked);
Expand Down Expand Up @@ -3155,11 +3155,11 @@ void tst_QTreeWidget::setSelectionModel()
void tst_QTreeWidget::task217309()
{
QTreeWidgetItem item;
item.setFlags(item.flags() | Qt::ItemIsTristate);
item.setFlags(item.flags() | Qt::ItemIsAutoTristate);
QTreeWidgetItem subitem1;
subitem1.setFlags(subitem1.flags() | Qt::ItemIsTristate);
subitem1.setFlags(subitem1.flags() | Qt::ItemIsAutoTristate);
QTreeWidgetItem subitem2;
subitem2.setFlags(subitem2.flags() | Qt::ItemIsTristate);
subitem2.setFlags(subitem2.flags() | Qt::ItemIsAutoTristate);
item.addChild(&subitem1);
item.addChild(&subitem2);
subitem1.setCheckState(0, Qt::Checked);
Expand All @@ -3180,7 +3180,7 @@ void tst_QTreeWidget::nonEditableTristate()
QTreeWidget *tree = new QTreeWidget;
QTreeWidgetItem *item = new QTreeWidgetItem();
tree->insertTopLevelItem(0, item);
item->setFlags(item->flags() | Qt::ItemIsTristate);
item->setFlags(item->flags() | Qt::ItemIsAutoTristate);
item->setCheckState(0, Qt::Unchecked);
QTreeWidgetItem *subitem1 = new QTreeWidgetItem(item);
subitem1->setCheckState(0, Qt::Unchecked);
Expand Down

0 comments on commit ae8406d

Please sign in to comment.