src/hbapps/hbthemechanger/resourceview.cpp
changeset 7 923ff622b8b9
child 21 4633027730f5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hbapps/hbthemechanger/resourceview.cpp	Tue Jul 06 14:36:53 2010 +0300
@@ -0,0 +1,304 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (developer.feedback@nokia.com)
+**
+** This file is part of the HbApps module of the UI Extensions for Mobile.
+**
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at developer.feedback@nokia.com.
+**
+****************************************************************************/
+
+#include <hbmainwindow.h>
+#include <hbaction.h>
+#include <hbtoolbar.h>
+#include <hbdataform.h>
+#include <hbdataformmodel.h>
+#include <hbdataformmodelitem.h>
+#include <QGraphicsLinearLayout>
+#include <hbthemeutils_p.h>
+#include <hbcombobox.h>
+#include <hbmessagebox.h>
+#include <hbiconitem.h>
+#include <hbthemeutils_p.h>
+#include <QDir>
+#include "resourceview.h"
+#include <hbsearchpanel.h>
+#include <hbtumbleview.h>
+#include <hblabel.h>
+#include <hbcolorscheme.h>
+#include <hbiconanimator.h>
+#include <hbiconanimationmanager.h>
+
+/**
+ * Constructor
+ */
+ResourceView::ResourceView(HbMainWindow *mainWindow, HbView* parent): HbView(parent)
+{
+    mMainWindow = mainWindow;
+    mParentView = parent;
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    this->setTitle(tr("Resource lookup"));
+
+    HbAction *act = new HbAction(Hb::BackNaviAction);
+    connect(act, SIGNAL(triggered()), this, SLOT(close()));
+
+    this->setNavigationAction(act);
+
+    act = new HbAction(tr("Icons"));
+        connect(act, SIGNAL(triggered()), this, SLOT(iconModeSelected()));
+        this->toolBar()->addAction(act);
+
+    act = new HbAction(tr("Colors"));
+        connect(act, SIGNAL(triggered()), this, SLOT(colorModeSelected()));
+        this->toolBar()->addAction(act);
+
+    act = new HbAction(tr("Effects"));
+        connect(act, SIGNAL(triggered()), this, SLOT(effectModeSelected()));
+        this->toolBar()->addAction(act);
+
+    act = new HbAction(tr("Animations"));
+        connect(act, SIGNAL(triggered()), this, SLOT(animationModeSelected()));
+        this->toolBar()->addAction(act);
+
+
+    loadThemedIcons();
+    loadThemedColors();
+    loadThemedEffects();
+    loadThemedAnimations();
+    mAnimator = new HbIconAnimator();
+    mResourceItem = new HbLabel(this);
+    mResourceItem->setIcon(HbIcon(mThemedIcons.size()?mThemedIcons[0]:""));
+    mResourceItem->setAlignment(Qt::AlignCenter);
+    mResourceItem->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+    mResourcesList = new HbTumbleView(mThemedIcons, this);
+
+    layout->addItem(mResourceItem);
+    layout->addItem(mResourcesList);
+
+    mSearchPanel = new HbSearchPanel(this);
+    mSearchPanel->setCancelEnabled(false);
+    mSearchPanel->setPlaceholderText(tr("Search"));
+    layout->addItem(mSearchPanel);
+    this->setLayout(layout);
+
+    connect(mSearchPanel, SIGNAL(criteriaChanged(const QString &)), this, SLOT(criteriaChanged(const QString &)));
+    connect(mResourcesList, SIGNAL(itemSelected(int)), this, SLOT(iconItemSelected(int)));
+    mMode = iconMode;
+
+    mMainWindow->addView(this);
+}
+
+/**
+ * Destructor
+ */
+ResourceView::~ResourceView()
+{
+    delete mAnimator;
+}
+
+void ResourceView::close()
+{
+    mMainWindow->setCurrentView(mParentView);
+}
+
+void ResourceView::toggleMode(ListMode mode)
+{
+    if (mode == mMode) {
+        return;
+    }
+
+    switch (mMode) {
+    case colorMode:
+        disconnect(mResourcesList, SIGNAL(itemSelected(int)), this, SLOT(colorItemSelected(int)));
+        break;
+    case iconMode:
+        disconnect(mResourcesList, SIGNAL(itemSelected(int)), this, SLOT(iconItemSelected(int)));
+        break;
+    case effectMode:
+        mResourcesList->setSelected(0);
+        disconnect(mResourcesList, SIGNAL(itemSelected(int)), this, SLOT(effectItemSelected(int)));
+        break;
+    case animationMode:
+        mResourcesList->setSelected(0);
+        disconnect(mResourcesList, SIGNAL(itemSelected(int)), this, SLOT(animationItemSelected(int)));
+        break;
+    default:
+        break;
+    }
+
+    mMode = mode;
+    switch (mode) {
+    case colorMode:
+        connect(mResourcesList, SIGNAL(itemSelected(int)), this, SLOT(colorItemSelected(int)));
+        mSearchPanel->setCriteria("");
+        mResourcesList->setSelected(0);
+        break;
+    case iconMode:
+        connect(mResourcesList, SIGNAL(itemSelected(int)), this, SLOT(iconItemSelected(int)));
+        mSearchPanel->setCriteria("");
+        mResourcesList->setSelected(0);
+        break;
+    case effectMode:
+        connect(mResourcesList, SIGNAL(itemSelected(int)), this, SLOT(effectItemSelected(int)));
+        mSearchPanel->setCriteria("");
+        mResourcesList->setSelected(0);
+        break;
+    case animationMode:
+        connect(mResourcesList, SIGNAL(itemSelected(int)), this, SLOT(animationItemSelected(int)));
+        mSearchPanel->setCriteria("");
+        mResourcesList->setSelected(0);
+        break;
+    default:
+        break;
+    }
+}
+
+void ResourceView::loadThemedIcons()
+{
+    mThemedIcons.clear();
+    QString basetheme = HbThemeUtils::getThemeSetting(HbThemeUtils::BaseThemeSetting);
+    QDir scalableIconsDir(basetheme + "/scalable");
+    QDir pixmapIconsDir(basetheme + "/pixmap");
+    QFileInfoList files = scalableIconsDir.entryInfoList(QDir::Files);
+    files += pixmapIconsDir.entryInfoList(QDir::Files);
+    // Strip the file extensions
+    for (int i=0;i<files.count();i++) {
+       mThemedIcons += files[i].baseName();
+    }
+}
+
+void ResourceView::loadThemedEffects()
+{
+    mThemedEffects.clear();
+    QString basetheme = HbThemeUtils::getThemeSetting(HbThemeUtils::BaseThemeSetting);
+    basetheme = basetheme.replace("/icons/", "/effects/");
+    QDir effectsDir(basetheme);
+    QFileInfoList files = effectsDir.entryInfoList(QDir::Files);
+    // Strip the file extensions
+    for (int i=0;i<files.count();i++) {
+       mThemedEffects += files[i].baseName();
+    }
+}
+
+void ResourceView::loadThemedAnimations()
+{
+    mThemedAnimations.clear();
+    QString basetheme = HbThemeUtils::getThemeSetting(HbThemeUtils::BaseThemeSetting);
+    basetheme = basetheme.replace("/icons/", "/animations/");
+    QDir animationsDir(basetheme);
+    QFileInfoList files = animationsDir.entryInfoList(QDir::Files);
+    // Add animation definitions and strip the file extensions
+    for (int i=0;i<files.count();i++) {
+       HbIconAnimationManager::global()->addDefinitionFile(files[i].fileName());
+       mThemedAnimations += files[i].baseName();
+    }
+}
+
+void ResourceView::loadThemedColors()
+{
+    mThemedColors.clear();
+    QString basetheme = HbThemeUtils::getThemeSetting(HbThemeUtils::BaseThemeSetting);
+    basetheme = basetheme.replace("/icons/", "/style/");
+    QFile file(basetheme + "/variables/color/hbcolorgroup.css");
+
+    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+        QTextStream in(&file);
+
+        while(!in.atEnd()) {
+            QString line = in.readLine().trimmed();
+            if (line.startsWith("qtc_")) {
+                // Extract logical name
+                mThemedColors += line.mid(0, line.indexOf(':')).trimmed();
+            }
+        }
+        file.close();
+    }
+}
+
+void ResourceView::iconModeSelected()
+{
+    toggleMode(iconMode);
+}
+
+void ResourceView::colorModeSelected()
+{
+    toggleMode(colorMode);
+}
+
+void ResourceView::effectModeSelected()
+{
+    toggleMode(effectMode);
+}
+
+void ResourceView::animationModeSelected()
+{
+    toggleMode(animationMode);
+}
+
+
+void ResourceView::iconItemSelected(int index)
+{
+    mResourceItem->setIcon(HbIcon(mResourcesList->items()[index]));
+}
+
+void ResourceView::animationItemSelected(int index)
+{
+    mResourceItem->setIcon(HbIcon(mResourcesList->items()[index]));
+    mAnimator->setIcon(mResourceItem->icon());
+    mAnimator->startAnimation();
+}
+
+
+void ResourceView::colorItemSelected(int index)
+{
+    QString rgbValue("#");
+    rgbValue += QString::number(HbColorScheme::color(mResourcesList->items()[index]).red(), 16);
+    rgbValue += QString::number(HbColorScheme::color(mResourcesList->items()[index]).green(), 16);
+    rgbValue += QString::number(HbColorScheme::color(mResourcesList->items()[index]).blue(), 16);
+    mResourceItem->setPlainText(rgbValue.toUpper());
+}
+
+void ResourceView::effectItemSelected(int index)
+{
+    HbEffect::add(mResourceItem,mResourcesList->items()[index],"selected");
+    HbEffect::start(mResourceItem,"selected");
+}
+
+
+void ResourceView::criteriaChanged(const QString &criteria)
+{
+    QStringList filteredItems;
+    switch (mMode) {
+    case iconMode:
+        filteredItems = mThemedIcons.filter(criteria.toLower());
+        break;
+    case colorMode:
+        filteredItems = mThemedColors.filter(criteria.toLower());
+        break;
+    case effectMode:
+        filteredItems = mThemedEffects.filter(criteria.toLower());
+        break;
+    case animationMode:
+        filteredItems = mThemedAnimations.filter(criteria.toLower());
+        break;
+    default:
+        break;
+    }
+    mResourcesList->setItems(filteredItems);
+}