aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/qmljs/qmljsicons.cpp
diff options
context:
space:
mode:
authorKai Koehne <[email protected]>2010-07-13 17:05:47 +0200
committerKai Koehne <[email protected]>2010-07-14 11:40:11 +0200
commitce32f25ba3d616eba40d5f88781dd8bbcb0759f0 (patch)
tree6ecb9d07ffa58157b2a0b4d72fc581575cb7a1bd /src/libs/qmljs/qmljsicons.cpp
parent874a185f53347ac53b0f320ac6c31f0e8cdf1750 (diff)
QmlOutline: Show icons for known types
Diffstat (limited to 'src/libs/qmljs/qmljsicons.cpp')
-rw-r--r--src/libs/qmljs/qmljsicons.cpp58
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)) {