qsimpleresource.cpp

来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 316 行

CPP
316
字号
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the Qt Designer of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.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 GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qsimpleresource_p.h"#include "widgetfactory_p.h"#include <formscriptrunner_p.h>#include <properties_p.h>#include <ui4_p.h>#include <QtDesigner/QDesignerFormEditorInterface>#include <QtDesigner/QDesignerLanguageExtension>#include <QtDesigner/QDesignerIconCacheInterface>#include <script_p.h>#include <QtDesigner/QExtensionManager>#include <QtDesigner/QDesignerCustomWidgetInterface>#include <QtDesigner/extrainfo.h>#include <QtGui/QIcon>#include <QtGui/QWidget>namespace {    typedef QList<DomWidgetData*> DomWidgetDataList;    typedef QList<DomProperty*> DomPropertyList;    typedef QList<QDesignerCustomWidgetInterface *> CustomWidgetInterfaces;    typedef QHash<QString, QString> ClassNameScriptHash;}namespace qdesigner_internal {bool QSimpleResource::m_warningsEnabled = true;QSimpleResource::QSimpleResource(QDesignerFormEditorInterface *core) :    QAbstractFormBuilder(),    m_core(core){    QString workingDirectory = QDir::homePath();    workingDirectory +=  QDir::separator();    workingDirectory +=  QLatin1String(".designer");    setWorkingDirectory(QDir(workingDirectory));    // Disable scripting in the editors.    formScriptRunner()-> setOptions(QFormScriptRunner::DisableScripts);}QSimpleResource::~QSimpleResource(){}QBrush QSimpleResource::setupBrush(DomBrush *brush){    return QAbstractFormBuilder::setupBrush(brush);}DomBrush *QSimpleResource::saveBrush(const QBrush &brush){    return QAbstractFormBuilder::saveBrush(brush);}QIcon QSimpleResource::nameToIcon(const QString &filePath, const QString &qrcPath){    QString file_path = filePath;    QString qrc_path = qrcPath;    if (qrc_path.isEmpty()) {        QDesignerLanguageExtension *lang = qt_extension<QDesignerLanguageExtension*>(core()->extensionManager(), core());        if (!lang || !lang->isLanguageResource(file_path))            file_path = workingDirectory().absoluteFilePath(file_path);    } else {        qrc_path = workingDirectory().absoluteFilePath(qrc_path);    }    return core()->iconCache()->nameToIcon(file_path, qrc_path);}QString QSimpleResource::iconToFilePath(const QIcon &pm) const{    QString file_path = core()->iconCache()->iconToFilePath(pm);    QString qrc_path = core()->iconCache()->iconToQrcPath(pm);    if (qrc_path.isEmpty()) {        QDesignerLanguageExtension *lang = qt_extension<QDesignerLanguageExtension*>(core()->extensionManager(), core());        if (!lang || !lang->isLanguageResource(file_path))            return workingDirectory().relativeFilePath(file_path);    }    return file_path;}QString QSimpleResource::iconToQrcPath(const QIcon &pm) const{    QString qrc_path = core()->iconCache()->iconToQrcPath(pm);    if (qrc_path.isEmpty())        return QString();    return workingDirectory().relativeFilePath(qrc_path);}QPixmap QSimpleResource::nameToPixmap(const QString &filePath, const QString &qrcPath){    QString file_path = filePath;    QString qrc_path = qrcPath;    if (qrc_path.isEmpty()) {        QDesignerLanguageExtension *lang = qt_extension<QDesignerLanguageExtension*>(core()->extensionManager(), core());        if (!lang || !lang->isLanguageResource(file_path))            file_path = workingDirectory().absoluteFilePath(file_path);    } else {        qrc_path = workingDirectory().absoluteFilePath(qrc_path);    }    return core()->iconCache()->nameToPixmap(file_path, qrc_path);}QString QSimpleResource::pixmapToFilePath(const QPixmap &pm) const{    QString file_path = core()->iconCache()->pixmapToFilePath(pm);    QString qrc_path = core()->iconCache()->pixmapToQrcPath(pm);    if (qrc_path.isEmpty()) {        QDesignerLanguageExtension *lang = qt_extension<QDesignerLanguageExtension*>(core()->extensionManager(), core());        if (!lang || !lang->isLanguageResource(file_path))            return workingDirectory().relativeFilePath(file_path);    }    return file_path;}QString QSimpleResource::pixmapToQrcPath(const QPixmap &pm) const{    QString qrc_path = core()->iconCache()->pixmapToQrcPath(pm);    if (qrc_path.isEmpty())        return QString();    return workingDirectory().relativeFilePath(qrc_path);}DomScript *QSimpleResource::createScript(const QString &script, ScriptSource source){    if (script.isEmpty())        return 0;    DomScript *domScript = new DomScript();    switch (source) {    case ScriptExtension:        domScript->setAttributeSource(QLatin1String("extension"));        break;    case ScriptDesigner:        domScript->setAttributeSource(QLatin1String("designer"));        break;    case ScriptCustomWidgetPlugin:        domScript->setAttributeSource(QLatin1String("customwidgetplugin"));        break;    }    domScript->setAttributeLanguage(QLatin1String("Qt Script"));    domScript->setText(script);    return domScript;}// Add a script to a list of DomScripts unless emptyvoid QSimpleResource::addScript(const QString &script, ScriptSource source, DomScripts &domScripts){    if (DomScript *domScript = createScript(script, source)) {        domScripts += domScript;    }}void QSimpleResource::addExtensionDataToDOM(QAbstractFormBuilder *afb,                                            QDesignerFormEditorInterface *core,                                             DomWidget *ui_widget, QWidget *widget){    QExtensionManager *emgr = core->extensionManager();    if (QDesignerExtraInfoExtension *extra = qt_extension<QDesignerExtraInfoExtension*>(emgr, widget)) {        extra->saveWidgetExtraInfo(ui_widget);    }    if (QDesignerScriptExtension *scriptExt = qt_extension<QDesignerScriptExtension*>(emgr, widget)) {        // Add internal state        const QVariantMap data = scriptExt->data();        if (!data.empty()) {            // Convert the map to a DomState.            // We pass on the widget for property introspection. Thus, non-designable properties            // that have to be converted using QMetaObject (enums and the like) will work.            DomPropertyList properties;            const QVariantMap::const_iterator vcend = data.constEnd();            for (QVariantMap::const_iterator it = data.constBegin(); it != vcend; ++it) {                if (DomProperty *prop = variantToDomProperty(afb, widget, it.key(), it.value()))                    properties += prop;            }            if (!properties.empty()) {                DomWidgetData *domData = new DomWidgetData;                domData->setElementProperty(properties);                DomWidgetDataList domDataList;                 domDataList += domData;                ui_widget->setElementWidgetData(domDataList);            }        }        // Add script        const QString script = scriptExt->script();        if (!script.isEmpty()) {            DomScripts domScripts = ui_widget->elementScript();            addScript(script, ScriptExtension, domScripts);            ui_widget->setElementScript(domScripts);        }    }}void QSimpleResource::applyExtensionDataFromDOM(QAbstractFormBuilder *afb,                                                QDesignerFormEditorInterface *core,                                                 DomWidget *ui_widget, QWidget *widget, bool applyState){    QExtensionManager *emgr = core->extensionManager();    if (QDesignerExtraInfoExtension *extra = qt_extension<QDesignerExtraInfoExtension*>(emgr, widget)) {        extra->loadWidgetExtraInfo(ui_widget);    }    if (applyState) {        if (QDesignerScriptExtension *scriptExt = qt_extension<QDesignerScriptExtension*>(emgr, widget)) {            // Apply the state.            // We pass on the widget for property introspection. Thus, non-designable properties            // that have to be converted using QMetaObject (enums and the like) will work.            QVariantMap data;            DomWidgetDataList domDataList = ui_widget->elementWidgetData();            if (!domDataList.empty()) {                foreach (const DomWidgetData *domData, domDataList) {                    const DomPropertyList properties = domData->elementProperty();                    foreach(const DomProperty *prop, properties) {                        const QVariant vprop = domPropertyToVariant(afb, widget->metaObject(), prop);                        if (vprop.type() != QVariant::Invalid)                             data.insert(prop->attributeName(), vprop);                    }                }            }            scriptExt->setData(data);        }    }}static const ClassNameScriptHash &customWidgetClassNameScriptHash(const QDesignerFormEditorInterface *core){    static bool firstTime = true;    static ClassNameScriptHash classNameScriptHash;    if (firstTime) {        // Populate hash with scripts        firstTime = false;        foreach (const QDesignerCustomWidgetInterface *customWidget, core->pluginManager()->registeredCustomWidgets()) {            const QString codeTemplate = customWidget->codeTemplate();            if (!codeTemplate.isEmpty())                 classNameScriptHash.insert(customWidget->name(), codeTemplate);        }    }    return classNameScriptHash;}QString QSimpleResource::customWidgetScript(QDesignerFormEditorInterface *core, QObject *object){    return customWidgetScript(core, qdesigner_internal::WidgetFactory::classNameOf(core, object));}bool QSimpleResource::hasCustomWidgetScript(QDesignerFormEditorInterface *core, QObject *object){    return customWidgetClassNameScriptHash(core).contains(qdesigner_internal::WidgetFactory::classNameOf(core, object));}QString QSimpleResource::customWidgetScript(QDesignerFormEditorInterface *core, const QString &className){    const ClassNameScriptHash &classNameScriptHash = customWidgetClassNameScriptHash(core);    const ClassNameScriptHash::const_iterator it = classNameScriptHash.constFind(className);    if (it != classNameScriptHash.constEnd())        return it.value();    return QString();}bool QSimpleResource::setWarningsEnabled(bool warningsEnabled){    const bool rc = m_warningsEnabled;    m_warningsEnabled = warningsEnabled;    return rc;}bool QSimpleResource::warningsEnabled(){    return m_warningsEnabled;}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?