1071DomWidget *QAbstractFormBuilder::createDom(QWidget *widget, DomWidget *ui_parentWidget,
bool recursive)
1073 auto *ui_widget =
new DomWidget();
1074 ui_widget->setAttributeClass(QLatin1StringView(widget->metaObject()->className()));
1075 ui_widget->setAttributeName(widget->objectName());
1077 ui_widget->setElementProperty(computeProperties(widget));
1080 if (QLayout *layout = widget->layout()) {
1081 if (DomLayout *ui_layout = createDom(layout,
nullptr, ui_parentWidget)) {
1082 QList<DomLayout *> ui_layouts;
1083 ui_layouts.append(ui_layout);
1085 ui_widget->setElementLayout(ui_layouts);
1091 QList<DomWidget *> ui_widgets;
1092 QList<DomAction *> ui_actions;
1093 QList<DomActionGroup *> ui_action_groups;
1095 QObjectList children;
1099#if QT_CONFIG(splitter)
1100 if (
const auto *splitter = qobject_cast<
const QSplitter*>(widget)) {
1101 const int count = splitter->count();
1102 for (
int i = 0; i < count; ++i)
1103 children.append(splitter->widget(i));
1107 QObjectList childObjects = widget->children();
1109 const auto list = qvariant_cast<QWidgetList>(widget->property(
"_q_widgetOrder"));
1110 for (QWidget *w : list) {
1111 if (childObjects.contains(w)) {
1113 childObjects.removeAll(w);
1116 children += childObjects;
1118 const auto zOrder = qvariant_cast<QWidgetList>(widget->property(
"_q_zOrder"));
1119 if (list != zOrder) {
1120 QStringList zOrderList;
1121 zOrderList.reserve(zOrder.size());
1122 std::transform(zOrder.cbegin(), zOrder.cend(),
1123 std::back_inserter(zOrderList),
1124 [] (
const QWidget *w) {
return w->objectName(); });
1125 ui_widget->setElementZOrder(zOrderList);
1129 for (QObject *obj : std::as_const(children)) {
1130 if (
auto *childWidget = qobject_cast<QWidget*>(obj)) {
1131 if (d->m_laidout.contains(childWidget) || !recursive)
1134 if (
auto *menu = qobject_cast<QMenu *>(childWidget)) {
1135 const auto actions = menu->parentWidget()->actions();
1137 std::any_of(actions.cbegin(), actions.cend(),
1138 [menu] (
const QAction *a) {
return a->menu() == menu; });
1143 if (DomWidget *ui_child = createDom(childWidget, ui_widget)) {
1144 ui_widgets.append(ui_child);
1146 }
else if (
auto *childAction = qobject_cast<QAction*>(obj)) {
1147 if (childAction->actionGroup() !=
nullptr) {
1152 if (DomAction *ui_action = createDom(childAction)) {
1153 ui_actions.append(ui_action);
1155 }
else if (
auto *childActionGroup = qobject_cast<QActionGroup*>(obj)) {
1156 if (DomActionGroup *ui_action_group = createDom(childActionGroup)) {
1157 ui_action_groups.append(ui_action_group);
1163 QList<DomActionRef *> ui_action_refs;
1164 const auto &actions = widget->actions();
1165 ui_action_refs.reserve(actions.size());
1166 for (QAction *action : actions) {
1167 if (DomActionRef *ui_action_ref = createActionRefDom(action)) {
1168 ui_action_refs.append(ui_action_ref);
1173 ui_widget->setElementWidget(ui_widgets);
1175 ui_widget->setElementAction(ui_actions);
1176 ui_widget->setElementActionGroup(ui_action_groups);
1177 ui_widget->setElementAddAction(ui_action_refs);
1179 saveExtraInfo(widget, ui_widget, ui_parentWidget);
1294DomLayout *QAbstractFormBuilder::createDom(QLayout *layout, DomLayout *ui_layout, DomWidget *ui_parentWidget)
1296 Q_UNUSED(ui_layout);
1297 auto *lay =
new DomLayout();
1298 lay->setAttributeClass(QLatin1StringView(layout->metaObject()->className()));
1299 const QString objectName = layout->objectName();
1300 if (!objectName.isEmpty())
1301 lay->setAttributeName(objectName);
1302 lay->setElementProperty(computeProperties(layout));
1304 QList<FormBuilderSaveLayoutEntry> newList;
1305 if (
auto *gridLayout = qobject_cast<QGridLayout *>(layout)) {
1306 newList = saveGridLayoutEntries(gridLayout);
1307#if QT_CONFIG(formlayout)
1308 }
else if (
const auto *formLayout = qobject_cast<
const QFormLayout *>(layout)) {
1309 newList = saveFormLayoutEntries(formLayout);
1312 newList = saveLayoutEntries(layout);
1315 QList<DomLayoutItem *> ui_items;
1316 ui_items.reserve(newList.size());
1317 for (
const FormBuilderSaveLayoutEntry &item : std::as_const(newList)) {
1318 if (DomLayoutItem *ui_item = createDom(item.item, lay, ui_parentWidget)) {
1320 ui_item->setAttributeRow(item.row);
1321 if (item.column >= 0)
1322 ui_item->setAttributeColumn(item.column);
1323 if (item.rowSpan > 1)
1324 ui_item->setAttributeRowSpan(item.rowSpan);
1325 if (item.columnSpan > 1)
1326 ui_item->setAttributeColSpan(item.columnSpan);
1328 ui_item->setAttributeAlignment(alignmentValue(item.alignment,
1329 d->m_fullyQualifiedEnums));
1330 ui_items.append(ui_item);
1334 lay->setElementItem(ui_items);
1572 QList<DomProperty*> *properties,
1575 static const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
1576 auto *
const formBuilder =
static_cast<FriendlyFB *>(abstractFormBuilder);
1578 for (
const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) {
1579 if (DomProperty *p = formBuilder->saveText(it.second, item->data(it.first.second)))
1580 properties->append(p);
1583 const auto *mo = &QAbstractFormBuilderGadget::staticMetaObject;
1584 for (
const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
1585 const QVariant v = item->data(it.first);
1586 const bool isModified = v.isValid()
1587 && (it.first != Qt::TextAlignmentRole || v.toUInt() != uint(defaultAlign));
1589 if (DomProperty *p = variantToDomProperty(abstractFormBuilder, mo, it.second, v))
1590 properties->append(p);
1594 if (DomProperty *p = formBuilder->saveResource(item->data(Qt::DecorationPropertyRole)))
1595 properties->append(p);
1608 const QHash<QString, DomProperty*> &properties)
1610 static const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
1611 auto *
const formBuilder =
static_cast<FriendlyFB *>(abstractFormBuilder);
1613 for (
const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles)
1614 if (DomProperty *p = properties.value(it.second)) {
1615 const QVariant v = formBuilder->textBuilder()->loadText(p);
1616 QVariant nativeValue = formBuilder->textBuilder()->toNativeValue(v);
1617 item->setData(it.first.first, qvariant_cast<QString>(nativeValue));
1618 item->setData(it.first.second, v);
1621 for (
const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
1622 if (DomProperty *p = properties.value(it.second)) {
1623 if (
const QVariant v = formBuilder->toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p); v.isValid())
1624 item->setData(it.first, v);
1628 if (DomProperty *p = properties.value(strings.iconAttribute)) {
1629 const QVariant v = formBuilder->resourceBuilder()->loadResource(formBuilder->workingDirectory(), p);
1630 QVariant nativeValue = formBuilder->resourceBuilder()->toNativeValue(v);
1631 item->setIcon(qvariant_cast<QIcon>(nativeValue));
1632 item->setData(Qt::DecorationPropertyRole, v);
1654void QAbstractFormBuilder::saveTreeWidgetExtraInfo(QTreeWidget *treeWidget, DomWidget *ui_widget, DomWidget *ui_parentWidget)
1656 Q_UNUSED(ui_parentWidget);
1658 QList<DomColumn *> columns;
1660 const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
1662 for (
int c = 0; c<treeWidget->columnCount(); ++c) {
1663 auto *column =
new DomColumn;
1665 QList<DomProperty*> properties;
1667 for (
const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) {
1668 DomProperty *p = saveText(it.second, treeWidget->headerItem()->data(c, it.first.second));
1670 if (!p && it.first.first == Qt::EditRole && it.second ==
"text"_L1) {
1671 auto *defaultHeader =
new DomString;
1672 defaultHeader->setText(QString::number(c + 1));
1673 defaultHeader->setAttributeNotr(u"true"_s);
1674 p =
new DomProperty;
1675 p->setAttributeName(it.second);
1676 p->setElementString(defaultHeader);
1679 properties.append(p);
1682 for (
const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
1683 if (
const QVariant v = treeWidget->headerItem()->data(c, it.first); v.isValid()) {
1684 if (DomProperty *p = variantToDomProperty(
this, &QAbstractFormBuilderGadget::staticMetaObject, it.second, v))
1685 properties.append(p);
1689 if (DomProperty *p = saveResource(treeWidget->headerItem()->data(c, Qt::DecorationPropertyRole)))
1690 properties.append(p);
1692 column->setElementProperty(properties);
1693 columns.append(column);
1696 ui_widget->setElementColumn(columns);
1698 auto items = ui_widget->elementItem();
1700 QQueue<std::pair<QTreeWidgetItem *, DomItem *> > pendingQueue;
1701 for (
int i = 0; i < treeWidget->topLevelItemCount(); i++)
1702 pendingQueue.enqueue(std::make_pair(treeWidget->topLevelItem(i),
nullptr));
1704 while (!pendingQueue.isEmpty()) {
1705 const std::pair<QTreeWidgetItem *, DomItem *> pair = pendingQueue.dequeue();
1706 QTreeWidgetItem *item = pair.first;
1707 DomItem *parentDomItem = pair.second;
1709 auto *currentDomItem =
new DomItem;
1711 QList<DomProperty*> properties;
1712 for (
int c = 0; c < treeWidget->columnCount(); c++) {
1713 for (
const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) {
1714 if (DomProperty *p = saveText(it.second, item->data(c, it.first.second)))
1715 properties.append(p);
1718 for (
const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
1719 if (
const QVariant v = item->data(c, it.first); v.isValid()) {
1720 if (DomProperty *p = variantToDomProperty(
this, &QAbstractFormBuilderGadget::staticMetaObject, it.second, v))
1721 properties.append(p);
1725 if (DomProperty *p = saveResource(item->data(c, Qt::DecorationPropertyRole)))
1726 properties.append(p);
1728 storeItemFlags(item, &properties);
1729 currentDomItem->setElementProperty(properties);
1731 if (parentDomItem) {
1732 auto childrenItems = parentDomItem->elementItem();
1733 childrenItems.append(currentDomItem);
1734 parentDomItem->setElementItem(childrenItems);
1736 items.append(currentDomItem);
1738 for (
int i = 0; i < item->childCount(); i++)
1739 pendingQueue.enqueue(std::make_pair(item->child(i), currentDomItem));
1742 ui_widget->setElementItem(items);
1748void QAbstractFormBuilder::saveTableWidgetExtraInfo(QTableWidget *tableWidget, DomWidget *ui_widget, DomWidget *ui_parentWidget)
1750 Q_UNUSED(ui_parentWidget);
1753 QList<DomColumn *> columns;
1754 auto *header = tableWidget->horizontalHeader();
1755 for (
int c = 0; c < tableWidget->columnCount(); c++) {
1756 QList<DomProperty*> properties;
1757 QTableWidgetItem *item = tableWidget->horizontalHeaderItem(c);
1759 storeItemProps(
this, item, &properties, header->defaultAlignment());
1761 auto *column =
new DomColumn;
1762 column->setElementProperty(properties);
1763 columns.append(column);
1765 ui_widget->setElementColumn(columns);
1768 QList<DomRow *> rows;
1769 header = tableWidget->verticalHeader();
1770 for (
int r = 0; r < tableWidget->rowCount(); r++) {
1771 QList<DomProperty*> properties;
1772 QTableWidgetItem *item = tableWidget->verticalHeaderItem(r);
1774 storeItemProps(
this, item, &properties, header->defaultAlignment());
1776 auto *row =
new DomRow;
1777 row->setElementProperty(properties);
1780 ui_widget->setElementRow(rows);
1782 auto items = ui_widget->elementItem();
1783 for (
int r = 0; r < tableWidget->rowCount(); r++)
1784 for (
int c = 0; c < tableWidget->columnCount(); c++) {
1785 QTableWidgetItem *item = tableWidget->item(r, c);
1787 QList<DomProperty*> properties;
1788 storeItemPropsNFlags(
this, item, &properties);
1790 auto *domItem =
new DomItem;
1791 domItem->setAttributeRow(r);
1792 domItem->setAttributeColumn(c);
1793 domItem->setElementProperty(properties);
1794 items.append(domItem);
1798 ui_widget->setElementItem(items);
1824void QAbstractFormBuilder::saveComboBoxExtraInfo(QComboBox *comboBox, DomWidget *ui_widget, DomWidget *ui_parentWidget)
1826 Q_UNUSED(ui_parentWidget);
1827 auto ui_items = ui_widget->elementItem();
1829 const int count = comboBox->count();
1830 for (
int i=0; i < count; ++i) {
1833 DomProperty *textProperty = saveText(QFormBuilderStrings::textAttribute,
1834 comboBox->itemData(i, Qt::DisplayPropertyRole));
1835 DomProperty *iconProperty = saveResource(comboBox->itemData(i, Qt::DecorationPropertyRole));
1836 if (textProperty || iconProperty) {
1837 QList<DomProperty*> properties;
1839 properties.push_back(textProperty);
1841 properties.push_back(iconProperty);
1843 auto *ui_item =
new DomItem();
1844 ui_item->setElementProperty(properties);
1845 ui_items.push_back(ui_item);
1849 ui_widget->setElementItem(ui_items);
1894void QAbstractFormBuilder::saveItemViewExtraInfo(
const QAbstractItemView *itemView,
1895 DomWidget *ui_widget, DomWidget *)
1897 if (
const auto *treeView = qobject_cast<
const QTreeView*>(itemView)) {
1898 auto viewProperties = ui_widget->elementAttribute();
1899 const auto &headerProperties = computeProperties(treeView->header());
1900 for (
const QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
1901 const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
1902 + realPropertyName.mid(1);
1903 const QString fakePropertyName =
"header"_L1 + upperPropertyName;
1904 for (DomProperty *property : headerProperties) {
1905 if (property->attributeName() == realPropertyName) {
1906 property->setAttributeName(fakePropertyName);
1907 viewProperties << property;
1911 ui_widget->setElementAttribute(viewProperties);
1912 }
else if (
const auto *tableView = qobject_cast<
const QTableView*>(itemView)) {
1913 auto viewProperties = ui_widget->elementAttribute();
1914 for (QLatin1StringView headerPrefix : tableHeaderPrefixes) {
1915 const auto &headerProperties = headerPrefix ==
"horizontalHeader"_L1
1916 ? computeProperties(tableView->horizontalHeader())
1917 : computeProperties(tableView->verticalHeader());
1918 for (
const QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
1919 const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
1920 + realPropertyName.mid(1);
1921 const QString fakePropertyName = headerPrefix + upperPropertyName;
1922 for (DomProperty *property : std::as_const(headerProperties)) {
1923 if (property->attributeName() == realPropertyName) {
1924 property->setAttributeName(fakePropertyName);
1925 viewProperties << property;
1930 ui_widget->setElementAttribute(viewProperties);
1977void QAbstractFormBuilder::saveExtraInfo(QWidget *widget, DomWidget *ui_widget,
1978 DomWidget *ui_parentWidget)
1981#if QT_CONFIG(listwidget)
1982 }
else if (
auto *listWidget = qobject_cast<QListWidget*>(widget)) {
1983 saveListWidgetExtraInfo(listWidget, ui_widget, ui_parentWidget);
1985#if QT_CONFIG(treewidget)
1986 }
else if (
auto *treeWidget = qobject_cast<QTreeWidget*>(widget)) {
1987 saveTreeWidgetExtraInfo(treeWidget, ui_widget, ui_parentWidget);
1989#if QT_CONFIG(tablewidget)
1990 }
else if (
auto *tableWidget = qobject_cast<QTableWidget*>(widget)) {
1991 saveTableWidgetExtraInfo(tableWidget, ui_widget, ui_parentWidget);
1993#if QT_CONFIG(combobox)
1994 }
else if (
auto *comboBox = qobject_cast<QComboBox*>(widget)) {
1995 if (!QFormBuilderExtra::isQFontComboBox(widget))
1996 saveComboBoxExtraInfo(comboBox, ui_widget, ui_parentWidget);
1998 }
else if (
auto *ab = qobject_cast<QAbstractButton *>(widget)) {
1999 saveButtonExtraInfo(ab, ui_widget, ui_parentWidget);
2001 if (
auto *itemView = qobject_cast<QAbstractItemView *>(widget)) {
2002 saveItemViewExtraInfo(itemView, ui_widget, ui_parentWidget);
2026void QAbstractFormBuilder::loadTreeWidgetExtraInfo(DomWidget *ui_widget, QTreeWidget *treeWidget, QWidget *parentWidget)
2028 Q_UNUSED(parentWidget);
2029 const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
2030 const QMetaEnum itemFlags_enum = metaEnum<QAbstractFormBuilderGadget>(
"itemFlags");
2031 const auto &columns = ui_widget->elementColumn();
2032 if (!columns.isEmpty())
2033 treeWidget->setColumnCount(columns.size());
2035 for (qsizetype i = 0, size = columns.size(); i < size; ++i) {
2036 const DomColumn *c = columns.at(i);
2037 const DomPropertyHash properties = propertyMap(c->elementProperty());
2039 for (
const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
2040 if (DomProperty *p = properties.value(it.second)) {
2041 if (
const QVariant v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p); v.isValid())
2042 treeWidget->headerItem()->setData(i, it.first, v);
2046 for (
const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) {
2047 if (DomProperty *p = properties.value(it.second)) {
2048 const QVariant v = textBuilder()->loadText(p);
2049 QVariant nativeValue = textBuilder()->toNativeValue(v);
2050 treeWidget->headerItem()->setData(i, it.first.first, qvariant_cast<QString>(nativeValue));
2051 treeWidget->headerItem()->setData(i, it.first.second, v);
2055 if (DomProperty *p = properties.value(QFormBuilderStrings::iconAttribute)) {
2056 const QVariant v = resourceBuilder()->loadResource(workingDirectory(), p);
2057 QVariant nativeValue = resourceBuilder()->toNativeValue(v);
2058 treeWidget->headerItem()->setIcon(i, qvariant_cast<QIcon>(nativeValue));
2059 treeWidget->headerItem()->setData(i, Qt::DecorationPropertyRole, v);
2063 QQueue<std::pair<DomItem *, QTreeWidgetItem *> > pendingQueue;
2064 const auto &widgetElementItem = ui_widget->elementItem();
2065 for (DomItem *ui_item : widgetElementItem)
2066 pendingQueue.enqueue(std::make_pair(ui_item,
nullptr));
2068 while (!pendingQueue.isEmpty()) {
2069 const std::pair<DomItem *, QTreeWidgetItem *> pair = pendingQueue.dequeue();
2070 const DomItem *domItem = pair.first;
2071 QTreeWidgetItem *parentItem = pair.second;
2073 QTreeWidgetItem *currentItem =
nullptr;
2076 currentItem =
new QTreeWidgetItem(parentItem);
2078 currentItem =
new QTreeWidgetItem(treeWidget);
2080 const auto &properties = domItem->elementProperty();
2082 for (DomProperty *property : properties) {
2083 if (property->attributeName() == QFormBuilderStrings::flagsAttribute
2084 && !property->elementSet().isEmpty()) {
2085 currentItem->setFlags(enumKeysToValue<Qt::ItemFlags>(
2086 itemFlags_enum, property->elementSet().toLatin1().constData()));
2087 }
else if (property->attributeName() == QFormBuilderStrings::textAttribute
2088 && property->elementString()) {
2090 QVariant textV = textBuilder()->loadText(property);
2091 QVariant nativeValue = textBuilder()->toNativeValue(textV);
2092 currentItem->setText(col, qvariant_cast<QString>(nativeValue));
2093 currentItem->setData(col, Qt::DisplayPropertyRole, textV);
2094 }
else if (col >= 0) {
2095 if (property->attributeName() == QFormBuilderStrings::iconAttribute) {
2096 QVariant v = resourceBuilder()->loadResource(workingDirectory(), property);
2098 QVariant nativeValue = resourceBuilder()->toNativeValue(v);
2099 currentItem->setIcon(col, qvariant_cast<QIcon>(nativeValue));
2100 currentItem->setData(col, Qt::DecorationPropertyRole, v);
2103 int role = strings.treeItemRoleHash.value(property->attributeName(), (Qt::ItemDataRole)-1);
2105 if (
const QVariant v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, property); v.isValid())
2106 currentItem->setData(col, role, v);
2108 std::pair<Qt::ItemDataRole, Qt::ItemDataRole> rolePair =
2109 strings.treeItemTextRoleHash.value(property->attributeName(),
2110 std::make_pair((Qt::ItemDataRole)-1, (Qt::ItemDataRole)-1));
2111 if (rolePair.first >= 0) {
2112 QVariant textV = textBuilder()->loadText(property);
2113 QVariant nativeValue = textBuilder()->toNativeValue(textV);
2114 currentItem->setData(col, rolePair.first, qvariant_cast<QString>(nativeValue));
2115 currentItem->setData(col, rolePair.second, textV);
2122 const auto &elementItem = domItem->elementItem();
2123 for (DomItem *childItem : elementItem)
2124 pendingQueue.enqueue(std::make_pair(childItem, currentItem));
2132void QAbstractFormBuilder::loadTableWidgetExtraInfo(DomWidget *ui_widget, QTableWidget *tableWidget, QWidget *parentWidget)
2134 Q_UNUSED(parentWidget);
2136 const auto &columns = ui_widget->elementColumn();
2137 if (!columns.isEmpty())
2138 tableWidget->setColumnCount(columns.size());
2139 for (qsizetype i = 0, size = columns.size(); i < size; ++i) {
2140 DomColumn *c = columns.at(i);
2141 const DomPropertyHash properties = propertyMap(c->elementProperty());
2143 if (!properties.isEmpty()) {
2144 auto *item =
new QTableWidgetItem;
2145 loadItemProps(
this, item, properties);
2146 tableWidget->setHorizontalHeaderItem(i, item);
2150 const auto &rows = ui_widget->elementRow();
2151 if (!rows.isEmpty())
2152 tableWidget->setRowCount(rows.size());
2153 for (qsizetype i = 0, size = rows.size(); i < size; ++i) {
2154 const DomRow *r = rows.at(i);
2155 const DomPropertyHash properties = propertyMap(r->elementProperty());
2157 if (!properties.isEmpty()) {
2158 auto *item =
new QTableWidgetItem;
2159 loadItemProps(
this, item, properties);
2160 tableWidget->setVerticalHeaderItem(i, item);
2164 const auto &elementItem = ui_widget->elementItem();
2165 for (DomItem *ui_item : elementItem) {
2166 if (ui_item->hasAttributeRow() && ui_item->hasAttributeColumn()) {
2167 const DomPropertyHash properties = propertyMap(ui_item->elementProperty());
2168 auto *item =
new QTableWidgetItem;
2169 loadItemPropsNFlags(
this, item, properties);
2170 tableWidget->setItem(ui_item->attributeRow(), ui_item->attributeColumn(), item);
2178void QAbstractFormBuilder::loadComboBoxExtraInfo(DomWidget *ui_widget, QComboBox *comboBox, QWidget *parentWidget)
2180 Q_UNUSED(parentWidget);
2181 const auto &elementItem = ui_widget->elementItem();
2182 for (DomItem *ui_item : elementItem) {
2183 const auto &properties = ui_item->elementProperty();
2189 DomProperty *p = QFBE::propertyByName(properties, QFormBuilderStrings::textAttribute);
2190 if (p && p->elementString()) {
2191 textData = textBuilder()->loadText(p);
2192 text = qvariant_cast<QString>(textBuilder()->toNativeValue(textData));
2195 p = QFBE::propertyByName(properties, QFormBuilderStrings::iconAttribute);
2197 iconData = resourceBuilder()->loadResource(workingDirectory(), p);
2198 icon = qvariant_cast<QIcon>(resourceBuilder()->toNativeValue(iconData));
2201 comboBox->addItem(icon, text);
2202 comboBox->setItemData((comboBox->count()-1), iconData, Qt::DecorationPropertyRole);
2203 comboBox->setItemData((comboBox->count()-1), textData, Qt::DisplayPropertyRole);
2206 if (
auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
2207 comboBox->setCurrentIndex(currentIndex->elementNumber());
2229void QAbstractFormBuilder::loadButtonExtraInfo(
const DomWidget *ui_widget, QAbstractButton *button, QWidget *)
2231 using ButtonGroupHash = QFormBuilderExtra::ButtonGroupHash;
2233 const QString groupName = buttonGroupName(ui_widget);
2234 if (groupName.isEmpty())
2237 ButtonGroupHash &buttonGroups = d->buttonGroups();
2238 const auto it = buttonGroups.find(groupName);
2239 if (it == buttonGroups.end()) {
2240#ifdef QFORMINTERNAL_NAMESPACE
2241 uiLibWarning(QCoreApplication::translate(
"QAbstractFormBuilder",
"Invalid QButtonGroup reference '%1' referenced by '%2'.").arg(groupName, button->objectName()));
2246 QButtonGroup *&group = it.value().second;
2247 if (group ==
nullptr) {
2248 group =
new QButtonGroup;
2249 group->setObjectName(groupName);
2250 applyProperties(group, it.value().first->elementProperty());
2252 group->addButton(button);
2259void QAbstractFormBuilder::loadItemViewExtraInfo(DomWidget *ui_widget, QAbstractItemView *itemView,
2262 if (
auto *treeView = qobject_cast<QTreeView*>(itemView)) {
2263 const auto &allAttributes = ui_widget->elementAttribute();
2264 QList<DomProperty *> headerProperties;
2265 for (QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
2266 const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
2267 + realPropertyName.mid(1);
2268 const QString fakePropertyName =
"header"_L1 + upperPropertyName;
2269 for (DomProperty *attr : allAttributes) {
2270 if (attr->attributeName() == fakePropertyName) {
2271 attr->setAttributeName(realPropertyName);
2272 headerProperties << attr;
2276 applyProperties(treeView->header(), headerProperties);
2277 }
else if (
auto *tableView = qobject_cast<QTableView*>(itemView)) {
2278 const auto &allAttributes = ui_widget->elementAttribute();
2279 for (QLatin1StringView headerPrefix : tableHeaderPrefixes) {
2280 QList<DomProperty*> headerProperties;
2281 for (QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
2282 const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
2283 + realPropertyName.mid(1);
2284 const QString fakePropertyName = headerPrefix + upperPropertyName;
2285 for (DomProperty *attr : allAttributes) {
2286 if (attr->attributeName() == fakePropertyName) {
2287 attr->setAttributeName(realPropertyName);
2288 headerProperties << attr;
2292 if (headerPrefix ==
"horizontalHeader"_L1)
2293 applyProperties(tableView->horizontalHeader(), headerProperties);
2295 applyProperties(tableView->verticalHeader(), headerProperties);
2303void QAbstractFormBuilder::loadExtraInfo(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget)
2306#if QT_CONFIG(listwidget)
2307 }
else if (
auto *listWidget = qobject_cast<QListWidget*>(widget)) {
2308 loadListWidgetExtraInfo(ui_widget, listWidget, parentWidget);
2310#if QT_CONFIG(treewidget)
2311 }
else if (
auto *treeWidget = qobject_cast<QTreeWidget*>(widget)) {
2312 loadTreeWidgetExtraInfo(ui_widget, treeWidget, parentWidget);
2314#if QT_CONFIG(tablewidget)
2315 }
else if (
auto *tableWidget = qobject_cast<QTableWidget*>(widget)) {
2316 loadTableWidgetExtraInfo(ui_widget, tableWidget, parentWidget);
2318#if QT_CONFIG(combobox)
2319 }
else if (
auto *comboBox = qobject_cast<QComboBox*>(widget)) {
2320 if (!QFormBuilderExtra::isQFontComboBox(widget))
2321 loadComboBoxExtraInfo(ui_widget, comboBox, parentWidget);
2323#if QT_CONFIG(tabwidget)
2324 }
else if (
auto *tabWidget = qobject_cast<QTabWidget*>(widget)) {
2325 if (
auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
2326 tabWidget->setCurrentIndex(currentIndex->elementNumber());
2328#if QT_CONFIG(stackedwidget)
2329 }
else if (
auto *stackedWidget = qobject_cast<QStackedWidget*>(widget)) {
2330 if (
auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
2331 stackedWidget->setCurrentIndex(currentIndex->elementNumber());
2333#if QT_CONFIG(toolbox)
2334 }
else if (
auto *toolBox = qobject_cast<QToolBox*>(widget)) {
2335 if (
auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
2336 toolBox->setCurrentIndex(currentIndex->elementNumber());
2337 if (
auto *tabSpacing = QFBE::propertyByName(ui_widget->elementProperty(),
"tabSpacing"))
2338 toolBox->layout()->setSpacing(tabSpacing->elementNumber());
2340 }
else if (
auto *ab = qobject_cast<QAbstractButton *>(widget)) {
2341 loadButtonExtraInfo(ui_widget, ab, parentWidget);
2343 if (
auto *itemView = qobject_cast<QAbstractItemView *>(widget)) {
2344 loadItemViewExtraInfo(ui_widget, itemView, parentWidget);