From f9748f8cce6ed5dc202c0d3cda76dc640f38b305 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Tue, 13 Sep 2011 14:38:26 +0200 Subject: Remove uilib and QtUiTools from QtBase The code gets moved into the qttools repository, where it belongs naturally. Change-Id: Ia50bfe212ead3365d5c3bcb24d2c5e92e2e9de8e --- tools/uilib/abstractformbuilder.cpp | 3154 ----------------------------------- 1 file changed, 3154 deletions(-) delete mode 100644 tools/uilib/abstractformbuilder.cpp (limited to 'tools/uilib/abstractformbuilder.cpp') diff --git a/tools/uilib/abstractformbuilder.cpp b/tools/uilib/abstractformbuilder.cpp deleted file mode 100644 index da64a5ee27..0000000000 --- a/tools/uilib/abstractformbuilder.cpp +++ /dev/null @@ -1,3154 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Designer of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -**sw -****************************************************************************/ - -#include "abstractformbuilder.h" -#include "formbuilderextra_p.h" -#include "resourcebuilder_p.h" -#include "textbuilder_p.h" -#include "ui4_p.h" -#include "properties_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#ifndef QFORMINTERNAL_NAMESPACE -# include // Compiling within Designer -#endif - -#include - -#include - -#include - -Q_DECLARE_METATYPE(QWidgetList) - -static const char *buttonGroupPropertyC = "buttonGroup"; - -QT_BEGIN_NAMESPACE - -#ifdef QFORMINTERNAL_NAMESPACE -using namespace QFormInternal; -#endif - -class QFriendlyLayout: public QLayout -{ -public: - inline QFriendlyLayout() { Q_ASSERT(0); } - -#ifdef QFORMINTERNAL_NAMESPACE - friend class QFormInternal::QAbstractFormBuilder; -#else - friend class QAbstractFormBuilder; -#endif -}; - -/*! - \class QAbstractFormBuilder - - \brief The QAbstractFormBuilder class provides a default - implementation for classes that create user interfaces at - run-time. - - \inmodule QtDesigner - - QAbstractFormBuilder provides a standard interface and a default - implementation for constructing forms from user interface - files. It is not intended to be instantiated directly. Use the - QFormBuilder class to create user interfaces from UI files at - run-time. For example: - - \snippet doc/src/snippets/code/tools_designer_src_lib_uilib_abstractformbuilder.cpp 0 - - To override certain aspects of the form builder's behavior, - subclass QAbstractFormBuilder and reimplement the relevant virtual - functions: - - \list - \o load() handles reading of UI format files from arbitrary - QIODevices, and construction of widgets from the XML data - that they contain. - \o save() handles saving of widget details in UI format to - arbitrary QIODevices. - \o workingDirectory() and setWorkingDirectory() control the - directory in which forms are held. The form builder looks for - other resources on paths relative to this directory. - \endlist - - The QFormBuilder class is typically used by custom components and - applications that embed \QD. Standalone applications that need to - dynamically generate user interfaces at run-time use the - QUiLoader, found in the QtUiTools module. - - \sa {QtUiTools Module} -*/ - -/*! - Constructs a new form builder.*/ -QAbstractFormBuilder::QAbstractFormBuilder() : d(new QFormBuilderExtra) -{ - setResourceBuilder(new QResourceBuilder()); - setTextBuilder(new QTextBuilder()); -} - -/*! - Destroys the form builder.*/ -QAbstractFormBuilder::~QAbstractFormBuilder() -{ -} - -// Return UI file version from attribute 'version="4.0"' -static QPair uiVersion(const QString &attr) -{ - const QStringList versions = attr.split(QLatin1Char('.'), QString::SkipEmptyParts); - if (versions.size() >= 2) { - bool okMajor, okMinor; - const int majorVersion = versions.at(0).toInt(&okMajor); - const int minorVersion = versions.at(1).toInt(&okMinor); - if (okMajor && okMinor) - return QPair(majorVersion, minorVersion); - } - return QPair(-1, -1); -} - -static inline QString msgXmlError(const QXmlStreamReader &reader) -{ - return QCoreApplication::translate("QAbstractFormBuilder", "An error has occurred while reading the UI file at line %1, column %2: %3") - .arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString()); -} - -// Read and check the version and the (optional) language attribute -// of an element and leave reader positioned at . -static bool inline readUiAttributes(QXmlStreamReader &reader, const QString &language, QString *errorMessage) -{ - const QString uiElement = QLatin1String("ui"); - // Read up to first element - while (!reader.atEnd()) { - switch (reader.readNext()) { - case QXmlStreamReader::Invalid: - *errorMessage = msgXmlError(reader); - return false; - case QXmlStreamReader::StartElement: - if (reader.name().compare(uiElement, Qt::CaseInsensitive) == 0) { - const QString versionAttribute = QLatin1String("version"); - const QString languageAttribute = QLatin1String("language"); - const QXmlStreamAttributes attributes = reader.attributes(); - if (attributes.hasAttribute(versionAttribute)) { - const QString versionString = attributes.value(versionAttribute).toString(); - if (uiVersion(versionString).first < 4) { - *errorMessage = QCoreApplication::translate("QAbstractFormBuilder", "This file was created using Designer from Qt-%1 and cannot be read.") - .arg(versionString); - return false; - } // version error - } // has version - if (attributes.hasAttribute(languageAttribute)) { - // Check on optional language (Jambi) - const QString formLanguage = attributes.value(languageAttribute).toString(); - if (!formLanguage.isEmpty() && formLanguage.compare(language, Qt::CaseInsensitive)) { - *errorMessage = QCoreApplication::translate("QAbstractFormBuilder", "This file cannot be read because it was created using %1.").arg(formLanguage); - return false; - } // language error - } // has language - return true; - } // matched - break; - default: - break; - } - } - // No found. - *errorMessage = QCoreApplication::translate("QAbstractFormBuilder", "Invalid UI file: The root element is missing."); - return false; -} - -/*! - \fn QWidget *QAbstractFormBuilder::load(QIODevice *device, QWidget *parent) - - Loads an XML representation of a widget from the given \a device, - and constructs a new widget with the specified \a parent. - - \sa save(), errorString() -*/ -QWidget *QAbstractFormBuilder::load(QIODevice *dev, QWidget *parentWidget) -{ - QXmlStreamReader reader(dev); - d->m_errorString.clear(); - if (!readUiAttributes(reader, d->m_language, &d->m_errorString)) { - uiLibWarning(d->m_errorString); - return false; - } - DomUI ui; - ui.read(reader); - if (reader.hasError()) { - d->m_errorString = msgXmlError(reader); - uiLibWarning(d->m_errorString); - return 0; - } - - QWidget *widget = create(&ui, parentWidget); - if (!widget && d->m_errorString.isEmpty()) - d->m_errorString = QCoreApplication::translate("QAbstractFormBuilder", "Invalid UI file"); - return widget; -} - -/*! - \internal -*/ -QWidget *QAbstractFormBuilder::create(DomUI *ui, QWidget *parentWidget) -{ - typedef QFormBuilderExtra::ButtonGroupHash ButtonGroupHash; - - d->clear(); - if (const DomLayoutDefault *def = ui->elementLayoutDefault()) { - d->m_defaultMargin = def->hasAttributeMargin() ? def->attributeMargin() : INT_MIN; - d->m_defaultSpacing = def->hasAttributeSpacing() ? def->attributeSpacing() : INT_MIN; - } - - DomWidget *ui_widget = ui->elementWidget(); - if (!ui_widget) - return 0; - - initialize(ui); - - if (const DomButtonGroups *domButtonGroups = ui->elementButtonGroups()) - d->registerButtonGroups(domButtonGroups); - - if (QWidget *widget = create(ui_widget, parentWidget)) { - // Reparent button groups that were actually created to main container for them to be found in the signal/slot part - const ButtonGroupHash &buttonGroups = d->buttonGroups(); - if (!buttonGroups.empty()) { - const ButtonGroupHash::const_iterator cend = buttonGroups.constEnd(); - for (ButtonGroupHash::const_iterator it = buttonGroups.constBegin(); it != cend; ++it) - if (it.value().second) - it.value().second->setParent(widget); - } - createConnections(ui->elementConnections(), widget); - createResources(ui->elementResources()); // maybe this should go first, before create()... - applyTabStops(widget, ui->elementTabStops()); - d->applyInternalProperties(); - reset(); - d->clear(); - return widget; - } - d->clear(); - return 0; -} - -/*! - \internal - Retrieve relevant information from the custom widgets section. - Called by create(DomUI *, QWidget *); call manually if you - just use create(DomWidget *, QWidget *) on some child widget of DomUI. - */ - -void QAbstractFormBuilder::initialize(const DomUI *ui) -{ - typedef QList DomCustomWidgetList; - - DomCustomWidgets *domCustomWidgets = ui->elementCustomWidgets(); - createCustomWidgets(domCustomWidgets); - - if (domCustomWidgets) { - const DomCustomWidgetList customWidgets = domCustomWidgets->elementCustomWidget(); - if (!customWidgets.empty()) { - const DomCustomWidgetList::const_iterator cend = customWidgets.constEnd(); - for (DomCustomWidgetList::const_iterator it = customWidgets.constBegin(); it != cend; ++it) - d->storeCustomWidgetData((*it)->elementClass(), *it); - } - } -} - -/*! - \internal -*/ -QWidget *QAbstractFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidget) -{ - QWidget *w = createWidget(ui_widget->attributeClass(), parentWidget, ui_widget->attributeName()); - if (!w) - return 0; - - applyProperties(w, ui_widget->elementProperty()); - - foreach (DomAction *ui_action, ui_widget->elementAction()) { - QAction *child_action = create(ui_action, w); - Q_UNUSED( child_action ); - } - - foreach (DomActionGroup *ui_action_group, ui_widget->elementActionGroup()) { - QActionGroup *child_action_group = create(ui_action_group, w); - Q_UNUSED( child_action_group ); - } - - QWidgetList children; - foreach (DomWidget *ui_child, ui_widget->elementWidget()) { - if (QWidget *child = create(ui_child, w)) { - children += child; - } else { - const QString className = ui_child->elementClass().empty() ? QString() : ui_child->elementClass().front(); - uiLibWarning(QCoreApplication::translate("QAbstractFormBuilder", "The creation of a widget of the class '%1' failed.").arg(className)); - } - } - - foreach (DomLayout *ui_lay, ui_widget->elementLayout()) { - QLayout *child_lay = create(ui_lay, 0, w); - Q_UNUSED( child_lay ); - } - - const QList addActions = ui_widget->elementAddAction(); - if (!addActions.empty()) { - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - foreach (DomActionRef *ui_action_ref, addActions) { - const QString name = ui_action_ref->attributeName(); - if (name == strings.separator) { - QAction *sep = new QAction(w); - sep->setSeparator(true); - w->addAction(sep); - addMenuAction(sep); - } else if (QAction *a = d->m_actions.value(name)) { - w->addAction(a); - } else if (QActionGroup *g = d->m_actionGroups.value(name)) { - w->addActions(g->actions()); - } else if (QMenu *menu = w->findChild(name)) { - w->addAction(menu->menuAction()); - addMenuAction(menu->menuAction()); - } - } - } - - loadExtraInfo(ui_widget, w, parentWidget); -#ifndef QT_FORMBUILDER_NO_SCRIPT - QString scriptErrorMessage; - d->formScriptRunner().run(ui_widget, - d->customWidgetScript(ui_widget->attributeClass()), - w, children, &scriptErrorMessage); -#endif - addItem(ui_widget, w, parentWidget); - - if (qobject_cast(w) && parentWidget) - w->setAttribute(Qt::WA_Moved, false); // So that QDialog::setVisible(true) will center it - - const QStringList zOrderNames = ui_widget->elementZOrder(); - if (!zOrderNames.isEmpty()) { - QList zOrder = qvariant_cast(w->property("_q_zOrder")); - foreach (const QString &widgetName, zOrderNames) { - if (QWidget *child = w->findChild(widgetName)) { - if (child->parentWidget() == w) { - zOrder.removeAll(child); - zOrder.append(child); - child->raise(); - } - } - } - w->setProperty("_q_zOrder", QVariant::fromValue(zOrder)); - } - - return w; -} - -/*! - \internal -*/ -QAction *QAbstractFormBuilder::create(DomAction *ui_action, QObject *parent) -{ - QAction *a = createAction(parent, ui_action->attributeName()); - if (!a) - return 0; - - d->m_actions.insert(ui_action->attributeName(), a); - applyProperties(a, ui_action->elementProperty()); - return a; -} - -/*! - \internal -*/ -QActionGroup *QAbstractFormBuilder::create(DomActionGroup *ui_action_group, QObject *parent) -{ - QActionGroup *a = createActionGroup(parent, ui_action_group->attributeName()); - if (!a) - return 0; - d->m_actionGroups.insert(ui_action_group->attributeName(), a); - applyProperties(a, ui_action_group->elementProperty()); - - foreach (DomAction *ui_action, ui_action_group->elementAction()) { - QAction *child_action = create(ui_action, a); - Q_UNUSED( child_action ); - } - - foreach (DomActionGroup *g, ui_action_group->elementActionGroup()) { - QActionGroup *child_action_group = create(g, parent); - Q_UNUSED( child_action_group ); - } - - return a; -} - -// figure out the toolbar area of a DOM attrib list. -// By legacy, it is stored as an integer. As of 4.3.0, it is the enumeration value. -Qt::ToolBarArea QAbstractFormBuilder::toolbarAreaFromDOMAttributes(const DomPropertyHash &attributes) { - const DomProperty *attr = attributes.value(QFormBuilderStrings::instance().toolBarAreaAttribute); - if (!attr) - return Qt::TopToolBarArea; - switch(attr->kind()) { - case DomProperty::Number: - return static_cast(attr->elementNumber()); - case DomProperty::Enum: - return enumKeyOfObjectToValue("toolBarArea", attr->elementEnum().toLatin1()); - default: - break; - } - return Qt::TopToolBarArea; -} - -/*! - \internal -*/ -bool QAbstractFormBuilder::addItem(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget) -{ - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - const DomPropertyHash attributes = propertyMap(ui_widget->elementAttribute()); - - if (parentWidget == 0) - return true; - // Check special cases. First: Custom container - const QString className = QLatin1String(parentWidget->metaObject()->className()); - const QString addPageMethod = d->customWidgetAddPageMethod(className); - if (!addPageMethod.isEmpty()) { - // If this fails ( non-existent or non-slot), use ContainerExtension in Designer, else it can't be helped - return QMetaObject::invokeMethod(parentWidget, addPageMethod.toUtf8().constData(), Qt::DirectConnection, Q_ARG(QWidget*, widget)); - } - - if (QMainWindow *mw = qobject_cast(parentWidget)) { - -#ifndef QT_NO_MENUBAR - // the menubar - if (QMenuBar *menuBar = qobject_cast(widget)) { - mw->setMenuBar(menuBar); - return true; - } -#endif - -#ifndef QT_NO_TOOLBAR - // apply the toolbar's attributes - else if (QToolBar *toolBar = qobject_cast(widget)) { - mw->addToolBar(toolbarAreaFromDOMAttributes(attributes), toolBar); - // check break - if (const DomProperty *attr = attributes.value(strings.toolBarBreakAttribute)) - if (attr->elementBool() == strings.trueValue) - mw->insertToolBarBreak (toolBar); - - return true; - } -#endif - -#ifndef QT_NO_STATUSBAR - // statusBar - else if (QStatusBar *statusBar = qobject_cast(widget)) { - mw->setStatusBar(statusBar); - return true; - } -#endif - -#ifndef QT_NO_DOCKWIDGET - // apply the dockwidget's attributes - else if (QDockWidget *dockWidget = qobject_cast(widget)) { - if (const DomProperty *attr = attributes.value(strings.dockWidgetAreaAttribute)) { - Qt::DockWidgetArea area = static_cast(attr->elementNumber()); - if (!dockWidget->isAreaAllowed(area)) { - if (dockWidget->isAreaAllowed(Qt::LeftDockWidgetArea)) - area = Qt::LeftDockWidgetArea; - else if (dockWidget->isAreaAllowed(Qt::RightDockWidgetArea)) - area = Qt::RightDockWidgetArea; - else if (dockWidget->isAreaAllowed(Qt::TopDockWidgetArea)) - area = Qt::TopDockWidgetArea; - else if (dockWidget->isAreaAllowed(Qt::BottomDockWidgetArea)) - area = Qt::BottomDockWidgetArea; - } - mw->addDockWidget(area, dockWidget); - } else { - mw->addDockWidget(Qt::LeftDockWidgetArea, dockWidget); - } - return true; - } -#endif - - else if (! mw->centralWidget()) { - mw->setCentralWidget(widget); - return true; - } - } - -#ifndef QT_NO_TABWIDGET - else if (QTabWidget *tabWidget = qobject_cast(parentWidget)) { - widget->setParent(0); - - const int tabIndex = tabWidget->count(); - if (const DomProperty *titleP = attributes.value(strings.titleAttribute, 0)) - tabWidget->addTab(widget, toString(titleP->elementString())); - else - tabWidget->addTab(widget, strings.defaultTitle); - - if (DomProperty *picon = attributes.value(strings.iconAttribute)) { - QVariant v = resourceBuilder()->loadResource(workingDirectory(), picon); - QVariant nativeValue = resourceBuilder()->toNativeValue(v); - tabWidget->setTabIcon(tabIndex, qvariant_cast(nativeValue)); - } - -#ifndef QT_NO_TOOLTIP - if (const DomProperty *ptoolTip = attributes.value(strings.toolTipAttribute)) { - tabWidget->setTabToolTip(tabIndex, toString(ptoolTip->elementString())); - } -#endif - -#ifndef QT_NO_WHATSTHIS - if (const DomProperty *pwhatsThis = attributes.value(strings.whatsThisAttribute)) { - tabWidget->setTabWhatsThis(tabIndex, toString(pwhatsThis->elementString())); - } -#endif - - return true; - } -#endif - -#ifndef QT_NO_TOOLBOX - else if (QToolBox *toolBox = qobject_cast(parentWidget)) { - const int tabIndex = toolBox->count(); - if (const DomProperty *labelP = attributes.value(strings.labelAttribute, 0)) - toolBox->addItem(widget, toString(labelP->elementString())); - else - toolBox->addItem(widget, strings.defaultTitle); - - if (DomProperty *picon = attributes.value(strings.iconAttribute)) { - QVariant v = resourceBuilder()->loadResource(workingDirectory(), picon); - QVariant nativeValue = resourceBuilder()->toNativeValue(v); - toolBox->setItemIcon(tabIndex, qvariant_cast(nativeValue)); - } - -#ifndef QT_NO_TOOLTIP - if (const DomProperty *ptoolTip = attributes.value(strings.toolTipAttribute)) { - toolBox->setItemToolTip(tabIndex, toString(ptoolTip->elementString())); - } -#endif - - return true; - } -#endif - -#ifndef QT_NO_STACKEDWIDGET - else if (QStackedWidget *stackedWidget = qobject_cast(parentWidget)) { - stackedWidget->addWidget(widget); - return true; - } -#endif - -#ifndef QT_NO_SPLITTER - else if (QSplitter *splitter = qobject_cast(parentWidget)) { - splitter->addWidget(widget); - return true; - } -#endif - -#ifndef QT_NO_MDIAREA - else if (QMdiArea *mdiArea = qobject_cast(parentWidget)) { - mdiArea->addSubWindow(widget); - return true; - } -#endif - -#ifndef QT_NO_WORKSPACE - else if (QWorkspace *ws = qobject_cast(parentWidget)) { - ws->addWindow(widget); - return true; - } -#endif - -#ifndef QT_NO_DOCKWIDGET - else if (QDockWidget *dockWidget = qobject_cast(parentWidget)) { - dockWidget->setWidget(widget); - return true; - } -#endif - -#ifndef QT_NO_SCROLLAREA - else if (QScrollArea *scrollArea = qobject_cast(parentWidget)) { - scrollArea->setWidget(widget); - return true; - } -#endif - -#ifndef QT_NO_WIZARD - else if (QWizard *wizard = qobject_cast(parentWidget)) { - QWizardPage *page = qobject_cast(widget); - if (!page) { - uiLibWarning(QCoreApplication::translate("QAbstractFormBuilder", "Attempt to add child that is not of class QWizardPage to QWizard.")); - return false; - } - wizard->addPage(page); - return true; - } -#endif - return false; -} - -/*! - \internal -*/ -void QAbstractFormBuilder::layoutInfo(DomLayout *ui_layout, QObject *parent, int *margin, int *spacing) -{ - Q_UNUSED(parent) - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - const DomPropertyHash properties = propertyMap(ui_layout->elementProperty()); - - int mar = INT_MIN; - int spac = INT_MIN; - if (const DomProperty *p = properties.value(strings.marginProperty, 0)) - mar = p->elementNumber(); - - if (const DomProperty *p = properties.value(strings.spacingProperty, 0)) - spac = p->elementNumber(); - -#ifdef Q_OS_MAC - // here we recognize UI file < 4.3 (no we don't store margin property) - if (mar != INT_MIN) { - const int defaultMargin = parent->inherits("QLayoutWidget") ? 0 : 9; - if (mar == defaultMargin) - mar = INT_MIN; - if (spac == 6) - spac = INT_MIN; - - if (mar == INT_MIN || spac == INT_MIN) { - QList properties = ui_layout->elementProperty(); - QMutableListIterator it(properties); - while (it.hasNext()) { - DomProperty *prop = it.next(); - if ((mar == INT_MIN && prop->attributeName() == strings.marginProperty) || - (spac == INT_MIN && prop->attributeName() == strings.spacingProperty)) { - it.remove(); - delete prop; - } - } - ui_layout->setElementProperty(properties); - } - } -#endif - if (margin) - *margin = mar; - if (spacing) - *spacing = spac; -} - -/*! - \internal -*/ -QLayout *QAbstractFormBuilder::create(DomLayout *ui_layout, QLayout *parentLayout, QWidget *parentWidget) -{ - QObject *p = parentLayout; - - if (p == 0) - p = parentWidget; - - Q_ASSERT(p != 0); - - bool tracking = false; - - if (p == parentWidget && parentWidget->layout()) { - tracking = true; - p = parentWidget->layout(); - } - - QLayout *layout = createLayout(ui_layout->attributeClass(), p, ui_layout->hasAttributeName() ? ui_layout->attributeName() : QString()); - - if (layout == 0) - return 0; - - if (tracking && layout->parent() == 0) { - QBoxLayout *box = qobject_cast(parentWidget->layout()); - if (!box) { // only QBoxLayout is supported - const QString widgetClass = QString::fromUtf8(parentWidget->metaObject()->className()); - const QString layoutClass = QString::fromUtf8(parentWidget->layout()->metaObject()->className()); - const QString msg = QCoreApplication::translate("QAbstractFormBuilder", "Attempt to add a layout to a widget '%1' (%2) which already has a layout of non-box type %3.\n" - "This indicates an inconsistency in the ui-file."). - arg(parentWidget->objectName(), widgetClass, layoutClass); - uiLibWarning(msg); - return 0; - } - box->addLayout(layout); - } - - int margin = INT_MIN, spacing = INT_MIN; - layoutInfo(ui_layout, p, &margin, &spacing); - - if (margin != INT_MIN) { - layout->setMargin(margin); - } else { - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - int left, top, right, bottom; - left = top = right = bottom = -1; - layout->getContentsMargins(&left, &top, &right, &bottom); - - const DomPropertyHash properties = propertyMap(ui_layout->elementProperty()); - - if (const DomProperty *p = properties.value(strings.leftMarginProperty, 0)) - left = p->elementNumber(); - - if (const DomProperty *p = properties.value(strings.topMarginProperty, 0)) - top = p->elementNumber(); - - if (const DomProperty *p = properties.value(strings.rightMarginProperty, 0)) - right = p->elementNumber(); - - if (const DomProperty *p = properties.value(strings.bottomMarginProperty, 0)) - bottom = p->elementNumber(); - - layout->setContentsMargins(left, top, right, bottom); - } - - if (spacing != INT_MIN) { - layout->setSpacing(spacing); - } else { - QGridLayout *grid = qobject_cast(layout); - if (grid) { - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - const DomPropertyHash properties = propertyMap(ui_layout->elementProperty()); - - if (const DomProperty *p = properties.value(strings.horizontalSpacingProperty, 0)) - grid->setHorizontalSpacing(p->elementNumber()); - if (const DomProperty *p = properties.value(strings.verticalSpacingProperty, 0)) - grid->setVerticalSpacing(p->elementNumber()); - } - } - - applyProperties(layout, ui_layout->elementProperty()); - - foreach (DomLayoutItem *ui_item, ui_layout->elementItem()) { - if (QLayoutItem *item = create(ui_item, layout, parentWidget)) { - addItem(ui_item, item, layout); - } - } - // Check the box stretch attributes - if (QBoxLayout *box = qobject_cast(layout)) { - const QString boxStretch = ui_layout->attributeStretch(); - if (!boxStretch.isEmpty()) - QFormBuilderExtra::setBoxLayoutStretch(boxStretch, box); - } - // Check the grid stretch/minimum size attributes - if (QGridLayout *grid = qobject_cast(layout)) { - // Stretch - const QString gridRowStretch = ui_layout->attributeRowStretch(); - if (!gridRowStretch.isEmpty()) - QFormBuilderExtra::setGridLayoutRowStretch(gridRowStretch, grid); - const QString gridColumnStretch = ui_layout->attributeColumnStretch(); - if (!gridColumnStretch.isEmpty()) - QFormBuilderExtra::setGridLayoutColumnStretch(gridColumnStretch, grid); - // Minimum size - const QString gridColumnMinimumWidth = ui_layout->attributeColumnMinimumWidth(); - if (!gridColumnMinimumWidth.isEmpty()) - QFormBuilderExtra::setGridLayoutColumnMinimumWidth(gridColumnMinimumWidth, grid); - const QString gridRowMinimumHeight = ui_layout->attributeRowMinimumHeight(); - if (!gridRowMinimumHeight.isEmpty()) - QFormBuilderExtra::setGridLayoutRowMinimumHeight(gridRowMinimumHeight, grid); - } - return layout; -} - -#ifndef QT_NO_FORMLAYOUT -static inline QFormLayout::ItemRole formLayoutRole(int column, int colspan) -{ - if (colspan > 1) - return QFormLayout::SpanningRole; - return column == 0 ? QFormLayout::LabelRole : QFormLayout::FieldRole; -} -#endif - -static inline QString alignmentValue(Qt::Alignment a) -{ - QString h,v; - switch (a & Qt::AlignHorizontal_Mask) { - case Qt::AlignLeft: - h = QLatin1String("Qt::AlignLeft"); - break; - case Qt::AlignRight: - h = QLatin1String("Qt::AlignRight"); - break; - case Qt::AlignHCenter: - h = QLatin1String("Qt::AlignHCenter"); - break; - case Qt::AlignJustify: - h = QLatin1String("Qt::AlignJustify"); - break; - } - switch (a & Qt::AlignVertical_Mask) { - case Qt::AlignTop: - v = QLatin1String("Qt::AlignTop"); - break; - case Qt::AlignBottom: - v = QLatin1String("Qt::AlignBottom"); - break; - case Qt::AlignVCenter: - v = QLatin1String("Qt::AlignVCenter"); - break; - } - if (h.isEmpty() && v.isEmpty()) - return QString(); - if (!v.isEmpty()) { - if (!h.isEmpty()) - h += QLatin1Char('|'); - h += v; - } - return h; -} - -static inline Qt::Alignment alignmentFromDom(const QString &in) -{ - Qt::Alignment rc = 0; - if (!in.isEmpty()) { - foreach (const QString &f, in.split(QLatin1Char('|'))) { - if (f == QLatin1String("Qt::AlignLeft")) { - rc |= Qt::AlignLeft; - } else if (f == QLatin1String("Qt::AlignRight")) { - rc |= Qt::AlignRight; - } else if (f == QLatin1String("Qt::AlignHCenter")) { - rc |= Qt::AlignHCenter; - } else if (f == QLatin1String("Qt::AlignJustify")) { - rc |= Qt::AlignJustify; - } else if (f == QLatin1String("Qt::AlignTop")) { - rc |= Qt::AlignTop; - } else if (f == QLatin1String("Qt::AlignBottom")) { - rc |= Qt::AlignBottom; - } else if (f == QLatin1String("Qt::AlignVCenter")) { - rc |= Qt::AlignVCenter; - } - } - } - return rc; -} - -/*! - \internal -*/ -bool QAbstractFormBuilder::addItem(DomLayoutItem *ui_item, QLayoutItem *item, QLayout *layout) -{ - // Calling addChildWidget(), etc. is required to maintain consistency of the layouts, - // see documentation of addItem(), which should ideally not be used. - if (item->widget()) { - static_cast(layout)->addChildWidget(item->widget()); - } else if (item->layout()) { - static_cast(layout)->addChildLayout(item->layout()); - } else if (item->spacerItem()) { - // nothing to do - } else { - return false; - } - - if (QGridLayout *grid = qobject_cast(layout)) { - const int rowSpan = ui_item->hasAttributeRowSpan() ? ui_item->attributeRowSpan() : 1; - const int colSpan = ui_item->hasAttributeColSpan() ? ui_item->attributeColSpan() : 1; - grid->addItem(item, ui_item->attributeRow(), ui_item->attributeColumn(), - rowSpan, colSpan, item->alignment()); - return true; - } -#ifndef QT_NO_FORMLAYOUT - if (QFormLayout *form = qobject_cast(layout)) { - const int row = ui_item->attributeRow(); - const int colSpan = ui_item->hasAttributeColSpan() ? ui_item->attributeColSpan() : 1; - form->setItem(row, formLayoutRole(ui_item->attributeColumn(), colSpan), item); - return true; - } - -#endif - layout->addItem(item); - return true; -} - -/*! - \internal -*/ -QLayoutItem *QAbstractFormBuilder::create(DomLayoutItem *ui_layoutItem, QLayout *layout, QWidget *parentWidget) -{ - switch (ui_layoutItem->kind()) { - case DomLayoutItem::Widget: { - if (QWidget *w = create(ui_layoutItem->elementWidget(), parentWidget)) { -#ifdef QFORMINTERNAL_NAMESPACE // uilib - QWidgetItem *item = new QWidgetItemV2(w); -#else // Within Designer: Use factory method that returns special items that refuse to shrink to 0,0 - QWidgetItem *item = QLayoutPrivate::createWidgetItem(layout, w); -#endif - item->setAlignment(alignmentFromDom(ui_layoutItem->attributeAlignment())); - return item; - } - qWarning() << QCoreApplication::translate("QAbstractFormBuilder", "Empty widget item in %1 '%2'.").arg(QString::fromUtf8(layout->metaObject()->className()), layout->objectName()); - return 0; - } - case DomLayoutItem::Spacer: { - QSize size(0, 0); - QSizePolicy::Policy sizeType = QSizePolicy::Expanding; - bool isVspacer = false; - - const DomSpacer *ui_spacer = ui_layoutItem->elementSpacer(); - - const QMetaEnum sizePolicy_enum = metaEnum("sizeType"); - const QMetaEnum orientation_enum = metaEnum("orientation"); - - const QList spacerProperties = ui_spacer->elementProperty(); - if (!spacerProperties.empty()) { - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - foreach (DomProperty *p, spacerProperties) { - const QVariant v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p); // ### remove me - if (v.isNull()) - continue; - if (p->attributeName() == strings.sizeHintProperty && p->kind() == DomProperty::Size) { - size = v.toSize(); // ### remove me - } else if (p->attributeName() == strings.sizeTypeProperty && p->kind() == DomProperty::Enum) { - sizeType = static_cast(v.toInt()); - } else if (p->attributeName() == strings.orientationProperty && p->kind() == DomProperty::Enum) { - const Qt::Orientation o = static_cast(v.toInt()); - isVspacer = (o == Qt::Vertical); - } - } - } - - QSpacerItem *spacer = 0; - if (isVspacer) - spacer = new QSpacerItem(size.width(), size.height(), QSizePolicy::Minimum, sizeType); - else - spacer = new QSpacerItem(size.width(), size.height(), sizeType, QSizePolicy::Minimum); - return spacer; } - - case DomLayoutItem::Layout: - return create(ui_layoutItem->elementLayout(), layout, parentWidget); - - default: - break; - } - - return 0; -} - -/*! - \internal -*/ -void QAbstractFormBuilder::applyProperties(QObject *o, const QList &properties) -{ - typedef QList DomPropertyList; - - if (properties.empty()) - return; - - const DomPropertyList::const_iterator cend = properties.constEnd(); - for (DomPropertyList::const_iterator it = properties.constBegin(); it != cend; ++it) { - const QVariant v = toVariant(o->metaObject(), *it); - if (!v.isNull()) { - const QString attributeName = (*it)->attributeName(); - if (!d->applyPropertyInternally(o, attributeName, v)) - o->setProperty(attributeName.toUtf8(), v); - } - } -} - - -/*! - \internal - Check whether a property is applied internally by QAbstractFormBuilder. Call this - from overwritten applyProperties(). -*/ - -bool QAbstractFormBuilder::applyPropertyInternally(QObject *o, const QString &propertyName, const QVariant &value) -{ - return d->applyPropertyInternally(o,propertyName, value); -} - -/*! - \internal -*/ - -QVariant QAbstractFormBuilder::toVariant(const QMetaObject *meta, DomProperty *p) -{ - return domPropertyToVariant(this, meta, p); -} - -/*! - \internal -*/ -void QAbstractFormBuilder::setupColorGroup(QPalette &palette, QPalette::ColorGroup colorGroup, - DomColorGroup *group) -{ - // old format - const QList colors = group->elementColor(); - for (int role = 0; role < colors.size(); ++role) { - const DomColor *color = colors.at(role); - const QColor c(color->elementRed(), color->elementGreen(), color->elementBlue()); - palette.setColor(colorGroup, QPalette::ColorRole(role), c); - } - - // new format - const QMetaEnum colorRole_enum = metaEnum("colorRole"); - - const QList colorRoles = group->elementColorRole(); - for (int role = 0; role < colorRoles.size(); ++role) { - const DomColorRole *colorRole = colorRoles.at(role); - - if (colorRole->hasAttributeRole()) { - const int r = colorRole_enum.keyToValue(colorRole->attributeRole().toLatin1()); - if (r != -1) { - const QBrush br = setupBrush(colorRole->elementBrush()); - palette.setBrush(colorGroup, static_cast(r), br); - } - } - } -} - -/*! - \internal -*/ -DomColorGroup *QAbstractFormBuilder::saveColorGroup(const QPalette &palette) -{ - - const QMetaEnum colorRole_enum = metaEnum("colorRole"); - - DomColorGroup *group = new DomColorGroup(); - QList colorRoles; - - const uint mask = palette.resolve(); - for (int role = QPalette::WindowText; role < QPalette::NColorRoles; ++role) { - if (mask & (1 << role)) { - QBrush br = palette.brush(QPalette::ColorRole(role)); - - DomColorRole *colorRole = new DomColorRole(); - colorRole->setElementBrush(saveBrush(br)); - colorRole->setAttributeRole(QLatin1String(colorRole_enum.valueToKey(role))); - colorRoles.append(colorRole); - } - } - - group->setElementColorRole(colorRoles); - return group; -} - -/*! - \internal -*/ -QBrush QAbstractFormBuilder::setupBrush(DomBrush *brush) -{ - QBrush br; - if (!brush->hasAttributeBrushStyle()) - return br; - - const Qt::BrushStyle style = enumKeyOfObjectToValue("brushStyle", brush->attributeBrushStyle().toLatin1()); - - if (style == Qt::LinearGradientPattern || - style == Qt::RadialGradientPattern || - style == Qt::ConicalGradientPattern) { - const QMetaEnum gradientType_enum = metaEnum("gradientType"); - const QMetaEnum gradientSpread_enum = metaEnum("gradientSpread"); - const QMetaEnum gradientCoordinate_enum = metaEnum("gradientCoordinate"); - - const DomGradient *gradient = brush->elementGradient(); - const QGradient::Type type = enumKeyToValue(gradientType_enum, gradient->attributeType().toLatin1()); - - - QGradient *gr = 0; - - if (type == QGradient::LinearGradient) { - gr = new QLinearGradient(QPointF(gradient->attributeStartX(), gradient->attributeStartY()), - QPointF(gradient->attributeEndX(), gradient->attributeEndY())); - } else if (type == QGradient::RadialGradient) { - gr = new QRadialGradient(QPointF(gradient->attributeCentralX(), gradient->attributeCentralY()), - gradient->attributeRadius(), - QPointF(gradient->attributeFocalX(), gradient->attributeFocalY())); - } else if (type == QGradient::ConicalGradient) { - gr = new QConicalGradient(QPointF(gradient->attributeCentralX(), gradient->attributeCentralY()), - gradient->attributeAngle()); - } - if (!gr) - return br; - - const QGradient::Spread spread = enumKeyToValue(gradientSpread_enum, gradient->attributeSpread().toLatin1()); - gr->setSpread(spread); - - const QGradient::CoordinateMode coord = enumKeyToValue(gradientCoordinate_enum, gradient->attributeCoordinateMode().toLatin1()); - gr->setCoordinateMode(coord); - - const QList stops = gradient->elementGradientStop(); - QListIterator it(stops); - while (it.hasNext()) { - const DomGradientStop *stop = it.next(); - const DomColor *color = stop->elementColor(); - gr->setColorAt(stop->attributePosition(), QColor::fromRgb(color->elementRed(), - color->elementGreen(), color->elementBlue(), color->attributeAlpha())); - } - br = QBrush(*gr); - delete gr; - } else if (style == Qt::TexturePattern) { - const DomProperty *texture = brush->elementTexture(); - if (texture && texture->kind() == DomProperty::Pixmap) { - br.setTexture(domPropertyToPixmap(texture)); - } - } else { - const DomColor *color = brush->elementColor(); - br.setColor(QColor::fromRgb(color->elementRed(), - color->elementGreen(), color->elementBlue(), color->attributeAlpha())); - br.setStyle((Qt::BrushStyle)style); - } - return br; -} - -/*! - \internal -*/ -DomBrush *QAbstractFormBuilder::saveBrush(const QBrush &br) -{ - const QMetaEnum brushStyle_enum = metaEnum("brushStyle"); - - DomBrush *brush = new DomBrush(); - const Qt::BrushStyle style = br.style(); - brush->setAttributeBrushStyle(QLatin1String(brushStyle_enum.valueToKey(style))); - if (style == Qt::LinearGradientPattern || - style == Qt::RadialGradientPattern || - style == Qt::ConicalGradientPattern) { - const QMetaEnum gradientType_enum = metaEnum("gradientType"); - const QMetaEnum gradientSpread_enum = metaEnum("gradientSpread"); - const QMetaEnum gradientCoordinate_enum = metaEnum("gradientCoordinate"); - - DomGradient *gradient = new DomGradient(); - const QGradient *gr = br.gradient(); - const QGradient::Type type = gr->type(); - gradient->setAttributeType(QLatin1String(gradientType_enum.valueToKey(type))); - gradient->setAttributeSpread(QLatin1String(gradientSpread_enum.valueToKey(gr->spread()))); - gradient->setAttributeCoordinateMode(QLatin1String(gradientCoordinate_enum.valueToKey(gr->coordinateMode()))); - QList stops; - QGradientStops st = gr->stops(); - QVectorIterator > it(st); - while (it.hasNext()) { - const QPair pair = it.next(); - DomGradientStop *stop = new DomGradientStop(); - stop->setAttributePosition(pair.first); - DomColor *color = new DomColor(); - color->setElementRed(pair.second.red()); - color->setElementGreen(pair.second.green()); - color->setElementBlue(pair.second.blue()); - color->setAttributeAlpha(pair.second.alpha()); - stop->setElementColor(color); - stops.append(stop); - } - gradient->setElementGradientStop(stops); - if (type == QGradient::LinearGradient) { - QLinearGradient *lgr = (QLinearGradient *)(gr); - gradient->setAttributeStartX(lgr->start().x()); - gradient->setAttributeStartY(lgr->start().y()); - gradient->setAttributeEndX(lgr->finalStop().x()); - gradient->setAttributeEndY(lgr->finalStop().y()); - } else if (type == QGradient::RadialGradient) { - QRadialGradient *rgr = (QRadialGradient *)(gr); - gradient->setAttributeCentralX(rgr->center().x()); - gradient->setAttributeCentralY(rgr->center().y()); - gradient->setAttributeFocalX(rgr->focalPoint().x()); - gradient->setAttributeFocalY(rgr->focalPoint().y()); - gradient->setAttributeRadius(rgr->radius()); - } else if (type == QGradient::ConicalGradient) { - QConicalGradient *cgr = (QConicalGradient *)(gr); - gradient->setAttributeCentralX(cgr->center().x()); - gradient->setAttributeCentralY(cgr->center().y()); - gradient->setAttributeAngle(cgr->angle()); - } - - brush->setElementGradient(gradient); - } else if (style == Qt::TexturePattern) { - const QPixmap pixmap = br.texture(); - if (!pixmap.isNull()) { - DomProperty *p = new DomProperty; - setPixmapProperty(*p, pixmapPaths(pixmap)); - brush->setElementTexture(p); - } - } else { - QColor c = br.color(); - DomColor *color = new DomColor(); - color->setElementRed(c.red()); - color->setElementGreen(c.green()); - color->setElementBlue(c.blue()); - color->setAttributeAlpha(c.alpha()); - brush->setElementColor(color); - } - return brush; -} - -/*! - \internal -*/ -QWidget *QAbstractFormBuilder::createWidget(const QString &widgetName, QWidget *parentWidget, const QString &name) -{ - Q_UNUSED(widgetName); - Q_UNUSED(parentWidget); - Q_UNUSED(name); - return 0; -} - -/*! - \internal -*/ -QLayout *QAbstractFormBuilder::createLayout(const QString &layoutName, QObject *parent, const QString &name) -{ - Q_UNUSED(layoutName); - Q_UNUSED(parent); - Q_UNUSED(name); - return 0; -} - -/*! - \internal -*/ -QAction *QAbstractFormBuilder::createAction(QObject *parent, const QString &name) -{ - QAction *action = new QAction(parent); - action->setObjectName(name); - return action; -} - -/*! - \internal -*/ -QActionGroup *QAbstractFormBuilder::createActionGroup(QObject *parent, const QString &name) -{ - QActionGroup *g = new QActionGroup(parent); - g->setObjectName(name); - return g; -} - -/*! - \fn void QAbstractFormBuilder::save(QIODevice *device, QWidget *widget) - - Saves an XML representation of the given \a widget to the - specified \a device in the standard UI file format. - - \sa load()*/ -void QAbstractFormBuilder::save(QIODevice *dev, QWidget *widget) -{ - DomWidget *ui_widget = createDom(widget, 0); - Q_ASSERT( ui_widget != 0 ); - - DomUI *ui = new DomUI(); - ui->setAttributeVersion(QLatin1String("4.0")); - ui->setElementWidget(ui_widget); - - saveDom(ui, widget); - - QXmlStreamWriter writer(dev); - writer.setAutoFormatting(true); - writer.setAutoFormattingIndent(1); - writer.writeStartDocument(); - ui->write(writer); - writer.writeEndDocument(); - - d->m_laidout.clear(); - - delete ui; -} - -/*! - \internal -*/ -void QAbstractFormBuilder::saveDom(DomUI *ui, QWidget *widget) -{ - ui->setElementClass(widget->objectName()); - - if (DomConnections *ui_connections = saveConnections()) { - ui->setElementConnections(ui_connections); - } - - if (DomCustomWidgets *ui_customWidgets = saveCustomWidgets()) { - ui->setElementCustomWidgets(ui_customWidgets); - } - - if (DomTabStops *ui_tabStops = saveTabStops()) { - ui->setElementTabStops(ui_tabStops); - } - - if (DomResources *ui_resources = saveResources()) { - ui->setElementResources(ui_resources); - } - if (DomButtonGroups *ui_buttonGroups = saveButtonGroups(widget)) - ui->setElementButtonGroups(ui_buttonGroups); -} - -/*! - \internal -*/ -DomConnections *QAbstractFormBuilder::saveConnections() -{ - return new DomConnections; -} - -/*! - \internal -*/ - -DomWidget *QAbstractFormBuilder::createDom(QWidget *widget, DomWidget *ui_parentWidget, bool recursive) -{ - DomWidget *ui_widget = new DomWidget(); - ui_widget->setAttributeClass(QLatin1String(widget->metaObject()->className())); - ui_widget->setElementProperty(computeProperties(widget)); - - if (recursive) { - if (QLayout *layout = widget->layout()) { - if (DomLayout *ui_layout = createDom(layout, 0, ui_parentWidget)) { - QList ui_layouts; - ui_layouts.append(ui_layout); - - ui_widget->setElementLayout(ui_layouts); - } - } - } - - // widgets, actions and action groups - QList ui_widgets; - QList ui_actions; - QList ui_action_groups; - - QList children; - - // splitters need to store their children in the order specified by child indexes, - // not the order of the child list. -#ifndef QT_NO_SPLITTER - if (const QSplitter *splitter = qobject_cast(widget)) { - const int count = splitter->count(); - for (int i = 0; i < count; ++i) - children.append(splitter->widget(i)); - } else -#endif - { - QList childObjects = widget->children(); - - const QList list = qvariant_cast(widget->property("_q_widgetOrder")); - foreach (QWidget *w, list) { - if (childObjects.contains(w)) { - children.append(w); - childObjects.removeAll(w); - } - } - children += childObjects; - - const QList zOrder = qvariant_cast(widget->property("_q_zOrder")); - if (list != zOrder) { - QStringList zOrderList; - QListIterator itZOrder(zOrder); - while (itZOrder.hasNext()) - zOrderList.append(itZOrder.next()->objectName()); - ui_widget->setElementZOrder(zOrderList); - } - } - - foreach (QObject *obj, children) { - if (QWidget *childWidget = qobject_cast(obj)) { - if (d->m_laidout.contains(childWidget) || recursive == false) - continue; - - if (QMenu *menu = qobject_cast(childWidget)) { - QList actions = menu->parentWidget()->actions(); - QListIterator it(actions); - bool found = false; - while (it.hasNext()) { - if (it.next()->menu() == menu) - found = true; - } - if (!found) - continue; - } - - if (DomWidget *ui_child = createDom(childWidget, ui_widget)) { - ui_widgets.append(ui_child); - } - } else if (QAction *childAction = qobject_cast(obj)) { - if (childAction->actionGroup() != 0) { - // it will be added later. - continue; - } - - if (DomAction *ui_action = createDom(childAction)) { - ui_actions.append(ui_action); - } - } else if (QActionGroup *childActionGroup = qobject_cast(obj)) { - if (DomActionGroup *ui_action_group = createDom(childActionGroup)) { - ui_action_groups.append(ui_action_group); - } - } - } - - // add-action - QList ui_action_refs; - foreach (QAction *action, widget->actions()) { - if (DomActionRef *ui_action_ref = createActionRefDom(action)) { - ui_action_refs.append(ui_action_ref); - } - } - - if (recursive) - ui_widget->setElementWidget(ui_widgets); - - ui_widget->setElementAction(ui_actions); - ui_widget->setElementActionGroup(ui_action_groups); - ui_widget->setElementAddAction(ui_action_refs); - - saveExtraInfo(widget, ui_widget, ui_parentWidget); - - return ui_widget; -} - -/*! - \internal -*/ -DomActionRef *QAbstractFormBuilder::createActionRefDom(QAction *action) -{ - QString name = action->objectName(); - - if (action->menu() != 0) - name = action->menu()->objectName(); - - DomActionRef *ui_action_ref = new DomActionRef(); - if (action->isSeparator()) - ui_action_ref->setAttributeName(QFormBuilderStrings::instance().separator); - else - ui_action_ref->setAttributeName(name); - - return ui_action_ref; -} - -// Struct to store layout item parameters for saving layout items -struct FormBuilderSaveLayoutEntry { - explicit FormBuilderSaveLayoutEntry(QLayoutItem *li = 0) : - item(li), row(-1), column(-1), rowSpan(0), columnSpan(0), alignment(0) {} - - QLayoutItem *item; - int row; - int column; - int rowSpan; - int columnSpan; - Qt::Alignment alignment; -}; - -// Create list from standard box layout -static QList saveLayoutEntries(const QLayout *layout) -{ - QList rc; - if (const int count = layout->count()) { - rc.reserve(count); - for (int idx = 0; idx < count; ++idx) { - QLayoutItem *item = layout->itemAt(idx); - FormBuilderSaveLayoutEntry entry(item); - entry.alignment = item->alignment(); - rc.append(entry); - } - } - return rc; -} - -// Create list from grid layout -static QList saveGridLayoutEntries(QGridLayout *gridLayout) -{ - QList rc; - if (const int count = gridLayout->count()) { - rc.reserve(count); - for (int idx = 0; idx < count; ++idx) { - QLayoutItem *item = gridLayout->itemAt(idx); - FormBuilderSaveLayoutEntry entry(item); - gridLayout->getItemPosition(idx, &entry.row, &entry.column, &entry.rowSpan,&entry.columnSpan); - entry.alignment = item->alignment(); - rc.append(entry); - } - } - return rc; -} - -#ifndef QT_NO_FORMLAYOUT -// Create list from form layout -static QList saveFormLayoutEntries(const QFormLayout *formLayout) -{ - QList rc; - if (const int count = formLayout->count()) { - rc.reserve(count); - for (int idx = 0; idx < count; ++idx) { - QLayoutItem *item = formLayout->itemAt(idx); - QFormLayout::ItemRole role = QFormLayout::LabelRole; - FormBuilderSaveLayoutEntry entry(item); - formLayout->getItemPosition(idx, &entry.row, &role); - switch (role ) { - case QFormLayout::LabelRole: - entry.column = 0; - break; - case QFormLayout::FieldRole: - entry.column = 1; - break; - case QFormLayout::SpanningRole: - entry.column = 0; - entry.columnSpan = 2; - break; - } - rc.push_back(entry); - } - } - return rc; -} -#endif - -/*! - \internal -*/ - -DomLayout *QAbstractFormBuilder::createDom(QLayout *layout, DomLayout *ui_layout, DomWidget *ui_parentWidget) -{ - Q_UNUSED(ui_layout) - DomLayout *lay = new DomLayout(); - lay->setAttributeClass(QLatin1String(layout->metaObject()->className())); - const QString objectName = layout->objectName(); - if (!objectName.isEmpty()) - lay->setAttributeName(objectName); - lay->setElementProperty(computeProperties(layout)); - - QList newList; - if (QGridLayout *gridLayout = qobject_cast(layout)) { - newList = saveGridLayoutEntries(gridLayout); -#ifndef QT_NO_FORMLAYOUT - } else if (const QFormLayout *formLayout = qobject_cast(layout)) { - newList = saveFormLayoutEntries(formLayout); -#endif - } else { - newList = saveLayoutEntries(layout); - } - - QList ui_items; - foreach (const FormBuilderSaveLayoutEntry &item, newList) { - if (DomLayoutItem *ui_item = createDom(item.item, lay, ui_parentWidget)) { - if (item.row >= 0) - ui_item->setAttributeRow(item.row); - if (item.column >= 0) - ui_item->setAttributeColumn(item.column); - if (item.rowSpan > 1) - ui_item->setAttributeRowSpan(item.rowSpan); - if (item.columnSpan > 1) - ui_item->setAttributeColSpan(item.columnSpan); - if (item.alignment) - ui_item->setAttributeAlignment(alignmentValue(item.alignment)); - ui_items.append(ui_item); - } - } - - lay->setElementItem(ui_items); - - return lay; -} - -/*! - \internal -*/ -DomLayoutItem *QAbstractFormBuilder::createDom(QLayoutItem *item, DomLayout *ui_layout, DomWidget *ui_parentWidget) -{ - DomLayoutItem *ui_item = new DomLayoutItem(); - - if (item->widget()) { - ui_item->setElementWidget(createDom(item->widget(), ui_parentWidget)); - d->m_laidout.insert(item->widget(), true); - } else if (item->layout()) { - ui_item->setElementLayout(createDom(item->layout(), ui_layout, ui_parentWidget)); - } else if (item->spacerItem()) { - ui_item->setElementSpacer(createDom(item->spacerItem(), ui_layout, ui_parentWidget)); - } - - return ui_item; -} - -/*! - \internal -*/ -DomSpacer *QAbstractFormBuilder::createDom(QSpacerItem *spacer, DomLayout *ui_layout, DomWidget *ui_parentWidget) -{ - Q_UNUSED(ui_layout); - Q_UNUSED(ui_parentWidget); - - DomSpacer *ui_spacer = new DomSpacer(); - QList properties; - - DomProperty *prop = 0; - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - // sizeHint property - prop = new DomProperty(); - prop->setAttributeName(strings.sizeHintProperty); - prop->setElementSize(new DomSize()); - prop->elementSize()->setElementWidth(spacer->sizeHint().width()); - prop->elementSize()->setElementHeight(spacer->sizeHint().height()); - properties.append(prop); - - // orientation property - prop = new DomProperty(); // ### we don't implemented the case where expandingDirections() is both Vertical and Horizontal - prop->setAttributeName(strings.orientationProperty); - prop->setElementEnum((spacer->expandingDirections() & Qt::Horizontal) ? strings.qtHorizontal : strings.qtVertical); - properties.append(prop); - - ui_spacer->setElementProperty(properties); - return ui_spacer; -} - -/*! - \internal -*/ -DomProperty *QAbstractFormBuilder::createProperty(QObject *obj, const QString &pname, const QVariant &v) -{ - if (!checkProperty(obj, pname)) { - return 0; - } - return variantToDomProperty(this, obj->metaObject(), pname, v); -} - -/*! - \internal -*/ -QList QAbstractFormBuilder::computeProperties(QObject *obj) -{ - QList lst; - - const QMetaObject *meta = obj->metaObject(); - - QHash properties; - const int propertyCount = meta->propertyCount(); - for(int i=0; i < propertyCount; ++i) - properties.insert(meta->property(i).name(), true); - - const QList propertyNames = properties.keys(); - - const int propertyNamesCount = propertyNames.size(); - for(int i=0; iproperty(meta->indexOfProperty(pname.toUtf8())); - - if (!prop.isWritable() || !checkProperty(obj, QLatin1String(prop.name()))) - continue; - - const QVariant v = prop.read(obj); - - DomProperty *dom_prop = 0; - if (v.type() == QVariant::Int) { - dom_prop = new DomProperty(); - - if (prop.isFlagType()) - uiLibWarning(QCoreApplication::translate("QAbstractFormBuilder", "Flags property are not supported yet.")); - - if (prop.isEnumType()) { - QString scope = QString::fromUtf8(prop.enumerator().scope()); - if (scope.size()) - scope += QString::fromUtf8("::"); - const QString e = QString::fromUtf8(prop.enumerator().valueToKey(v.toInt())); - if (e.size()) - dom_prop->setElementEnum(scope + e); - } else - dom_prop->setElementNumber(v.toInt()); - dom_prop->setAttributeName(pname); - } else { - dom_prop = createProperty(obj, pname, v); - } - - if (!dom_prop || dom_prop->kind() == DomProperty::Unknown) - delete dom_prop; - else - lst.append(dom_prop); - } - - return lst; -} - - -/*! - \internal - \typedef QAbstractFormBuilder::DomPropertyHash - \typedef QAbstractFormBuilder::IconPaths -*/ - - -/*! - \internal -*/ -QAbstractFormBuilder::DomPropertyHash QAbstractFormBuilder::propertyMap(const QList &properties) -{ - DomPropertyHash map; - - foreach (DomProperty *p, properties) - map.insert(p->attributeName(), p); - - return map; -} - -/*! - \internal -*/ -bool QAbstractFormBuilder::checkProperty(QObject *obj, const QString &prop) const -{ - Q_UNUSED(obj); - Q_UNUSED(prop); - - return true; -} - -/*! - \internal -*/ -QString QAbstractFormBuilder::toString(const DomString *str) -{ - return str ? str->text() : QString(); -} - -/*! - \internal -*/ -void QAbstractFormBuilder::applyTabStops(QWidget *widget, DomTabStops *tabStops) -{ - if (!tabStops) - return; - - QWidget *lastWidget = 0; - - const QStringList l = tabStops->elementTabStop(); - for (int i=0; ifindChild(name); - if (!child) { - uiLibWarning(QCoreApplication::translate("QAbstractFormBuilder", "While applying tab stops: The widget '%1' could not be found.").arg(name)); - continue; - } - - if (i == 0) { - lastWidget = widget->findChild(name); - continue; - } else if (!child || !lastWidget) { - continue; - } - - QWidget::setTabOrder(lastWidget, child); - - lastWidget = widget->findChild(name); - } -} - -/*! - \internal -*/ -DomCustomWidgets *QAbstractFormBuilder::saveCustomWidgets() -{ - return 0; -} - -/*! - \internal -*/ -DomTabStops *QAbstractFormBuilder::saveTabStops() -{ - return 0; -} - -/*! - \internal -*/ -DomResources *QAbstractFormBuilder::saveResources() -{ - return 0; -} - -/*! - \internal - \since 4.5 -*/ - -DomButtonGroups *QAbstractFormBuilder::saveButtonGroups(const QWidget *mainContainer) -{ - // Save fst order buttongroup children of maincontainer - typedef QList ButtonGroupList; - const QObjectList mchildren = mainContainer->children(); - if (mchildren.empty()) - return 0; - QList domGroups; - const QObjectList::const_iterator cend = mchildren.constEnd(); - for (QObjectList::const_iterator it = mchildren.constBegin(); it != cend; ++it) - if (QButtonGroup *bg = qobject_cast(*it)) - if (DomButtonGroup* dg = createDom(bg)) - domGroups.push_back(dg); - - if (domGroups.empty()) - return 0; - DomButtonGroups *rc = new DomButtonGroups; - rc->setElementButtonGroup(domGroups); - return rc; -} - -// VC6 would not find templated members, so we use statics and this utter hack. -class FriendlyFB : public QAbstractFormBuilder { -public: - using QAbstractFormBuilder::saveResource; - using QAbstractFormBuilder::saveText; - using QAbstractFormBuilder::resourceBuilder; - using QAbstractFormBuilder::textBuilder; - using QAbstractFormBuilder::toVariant; -}; - -template -static void storeItemFlags(const T *item, QList *properties) -{ - static const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - static const Qt::ItemFlags defaultFlags = T().flags(); - static const QMetaEnum itemFlags_enum = metaEnum("itemFlags"); - - if (item->flags() != defaultFlags) { - DomProperty *p = new DomProperty; - p->setAttributeName(strings.flagsAttribute); - p->setElementSet(QString::fromAscii(itemFlags_enum.valueToKeys(item->flags()))); - properties->append(p); - } -} - -#ifndef Q_CC_RVCT -// RVCT does not accept static inline functions if one argument is templated type -// For this reason all necessary function variants are explicityly written for it. -template -static void storeItemProps(QAbstractFormBuilder *abstractFormBuilder, const T *item, - QList *properties) -{ - static const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - FriendlyFB * const formBuilder = static_cast(abstractFormBuilder); - - DomProperty *p; - QVariant v; - - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) - if ((p = formBuilder->saveText(it.second, item->data(it.first.second)))) - properties->append(p); - - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) - if ((v = item->data(it.first)).isValid() && - (p = variantToDomProperty(abstractFormBuilder, - static_cast(&QAbstractFormBuilderGadget::staticMetaObject), - it.second, v))) - properties->append(p); - - if ((p = formBuilder->saveResource(item->data(Qt::DecorationPropertyRole)))) - properties->append(p); -} - -template -static void storeItemPropsNFlags(QAbstractFormBuilder *abstractFormBuilder, const T *item, - QList *properties) -{ - storeItemProps(abstractFormBuilder, item, properties); - storeItemFlags(item, properties); -} - -template -static void loadItemProps(QAbstractFormBuilder *abstractFormBuilder, T *item, - const QHash &properties) -{ - static const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - FriendlyFB * const formBuilder = static_cast(abstractFormBuilder); - - DomProperty *p; - QVariant v; - - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) - if ((p = properties.value(it.second))) { - v = formBuilder->textBuilder()->loadText(p); - QVariant nativeValue = formBuilder->textBuilder()->toNativeValue(v); - item->setData(it.first.first, qvariant_cast(nativeValue)); - item->setData(it.first.second, v); - } - - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) - if ((p = properties.value(it.second)) && - (v = formBuilder->toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p)).isValid()) - item->setData(it.first, v); - - if ((p = properties.value(strings.iconAttribute))) { - v = formBuilder->resourceBuilder()->loadResource(formBuilder->workingDirectory(), p); - QVariant nativeValue = formBuilder->resourceBuilder()->toNativeValue(v); - item->setIcon(qvariant_cast(nativeValue)); - item->setData(Qt::DecorationPropertyRole, v); - } -} - -template -static void loadItemPropsNFlags(QAbstractFormBuilder *abstractFormBuilder, T *item, - const QHash &properties) -{ - static const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - static const QMetaEnum itemFlags_enum = metaEnum("itemFlags"); - - loadItemProps(abstractFormBuilder, item, properties); - - DomProperty *p; - if ((p = properties.value(strings.flagsAttribute)) && p->kind() == DomProperty::Set) - item->setFlags(enumKeysToValue(itemFlags_enum, p->elementSet().toAscii())); -} - -#else - -static void storeItemProps(QAbstractFormBuilder *abstractFormBuilder, const QTableWidgetItem *item, - QList *properties) -{ - static const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - FriendlyFB * const formBuilder = static_cast(abstractFormBuilder); - - DomProperty *p; - QVariant v; - - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) - if ((p = formBuilder->saveText(it.second, item->data(it.first.second)))) - properties->append(p); - - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) - if ((v = item->data(it.first)).isValid() && - (p = variantToDomProperty(abstractFormBuilder, - static_cast(&QAbstractFormBuilderGadget::staticMetaObject), - it.second, v))) - properties->append(p); - - if ((p = formBuilder->saveResource(item->data(Qt::DecorationPropertyRole)))) - properties->append(p); -} - -static void storeItemProps(QAbstractFormBuilder *abstractFormBuilder, const QListWidgetItem *item, - QList *properties) -{ - static const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - FriendlyFB * const formBuilder = static_cast(abstractFormBuilder); - - DomProperty *p; - QVariant v; - - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) - if ((p = formBuilder->saveText(it.second, item->data(it.first.second)))) - properties->append(p); - - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) - if ((v = item->data(it.first)).isValid() && - (p = variantToDomProperty(abstractFormBuilder, - static_cast(&QAbstractFormBuilderGadget::staticMetaObject), - it.second, v))) - properties->append(p); - - if ((p = formBuilder->saveResource(item->data(Qt::DecorationPropertyRole)))) - properties->append(p); -} - -static void storeItemPropsNFlags(QAbstractFormBuilder *abstractFormBuilder, const QTableWidgetItem *item, - QList *properties) -{ - storeItemProps(abstractFormBuilder, item, properties); - storeItemFlags(item, properties); -} - -static void storeItemPropsNFlags(QAbstractFormBuilder *abstractFormBuilder, const QListWidgetItem *item, - QList *properties) -{ - storeItemProps(abstractFormBuilder, item, properties); - storeItemFlags(item, properties); -} - -static void loadItemProps(QAbstractFormBuilder *abstractFormBuilder, QTableWidgetItem *item, - const QHash &properties) -{ - static const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - FriendlyFB * const formBuilder = static_cast(abstractFormBuilder); - - DomProperty *p; - QVariant v; - - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) - if ((p = properties.value(it.second))) { - v = formBuilder->textBuilder()->loadText(p); - QVariant nativeValue = formBuilder->textBuilder()->toNativeValue(v); - item->setData(it.first.first, qvariant_cast(nativeValue)); - item->setData(it.first.second, v); - } - - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) - if ((p = properties.value(it.second)) && - (v = formBuilder->toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p)).isValid()) - item->setData(it.first, v); - - if ((p = properties.value(strings.iconAttribute))) { - v = formBuilder->resourceBuilder()->loadResource(formBuilder->workingDirectory(), p); - QVariant nativeValue = formBuilder->resourceBuilder()->toNativeValue(v); - item->setIcon(qvariant_cast(nativeValue)); - item->setData(Qt::DecorationPropertyRole, v); - } -} - -static void loadItemProps(QAbstractFormBuilder *abstractFormBuilder, QListWidgetItem *item, - const QHash &properties) -{ - static const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - FriendlyFB * const formBuilder = static_cast(abstractFormBuilder); - - DomProperty *p; - QVariant v; - - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) - if ((p = properties.value(it.second))) { - v = formBuilder->textBuilder()->loadText(p); - QVariant nativeValue = formBuilder->textBuilder()->toNativeValue(v); - item->setData(it.first.first, qvariant_cast(nativeValue)); - item->setData(it.first.second, v); - } - - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) - if ((p = properties.value(it.second)) && - (v = formBuilder->toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p)).isValid()) - item->setData(it.first, v); - - if ((p = properties.value(strings.iconAttribute))) { - v = formBuilder->resourceBuilder()->loadResource(formBuilder->workingDirectory(), p); - QVariant nativeValue = formBuilder->resourceBuilder()->toNativeValue(v); - item->setIcon(qvariant_cast(nativeValue)); - item->setData(Qt::DecorationPropertyRole, v); - } -} - -static void loadItemPropsNFlags(QAbstractFormBuilder *abstractFormBuilder, QTableWidgetItem *item, - const QHash &properties) -{ - static const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - static const QMetaEnum itemFlags_enum = metaEnum("itemFlags"); - - loadItemProps(abstractFormBuilder, item, properties); - - DomProperty *p; - if ((p = properties.value(strings.flagsAttribute)) && p->kind() == DomProperty::Set) - item->setFlags(enumKeysToValue(itemFlags_enum, p->elementSet().toAscii())); -} - -static void loadItemPropsNFlags(QAbstractFormBuilder *abstractFormBuilder, QListWidgetItem *item, - const QHash &properties) -{ - static const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - static const QMetaEnum itemFlags_enum = metaEnum("itemFlags"); - - loadItemProps(abstractFormBuilder, item, properties); - - DomProperty *p; - if ((p = properties.value(strings.flagsAttribute)) && p->kind() == DomProperty::Set) - item->setFlags(enumKeysToValue(itemFlags_enum, p->elementSet().toAscii())); -} - -#endif - -/*! - \internal -*/ -void QAbstractFormBuilder::saveTreeWidgetExtraInfo(QTreeWidget *treeWidget, DomWidget *ui_widget, DomWidget *ui_parentWidget) -{ - Q_UNUSED(ui_parentWidget); - - QList columns; - DomProperty *p; - QVariant v; - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - // save the header - for (int c = 0; ccolumnCount(); ++c) { - DomColumn *column = new DomColumn; - - QList properties; - - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) { - p = saveText(it.second, treeWidget->headerItem()->data(c, it.first.second)); - // Prevent uic 4.4.X from crashing if it cannot find a column text - if (!p && it.first.first == Qt::EditRole && it.second == QLatin1String("text")) { - DomString *defaultHeader = new DomString; - defaultHeader->setText(QString::number(c + 1)); - defaultHeader->setAttributeNotr(QLatin1String("true")); - p = new DomProperty; - p->setAttributeName(it.second); - p->setElementString(defaultHeader); - } - if (p) - properties.append(p); - } - - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) - if ((v = treeWidget->headerItem()->data(c, it.first)).isValid() && - (p = variantToDomProperty(this, &QAbstractFormBuilderGadget::staticMetaObject, it.second, v))) - properties.append(p); - - if ((p = saveResource(treeWidget->headerItem()->data(c, Qt::DecorationPropertyRole)))) - properties.append(p); - - column->setElementProperty(properties); - columns.append(column); - } - - ui_widget->setElementColumn(columns); - - QList items = ui_widget->elementItem(); - - QQueue > pendingQueue; - for (int i = 0; i < treeWidget->topLevelItemCount(); i++) - pendingQueue.enqueue(qMakePair(treeWidget->topLevelItem(i), (DomItem *)0)); - - while (!pendingQueue.isEmpty()) { - const QPair pair = pendingQueue.dequeue(); - QTreeWidgetItem *item = pair.first; - DomItem *parentDomItem = pair.second; - - DomItem *currentDomItem = new DomItem; - - QList properties; - for (int c = 0; c < treeWidget->columnCount(); c++) { - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) - if ((p = saveText(it.second, item->data(c, it.first.second)))) - properties.append(p); - - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) - if ((v = item->data(c, it.first)).isValid() && - (p = variantToDomProperty(this, &QAbstractFormBuilderGadget::staticMetaObject, it.second, v))) - properties.append(p); - - if ((p = saveResource(item->data(c, Qt::DecorationPropertyRole)))) - properties.append(p); - } - storeItemFlags(item, &properties); - currentDomItem->setElementProperty(properties); - - if (parentDomItem) { - QList childrenItems = parentDomItem->elementItem(); - childrenItems.append(currentDomItem); - parentDomItem->setElementItem(childrenItems); - } else - items.append(currentDomItem); - - for (int i = 0; i < item->childCount(); i++) - pendingQueue.enqueue(qMakePair(item->child(i), currentDomItem)); - } - - ui_widget->setElementItem(items); -} - -/*! - \internal -*/ -void QAbstractFormBuilder::saveTableWidgetExtraInfo(QTableWidget *tableWidget, DomWidget *ui_widget, DomWidget *ui_parentWidget) -{ - Q_UNUSED(ui_parentWidget); - - // save the horizontal header - QList columns; - for (int c = 0; c < tableWidget->columnCount(); c++) { - QList properties; - QTableWidgetItem *item = tableWidget->horizontalHeaderItem(c); - if (item) - storeItemProps(this, item, &properties); - - DomColumn *column = new DomColumn; - column->setElementProperty(properties); - columns.append(column); - } - ui_widget->setElementColumn(columns); - - // save the vertical header - QList rows; - for (int r = 0; r < tableWidget->rowCount(); r++) { - QList properties; - QTableWidgetItem *item = tableWidget->verticalHeaderItem(r); - if (item) - storeItemProps(this, item, &properties); - - DomRow *row = new DomRow; - row->setElementProperty(properties); - rows.append(row); - } - ui_widget->setElementRow(rows); - - QList items = ui_widget->elementItem(); - for (int r = 0; r < tableWidget->rowCount(); r++) - for (int c = 0; c < tableWidget->columnCount(); c++) { - QTableWidgetItem *item = tableWidget->item(r, c); - if (item) { - QList properties; - storeItemPropsNFlags(this, item, &properties); - - DomItem *domItem = new DomItem; - domItem->setAttributeRow(r); - domItem->setAttributeColumn(c); - domItem->setElementProperty(properties); - items.append(domItem); - } - } - - ui_widget->setElementItem(items); -} - -/*! - \internal -*/ -void QAbstractFormBuilder::saveListWidgetExtraInfo(QListWidget *listWidget, DomWidget *ui_widget, DomWidget *ui_parentWidget) -{ - Q_UNUSED(ui_parentWidget); - - QList ui_items = ui_widget->elementItem(); - for (int i=0; icount(); ++i) { - QList properties; - storeItemPropsNFlags(this, listWidget->item(i), &properties); - - DomItem *ui_item = new DomItem(); - ui_item->setElementProperty(properties); - ui_items.append(ui_item); - } - - ui_widget->setElementItem(ui_items); -} - -/*! - \internal -*/ -void QAbstractFormBuilder::saveComboBoxExtraInfo(QComboBox *comboBox, DomWidget *ui_widget, DomWidget *ui_parentWidget) -{ - Q_UNUSED(ui_parentWidget); - QList ui_items = ui_widget->elementItem(); - - const int count = comboBox->count(); - for (int i=0; i < count; ++i) { - // We might encounter items for which both builders return 0 in Designer - // (indicating a custom combo adding items in the constructor). Ignore those. - DomProperty *textProperty = saveText(QFormBuilderStrings::instance().textAttribute, - comboBox->itemData(i, Qt::DisplayPropertyRole)); - DomProperty *iconProperty = saveResource(comboBox->itemData(i, Qt::DecorationPropertyRole)); - if (textProperty || iconProperty) { - QList properties; - if (textProperty) - properties.push_back(textProperty); - if (iconProperty) - properties.push_back(iconProperty); - - DomItem *ui_item = new DomItem(); - ui_item->setElementProperty(properties); - ui_items.push_back(ui_item); - } - } - - ui_widget->setElementItem(ui_items); -} - -/*! - \internal - \since 4.5 -*/ - -void QAbstractFormBuilder::saveButtonExtraInfo(const QAbstractButton *widget, DomWidget *ui_widget, DomWidget *) -{ - typedef QList DomPropertyList; - if (const QButtonGroup *buttonGroup = widget->group()) { - DomPropertyList attributes = ui_widget->elementAttribute(); - DomString *domString = new DomString(); - domString->setText(buttonGroup->objectName()); - domString->setAttributeNotr(QLatin1String("true")); - DomProperty *domProperty = new DomProperty(); - domProperty->setAttributeName(QLatin1String(buttonGroupPropertyC)); - domProperty->setElementString(domString); - attributes += domProperty; - ui_widget->setElementAttribute(attributes); - } -} - -/*! - \internal - \since 4.5 -*/ -void QAbstractFormBuilder::saveItemViewExtraInfo(const QAbstractItemView *itemView, - DomWidget *ui_widget, DomWidget *) -{ - // - // Special handling for qtableview/qtreeview fake header attributes - // - static QStringList realPropertyNames = - (QStringList() << QLatin1String("visible") - << QLatin1String("cascadingSectionResizes") - << QLatin1String("defaultSectionSize") - << QLatin1String("highlightSections") - << QLatin1String("minimumSectionSize") - << QLatin1String("showSortIndicator") - << QLatin1String("stretchLastSection")); - - if (const QTreeView *treeView = qobject_cast(itemView)) { - QList viewProperties = ui_widget->elementAttribute(); - QList headerProperties = computeProperties(treeView->header()); - foreach (const QString &realPropertyName, realPropertyNames) { - const QString upperPropertyName = realPropertyName.at(0).toUpper() - + realPropertyName.mid(1); - const QString fakePropertyName = QLatin1String("header") + upperPropertyName; - foreach (DomProperty *property, headerProperties) { - if (property->attributeName() == realPropertyName) { - property->setAttributeName(fakePropertyName); - viewProperties << property; - } - } - } - ui_widget->setElementAttribute(viewProperties); - } else if (const QTableView *tableView = qobject_cast(itemView)) { - static QStringList headerPrefixes = - (QStringList() << QLatin1String("horizontalHeader") - << QLatin1String("verticalHeader")); - - QList viewProperties = ui_widget->elementAttribute(); - foreach (const QString &headerPrefix, headerPrefixes) { - QList headerProperties; - if (headerPrefix == QLatin1String("horizontalHeader")) - headerProperties = computeProperties(tableView->horizontalHeader()); - else - headerProperties = computeProperties(tableView->verticalHeader()); - foreach (const QString &realPropertyName, realPropertyNames) { - const QString upperPropertyName = realPropertyName.at(0).toUpper() - + realPropertyName.mid(1); - const QString fakePropertyName = headerPrefix + upperPropertyName; - foreach (DomProperty *property, headerProperties) { - if (property->attributeName() == realPropertyName) { - property->setAttributeName(fakePropertyName); - viewProperties << property; - } - } - } - } - ui_widget->setElementAttribute(viewProperties); - } -} - -/*! - \internal - \since 4.4 -*/ - -void QAbstractFormBuilder::setResourceBuilder(QResourceBuilder *builder) -{ - d->setResourceBuilder(builder); -} - -/*! - \internal - \since 4.4 -*/ - -QResourceBuilder *QAbstractFormBuilder::resourceBuilder() const -{ - return d->resourceBuilder(); -} - -/*! - \internal - \since 4.5 -*/ - -void QAbstractFormBuilder::setTextBuilder(QTextBuilder *builder) -{ - d->setTextBuilder(builder); -} - -/*! - \internal - \since 4.5 -*/ - -QTextBuilder *QAbstractFormBuilder::textBuilder() const -{ - return d->textBuilder(); -} - -/*! - \internal -*/ -void QAbstractFormBuilder::saveExtraInfo(QWidget *widget, DomWidget *ui_widget, - DomWidget *ui_parentWidget) -{ - if (QListWidget *listWidget = qobject_cast(widget)) { - saveListWidgetExtraInfo(listWidget, ui_widget, ui_parentWidget); - } else if (QTreeWidget *treeWidget = qobject_cast(widget)) { - saveTreeWidgetExtraInfo(treeWidget, ui_widget, ui_parentWidget); - } else if (QTableWidget *tableWidget = qobject_cast(widget)) { - saveTableWidgetExtraInfo(tableWidget, ui_widget, ui_parentWidget); - } else if (QComboBox *comboBox = qobject_cast(widget)) { - if (!qobject_cast(widget)) - saveComboBoxExtraInfo(comboBox, ui_widget, ui_parentWidget); - } else if(QAbstractButton *ab = qobject_cast(widget)) { - saveButtonExtraInfo(ab, ui_widget, ui_parentWidget); - } - if (QAbstractItemView *itemView = qobject_cast(widget)) { - saveItemViewExtraInfo(itemView, ui_widget, ui_parentWidget); - } -} - -/*! - \internal -*/ -void QAbstractFormBuilder::loadListWidgetExtraInfo(DomWidget *ui_widget, QListWidget *listWidget, QWidget *parentWidget) -{ - Q_UNUSED(parentWidget); - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - const QMetaEnum itemFlags_enum = metaEnum("itemFlags"); - - foreach (DomItem *ui_item, ui_widget->elementItem()) { - const DomPropertyHash properties = propertyMap(ui_item->elementProperty()); - QListWidgetItem *item = new QListWidgetItem(listWidget); -#ifndef Q_CC_RVCT - loadItemPropsNFlags(this, item, properties); -#else - loadItemPropsNFlags(this, item, properties); -#endif - } - - DomProperty *currentRow = propertyMap(ui_widget->elementProperty()).value(strings.currentRowProperty); - if (currentRow) - listWidget->setCurrentRow(currentRow->elementNumber()); -} - -/*! - \internal -*/ -void QAbstractFormBuilder::loadTreeWidgetExtraInfo(DomWidget *ui_widget, QTreeWidget *treeWidget, QWidget *parentWidget) -{ - Q_UNUSED(parentWidget); - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - const QMetaEnum itemFlags_enum = metaEnum("itemFlags"); - const QList columns = ui_widget->elementColumn(); - if (columns.count() > 0) - treeWidget->setColumnCount(columns.count()); - - for (int i = 0; ielementProperty()); - - DomProperty *p; - QVariant v; - - foreach (const QFormBuilderStrings::RoleNName &it, strings.itemRoles) - if ((p = properties.value(it.second)) && - (v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p)).isValid()) - treeWidget->headerItem()->setData(i, it.first, v); - - foreach (const QFormBuilderStrings::TextRoleNName &it, strings.itemTextRoles) - if ((p = properties.value(it.second))) { - v = textBuilder()->loadText(p); - QVariant nativeValue = textBuilder()->toNativeValue(v); - treeWidget->headerItem()->setData(i, it.first.first, qvariant_cast(nativeValue)); - treeWidget->headerItem()->setData(i, it.first.second, v); - } - - if ((p = properties.value(strings.iconAttribute))) { - v = resourceBuilder()->loadResource(workingDirectory(), p); - QVariant nativeValue = resourceBuilder()->toNativeValue(v); - treeWidget->headerItem()->setIcon(i, qvariant_cast(nativeValue)); - treeWidget->headerItem()->setData(i, Qt::DecorationPropertyRole, v); - } - } - - QQueue > pendingQueue; - foreach (DomItem *ui_item, ui_widget->elementItem()) - pendingQueue.enqueue(qMakePair(ui_item, (QTreeWidgetItem *)0)); - - while (!pendingQueue.isEmpty()) { - const QPair pair = pendingQueue.dequeue(); - const DomItem *domItem = pair.first; - QTreeWidgetItem *parentItem = pair.second; - - QTreeWidgetItem *currentItem = 0; - - if (parentItem) - currentItem = new QTreeWidgetItem(parentItem); - else - currentItem = new QTreeWidgetItem(treeWidget); - - const QList properties = domItem->elementProperty(); - int col = -1; - foreach (DomProperty *property, properties) { - if (property->attributeName() == strings.flagsAttribute && !property->elementSet().isEmpty()) { - currentItem->setFlags(enumKeysToValue(itemFlags_enum, property->elementSet().toAscii())); - } else if (property->attributeName() == strings.textAttribute && property->elementString()) { - col++; - QVariant textV = textBuilder()->loadText(property); - QVariant nativeValue = textBuilder()->toNativeValue(textV); - currentItem->setText(col, qvariant_cast(nativeValue)); - currentItem->setData(col, Qt::DisplayPropertyRole, textV); - } else if (col >= 0) { - if (property->attributeName() == strings.iconAttribute) { - QVariant v = resourceBuilder()->loadResource(workingDirectory(), property); - if (v.isValid()) { - QVariant nativeValue = resourceBuilder()->toNativeValue(v); - currentItem->setIcon(col, qvariant_cast(nativeValue)); - currentItem->setData(col, Qt::DecorationPropertyRole, v); - } - } else { - QVariant v; - int role = strings.treeItemRoleHash.value(property->attributeName(), (Qt::ItemDataRole)-1); - if (role >= 0) { - if ((v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, property)).isValid()) - currentItem->setData(col, role, v); - } else { - QPair rolePair = - strings.treeItemTextRoleHash.value(property->attributeName(), - qMakePair((Qt::ItemDataRole)-1, (Qt::ItemDataRole)-1)); - if (rolePair.first >= 0) { - QVariant textV = textBuilder()->loadText(property); - QVariant nativeValue = textBuilder()->toNativeValue(textV); - currentItem->setData(col, rolePair.first, qvariant_cast(nativeValue)); - currentItem->setData(col, rolePair.second, textV); - } - } - } - } - } - - foreach (DomItem *childItem, domItem->elementItem()) - pendingQueue.enqueue(qMakePair(childItem, currentItem)); - - } -} - -/*! - \internal -*/ -void QAbstractFormBuilder::loadTableWidgetExtraInfo(DomWidget *ui_widget, QTableWidget *tableWidget, QWidget *parentWidget) -{ - Q_UNUSED(parentWidget); - - const QList columns = ui_widget->elementColumn(); - if (columns.count() > 0) - tableWidget->setColumnCount(columns.count()); - for (int i = 0; i< columns.count(); i++) { - DomColumn *c = columns.at(i); - const DomPropertyHash properties = propertyMap(c->elementProperty()); - - if (!properties.isEmpty()) { - QTableWidgetItem *item = new QTableWidgetItem; - loadItemProps(this, item, properties); - tableWidget->setHorizontalHeaderItem(i, item); - } - } - - const QList rows = ui_widget->elementRow(); - if (rows.count() > 0) - tableWidget->setRowCount(rows.count()); - for (int i = 0; i< rows.count(); i++) { - const DomRow *r = rows.at(i); - const DomPropertyHash properties = propertyMap(r->elementProperty()); - - if (!properties.isEmpty()) { - QTableWidgetItem *item = new QTableWidgetItem; - loadItemProps(this, item, properties); - tableWidget->setVerticalHeaderItem(i, item); - } - } - - foreach (DomItem *ui_item, ui_widget->elementItem()) { - if (ui_item->hasAttributeRow() && ui_item->hasAttributeColumn()) { - const DomPropertyHash properties = propertyMap(ui_item->elementProperty()); - QTableWidgetItem *item = new QTableWidgetItem; - loadItemPropsNFlags(this, item, properties); - tableWidget->setItem(ui_item->attributeRow(), ui_item->attributeColumn(), item); - } - } -} - -/*! - \internal -*/ -void QAbstractFormBuilder::loadComboBoxExtraInfo(DomWidget *ui_widget, QComboBox *comboBox, QWidget *parentWidget) -{ - Q_UNUSED(parentWidget); - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - foreach (DomItem *ui_item, ui_widget->elementItem()) { - const DomPropertyHash properties = propertyMap(ui_item->elementProperty()); - QString text; - QIcon icon; - QVariant textData; - QVariant iconData; - - DomProperty *p = 0; - - p = properties.value(strings.textAttribute); - if (p && p->elementString()) { - textData = textBuilder()->loadText(p); - text = qvariant_cast(textBuilder()->toNativeValue(textData)); - } - - p = properties.value(strings.iconAttribute); - if (p) { - iconData = resourceBuilder()->loadResource(workingDirectory(), p); - icon = qvariant_cast(resourceBuilder()->toNativeValue(iconData)); - } - - comboBox->addItem(icon, text); - comboBox->setItemData((comboBox->count()-1), iconData, Qt::DecorationPropertyRole); - comboBox->setItemData((comboBox->count()-1), textData, Qt::DisplayPropertyRole); - } - - DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty); - if (currentIndex) - comboBox->setCurrentIndex(currentIndex->elementNumber()); -} - -// Get the button group name out of a widget's attribute list -static QString buttonGroupName(const DomWidget *ui_widget) -{ - typedef QList DomPropertyList; - const DomPropertyList attributes = ui_widget->elementAttribute(); - if (attributes.empty()) - return QString(); - const QString buttonGroupProperty = QLatin1String(buttonGroupPropertyC); - const DomPropertyList::const_iterator cend = attributes.constEnd(); - for (DomPropertyList::const_iterator it = attributes.constBegin(); it != cend; ++it) - if ( (*it)->attributeName() == buttonGroupProperty) - return (*it)->elementString()->text(); - return QString(); -} - -/*! - \internal - \since 4.5 -*/ - -void QAbstractFormBuilder::loadButtonExtraInfo(const DomWidget *ui_widget, QAbstractButton *button, QWidget *) -{ - typedef QFormBuilderExtra::ButtonGroupEntry ButtonGroupEntry; - typedef QFormBuilderExtra::ButtonGroupHash ButtonGroupHash; - - const QString groupName = buttonGroupName(ui_widget); - if (groupName.isEmpty()) - return; - // Find entry - ButtonGroupHash &buttonGroups = d->buttonGroups(); - ButtonGroupHash::iterator it = buttonGroups.find(groupName); - if (it == buttonGroups.end()) { -#ifdef QFORMINTERNAL_NAMESPACE // Suppress the warning when copying in Designer - uiLibWarning(QCoreApplication::translate("QAbstractFormBuilder", "Invalid QButtonGroup reference '%1' referenced by '%2'.").arg(groupName, button->objectName())); -#endif - return; - } - // Create button group on demand? - QButtonGroup *&group = it.value().second; - if (group == 0) { - group = new QButtonGroup; - group->setObjectName(groupName); - applyProperties(group, it.value().first->elementProperty()); - } - group->addButton(button); -} - -/*! - \internal - \since 4.5 -*/ -void QAbstractFormBuilder::loadItemViewExtraInfo(DomWidget *ui_widget, QAbstractItemView *itemView, - QWidget *) -{ - // - // Special handling for qtableview/qtreeview fake header attributes - // - static QStringList realPropertyNames = - (QStringList() << QLatin1String("visible") - << QLatin1String("cascadingSectionResizes") - << QLatin1String("defaultSectionSize") - << QLatin1String("highlightSections") - << QLatin1String("minimumSectionSize") - << QLatin1String("showSortIndicator") - << QLatin1String("stretchLastSection")); - - if (QTreeView *treeView = qobject_cast(itemView)) { - QList allAttributes = ui_widget->elementAttribute(); - QList headerProperties; - foreach (const QString &realPropertyName, realPropertyNames) { - const QString upperPropertyName = realPropertyName.at(0).toUpper() - + realPropertyName.mid(1); - const QString fakePropertyName = QLatin1String("header") + upperPropertyName; - foreach (DomProperty *attr, allAttributes) { - if (attr->attributeName() == fakePropertyName) { - attr->setAttributeName(realPropertyName); - headerProperties << attr; - } - } - } - applyProperties(treeView->header(), headerProperties); - } else if (QTableView *tableView = qobject_cast(itemView)) { - static QStringList headerPrefixes = - (QStringList() << QLatin1String("horizontalHeader") - << QLatin1String("verticalHeader")); - - QList allAttributes = ui_widget->elementAttribute(); - foreach (const QString &headerPrefix, headerPrefixes) { - QList headerProperties; - foreach (const QString &realPropertyName, realPropertyNames) { - const QString upperPropertyName = realPropertyName.at(0).toUpper() - + realPropertyName.mid(1); - const QString fakePropertyName = headerPrefix + upperPropertyName; - foreach (DomProperty *attr, allAttributes) { - if (attr->attributeName() == fakePropertyName) { - attr->setAttributeName(realPropertyName); - headerProperties << attr; - } - } - } - if (headerPrefix == QLatin1String("horizontalHeader")) - applyProperties(tableView->horizontalHeader(), headerProperties); - else - applyProperties(tableView->verticalHeader(), headerProperties); - } - } -} - -/*! - \internal -*/ -void QAbstractFormBuilder::loadExtraInfo(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget) -{ - const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); - if (0) { -#ifndef QT_NO_LISTWIDGET - } else if (QListWidget *listWidget = qobject_cast(widget)) { - loadListWidgetExtraInfo(ui_widget, listWidget, parentWidget); -#endif -#ifndef QT_NO_TREEWIDGET - } else if (QTreeWidget *treeWidget = qobject_cast(widget)) { - loadTreeWidgetExtraInfo(ui_widget, treeWidget, parentWidget); -#endif -#ifndef QT_NO_TABLEWIDGET - } else if (QTableWidget *tableWidget = qobject_cast(widget)) { - loadTableWidgetExtraInfo(ui_widget, tableWidget, parentWidget); -#endif -#ifndef QT_NO_COMBOBOX - } else if (QComboBox *comboBox = qobject_cast(widget)) { - if (!qobject_cast(widget)) - loadComboBoxExtraInfo(ui_widget, comboBox, parentWidget); -#endif -#ifndef QT_NO_TABWIDGET - } else if (QTabWidget *tabWidget = qobject_cast(widget)) { - const DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty); - if (currentIndex) - tabWidget->setCurrentIndex(currentIndex->elementNumber()); -#endif -#ifndef QT_NO_STACKEDWIDGET - } else if (QStackedWidget *stackedWidget = qobject_cast(widget)) { - const DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty); - if (currentIndex) - stackedWidget->setCurrentIndex(currentIndex->elementNumber()); -#endif -#ifndef QT_NO_TOOLBOX - } else if (QToolBox *toolBox = qobject_cast(widget)) { - const DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty); - if (currentIndex) - toolBox->setCurrentIndex(currentIndex->elementNumber()); - const DomProperty *tabSpacing = propertyMap(ui_widget->elementProperty()).value(strings.tabSpacingProperty); - if (tabSpacing) - toolBox->layout()->setSpacing(tabSpacing->elementNumber()); -#endif - } else if (QAbstractButton *ab = qobject_cast(widget)) { - loadButtonExtraInfo(ui_widget, ab, parentWidget); - } - if (QAbstractItemView *itemView = qobject_cast(widget)) { - loadItemViewExtraInfo(ui_widget, itemView, parentWidget); - } -} - -/*! - Returns the current working directory of the form builder. - - \sa setWorkingDirectory() */ -QDir QAbstractFormBuilder::workingDirectory() const -{ - return d->m_workingDirectory; -} - -/*! - Sets the current working directory of the form builder to the - specified \a directory. - - \sa workingDirectory()*/ -void QAbstractFormBuilder::setWorkingDirectory(const QDir &directory) -{ - d->m_workingDirectory = directory; -} - -/*! - \internal -*/ -DomAction *QAbstractFormBuilder::createDom(QAction *action) -{ - if (action->parentWidget() == action->menu() || action->isSeparator()) - return 0; - - DomAction *ui_action = new DomAction; - ui_action->setAttributeName(action->objectName()); - - const QList properties = computeProperties(action); - ui_action->setElementProperty(properties); - - return ui_action; -} - -/*! - \internal - \since 4.5 -*/ - -DomButtonGroup *QAbstractFormBuilder::createDom(QButtonGroup *buttonGroup) -{ - if (buttonGroup->buttons().count() == 0) // Empty group left over on form? - return 0; - DomButtonGroup *domButtonGroup = new DomButtonGroup; - domButtonGroup->setAttributeName(buttonGroup->objectName()); - - QList properties = computeProperties(buttonGroup); - domButtonGroup->setElementProperty(properties); - return domButtonGroup; -} - -/*! - \internal -*/ -DomActionGroup *QAbstractFormBuilder::createDom(QActionGroup *actionGroup) -{ - DomActionGroup *ui_action_group = new DomActionGroup; - ui_action_group->setAttributeName(actionGroup->objectName()); - - QList properties = computeProperties(actionGroup); - ui_action_group->setElementProperty(properties); - - QList ui_actions; - - foreach (QAction *action, actionGroup->actions()) { - if (DomAction *ui_action = createDom(action)) { - ui_actions.append(ui_action); - } - } - - ui_action_group->setElementAction(ui_actions); - - return ui_action_group; -} - -/*! - \internal -*/ -void QAbstractFormBuilder::addMenuAction(QAction *action) -{ - Q_UNUSED(action); -} - -/*! - \internal -*/ -void QAbstractFormBuilder::reset() -{ - d->m_laidout.clear(); - d->m_actions.clear(); - d->m_actionGroups.clear(); - d->m_defaultMargin = INT_MIN; - d->m_defaultSpacing = INT_MIN; -} - -/*! - \internal - Access meta enumeration for Qt::ToolBarArea -*/ - -QMetaEnum QAbstractFormBuilder::toolBarAreaMetaEnum() -{ - return metaEnum("toolBarArea"); -} - -/*! - \internal - Return paths of an icon. -*/ - -QAbstractFormBuilder::IconPaths QAbstractFormBuilder::iconPaths(const QIcon &icon) const -{ - Q_UNUSED(icon); - qWarning() << "QAbstractFormBuilder::iconPaths() is obsoleted"; - return IconPaths(); -} - -/*! - \internal - Return paths of a pixmap. -*/ - -QAbstractFormBuilder::IconPaths QAbstractFormBuilder::pixmapPaths(const QPixmap &pixmap) const -{ - Q_UNUSED(pixmap); - qWarning() << "QAbstractFormBuilder::pixmapPaths() is obsoleted"; - return IconPaths(); -} - -/*! - \internal - Set up a DOM property with icon. -*/ - -void QAbstractFormBuilder::setIconProperty(DomProperty &p, const IconPaths &ip) const -{ - DomResourceIcon *dpi = new DomResourceIcon; - - /* TODO - if (!ip.second.isEmpty()) - pix->setAttributeResource(ip.second); -*/ - dpi->setText(ip.first); - - p.setAttributeName(QFormBuilderStrings::instance().iconAttribute); - p.setElementIconSet(dpi); -} - -/*! - \internal - Set up a DOM property with pixmap. -*/ - -void QAbstractFormBuilder::setPixmapProperty(DomProperty &p, const IconPaths &ip) const -{ - DomResourcePixmap *pix = new DomResourcePixmap; - if (!ip.second.isEmpty()) - pix->setAttributeResource(ip.second); - - pix->setText(ip.first); - - p.setAttributeName(QFormBuilderStrings::instance().pixmapAttribute); - p.setElementPixmap(pix); -} - -/*! - \internal - Convenience. Return DOM property for icon; 0 if icon.isNull(). -*/ - -DomProperty* QAbstractFormBuilder::iconToDomProperty(const QIcon &icon) const -{ - Q_UNUSED(icon); - qWarning() << "QAbstractFormBuilder::iconToDomProperty() is obsoleted"; - return 0; -} - -/*! - \internal - \since 4.4 -*/ - -DomProperty *QAbstractFormBuilder::saveResource(const QVariant &v) const -{ - if (v.isNull()) - return 0; - - DomProperty *p = resourceBuilder()->saveResource(workingDirectory(), v); - if (p) - p->setAttributeName(QFormBuilderStrings::instance().iconAttribute); - return p; -} - -/*! - \internal - \since 4.5 -*/ - -DomProperty *QAbstractFormBuilder::saveText(const QString &attributeName, const QVariant &v) const -{ - if (v.isNull()) - return 0; - - DomProperty *p = textBuilder()->saveText(v); - if (p) - p->setAttributeName(attributeName); - return p; -} - -/*! - \internal - Return the appropriate DOM pixmap for an image dom property. - From 4.4 - unused -*/ - -const DomResourcePixmap *QAbstractFormBuilder::domPixmap(const DomProperty* p) { - switch (p->kind()) { - case DomProperty::IconSet: - qDebug() << "** WARNING QAbstractFormBuilder::domPixmap() called for icon set!"; - break; - case DomProperty::Pixmap: - return p->elementPixmap(); - default: - break; - } - return 0; -} - -/*! - \internal - Create icon from DOM. - From 4.4 - unused -*/ - -QIcon QAbstractFormBuilder::domPropertyToIcon(const DomResourcePixmap *icon) -{ - Q_UNUSED(icon); - qWarning() << "QAbstractFormBuilder::domPropertyToIcon() is obsoleted"; - return QIcon(); -} - -/*! - \internal - Create icon from DOM. Assert if !domPixmap - From 4.4 - unused -*/ - -QIcon QAbstractFormBuilder::domPropertyToIcon(const DomProperty* p) -{ - Q_UNUSED(p); - qWarning() << "QAbstractFormBuilder::domPropertyToIcon() is obsoleted"; - return QIcon(); -} - - -/*! - \internal - Create pixmap from DOM. - From 4.4 - unused -*/ - -QPixmap QAbstractFormBuilder::domPropertyToPixmap(const DomResourcePixmap* pixmap) -{ - Q_UNUSED(pixmap); - qWarning() << "QAbstractFormBuilder::domPropertyToPixmap() is obsoleted"; - return QPixmap(); -} - - -/*! - \internal - Create pixmap from DOM. Assert if !domPixmap - From 4.4 - unused -*/ - -QPixmap QAbstractFormBuilder::domPropertyToPixmap(const DomProperty* p) -{ - Q_UNUSED(p); - qWarning() << "QAbstractFormBuilder::domPropertyToPixmap() is obsoleted"; - return QPixmap(); -} - -/*! - \fn void QAbstractFormBuilder::createConnections ( DomConnections *, QWidget * ) - \internal -*/ - -/*! - \fn void QAbstractFormBuilder::createCustomWidgets ( DomCustomWidgets * ) - \internal -*/ - -/*! - \fn void QAbstractFormBuilder::createResources ( DomResources * ) - \internal -*/ - -/*! - \fn QFormScriptRunner *QAbstractFormBuilder::formScriptRunner() const - \internal - \since 4.3 -*/ -#ifndef QT_FORMBUILDER_NO_SCRIPT -QFormScriptRunner *QAbstractFormBuilder::formScriptRunner() const -{ - return &(d->formScriptRunner()); -} -#endif - -/*! - Sets whether the execution of scripts is enabled to \a enabled. - \since 4.3 - \internal -*/ - -void QAbstractFormBuilder::setScriptingEnabled(bool enabled) -{ -#ifdef QT_FORMBUILDER_NO_SCRIPT - if (enabled) - uiLibWarning(QCoreApplication::translate("QAbstractFormBuilder", "This version of the uitools library is linked without script support.")); -#else - QFormScriptRunner::Options options = formScriptRunner()->options(); - if (enabled) - options &= ~QFormScriptRunner::DisableScripts; - else - options |= QFormScriptRunner::DisableScripts; - formScriptRunner()->setOptions(options); -#endif -} - -/*! - Returns whether the execution of scripts is enabled. - \sa setScriptingEnabled() - \since 4.3 - \internal -*/ - -bool QAbstractFormBuilder::isScriptingEnabled() const -{ -#ifdef QT_FORMBUILDER_NO_SCRIPT - return false; -#else - return !(formScriptRunner()->options() & QFormScriptRunner::DisableScripts); -#endif -} - -/*! - Returns a human-readable description of the last error occurred in load(). - - \since 5.0 - \sa load() -*/ - -QString QAbstractFormBuilder::errorString() const -{ - return d->m_errorString; -} - -QT_END_NAMESPACE -- cgit v1.2.3