forked from qt-creator/qt-creator
		
	QmlOutline: Show icons for known types
This commit is contained in:
		@@ -28,17 +28,29 @@
 | 
			
		||||
**************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "qmljsicons.h"
 | 
			
		||||
#include <QtCore/QDebug>
 | 
			
		||||
#include <QtCore/QDir>
 | 
			
		||||
#include <QtCore/QHash>
 | 
			
		||||
#include <QtCore/QPair>
 | 
			
		||||
 | 
			
		||||
using namespace QmlJS;
 | 
			
		||||
using namespace QmlJS::AST;
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    debug = false
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
namespace QmlJS {
 | 
			
		||||
 | 
			
		||||
Icons *Icons::m_instance = 0;
 | 
			
		||||
 | 
			
		||||
class IconsPrivate
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    QIcon elementIcon;
 | 
			
		||||
    QIcon propertyIcon;
 | 
			
		||||
    QHash<QPair<QString,QString>,QIcon> iconHash;
 | 
			
		||||
    QString resourcePath;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace QmlJS
 | 
			
		||||
@@ -52,9 +64,55 @@ Icons::Icons()
 | 
			
		||||
 | 
			
		||||
Icons::~Icons()
 | 
			
		||||
{
 | 
			
		||||
    m_instance = 0;
 | 
			
		||||
    delete m_d;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Icons *Icons::instance()
 | 
			
		||||
{
 | 
			
		||||
    if (!m_instance)
 | 
			
		||||
        m_instance = new Icons();
 | 
			
		||||
    return m_instance;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Icons::setIconFilesPath(const QString &iconPath)
 | 
			
		||||
{
 | 
			
		||||
    if (iconPath == m_d->resourcePath)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    m_d->resourcePath = iconPath;
 | 
			
		||||
 | 
			
		||||
    if (debug)
 | 
			
		||||
        qDebug() << "QmlJSIcons -" << "parsing" << iconPath;
 | 
			
		||||
    QDir topDir(iconPath);
 | 
			
		||||
    foreach (const QFileInfo &subDirInfo, topDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot)) {
 | 
			
		||||
        if (debug)
 | 
			
		||||
            qDebug() << "QmlJSIcons - parsing" << subDirInfo.absoluteFilePath();
 | 
			
		||||
        const QString packageName = subDirInfo.fileName();
 | 
			
		||||
        QDir subDir(subDirInfo.absoluteFilePath() + QLatin1String("/16x16"));
 | 
			
		||||
        foreach (const QFileInfo &iconFile, subDir.entryInfoList(QDir::Files)) {
 | 
			
		||||
            QIcon icon(iconFile.absoluteFilePath());
 | 
			
		||||
            if (icon.isNull()) {
 | 
			
		||||
                if (debug)
 | 
			
		||||
                    qDebug() << "QmlJSIcons - skipping" << iconFile.absoluteFilePath();
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (debug)
 | 
			
		||||
                qDebug() << "QmlJSIcons - adding" << packageName << iconFile.baseName() << "icon to database";
 | 
			
		||||
            QPair<QString,QString> element(packageName, iconFile.baseName());
 | 
			
		||||
            m_d->iconHash.insert(element, icon);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QIcon Icons::icon(const QString &packageName, const QString typeName) const
 | 
			
		||||
{
 | 
			
		||||
    QPair<QString,QString> element(packageName, typeName);
 | 
			
		||||
    if (debug)
 | 
			
		||||
        qDebug() << "QmlJSIcons - icon for" << packageName << typeName << "requested" << m_d->iconHash.contains(element);
 | 
			
		||||
    return m_d->iconHash.value(element);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QIcon Icons::icon(Node *node) const
 | 
			
		||||
{
 | 
			
		||||
    if (dynamic_cast<AST::UiObjectDefinition*>(node)) {
 | 
			
		||||
 
 | 
			
		||||
@@ -41,14 +41,21 @@ class IconsPrivate;
 | 
			
		||||
class QMLJS_EXPORT Icons
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    Icons();
 | 
			
		||||
    ~Icons();
 | 
			
		||||
 | 
			
		||||
    static Icons *instance();
 | 
			
		||||
 | 
			
		||||
    void setIconFilesPath(const QString &iconPath);
 | 
			
		||||
 | 
			
		||||
    QIcon icon(const QString &packageName, const QString typeName) const;
 | 
			
		||||
    QIcon icon(AST::Node *node) const;
 | 
			
		||||
 | 
			
		||||
    QIcon objectDefinitionIcon() const;
 | 
			
		||||
    QIcon scriptBindingIcon() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    Icons();
 | 
			
		||||
    static Icons *m_instance;
 | 
			
		||||
    IconsPrivate *m_d;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user