⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 propertyeditor.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    : AbstractProperty<QPixmap>(pixmap, name){    m_core = core;}void PixmapProperty::setValue(const QVariant &value){    m_value = qvariant_cast<QPixmap>(value);}QString PixmapProperty::toString() const{    QString path = m_core->iconCache()->pixmapToFilePath(m_value);    return QFileInfo(path).fileName();}QVariant PixmapProperty::decoration() const{    static QIcon empty_icon;    if (empty_icon.isNull())        empty_icon = QIcon(QLatin1String(":/trolltech/formeditor/images/emptyicon.png"));    if (m_value.isNull())        return qVariantFromValue(empty_icon);    return qVariantFromValue(QIcon(m_value));}QWidget *PixmapProperty::createEditor(QWidget *parent, const QObject *target, const char *receiver) const{    GraphicsPropertyEditor *editor = new GraphicsPropertyEditor(m_core, m_value, parent);    QObject::connect(editor, SIGNAL(pixmapChanged(QPixmap)), target, receiver);    return editor;}void PixmapProperty::updateEditorContents(QWidget *editor){    if (GraphicsPropertyEditor *ed = qobject_cast<GraphicsPropertyEditor*>(editor)) {        ed->setPixmap(m_value);    }}void PixmapProperty::updateValue(QWidget *editor){    if (GraphicsPropertyEditor *ed = qobject_cast<GraphicsPropertyEditor*>(editor)) {        QPixmap newValue = ed->pixmap();        if (newValue.serialNumber() != m_value.serialNumber()) {            m_value = newValue;            setChanged(true);        }    }}// -------------------------------------------------------------------------------------struct Group{    QString name;    QList<IProperty*> properties;    inline Group() {}    inline Group(const QString &n): name(n) {}    inline bool operator == (const Group &other) const    { return name == other.name; }};void PropertyEditor::createPropertySheet(PropertyCollection *root, QObject *object){    QList<Group> groups;    QExtensionManager *m = m_core->extensionManager();    bool isMainContainer = false;    if (QWidget *widget = qobject_cast<QWidget*>(object)) {        if (QDesignerFormWindowInterface *fw = QDesignerFormWindowInterface::findFormWindow(widget)) {            isMainContainer = (fw->mainContainer() == widget);        }    }    m_prop_sheet = qobject_cast<QDesignerPropertySheetExtension*>(m->extension(object, Q_TYPEID(QDesignerPropertySheetExtension)));    for (int i=0; i<m_prop_sheet->count(); ++i) {        if (!m_prop_sheet->isVisible(i))            continue;        QString pname = m_prop_sheet->propertyName(i);        QVariant value = m_prop_sheet->property(i);        IProperty *p = 0;        if (qVariantCanConvert<FlagType>(value)) {            FlagType f = qvariant_cast<FlagType>(value);            if (pname == QLatin1String("alignment")) {                if (qobject_cast<QLineEdit *>(object)) {                    QStringList align_keys = QStringList()                        << QString::fromUtf8("Qt::AlignLeft")                        << QString::fromUtf8("Qt::AlignHCenter")                        << QString::fromUtf8("Qt::AlignRight");                    QMap<QString, QVariant> align_map;                    foreach (QString align, align_keys) {                        align_map.insert(align, f.items.value(align));                    }                    p = new MapProperty(align_map, uint(f.value.toInt() & Qt::AlignHorizontal_Mask),                                    QLatin1String("alignment"));                } else {                    p = new AlignmentProperty(f.items, Qt::Alignment(f.value.toInt()), pname);                }            } else {                p = new FlagsProperty(f.items, f.value.toInt(), pname);            }        } else if (qVariantCanConvert<EnumType>(value)) {            EnumType e = qvariant_cast<EnumType>(value);            p = new MapProperty(e.items, e.value, pname);        }        if (!p) {            switch (value.type()) {            case 0:                p = createSpecialProperty(value, pname);                break;            case QVariant::Int:                p = new IntProperty(value.toInt(), pname);                break;            case QVariant::UInt:                p = new IntProperty(value.toUInt(), pname);                break;            case QVariant::Double:                p = new DoubleProperty(value.toDouble(), pname);                break;            case QVariant::Bool:                p = new BoolProperty(value.toBool(), pname);                break;            case QVariant::ByteArray:                p = new StringProperty(QString::fromUtf8(value.toByteArray()), pname);                break;            case QVariant::String: {                if (pname != QLatin1String("objectName")                        && qobject_cast<MetaDataBase*>(core()->metaDataBase()) && core()->metaDataBase()->item(object)) {                    MetaDataBaseItem *item = static_cast<MetaDataBaseItem*>(core()->metaDataBase()->item(object));                    p = new StringProperty(value.toString(), pname, true, item->propertyComment(pname));                } else {                    StringProperty *sprop = new StringProperty(value.toString(), pname);                    p = sprop;                    if (pname == QLatin1String("objectName")) {                        sprop->setCheckValidObjectName(true);                        sprop->setAllowScope(isMainContainer);                    }                }            } break;            case QVariant::Size:                p = new SizeProperty(value.toSize(), pname);                break;            case QVariant::Point:                p = new PointProperty(value.toPoint(), pname);                break;            case QVariant::Rect:                p = new RectProperty(value.toRect(), pname);                break;            case QVariant::Icon:                p = new IconProperty(m_core, qvariant_cast<QIcon>(value), pname);                break;            case QVariant::Pixmap:                p = new PixmapProperty(m_core, qvariant_cast<QPixmap>(value), pname);                break;            case QVariant::Font:                p = new FontProperty(qvariant_cast<QFont>(value), pname);                break;            case QVariant::Color:                p = new ColorProperty(qvariant_cast<QColor>(value), pname);                break;            case QVariant::SizePolicy:                p = new SizePolicyProperty(qvariant_cast<QSizePolicy>(value), pname);                break;            case QVariant::DateTime:                p = new DateTimeProperty(value.toDateTime(), pname);                break;            case QVariant::Date:                p = new DateProperty(value.toDate(), pname);                break;            case QVariant::Time:                p = new TimeProperty(value.toTime(), pname);                break;            case QVariant::Cursor:                p = new CursorProperty(qvariant_cast<QCursor>(value), pname);                break;            case QVariant::KeySequence:                p = new StringProperty(qvariant_cast<QKeySequence>(value), pname);                break;            case QVariant::Palette:                p = new PaletteProperty(qvariant_cast<QPalette>(value),                                qobject_cast<QWidget *>(object), pname);                break;            default:                // ### qWarning() << "property" << pname << "with type" << value.type() << "not supported yet!";                break;            } // end switch        }        if (p != 0) {            p->setHasReset(m_prop_sheet->hasReset(i));            p->setChanged(m_prop_sheet->isChanged(i));            p->setDirty(false);            QString pgroup = m_prop_sheet->propertyGroup(i);            int groupIndex = groups.indexOf(pgroup);            if (groupIndex == -1) {                groupIndex = groups.count();                groups.append(Group(pgroup));            }            QList<IProperty*> &groupProperties = groups[groupIndex].properties;            groupProperties.append(p);        }    }    foreach (Group g, groups) {        root->addProperty(new SeparatorProperty(QString(), g.name));        foreach (IProperty *p, g.properties) {            root->addProperty(p);        }    }}PropertyEditor::PropertyEditor(QDesignerFormEditorInterface *core,            QWidget *parent, Qt::WindowFlags flags)    : QDesignerPropertyEditorInterface(parent, flags),      m_core(core),      m_properties(0){    QVBoxLayout *lay = new QVBoxLayout(this);    lay->setMargin(0);    m_editor = new QPropertyEditor(this);    lay->addWidget(m_editor);    m_prop_sheet = 0;    connect(m_editor, SIGNAL(propertyChanged(IProperty*)),        this, SLOT(firePropertyChanged(IProperty*)));    connect(m_editor->editorModel(), SIGNAL(resetProperty(QString)),                this, SLOT(resetProperty(QString)));}PropertyEditor::~PropertyEditor(){}bool PropertyEditor::isReadOnly() const{    return m_editor->isReadOnly();}void PropertyEditor::setReadOnly(bool readOnly){    m_editor->setReadOnly(readOnly);}QDesignerFormEditorInterface *PropertyEditor::core() const{    return m_core;}IProperty *PropertyEditor::propertyByName(IProperty *p, const QString &name){    if (p->propertyName() == name)        return p;    if (p->kind() == IProperty::Property_Group) {        IPropertyGroup *g = static_cast<IPropertyGroup*>(p);        for (int i=0; i<g->propertyCount(); ++i)            if (IProperty *c = propertyByName(g->propertyAt(i), name))                return c;    }    return 0;}void PropertyEditor::setPropertyValue(const QString &name, const QVariant &value, bool changed){    if (isReadOnly())        return;    if (IProperty *p = propertyByName(m_editor->initialInput(), name)) {        if (p->value() != value)            p->setValue(value);        p->setChanged(changed);        p->setDirty(false);        m_editor->editorModel()->refresh(p);    }}void PropertyEditor::firePropertyChanged(IProperty *p){    if (isReadOnly())        return;    if (object() && p->parent() && p->propertyName() == QLatin1String("comment")) {        QString parentProperty = p->parent()->propertyName();        MetaDataBase *db = qobject_cast<MetaDataBase*>(core()->metaDataBase());        if (db && db->item(object())) {            MetaDataBaseItem *item = static_cast<MetaDataBaseItem*>(db->item(object()));            item->setPropertyComment(parentProperty, p->value().toString());            emit propertyChanged(parentProperty, p->parent()->value());        }        return;    }    emit propertyChanged(p->propertyName(), p->value());}void PropertyEditor::clearDirty(IProperty *p){    p->setDirty(false);    if (p->kind() == IProperty::Property_Normal)        return;    IPropertyGroup *g = static_cast<IPropertyGroup*>(p);    for (int i=0; i<g->propertyCount(); ++i)        clearDirty(g->propertyAt(i));}void PropertyEditor::setObject(QObject *object){    if (m_editor->initialInput())        clearDirty(m_editor->initialInput());    m_object = object;    if (QAction *action = qobject_cast<QAction*>(m_object)) {        if (action->menu())            m_object = action->menu();    }    IPropertyGroup *old_properties = m_properties;    m_properties = 0;    m_prop_sheet = 0;    if (m_object) {        PropertyCollection *collection = new PropertyCollection(QLatin1String("<root>"));        createPropertySheet(collection, object);        m_properties = collection;    }    m_editor->setInitialInput(m_properties);    delete old_properties;}void PropertyEditor::resetProperty(const QString &prop_name){    int idx = m_prop_sheet->indexOf(prop_name);    if (idx == -1) {        qWarning("PropertyEditor::resetProperty(): no property \"%s\"",                    prop_name.toUtf8().constData());        return;    }    QWidget *w = qobject_cast<QWidget*>(m_object);    if (w == 0) {        qWarning("PropertyEditor::resetProperty(): object is not a widget");        return;    }    QDesignerFormWindowInterface *form = QDesignerFormWindowInterface::findFormWindow(w);    if (form == 0) {        qWarning("PropertyEditor::resetProperty(): widget does not belong to any form");        return;    }    form->cursor()->resetWidgetProperty(w, prop_name);}QString PropertyEditor::currentPropertyName() const{    QModelIndex index = m_editor->selectionModel()->currentIndex();    if (index.isValid()) {        IProperty *property = static_cast<IProperty*>(index.internalPointer());        while (property && property->isFake())            property = property->parent();        if (property)            return property->propertyName();    }    return QString();}#include "propertyeditor.moc"

⌨️ 快捷键说明

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