diff options
author | Kai Koehne <[email protected]> | 2010-07-13 17:05:47 +0200 |
---|---|---|
committer | Kai Koehne <[email protected]> | 2010-07-14 11:40:11 +0200 |
commit | ce32f25ba3d616eba40d5f88781dd8bbcb0759f0 (patch) | |
tree | 6ecb9d07ffa58157b2a0b4d72fc581575cb7a1bd /src/libs/qmljs/qmljsicons.cpp | |
parent | 874a185f53347ac53b0f320ac6c31f0e8cdf1750 (diff) |
QmlOutline: Show icons for known types
Diffstat (limited to 'src/libs/qmljs/qmljsicons.cpp')
-rw-r--r-- | src/libs/qmljs/qmljsicons.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/libs/qmljs/qmljsicons.cpp b/src/libs/qmljs/qmljsicons.cpp index 710e619847f..f423c124466 100644 --- a/src/libs/qmljs/qmljsicons.cpp +++ b/src/libs/qmljs/qmljsicons.cpp @@ -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)) { |