brushmanagerproxy.cpp

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

CPP
255
字号
/******************************************************************************** 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 "qtbrushmanager.h"#include "brushmanagerproxy.h"#include "qsimpleresource_p.h"#include "ui4_p.h"#include <QDomDocument>namespace qdesigner_internal {class BrushManagerProxyPrivate{    BrushManagerProxy *q_ptr;    Q_DECLARE_PUBLIC(BrushManagerProxy)public:    BrushManagerProxyPrivate(BrushManagerProxy *bp, QDesignerFormEditorInterface *core);    void brushAdded(const QString &name, const QBrush &brush);    void brushRemoved(const QString &name);    QString uniqueBrushFileName(const QString &brushName) const;    QtBrushManager *m_Manager;    QString m_designerFolder;    const QString  m_BrushFolder;    QString m_BrushPath;    QDesignerFormEditorInterface *m_Core;    QMap<QString, QString> m_FileToBrush;    QMap<QString, QString> m_BrushToFile;};BrushManagerProxyPrivate::BrushManagerProxyPrivate(BrushManagerProxy *bp, QDesignerFormEditorInterface *core) :    q_ptr(bp),    m_Manager(0),    m_BrushFolder(QLatin1String("brushes")),    m_Core(core){    m_designerFolder = QDir::homePath();    m_designerFolder += QDir::separator();    m_designerFolder += QLatin1String(".designer");    m_BrushPath = m_designerFolder;    m_BrushPath += QDir::separator();    m_BrushPath += m_BrushFolder;}}  // namespace qdesigner_internalusing namespace qdesigner_internal;void BrushManagerProxyPrivate::brushAdded(const QString &name, const QBrush &brush){    const QString filename = uniqueBrushFileName(name);    QDir designerDir(m_designerFolder);    if (!designerDir.exists(m_BrushFolder))        designerDir.mkdir(m_BrushFolder);    QFile file(m_BrushPath + QDir::separator() +filename);    if (!file.open(QIODevice::WriteOnly))        return;    QSimpleResource resource(m_Core);    DomBrush *dom = resource.saveBrush(brush);    QDomDocument doc;    QDomElement elem = doc.createElement(QLatin1String("description"));    elem.setAttribute(QLatin1String("name"), name);    elem.appendChild(dom->write(doc));    doc.appendChild(elem);    file.write(doc.toString().toUtf8());    file.close();    m_FileToBrush[filename] = name;    m_BrushToFile[name] = filename;    delete dom;}void BrushManagerProxyPrivate::brushRemoved(const QString &name){    QDir brushDir(m_BrushPath);    QString filename = m_BrushToFile[name];    brushDir.remove(filename);    m_BrushToFile.remove(name);    m_FileToBrush.remove(filename);}QString BrushManagerProxyPrivate::uniqueBrushFileName(const QString &brushName) const{    const  QString extension = QLatin1String(".br");    QString filename = brushName.toLower();    filename += extension;    int i = 0;    while (m_FileToBrush.contains(filename)) {        filename = brushName.toLower();        filename += QString::number(++i);        filename += extension;    }    return filename;}BrushManagerProxy::BrushManagerProxy(QDesignerFormEditorInterface *core, QObject *parent)    : QObject(parent){    d_ptr = new BrushManagerProxyPrivate(this, core);}BrushManagerProxy::~BrushManagerProxy(){    delete d_ptr;}void BrushManagerProxy::setBrushManager(QtBrushManager *manager){    if (d_ptr->m_Manager == manager)        return;    if (d_ptr->m_Manager) {        disconnect(d_ptr->m_Manager, SIGNAL(brushAdded(const QString &, const QBrush &)),                    this, SLOT(brushAdded(const QString &, const QBrush &)));        disconnect(d_ptr->m_Manager, SIGNAL(brushRemoved(const QString &)),                    this, SLOT(brushRemoved(const QString &)));    }    d_ptr->m_Manager = manager;    if (!d_ptr->m_Manager)        return;    // clear the manager    QMap<QString, QBrush> brushes = d_ptr->m_Manager->brushes();    QMap<QString, QBrush>::ConstIterator it = brushes.constBegin();    while (it != brushes.constEnd()) {        QString name = it.key();        d_ptr->m_Manager->removeBrush(name);        it++;    }    // fill up the manager from compiled resources or from brush folder here    const QString nameAttribute = QLatin1String("name");    const QString brush = QLatin1String("brush");    const QString description = QLatin1String("description");    QDir brushDir(d_ptr->m_BrushPath);    bool customBrushesExist = brushDir.exists();    if (customBrushesExist) {        // load brushes from brush folder        QStringList nameFilters;        nameFilters.append(QLatin1String("*.br"));        QFileInfoList infos = brushDir.entryInfoList(nameFilters);        QListIterator<QFileInfo> it(infos);        while (it.hasNext()) {            const QFileInfo fi = it.next();            QFile file(fi.absoluteFilePath());            if (file.open(QIODevice::ReadOnly)) {                QByteArray contents = file.readAll();                file.close();                QDomDocument doc;                if (doc.setContent(contents)) {                    QDomElement domElement = doc.documentElement();                    QString name = domElement.attribute(nameAttribute);                    QString filename = fi.fileName();                    QSimpleResource resource(d_ptr->m_Core);                    QDomElement brushElement = domElement.firstChildElement(brush);                    DomBrush dom;                    dom.read(brushElement);                    QBrush br = resource.setupBrush(&dom);                    d_ptr->m_Manager->addBrush(name, br);                    d_ptr->m_FileToBrush[filename] = name;                    d_ptr->m_BrushToFile[name] = filename;                }            }        }    }    connect(d_ptr->m_Manager, SIGNAL(brushAdded(const QString &, const QBrush &)),            this, SLOT(brushAdded(const QString &, const QBrush &)));    connect(d_ptr->m_Manager, SIGNAL(brushRemoved(const QString &)),            this, SLOT(brushRemoved(const QString &)));    if (!customBrushesExist) {        // load brushes from resources        QFile qrcFile(QLatin1String(":trolltech/brushes/defaultbrushes.xml"));        if (qrcFile.open(QIODevice::ReadOnly)) {            QByteArray contents = qrcFile.readAll();            qrcFile.close();            QDomDocument doc;            if (doc.setContent(contents)) {                QDomElement domElement = doc.documentElement();                QDomElement descElement = domElement.firstChildElement(description);                while (!descElement.isNull()) {                    QString name = descElement.attribute(nameAttribute);                    QSimpleResource resource(d_ptr->m_Core);                    QDomElement brushElement = descElement.firstChildElement(brush);                    DomBrush dom;                    dom.read(brushElement);                    QBrush br = resource.setupBrush(&dom);                    d_ptr->m_Manager->addBrush(name, br);                    descElement = descElement.nextSiblingElement(description);                }            }        }    }}#include "moc_brushmanagerproxy.cpp"

⌨️ 快捷键说明

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