aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2023-03-30 13:34:12 +0200
committerTim Jenssen <tim.jenssen@qt.io>2023-03-30 13:30:42 +0000
commitadb664f52128b3c28323a5d4dccedc204dec8b34 (patch)
tree5bc4573e921a37f7ba46d73eba16c6f08db37da4 /src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp
parent6f765181c9b9e716f3ae746183cdeac2459ac194 (diff)
parent5b28748554b3f97c4e163606208878d573f2a655 (diff)
Merge remote-tracking branch 'origin/qds/dev'
Conflicts: src/libs/utils/filepath.cpp src/plugins/qmldesigner/qmldesignerexternaldependencies.cpp src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp tests/unit/unittest/CMakeLists.txt Change-Id: I017a6075db41a5233487ac855ffe23de2b2bb0ee
Diffstat (limited to 'src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp')
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp65
1 files changed, 59 insertions, 6 deletions
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp
index df9f273797..91f403f218 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp
@@ -63,6 +63,9 @@ const int labelMinWidth = 130;
const int controlMinWidth = 65;
const int columnSpacing = 16;
+constexpr QStringView qdsWorkaroundsKey{u"designStudioWorkarounds"};
+constexpr QStringView expandValuesKey{u"expandValueComponents"};
+
} // namespace
ItemLibraryAssetImportDialog::ItemLibraryAssetImportDialog(
@@ -172,6 +175,11 @@ ItemLibraryAssetImportDialog::ItemLibraryAssetImportDialog(
while (optIt != supportedOpts.constEnd()) {
QJsonObject options = QJsonObject::fromVariantMap(qvariant_cast<QVariantMap>(optIt.value()));
m_importOptions << options.value("options").toObject();
+ if (m_importOptions.last().contains(qdsWorkaroundsKey)) {
+ QJsonObject optObj = m_importOptions.last()[qdsWorkaroundsKey].toObject();
+ optObj.insert("value", QJsonValue{true});
+ m_importOptions.last().insert(qdsWorkaroundsKey, optObj);
+ }
auto it = defaultOpts.constBegin();
while (it != defaultOpts.constEnd()) {
if (m_importOptions.last().contains(it.key())) {
@@ -477,7 +485,7 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid(
QJsonObject &options = m_importOptions[optionsIndex];
const auto optKeys = options.keys();
for (const auto &optKey : optKeys) {
- if (!advanced && !isSimpleOption(optKey))
+ if ((!advanced && !isSimpleOption(optKey)) || isHiddenOption(optKey))
continue;
QJsonObject optObj = options.value(optKey).toObject();
const QString optName = optObj.value("name").toString();
@@ -589,11 +597,34 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid(
m_labelToControlWidgetMaps[optionsIndex].insert(optKey, optControl);
}
- // Handle conditions
+ // Find condition chains (up to two levels supported)
+ // key: Option that has condition and is also specified in another condition as property
+ // value: List of extra widgets that are affected by key property via condition
+ QHash<QString, QList<QWidget *>> conditionChains;
auto it = conditionMap.constBegin();
while (it != conditionMap.constEnd()) {
const QString &option = it.key();
const QJsonArray &conditions = it.value();
+ if (!conditions.isEmpty()) {
+ const QString optItem = conditions[0].toObject().value("property").toString();
+ if (conditionMap.contains(optItem)) {
+ if (!conditionChains.contains(optItem))
+ conditionChains.insert(optItem, {});
+ QPair<QWidget *, QWidget *> widgetPair = optionToWidgetsMap.value(option);
+ if (widgetPair.first)
+ conditionChains[optItem].append(widgetPair.first);
+ if (widgetPair.second)
+ conditionChains[optItem].append(widgetPair.second);
+ }
+ }
+ ++it;
+ }
+
+ // Handle conditions
+ it = conditionMap.constBegin();
+ while (it != conditionMap.constEnd()) {
+ const QString &option = it.key();
+ const QJsonArray &conditions = it.value();
const auto &conWidgets = optionToWidgetsMap.value(option);
QWidget *conLabel = conWidgets.first;
QWidget *conControl = conWidgets.second;
@@ -622,21 +653,33 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid(
auto optSpin = qobject_cast<QDoubleSpinBox *>(optWidgets.second);
if (optCb) {
auto enableConditionally = [optValue](QCheckBox *cb, QWidget *w1,
- QWidget *w2, Mode mode) {
+ QWidget *w2, const QList<QWidget *> &extraWidgets, Mode mode) {
bool equals = (mode == Mode::equals) == optValue.toBool();
bool enable = cb->isChecked() == equals;
w1->setEnabled(enable);
w2->setEnabled(enable);
+ if (extraWidgets.isEmpty())
+ return;
+
+ if (auto conditionCb = qobject_cast<QCheckBox *>(w2)) {
+ for (const auto w : extraWidgets)
+ w->setEnabled(conditionCb->isChecked() && enable);
+ }
};
- enableConditionally(optCb, conLabel, conControl, mode);
+ // Only initialize conditional state if conditional control is enabled.
+ // If it is disabled, it is assumed that previous chained condition handling
+ // already handled this case.
+ if (optCb->isEnabled())
+ enableConditionally(optCb, conLabel, conControl, conditionChains[option], mode);
if (conditionalWidgetMap.contains(optCb))
conditionalWidgetMap.insert(optCb, nullptr);
else
conditionalWidgetMap.insert(optCb, conControl);
QObject::connect(
optCb, &QCheckBox::toggled, optCb,
- [optCb, conLabel, conControl, mode, enableConditionally]() {
- enableConditionally(optCb, conLabel, conControl, mode);
+ [optCb, conLabel, conControl, extraWidgets = conditionChains[option],
+ mode, enableConditionally]() {
+ enableConditionally(optCb, conLabel, conControl, extraWidgets, mode);
});
}
if (optSpin) {
@@ -804,6 +847,16 @@ bool ItemLibraryAssetImportDialog::isSimpleOption(const QString &id)
return simpleOptions.contains(id);
}
+bool ItemLibraryAssetImportDialog::isHiddenOption(const QString &id)
+{
+ static QList<QStringView> hiddenOptions {
+ qdsWorkaroundsKey,
+ expandValuesKey // Hidden because qdsWorkaroundsKey we force true implies this
+ };
+
+ return hiddenOptions.contains(id);
+}
+
void ItemLibraryAssetImportDialog::resizeEvent(QResizeEvent *event)
{
m_dialogHeight = event->size().height();