diff options
author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2018-12-19 17:51:19 +0100 |
---|---|---|
committer | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2018-12-24 22:17:19 +0000 |
commit | 32897fd0b98966d22ecbd475a0e6a77ca8b1108d (patch) | |
tree | 89b202ba300adcbf858ced7469d924014e711614 /src | |
parent | e9f39c40d98213877317a42d30b78cba102e2017 (diff) | |
download | qttools-32897fd0b98966d22ecbd475a0e6a77ca8b1108d.tar.gz |
QList/Tree/TableWidgetEdit: use correct default flags
The AbstractItemEditor was using the default flags from an
QListWidgetItem as the default values for QList/Tree/tableWidgetItem
which is wrong because the different classes have different default
flags. This lead to an inconsistent behavior during runtime. E.g. a
QTableWidgetItem was not editable but during runtime it was editable.
This fix adds a new function to retrieve the correct default flags
dependending on the selected widget type.
Change-Id: I96e1dec5a459a4d746b469bd773ddb7526e65357
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'src')
6 files changed, 25 insertions, 3 deletions
diff --git a/src/designer/src/components/taskmenu/itemlisteditor.cpp b/src/designer/src/components/taskmenu/itemlisteditor.cpp index 94ec1e1cc..db31745a3 100644 --- a/src/designer/src/components/taskmenu/itemlisteditor.cpp +++ b/src/designer/src/components/taskmenu/itemlisteditor.cpp @@ -168,7 +168,7 @@ void AbstractItemEditor::propertyChanged(QtProperty *property) // Subproperty return; - if ((role == ItemFlagsShadowRole && prop->value().toInt() == int(QListWidgetItem().flags())) + if ((role == ItemFlagsShadowRole && prop->value().toInt() == defaultItemFlags()) || (role == Qt::DecorationPropertyRole && !qvariant_cast<PropertySheetIconValue>(prop->value()).mask()) || (role == Qt::FontRole && !qvariant_cast<QFont>(prop->value()).resolve())) { prop->setModified(false); @@ -214,7 +214,7 @@ void AbstractItemEditor::resetProperty(QtProperty *property) QtVariantProperty *prop = m_propertyManager->variantProperty(property); int role = m_propertyToRole.value(prop); if (role == ItemFlagsShadowRole) - prop->setValue(QVariant::fromValue(int(QListWidgetItem().flags()))); + prop->setValue(QVariant::fromValue(defaultItemFlags())); else prop->setValue(QVariant(prop->valueType(), nullptr)); prop->setModified(false); @@ -246,7 +246,7 @@ void AbstractItemEditor::updateBrowser() QVariant val = getItemData(role); if (!val.isValid()) { if (role == ItemFlagsShadowRole) - val = QVariant::fromValue(int(QListWidgetItem().flags())); + val = QVariant::fromValue(defaultItemFlags()); else val = QVariant(int(prop->value().userType()), nullptr); prop->setModified(false); @@ -430,6 +430,12 @@ QVariant ItemListEditor::getItemData(int role) const return ui.listWidget->currentItem()->data(role); } +int ItemListEditor::defaultItemFlags() const +{ + static const int flags = QListWidgetItem().flags(); + return flags; +} + void ItemListEditor::cacheReloaded() { reloadIconResources(iconCache(), ui.listWidget); diff --git a/src/designer/src/components/taskmenu/itemlisteditor.h b/src/designer/src/components/taskmenu/itemlisteditor.h index ea0634eed..e9b292446 100644 --- a/src/designer/src/components/taskmenu/itemlisteditor.h +++ b/src/designer/src/components/taskmenu/itemlisteditor.h @@ -85,6 +85,7 @@ private slots: void resetProperty(QtProperty *property); protected: + virtual int defaultItemFlags() const = 0; void setupProperties(PropertyDefinition *propDefs); void setupObject(QWidget *object); void setupEditor(QWidget *object, PropertyDefinition *propDefs); @@ -138,6 +139,7 @@ private slots: protected: void setItemData(int role, const QVariant &v) override; QVariant getItemData(int role) const override; + int defaultItemFlags() const override; private: void setPropertyBrowserVisible(bool v); diff --git a/src/designer/src/components/taskmenu/tablewidgeteditor.cpp b/src/designer/src/components/taskmenu/tablewidgeteditor.cpp index 4a28a2f44..b1a7adf12 100644 --- a/src/designer/src/components/taskmenu/tablewidgeteditor.cpp +++ b/src/designer/src/components/taskmenu/tablewidgeteditor.cpp @@ -184,6 +184,12 @@ QVariant TableWidgetEditor::getItemData(int role) const return item->data(role); } +int TableWidgetEditor::defaultItemFlags() const +{ + static const int flags = QTableWidgetItem().flags(); + return flags; +} + void TableWidgetEditor::on_tableWidget_currentCellChanged(int currentRow, int currentCol, int, int /* XXX remove me */) { m_rowEditor->setCurrentIndex(currentRow); diff --git a/src/designer/src/components/taskmenu/tablewidgeteditor.h b/src/designer/src/components/taskmenu/tablewidgeteditor.h index 26ad05b49..72dbb58da 100644 --- a/src/designer/src/components/taskmenu/tablewidgeteditor.h +++ b/src/designer/src/components/taskmenu/tablewidgeteditor.h @@ -82,6 +82,7 @@ private slots: protected: void setItemData(int role, const QVariant &v) override; QVariant getItemData(int role) const override; + int defaultItemFlags() const override; private: void setPropertyBrowserVisible(bool v); diff --git a/src/designer/src/components/taskmenu/treewidgeteditor.cpp b/src/designer/src/components/taskmenu/treewidgeteditor.cpp index 2ec0109a4..20c7bd0a5 100644 --- a/src/designer/src/components/taskmenu/treewidgeteditor.cpp +++ b/src/designer/src/components/taskmenu/treewidgeteditor.cpp @@ -196,6 +196,12 @@ QVariant TreeWidgetEditor::getItemData(int role) const return ui.treeWidget->currentItem()->data(col, role); } +int TreeWidgetEditor::defaultItemFlags() const +{ + static const int flags = QTreeWidgetItem().flags(); + return flags; +} + void TreeWidgetEditor::on_newItemButton_clicked() { QTreeWidgetItem *curItem = ui.treeWidget->currentItem(); diff --git a/src/designer/src/components/taskmenu/treewidgeteditor.h b/src/designer/src/components/taskmenu/treewidgeteditor.h index a0187678d..9b1a607e4 100644 --- a/src/designer/src/components/taskmenu/treewidgeteditor.h +++ b/src/designer/src/components/taskmenu/treewidgeteditor.h @@ -80,6 +80,7 @@ private slots: protected: void setItemData(int role, const QVariant &v) override; QVariant getItemData(int role) const override; + int defaultItemFlags() const override; private: void setPropertyBrowserVisible(bool v); |