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 + -
显示快捷键?