1070DomWidget *QAbstractFormBuilder::createDom(QWidget *widget, DomWidget *ui_parentWidget,
bool recursive)
1072 auto *ui_widget =
new DomWidget();
1073 ui_widget->setAttributeClass(QLatin1StringView(widget->metaObject()->className()));
1074 ui_widget->setAttributeName(widget->objectName());
1076 ui_widget->setElementProperty(computeProperties(widget));
1079 if (QLayout *layout = widget->layout()) {
1080 if (DomLayout *ui_layout = createDom(layout,
nullptr, ui_parentWidget)) {
1081 QList<DomLayout *> ui_layouts;
1082 ui_layouts.append(ui_layout);
1084 ui_widget->setElementLayout(ui_layouts);
1090 QList<DomWidget *> ui_widgets;
1091 QList<DomAction *> ui_actions;
1092 QList<DomActionGroup *> ui_action_groups;
1094 QObjectList children;
1098#if QT_CONFIG(splitter)
1099 if (
const auto *splitter = qobject_cast<
const QSplitter*>(widget)) {
1100 const int count = splitter->count();
1101 for (
int i = 0; i < count; ++i)
1102 children.append(splitter->widget(i));
1106 QObjectList childObjects = widget->children();
1108 const auto list = qvariant_cast<QWidgetList>(widget->property(
"_q_widgetOrder"));
1109 for (QWidget *w : list) {
1110 if (childObjects.contains(w)) {
1112 childObjects.removeAll(w);
1115 children += childObjects;
1117 const auto zOrder = qvariant_cast<QWidgetList>(widget->property(
"_q_zOrder"));
1118 if (list != zOrder) {
1119 QStringList zOrderList;
1120 zOrderList.reserve(zOrder.size());
1121 std::transform(zOrder.cbegin(), zOrder.cend(),
1122 std::back_inserter(zOrderList),
1123 [] (
const QWidget *w) {
return w->objectName(); });
1124 ui_widget->setElementZOrder(zOrderList);
1128 for (QObject *obj : std::as_const(children)) {
1129 if (
auto *childWidget = qobject_cast<QWidget*>(obj)) {
1130 if (d->m_laidout.contains(childWidget) || !recursive)
1133 if (
auto *menu = qobject_cast<QMenu *>(childWidget)) {
1134 const auto actions = menu->parentWidget()->actions();
1136 std::any_of(actions.cbegin(), actions.cend(),
1137 [menu] (
const QAction *a) {
return a->menu() == menu; });
1142 if (DomWidget *ui_child = createDom(childWidget, ui_widget)) {
1143 ui_widgets.append(ui_child);
1145 }
else if (
auto *childAction = qobject_cast<QAction*>(obj)) {
1146 if (childAction->actionGroup() !=
nullptr) {
1151 if (DomAction *ui_action = createDom(childAction)) {
1152 ui_actions.append(ui_action);
1154 }
else if (
auto *childActionGroup = qobject_cast<QActionGroup*>(obj)) {
1155 if (DomActionGroup *ui_action_group = createDom(childActionGroup)) {
1156 ui_action_groups.append(ui_action_group);
1162 QList<DomActionRef *> ui_action_refs;
1163 const auto &actions = widget->actions();
1164 ui_action_refs.reserve(actions.size());
1165 for (QAction *action : actions) {
1166 if (DomActionRef *ui_action_ref = createActionRefDom(action)) {
1167 ui_action_refs.append(ui_action_ref);
1172 ui_widget->setElementWidget(ui_widgets);
1174 ui_widget->setElementAction(ui_actions);
1175 ui_widget->setElementActionGroup(ui_action_groups);
1176 ui_widget->setElementAddAction(ui_action_refs);
1178 saveExtraInfo(widget, ui_widget, ui_parentWidget);
1293DomLayout *QAbstractFormBuilder::createDom(QLayout *layout, DomLayout *ui_layout, DomWidget *ui_parentWidget)
1295 Q_UNUSED(ui_layout);
1296 auto *lay =
new DomLayout();
1297 lay->setAttributeClass(QLatin1StringView(layout->metaObject()->className()));
1298 const QString objectName = layout->objectName();
1299 if (!objectName.isEmpty())
1300 lay->setAttributeName(objectName);
1301 lay->setElementProperty(computeProperties(layout));
1303 QList<FormBuilderSaveLayoutEntry> newList;
1304 if (
auto *gridLayout = qobject_cast<QGridLayout *>(layout)) {
1305 newList = saveGridLayoutEntries(gridLayout);
1306#if QT_CONFIG(formlayout)
1307 }
else if (
const auto *formLayout = qobject_cast<
const QFormLayout *>(layout)) {
1308 newList = saveFormLayoutEntries(formLayout);
1311 newList = saveLayoutEntries(layout);
1314 QList<DomLayoutItem *> ui_items;
1315 ui_items.reserve(newList.size());
1316 for (
const FormBuilderSaveLayoutEntry &item : std::as_const(newList)) {
1317 if (DomLayoutItem *ui_item = createDom(item.item, lay, ui_parentWidget)) {
1319 ui_item->setAttributeRow(item.row);
1320 if (item.column >= 0)
1321 ui_item->setAttributeColumn(item.column);
1322 if (item.rowSpan > 1)
1323 ui_item->setAttributeRowSpan(item.rowSpan);
1324 if (item.columnSpan > 1)
1325 ui_item->setAttributeColSpan(item.columnSpan);
1327 ui_item->setAttributeAlignment(alignmentValue(item.alignment,
1328 d->m_fullyQualifiedEnums));
1329 ui_items.append(ui_item);
1333 lay->setElementItem(ui_items);
1571 QList<DomProperty*> *properties,
1574 static const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
1575 auto *
const formBuilder =
static_cast<FriendlyFB *>(abstractFormBuilder);
1577 for (
const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) {
1578 if (DomProperty *p = formBuilder->saveText(it.second, item->data(it.first.second)))
1579 properties->append(p);
1582 const auto *mo = &QAbstractFormBuilderGadget::staticMetaObject;
1583 for (
const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
1584 const QVariant v = item->data(it.first);
1585 const bool isModified = v.isValid()
1586 && (it.first != Qt::TextAlignmentRole || v.toUInt() != uint(defaultAlign));
1588 if (DomProperty *p = variantToDomProperty(abstractFormBuilder, mo, it.second, v))
1589 properties->append(p);
1593 if (DomProperty *p = formBuilder->saveResource(item->data(Qt::DecorationPropertyRole)))
1594 properties->append(p);
1607 const QHash<QString, DomProperty*> &properties)
1609 static const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
1610 auto *
const formBuilder =
static_cast<FriendlyFB *>(abstractFormBuilder);
1612 for (
const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles)
1613 if (DomProperty *p = properties.value(it.second)) {
1614 const QVariant v = formBuilder->textBuilder()->loadText(p);
1615 QVariant nativeValue = formBuilder->textBuilder()->toNativeValue(v);
1616 item->setData(it.first.first, qvariant_cast<QString>(nativeValue));
1617 item->setData(it.first.second, v);
1620 for (
const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
1621 if (DomProperty *p = properties.value(it.second)) {
1622 if (
const QVariant v = formBuilder->toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p); v.isValid())
1623 item->setData(it.first, v);
1627 if (DomProperty *p = properties.value(strings.iconAttribute)) {
1628 const QVariant v = formBuilder->resourceBuilder()->loadResource(formBuilder->workingDirectory(), p);
1629 QVariant nativeValue = formBuilder->resourceBuilder()->toNativeValue(v);
1630 item->setIcon(qvariant_cast<QIcon>(nativeValue));
1631 item->setData(Qt::DecorationPropertyRole, v);
1653void QAbstractFormBuilder::saveTreeWidgetExtraInfo(QTreeWidget *treeWidget, DomWidget *ui_widget, DomWidget *ui_parentWidget)
1655 Q_UNUSED(ui_parentWidget);
1657 QList<DomColumn *> columns;
1659 const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
1661 for (
int c = 0; c<treeWidget->columnCount(); ++c) {
1662 auto *column =
new DomColumn;
1664 QList<DomProperty*> properties;
1666 for (
const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) {
1667 DomProperty *p = saveText(it.second, treeWidget->headerItem()->data(c, it.first.second));
1669 if (!p && it.first.first == Qt::EditRole && it.second ==
"text"_L1) {
1670 auto *defaultHeader =
new DomString;
1671 defaultHeader->setText(QString::number(c + 1));
1672 defaultHeader->setAttributeNotr(u"true"_s);
1673 p =
new DomProperty;
1674 p->setAttributeName(it.second);
1675 p->setElementString(defaultHeader);
1678 properties.append(p);
1681 for (
const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
1682 if (
const QVariant v = treeWidget->headerItem()->data(c, it.first); v.isValid()) {
1683 if (DomProperty *p = variantToDomProperty(
this, &QAbstractFormBuilderGadget::staticMetaObject, it.second, v))
1684 properties.append(p);
1688 if (DomProperty *p = saveResource(treeWidget->headerItem()->data(c, Qt::DecorationPropertyRole)))
1689 properties.append(p);
1691 column->setElementProperty(properties);
1692 columns.append(column);
1695 ui_widget->setElementColumn(columns);
1697 auto items = ui_widget->elementItem();
1699 QQueue<std::pair<QTreeWidgetItem *, DomItem *> > pendingQueue;
1700 for (
int i = 0; i < treeWidget->topLevelItemCount(); i++)
1701 pendingQueue.enqueue(std::make_pair(treeWidget->topLevelItem(i),
nullptr));
1703 while (!pendingQueue.isEmpty()) {
1704 const std::pair<QTreeWidgetItem *, DomItem *> pair = pendingQueue.dequeue();
1705 QTreeWidgetItem *item = pair.first;
1706 DomItem *parentDomItem = pair.second;
1708 auto *currentDomItem =
new DomItem;
1710 QList<DomProperty*> properties;
1711 for (
int c = 0; c < treeWidget->columnCount(); c++) {
1712 for (
const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) {
1713 if (DomProperty *p = saveText(it.second, item->data(c, it.first.second)))
1714 properties.append(p);
1717 for (
const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
1718 if (
const QVariant v = item->data(c, it.first); v.isValid()) {
1719 if (DomProperty *p = variantToDomProperty(
this, &QAbstractFormBuilderGadget::staticMetaObject, it.second, v))
1720 properties.append(p);
1724 if (DomProperty *p = saveResource(item->data(c, Qt::DecorationPropertyRole)))
1725 properties.append(p);
1727 storeItemFlags(item, &properties);
1728 currentDomItem->setElementProperty(properties);
1730 if (parentDomItem) {
1731 auto childrenItems = parentDomItem->elementItem();
1732 childrenItems.append(currentDomItem);
1733 parentDomItem->setElementItem(childrenItems);
1735 items.append(currentDomItem);
1737 for (
int i = 0; i < item->childCount(); i++)
1738 pendingQueue.enqueue(std::make_pair(item->child(i), currentDomItem));
1741 ui_widget->setElementItem(items);
1747void QAbstractFormBuilder::saveTableWidgetExtraInfo(QTableWidget *tableWidget, DomWidget *ui_widget, DomWidget *ui_parentWidget)
1749 Q_UNUSED(ui_parentWidget);
1752 QList<DomColumn *> columns;
1753 auto *header = tableWidget->horizontalHeader();
1754 for (
int c = 0; c < tableWidget->columnCount(); c++) {
1755 QList<DomProperty*> properties;
1756 QTableWidgetItem *item = tableWidget->horizontalHeaderItem(c);
1758 storeItemProps(
this, item, &properties, header->defaultAlignment());
1760 auto *column =
new DomColumn;
1761 column->setElementProperty(properties);
1762 columns.append(column);
1764 ui_widget->setElementColumn(columns);
1767 QList<DomRow *> rows;
1768 header = tableWidget->verticalHeader();
1769 for (
int r = 0; r < tableWidget->rowCount(); r++) {
1770 QList<DomProperty*> properties;
1771 QTableWidgetItem *item = tableWidget->verticalHeaderItem(r);
1773 storeItemProps(
this, item, &properties, header->defaultAlignment());
1775 auto *row =
new DomRow;
1776 row->setElementProperty(properties);
1779 ui_widget->setElementRow(rows);
1781 auto items = ui_widget->elementItem();
1782 for (
int r = 0; r < tableWidget->rowCount(); r++)
1783 for (
int c = 0; c < tableWidget->columnCount(); c++) {
1784 QTableWidgetItem *item = tableWidget->item(r, c);
1786 QList<DomProperty*> properties;
1787 storeItemPropsNFlags(
this, item, &properties);
1789 auto *domItem =
new DomItem;
1790 domItem->setAttributeRow(r);
1791 domItem->setAttributeColumn(c);
1792 domItem->setElementProperty(properties);
1793 items.append(domItem);
1797 ui_widget->setElementItem(items);
1823void QAbstractFormBuilder::saveComboBoxExtraInfo(QComboBox *comboBox, DomWidget *ui_widget, DomWidget *ui_parentWidget)
1825 Q_UNUSED(ui_parentWidget);
1826 auto ui_items = ui_widget->elementItem();
1828 const int count = comboBox->count();
1829 for (
int i=0; i < count; ++i) {
1832 DomProperty *textProperty = saveText(QFormBuilderStrings::textAttribute,
1833 comboBox->itemData(i, Qt::DisplayPropertyRole));
1834 DomProperty *iconProperty = saveResource(comboBox->itemData(i, Qt::DecorationPropertyRole));
1835 if (textProperty || iconProperty) {
1836 QList<DomProperty*> properties;
1838 properties.push_back(textProperty);
1840 properties.push_back(iconProperty);
1842 auto *ui_item =
new DomItem();
1843 ui_item->setElementProperty(properties);
1844 ui_items.push_back(ui_item);
1848 ui_widget->setElementItem(ui_items);
1893void QAbstractFormBuilder::saveItemViewExtraInfo(
const QAbstractItemView *itemView,
1894 DomWidget *ui_widget, DomWidget *)
1896 if (
const auto *treeView = qobject_cast<
const QTreeView*>(itemView)) {
1897 auto viewProperties = ui_widget->elementAttribute();
1898 const auto &headerProperties = computeProperties(treeView->header());
1899 for (
const QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
1900 const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
1901 + realPropertyName.mid(1);
1902 const QString fakePropertyName =
"header"_L1 + upperPropertyName;
1903 for (DomProperty *property : headerProperties) {
1904 if (property->attributeName() == realPropertyName) {
1905 property->setAttributeName(fakePropertyName);
1906 viewProperties << property;
1910 ui_widget->setElementAttribute(viewProperties);
1911 }
else if (
const auto *tableView = qobject_cast<
const QTableView*>(itemView)) {
1912 auto viewProperties = ui_widget->elementAttribute();
1913 for (QLatin1StringView headerPrefix : tableHeaderPrefixes) {
1914 const auto &headerProperties = headerPrefix ==
"horizontalHeader"_L1
1915 ? computeProperties(tableView->horizontalHeader())
1916 : computeProperties(tableView->verticalHeader());
1917 for (
const QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
1918 const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
1919 + realPropertyName.mid(1);
1920 const QString fakePropertyName = headerPrefix + upperPropertyName;
1921 for (DomProperty *property : std::as_const(headerProperties)) {
1922 if (property->attributeName() == realPropertyName) {
1923 property->setAttributeName(fakePropertyName);
1924 viewProperties << property;
1929 ui_widget->setElementAttribute(viewProperties);
1976void QAbstractFormBuilder::saveExtraInfo(QWidget *widget, DomWidget *ui_widget,
1977 DomWidget *ui_parentWidget)
1980#if QT_CONFIG(listwidget)
1981 }
else if (
auto *listWidget = qobject_cast<QListWidget*>(widget)) {
1982 saveListWidgetExtraInfo(listWidget, ui_widget, ui_parentWidget);
1984#if QT_CONFIG(treewidget)
1985 }
else if (
auto *treeWidget = qobject_cast<QTreeWidget*>(widget)) {
1986 saveTreeWidgetExtraInfo(treeWidget, ui_widget, ui_parentWidget);
1988#if QT_CONFIG(tablewidget)
1989 }
else if (
auto *tableWidget = qobject_cast<QTableWidget*>(widget)) {
1990 saveTableWidgetExtraInfo(tableWidget, ui_widget, ui_parentWidget);
1992#if QT_CONFIG(combobox)
1993 }
else if (
auto *comboBox = qobject_cast<QComboBox*>(widget)) {
1994 if (!QFormBuilderExtra::isQFontComboBox(widget))
1995 saveComboBoxExtraInfo(comboBox, ui_widget, ui_parentWidget);
1997 }
else if (
auto *ab = qobject_cast<QAbstractButton *>(widget)) {
1998 saveButtonExtraInfo(ab, ui_widget, ui_parentWidget);
2000 if (
auto *itemView = qobject_cast<QAbstractItemView *>(widget)) {
2001 saveItemViewExtraInfo(itemView, ui_widget, ui_parentWidget);
2025void QAbstractFormBuilder::loadTreeWidgetExtraInfo(DomWidget *ui_widget, QTreeWidget *treeWidget, QWidget *parentWidget)
2027 Q_UNUSED(parentWidget);
2028 const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
2029 const QMetaEnum itemFlags_enum = metaEnum<QAbstractFormBuilderGadget>(
"itemFlags");
2030 const auto &columns = ui_widget->elementColumn();
2031 if (!columns.isEmpty())
2032 treeWidget->setColumnCount(columns.size());
2034 for (qsizetype i = 0, size = columns.size(); i < size; ++i) {
2035 const DomColumn *c = columns.at(i);
2036 const DomPropertyHash properties = propertyMap(c->elementProperty());
2038 for (
const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
2039 if (DomProperty *p = properties.value(it.second)) {
2040 if (
const QVariant v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p); v.isValid())
2041 treeWidget->headerItem()->setData(i, it.first, v);
2045 for (
const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) {
2046 if (DomProperty *p = properties.value(it.second)) {
2047 const QVariant v = textBuilder()->loadText(p);
2048 QVariant nativeValue = textBuilder()->toNativeValue(v);
2049 treeWidget->headerItem()->setData(i, it.first.first, qvariant_cast<QString>(nativeValue));
2050 treeWidget->headerItem()->setData(i, it.first.second, v);
2054 if (DomProperty *p = properties.value(QFormBuilderStrings::iconAttribute)) {
2055 const QVariant v = resourceBuilder()->loadResource(workingDirectory(), p);
2056 QVariant nativeValue = resourceBuilder()->toNativeValue(v);
2057 treeWidget->headerItem()->setIcon(i, qvariant_cast<QIcon>(nativeValue));
2058 treeWidget->headerItem()->setData(i, Qt::DecorationPropertyRole, v);
2062 QQueue<std::pair<DomItem *, QTreeWidgetItem *> > pendingQueue;
2063 const auto &widgetElementItem = ui_widget->elementItem();
2064 for (DomItem *ui_item : widgetElementItem)
2065 pendingQueue.enqueue(std::make_pair(ui_item,
nullptr));
2067 while (!pendingQueue.isEmpty()) {
2068 const std::pair<DomItem *, QTreeWidgetItem *> pair = pendingQueue.dequeue();
2069 const DomItem *domItem = pair.first;
2070 QTreeWidgetItem *parentItem = pair.second;
2072 QTreeWidgetItem *currentItem =
nullptr;
2075 currentItem =
new QTreeWidgetItem(parentItem);
2077 currentItem =
new QTreeWidgetItem(treeWidget);
2079 const auto &properties = domItem->elementProperty();
2081 for (DomProperty *property : properties) {
2082 if (property->attributeName() == QFormBuilderStrings::flagsAttribute
2083 && !property->elementSet().isEmpty()) {
2084 currentItem->setFlags(enumKeysToValue<Qt::ItemFlags>(
2085 itemFlags_enum, property->elementSet().toLatin1().constData()));
2086 }
else if (property->attributeName() == QFormBuilderStrings::textAttribute
2087 && property->elementString()) {
2089 QVariant textV = textBuilder()->loadText(property);
2090 QVariant nativeValue = textBuilder()->toNativeValue(textV);
2091 currentItem->setText(col, qvariant_cast<QString>(nativeValue));
2092 currentItem->setData(col, Qt::DisplayPropertyRole, textV);
2093 }
else if (col >= 0) {
2094 if (property->attributeName() == QFormBuilderStrings::iconAttribute) {
2095 QVariant v = resourceBuilder()->loadResource(workingDirectory(), property);
2097 QVariant nativeValue = resourceBuilder()->toNativeValue(v);
2098 currentItem->setIcon(col, qvariant_cast<QIcon>(nativeValue));
2099 currentItem->setData(col, Qt::DecorationPropertyRole, v);
2102 int role = strings.treeItemRoleHash.value(property->attributeName(), (Qt::ItemDataRole)-1);
2104 if (
const QVariant v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, property); v.isValid())
2105 currentItem->setData(col, role, v);
2107 std::pair<Qt::ItemDataRole, Qt::ItemDataRole> rolePair =
2108 strings.treeItemTextRoleHash.value(property->attributeName(),
2109 std::make_pair((Qt::ItemDataRole)-1, (Qt::ItemDataRole)-1));
2110 if (rolePair.first >= 0) {
2111 QVariant textV = textBuilder()->loadText(property);
2112 QVariant nativeValue = textBuilder()->toNativeValue(textV);
2113 currentItem->setData(col, rolePair.first, qvariant_cast<QString>(nativeValue));
2114 currentItem->setData(col, rolePair.second, textV);
2121 const auto &elementItem = domItem->elementItem();
2122 for (DomItem *childItem : elementItem)
2123 pendingQueue.enqueue(std::make_pair(childItem, currentItem));
2131void QAbstractFormBuilder::loadTableWidgetExtraInfo(DomWidget *ui_widget, QTableWidget *tableWidget, QWidget *parentWidget)
2133 Q_UNUSED(parentWidget);
2135 const auto &columns = ui_widget->elementColumn();
2136 if (!columns.isEmpty())
2137 tableWidget->setColumnCount(columns.size());
2138 for (qsizetype i = 0, size = columns.size(); i < size; ++i) {
2139 DomColumn *c = columns.at(i);
2140 const DomPropertyHash properties = propertyMap(c->elementProperty());
2142 if (!properties.isEmpty()) {
2143 auto *item =
new QTableWidgetItem;
2144 loadItemProps(
this, item, properties);
2145 tableWidget->setHorizontalHeaderItem(i, item);
2149 const auto &rows = ui_widget->elementRow();
2150 if (!rows.isEmpty())
2151 tableWidget->setRowCount(rows.size());
2152 for (qsizetype i = 0, size = rows.size(); i < size; ++i) {
2153 const DomRow *r = rows.at(i);
2154 const DomPropertyHash properties = propertyMap(r->elementProperty());
2156 if (!properties.isEmpty()) {
2157 auto *item =
new QTableWidgetItem;
2158 loadItemProps(
this, item, properties);
2159 tableWidget->setVerticalHeaderItem(i, item);
2163 const auto &elementItem = ui_widget->elementItem();
2164 for (DomItem *ui_item : elementItem) {
2165 if (ui_item->hasAttributeRow() && ui_item->hasAttributeColumn()) {
2166 const DomPropertyHash properties = propertyMap(ui_item->elementProperty());
2167 auto *item =
new QTableWidgetItem;
2168 loadItemPropsNFlags(
this, item, properties);
2169 tableWidget->setItem(ui_item->attributeRow(), ui_item->attributeColumn(), item);
2177void QAbstractFormBuilder::loadComboBoxExtraInfo(DomWidget *ui_widget, QComboBox *comboBox, QWidget *parentWidget)
2179 Q_UNUSED(parentWidget);
2180 const auto &elementItem = ui_widget->elementItem();
2181 for (DomItem *ui_item : elementItem) {
2182 const auto &properties = ui_item->elementProperty();
2188 DomProperty *p = QFBE::propertyByName(properties, QFormBuilderStrings::textAttribute);
2189 if (p && p->elementString()) {
2190 textData = textBuilder()->loadText(p);
2191 text = qvariant_cast<QString>(textBuilder()->toNativeValue(textData));
2194 p = QFBE::propertyByName(properties, QFormBuilderStrings::iconAttribute);
2196 iconData = resourceBuilder()->loadResource(workingDirectory(), p);
2197 icon = qvariant_cast<QIcon>(resourceBuilder()->toNativeValue(iconData));
2200 comboBox->addItem(icon, text);
2201 comboBox->setItemData((comboBox->count()-1), iconData, Qt::DecorationPropertyRole);
2202 comboBox->setItemData((comboBox->count()-1), textData, Qt::DisplayPropertyRole);
2205 if (
auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
2206 comboBox->setCurrentIndex(currentIndex->elementNumber());
2228void QAbstractFormBuilder::loadButtonExtraInfo(
const DomWidget *ui_widget, QAbstractButton *button, QWidget *)
2230 using ButtonGroupHash = QFormBuilderExtra::ButtonGroupHash;
2232 const QString groupName = buttonGroupName(ui_widget);
2233 if (groupName.isEmpty())
2236 ButtonGroupHash &buttonGroups = d->buttonGroups();
2237 const auto it = buttonGroups.find(groupName);
2238 if (it == buttonGroups.end()) {
2239#ifdef QFORMINTERNAL_NAMESPACE
2240 uiLibWarning(QCoreApplication::translate(
"QAbstractFormBuilder",
"Invalid QButtonGroup reference '%1' referenced by '%2'.").arg(groupName, button->objectName()));
2245 QButtonGroup *&group = it.value().second;
2246 if (group ==
nullptr) {
2247 group =
new QButtonGroup;
2248 group->setObjectName(groupName);
2249 applyProperties(group, it.value().first->elementProperty());
2251 group->addButton(button);
2258void QAbstractFormBuilder::loadItemViewExtraInfo(DomWidget *ui_widget, QAbstractItemView *itemView,
2261 if (
auto *treeView = qobject_cast<QTreeView*>(itemView)) {
2262 const auto &allAttributes = ui_widget->elementAttribute();
2263 QList<DomProperty *> headerProperties;
2264 for (QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
2265 const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
2266 + realPropertyName.mid(1);
2267 const QString fakePropertyName =
"header"_L1 + upperPropertyName;
2268 for (DomProperty *attr : allAttributes) {
2269 if (attr->attributeName() == fakePropertyName) {
2270 attr->setAttributeName(realPropertyName);
2271 headerProperties << attr;
2275 applyProperties(treeView->header(), headerProperties);
2276 }
else if (
auto *tableView = qobject_cast<QTableView*>(itemView)) {
2277 const auto &allAttributes = ui_widget->elementAttribute();
2278 for (QLatin1StringView headerPrefix : tableHeaderPrefixes) {
2279 QList<DomProperty*> headerProperties;
2280 for (QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
2281 const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
2282 + realPropertyName.mid(1);
2283 const QString fakePropertyName = headerPrefix + upperPropertyName;
2284 for (DomProperty *attr : allAttributes) {
2285 if (attr->attributeName() == fakePropertyName) {
2286 attr->setAttributeName(realPropertyName);
2287 headerProperties << attr;
2291 if (headerPrefix ==
"horizontalHeader"_L1)
2292 applyProperties(tableView->horizontalHeader(), headerProperties);
2294 applyProperties(tableView->verticalHeader(), headerProperties);
2302void QAbstractFormBuilder::loadExtraInfo(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget)
2305#if QT_CONFIG(listwidget)
2306 }
else if (
auto *listWidget = qobject_cast<QListWidget*>(widget)) {
2307 loadListWidgetExtraInfo(ui_widget, listWidget, parentWidget);
2309#if QT_CONFIG(treewidget)
2310 }
else if (
auto *treeWidget = qobject_cast<QTreeWidget*>(widget)) {
2311 loadTreeWidgetExtraInfo(ui_widget, treeWidget, parentWidget);
2313#if QT_CONFIG(tablewidget)
2314 }
else if (
auto *tableWidget = qobject_cast<QTableWidget*>(widget)) {
2315 loadTableWidgetExtraInfo(ui_widget, tableWidget, parentWidget);
2317#if QT_CONFIG(combobox)
2318 }
else if (
auto *comboBox = qobject_cast<QComboBox*>(widget)) {
2319 if (!QFormBuilderExtra::isQFontComboBox(widget))
2320 loadComboBoxExtraInfo(ui_widget, comboBox, parentWidget);
2322#if QT_CONFIG(tabwidget)
2323 }
else if (
auto *tabWidget = qobject_cast<QTabWidget*>(widget)) {
2324 if (
auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
2325 tabWidget->setCurrentIndex(currentIndex->elementNumber());
2327#if QT_CONFIG(stackedwidget)
2328 }
else if (
auto *stackedWidget = qobject_cast<QStackedWidget*>(widget)) {
2329 if (
auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
2330 stackedWidget->setCurrentIndex(currentIndex->elementNumber());
2332#if QT_CONFIG(toolbox)
2333 }
else if (
auto *toolBox = qobject_cast<QToolBox*>(widget)) {
2334 if (
auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
2335 toolBox->setCurrentIndex(currentIndex->elementNumber());
2336 if (
auto *tabSpacing = QFBE::propertyByName(ui_widget->elementProperty(),
"tabSpacing"))
2337 toolBox->layout()->setSpacing(tabSpacing->elementNumber());
2339 }
else if (
auto *ab = qobject_cast<QAbstractButton *>(widget)) {
2340 loadButtonExtraInfo(ui_widget, ab, parentWidget);
2342 if (
auto *itemView = qobject_cast<QAbstractItemView *>(widget)) {
2343 loadItemViewExtraInfo(ui_widget, itemView, parentWidget);