graphicspropertyeditor.cpp

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

CPP
376
字号
/******************************************************************************** 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.******************************************************************************//*TRANSLATOR qdesigner_internal::GraphicsPropertyEditor*/#include "graphicspropertyeditor.h"#include <findicondialog_p.h>#include <iconloader_p.h>#include <QtDesigner/QDesignerFormEditorInterface>#include <QtDesigner/QDesignerFormWindowManagerInterface>#include <QtDesigner/QDesignerIconCacheInterface>#include <QtGui/QComboBox>#include <QtGui/QToolButton>#include <QtGui/QHBoxLayout>namespace qdesigner_internal {GraphicsPropertyEditor::~GraphicsPropertyEditor(){}void GraphicsPropertyEditor::init(){    QHBoxLayout *layout = new QHBoxLayout(this);    layout->setMargin(0);    layout->setSpacing(0);    m_combo = new QComboBox(this);    m_combo->setFrame(0);    m_combo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));    m_combo->setEditable(false);    layout->addWidget(m_combo);    m_button = new QToolButton(this);    m_button->setIcon(createIconSet(QLatin1String("fileopen.png")));    m_button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding);    m_button->setFixedWidth(20);    layout->addWidget(m_button);    connect(m_button, SIGNAL(clicked()), this, SLOT(showDialog()));    connect(m_combo, SIGNAL(activated(int)), this, SLOT(comboActivated(int)));    populateCombo();}void GraphicsPropertyEditor::comboActivated(int idx){    if (m_mode == Icon) {        setIcon(qvariant_cast<QIcon>(m_combo->itemData(idx)));    } else {        setPixmap(qvariant_cast<QPixmap>(m_combo->itemData(idx)));    }}int GraphicsPropertyEditor::indexOfIcon(const QIcon &icon){    if (m_mode == Pixmap)        return -1;    if (icon.isNull())        return 0;    for (int i = 1; i < m_combo->count(); ++i) {        if (qvariant_cast<QIcon>(m_combo->itemData(i)).serialNumber() == icon.serialNumber())            return i;    }    populateCombo();    for (int i = 1; i < m_combo->count(); ++i) {        if (qvariant_cast<QIcon>(m_combo->itemData(i)).serialNumber() == icon.serialNumber())            return i;    }    return -1;}int GraphicsPropertyEditor::indexOfPixmap(const QPixmap &pixmap){    if (m_mode == Icon)        return -1;    if (pixmap.isNull())        return 0;    for (int i = 1; i < m_combo->count(); ++i) {        if (qvariant_cast<QPixmap>(m_combo->itemData(i)).serialNumber() == pixmap.serialNumber())            return i;    }    populateCombo();    for (int i = 1; i < m_combo->count(); ++i) {        if (qvariant_cast<QPixmap>(m_combo->itemData(i)).serialNumber() == pixmap.serialNumber())            return i;    }    return -1;}void GraphicsPropertyEditor::populateCombo(){    QDesignerFormWindowInterface *form = m_core->formWindowManager()->activeFormWindow();    if (form == 0)        return;    const QStringList qrc_list = form->resourceFiles();    m_combo->clear();    static const QString noIcon = tr("<no icon>");    static const QString noPixmap = tr("<no pixmap>");    QDesignerIconCacheInterface *cache = m_core->iconCache();    if (m_mode == Icon) {        m_combo->addItem(noIcon);        const QList<QIcon> icon_list = cache->iconList();        foreach (QIcon icon, icon_list) {            const QString qrc_path = cache->iconToQrcPath(icon);            if (!qrc_path.isEmpty() && !qrc_list.contains(qrc_path))                continue;            m_combo->addItem(icon, QFileInfo(cache->iconToFilePath(icon)).fileName(),                                QVariant(icon));        }    } else {        m_combo->addItem(noPixmap);        const QList<QPixmap> pixmap_list = cache->pixmapList();        foreach (QPixmap pixmap, pixmap_list) {            const QString qrc_path = cache->iconToQrcPath(pixmap);            if (!qrc_path.isEmpty() && !qrc_list.contains(qrc_path))                continue;            m_combo->addItem(QIcon(pixmap),                                QFileInfo(cache->pixmapToFilePath(pixmap)).fileName(),                                QVariant(pixmap));        }    }    const bool blocked = m_combo->blockSignals(true);    m_combo->setCurrentIndex(0);    m_combo->blockSignals(blocked);}GraphicsPropertyEditor::GraphicsPropertyEditor(QDesignerFormEditorInterface *core, const QIcon &pm,                                                QWidget *parent)    : QWidget(parent),      m_mode(Icon),      m_core(core){    init();    setIcon(pm);}GraphicsPropertyEditor::GraphicsPropertyEditor(QDesignerFormEditorInterface *core, const QPixmap &pm,                                                QWidget *parent)    : QWidget(parent),      m_mode(Pixmap),      m_core(core){    init();    setPixmap(pm);}void GraphicsPropertyEditor::showDialog(){    QDesignerFormWindowInterface *form = m_core->formWindowManager()->activeFormWindow();    if (form == 0)        return;    QString file_path;    QString qrc_path;    if (m_mode == Icon && !m_icon.isNull()) {        file_path = m_core->iconCache()->iconToFilePath(m_icon);        qrc_path = m_core->iconCache()->iconToQrcPath(m_icon);    } else if (!m_pixmap.isNull()) {        file_path = m_core->iconCache()->pixmapToFilePath(m_pixmap);        qrc_path = m_core->iconCache()->pixmapToQrcPath(m_pixmap);    }    FindIconDialog dialog(form, 0);    dialog.setPaths(qrc_path, file_path);    if (dialog.exec()) {        file_path = dialog.filePath();        qrc_path = dialog.qrcPath();        if (!file_path.isEmpty()) {            populateCombo();            if (m_mode == Icon) {                const QIcon icon = m_core->iconCache()->nameToIcon(file_path, qrc_path);                populateCombo();                setIcon(icon);            } else {                const QPixmap pixmap = m_core->iconCache()->nameToPixmap(file_path, qrc_path);                populateCombo();                setPixmap(pixmap);            }        }    }}void GraphicsPropertyEditor::setIcon(const QIcon &pm){    if (m_mode == Pixmap)        return;    if (pm.isNull() && m_icon.isNull())        return;    if (pm.serialNumber() == m_icon.serialNumber())        return;    m_icon = pm;    const bool blocked = m_combo->blockSignals(true);    m_combo->setCurrentIndex(indexOfIcon(m_icon));    m_combo->blockSignals(blocked);    emit iconChanged(m_icon);}void GraphicsPropertyEditor::setPixmap(const QPixmap &pm){    if (m_mode == Icon)        return;    if (pm.isNull() && m_pixmap.isNull())        return;    if (pm.serialNumber() == m_pixmap.serialNumber())        return;    m_pixmap = pm;    const bool blocked = m_combo->blockSignals(true);    m_combo->setCurrentIndex(indexOfPixmap(m_pixmap));    m_combo->blockSignals(blocked);    emit pixmapChanged(m_pixmap);}IconProperty::IconProperty(QDesignerFormEditorInterface *core, const QIcon &value, const QString &name)    : AbstractProperty<QIcon>(value, name),      m_core(core){}void IconProperty::setValue(const QVariant &value){    m_value = qvariant_cast<QIcon>(value);}QString IconProperty::toString() const{    const QString path = m_core->iconCache()->iconToFilePath(m_value);    return QFileInfo(path).fileName();}QVariant IconProperty::decoration() const{    if (m_value.isNull())        return qVariantFromValue(emptyIcon());    return qVariantFromValue(m_value);}QWidget *IconProperty::createEditor(QWidget *parent, const QObject *target,                                        const char *receiver) const{    GraphicsPropertyEditor *editor = new GraphicsPropertyEditor(m_core, m_value, parent);    QObject::connect(editor, SIGNAL(iconChanged(QIcon)), target, receiver);    return editor;}void IconProperty::updateEditorContents(QWidget *editor){    if (GraphicsPropertyEditor *ed = qobject_cast<GraphicsPropertyEditor*>(editor)) {        ed->setIcon(m_value);    }}void IconProperty::updateValue(QWidget *editor){    if (GraphicsPropertyEditor *ed = qobject_cast<GraphicsPropertyEditor*>(editor)) {        const QIcon newValue = ed->icon();        if (newValue.serialNumber() != m_value.serialNumber()) {            m_value = newValue;            setChanged(true);        }    }}PixmapProperty::PixmapProperty(QDesignerFormEditorInterface *core, const QPixmap &pixmap, const QString &name)    : AbstractProperty<QPixmap>(pixmap, name),      m_core(core){}void PixmapProperty::setValue(const QVariant &value){    m_value = qvariant_cast<QPixmap>(value);}QString PixmapProperty::toString() const{    const QString path = m_core->iconCache()->pixmapToFilePath(m_value);    return QFileInfo(path).fileName();}QVariant PixmapProperty::decoration() const{    if (m_value.isNull())        return qVariantFromValue(emptyIcon());    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);        }    }}}

⌨️ 快捷键说明

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