controlpanelplugins/themeplugin/src/cpthemechanger_p.cpp
branchGCC_SURGE
changeset 27 848a3adde87f
parent 16 8c9427577f2a
parent 25 19394c261aa5
--- a/controlpanelplugins/themeplugin/src/cpthemechanger_p.cpp	Fri Jun 11 16:24:15 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,401 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0""
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:  
- *   
- */
-
-#include "cpthemechanger.h"
-#include "cpthemechanger_p.h"
-#include <QStringList>
-#include <QSettings>
-#include <QFileSystemWatcher>
-#include <QPixmap>
-#include <QSizeF>
-#include <hbicon.h>
-#include <hbinstance.h>
-#include "cpthemeclient_p.h"
-#include "cpthemecommon_p.h"
-#ifdef Q_OS_SYMBIAN
-#include "cpthemeclientsymbian_p.h"
-#else
-#include "cpthemeclientqt_p.h"
-#endif
-
-namespace {
-#if !defined(Q_OS_SYMBIAN)
-    #include <stdio.h>
-    static const char* KThemePathKey = "HB_THEMES_DIR";
-#endif
-
-    static const QString KDefaultTheme = "hbdefault";
-    static const char* KSettingsCategory = "currenttheme";
-   
-}
-
-CpThemeChangerPrivate::CpThemeChangerPrivate(CpThemeChanger* qq):
-    q_ptr(qq),
-    themeClient(CpThemeClient::global()),
-    fileWatcher(new QFileSystemWatcher(qq)),
-    model(this, qq)
-
-{
-    Q_Q(CpThemeChanger);
-
-    // Figure out where our themes are. This is platform-dependent,
-    // but not worth breaking out into platform-private implementations
-    // at the moment. Ideally, this would be given to us by the theme server,
-    #ifdef Q_OS_WIN
-    static char* _path=NULL;
-    static size_t _size=0;
-    _dupenv_s(&_path, &_size, KThemePathKey);
-    themeRootPath = QString(_path);
-    themeRootPathPostfix = QString();
-    free(_path);
-    #elif defined(Q_OS_SYMBIAN)
-    themeRootPath = "c:\\resource\\hb";
-    themeRootPathPostfix  = "resource\\hb";
-    #elif defined(Q_OS_UNIX)
-    themeRootPath = QString(getenv(KThemePathKey));
-    themeRootPathPostfix = QString();
-    #elif defined(Q_OS_MACX)
-    themeRootPath = QDir::homePath() + '/' + "Library" + QString("hb");
-    themeRootPathPostfix = QString();
-    #else
-    themeRootPath = "c:\\resource\\hb";
-    themeRootPathPostfix = QString();
-    #endif
-
-    // Get our current state
-    QSettings settings(QLatin1String(ORGANIZATION), QLatin1String(THEME_COMPONENT));
-    mCurrentTheme.name = settings.value(KSettingsCategory).toString();
-    updateThemeList(mCurrentTheme.name);
-
-    // Watch for changes to the theme directory in flash.
-    // This may change once we start offering a model.
-    fileWatcher->addPath(themeRootPath+"/themes/");
-    q->connect(fileWatcher, SIGNAL(directoryChanged(const QString&)),
-               q, SLOT(_q_themeDirectoryChanged(const QString&)));
-
-    // Connect to the theme server
-    connectToServer();
-}
-
-CpThemeChangerPrivate::~CpThemeChangerPrivate()
-{
-    themeClient->releaseInstance();
-}
-
-const CpThemeChanger::ThemeInfo& CpThemeChangerPrivate::currentTheme() const
-{
-    return mCurrentTheme;
-}
-
-const QString& CpThemeChangerPrivate::currentThemeName() const
-{
-    return mCurrentTheme.name.isEmpty() ? KDefaultTheme : mCurrentTheme.name;
-}
-
-int CpThemeChangerPrivate::indexOf(const CpThemeChanger::ThemeInfo& theme) const
-{
-    return themeList.indexOf(theme);
-}
-
-void CpThemeChangerPrivate::updateThemeList(const QString& newThemeName)
-{
-    if(!themeList.isEmpty()) {
-        themeList.clear();
-    }
-
-    mCurrentTheme.name = newThemeName.isEmpty() ? KDefaultTheme : newThemeName;
-
-    // Get the list of Drives here
-    QStringList themesPathList;
-
-#if defined(Q_OS_WIN32)
-    themesPathList << themeRootPath;
-#elif defined(Q_OS_SYMBIAN)
-    QFileInfoList driveInfoList = QDir::drives();
-    foreach (const QFileInfo &driveInfo, driveInfoList) {
-        const QString drive = driveInfo.absolutePath();
-        themesPathList << drive + themeRootPathPostfix;
-    }
-#elif defined(Q_OS_UNIX)
-    themesPathList << themeRootPath;
-#elif defined(Q_OS_MACX)
-    themesPathList << themeRootPath;
-#endif
-
-    foreach (const QString &path, themesPathList) {
-        QDir themeDir;
-        themeDir.setPath( path ) ;
-        QStringList iconthemeslist;
-        QStringList list = themeDir.entryList(QDir::AllDirs|QDir::NoDotAndDotDot,QDir::Name);
-        CpThemeChanger::ThemeInfo nameIconPair;
-
-        if(list.contains("themes",Qt::CaseSensitive )) {
-            QDir root(themeDir.path());
-            themeDir.setPath(root.path()+"/themes/icons/") ;
-            iconthemeslist=themeDir.entryList(QDir::AllDirs|QDir::NoDotAndDotDot,QDir::Name);
-            foreach(QString themefolder, iconthemeslist) {
-                QDir iconThemePath(root.path()+"/themes/icons/"+themefolder);
-                if(iconThemePath.exists("index.theme") &&
-                   (iconThemePath.exists("scalable") || iconThemePath.exists("pixmap") )) {
-                    QSettings iniSetting(iconThemePath.path()+"/index.theme",QSettings::IniFormat);
-                    iniSetting.beginGroup("Icon Theme");
-                    QString hidden = iniSetting.value("Hidden").toString();
-                    QString name = iniSetting.value("Name").toString();
-                    QString iconPath = iniSetting.value("PreviewThumbnailPath").toString();
-                    QString previewPathPrt = iniSetting.value("PreviewIconPath_prt").toString();
-                    QString previewPathLsc = iniSetting.value("PreviewIconPath_lsc").toString();
-                    if (name.isEmpty()) {
-                        continue;
-                    }
-                    
-                    QString fullPathToIcon(iconThemePath.path() + iconPath);
-                    
-                    if(iconPath.isEmpty()|| !QFileInfo(fullPathToIcon).exists()){
-                        
-                        //Set thumbnail
-                        if(QFileInfo(fullPathToIcon + "/scalable/qtg_graf_theme_preview_thumbnail.svg").exists()){
-                            nameIconPair.icon = HbIcon(fullPathToIcon + "/scalable/qtg_graf_theme_preview_thumbnail.svg");
-                        }else if(QFileInfo(fullPathToIcon + "/scalable/qtg_graf_screen_bg_prt.svg").exists()){
-                            QPixmap px(fullPathToIcon + "/scalable/qtg_graf_screen_bg_prt.svg");
-                            QIcon scaledIcon(px.scaled(QSize(64, 64)));
-                            nameIconPair.icon = HbIcon(scaledIcon);
-                            nameIconPair.icon.setIconName(fullPathToIcon + "/scalable/qtg_graf_screen_bg_prt.svg");
-                           
-                        } else if(QFileInfo(fullPathToIcon + "/pixmap/qtg_graf_screen_bg_prt.png").exists()){
-                            QPixmap px(fullPathToIcon + "/pixmap/qtg_graf_screen_bg_prt.png");
-                            QIcon scaledIcon(px.scaled(QSize(64, 64)));
-                            nameIconPair.icon = HbIcon(scaledIcon);
-                            nameIconPair.icon.setIconName(fullPathToIcon + "/scalable/qtg_graf_screen_bg_prt.png");
-                          
-                        } else{
-                            nameIconPair.icon = HbIcon(":/image/themePreview.svg");
-                        }
-                    } else {
-                        nameIconPair.icon = HbIcon(fullPathToIcon);
-                    }
-                    
-                    //Portrait preview
-                    QString fullPathToPreviewPrt = (iconThemePath.path() + previewPathPrt );
-                    
-                    if(previewPathPrt.isEmpty() || !QFileInfo(fullPathToPreviewPrt).exists()) {
-                    
-                        if(QFileInfo(fullPathToPreviewPrt + "/scalable/qtg_graf_theme_preview_prt.svg").exists()){
-                            nameIconPair.portraitPreviewIcon = HbIcon(fullPathToPreviewPrt + "/scalable/qtg_graf_theme_preview_prt.svg");
-                        }else if(QFileInfo(fullPathToPreviewPrt + "/scalable/qtg_graf_screen_bg_prt.svg").exists()){
-                            nameIconPair.portraitPreviewIcon = HbIcon(fullPathToPreviewPrt + "/scalable/qtg_graf_screen_bg_prt.svg");
-                        } else if(QFileInfo(fullPathToPreviewPrt + "/pixmap/qtg_graf_screen_bg_prt.png").exists()){
-                            nameIconPair.portraitPreviewIcon = HbIcon(fullPathToPreviewPrt + "/pixmap/qtg_graf_screen_bg_prt.png");
-                        } else{
-                            nameIconPair.portraitPreviewIcon = HbIcon(":/image/themePreview.svg");
-                        }
-                    }
-                    else {
-                        nameIconPair.portraitPreviewIcon = HbIcon(fullPathToPreviewPrt);
-                    }
-                    
-                    //Landscape preview
-                    QString fullPathToPreviewLsc = (iconThemePath.path() + previewPathLsc );
-                                    
-                    if(previewPathLsc.isEmpty() || !QFileInfo(fullPathToPreviewLsc).exists()) {
-                                
-                        if(QFileInfo(fullPathToPreviewLsc + "/scalable/qtg_graf_theme_preview_lsc.svg").exists()){
-                            nameIconPair.landscapePreviewIcon = HbIcon(fullPathToPreviewLsc + "/scalable/qtg_graf_theme_preview_lsc.svg");
-                        }else if(QFileInfo(fullPathToPreviewLsc + "/scalable/qtg_graf_screen_bg_lsc.svg").exists()){
-                            nameIconPair.landscapePreviewIcon = HbIcon(fullPathToPreviewLsc + "/scalable/qtg_graf_screen_bg_lsc.svg");
-                        } else if(QFileInfo(fullPathToPreviewLsc + "/pixmap/qtg_graf_screen_bg_lsc.png").exists()){
-                            nameIconPair.landscapePreviewIcon = HbIcon(fullPathToPreviewLsc + "/pixmap/qtg_graf_screen_bg_lsc.png");
-                        } else{
-                            nameIconPair.landscapePreviewIcon = HbIcon(":/image/themePreview.svg");
-                        }
-                    }
-                    else {
-                        nameIconPair.landscapePreviewIcon = HbIcon(fullPathToPreviewLsc);
-                    }
-                
-                    nameIconPair.name = name;
-                                        
-                    themeList.append(nameIconPair);
-
-                    if (name == mCurrentTheme.name) {
-                        mCurrentTheme = nameIconPair;
-                    }
-
-                    iniSetting.endGroup();
-                    if((hidden == "true") ||( hidden == "")||(name!=themefolder) ) {
-                        iconthemeslist.removeOne(themefolder);
-                        if(!themeList.isEmpty()) {
-                            themeList.removeLast();
-                        }
-                    }
-                } else {
-                    iconthemeslist.removeOne(themefolder);
-                    if(!themeList.isEmpty()) {
-                        themeList.removeLast();
-                    }
-                }
-            }
-        }
-    }
-    
-    if (mCurrentTheme.name == KDefaultTheme)
-    {
-        // Include default
-         CpThemeChanger::ThemeInfo def;
-         def.name = KDefaultTheme;
-         def.icon = HbIcon(":/image/themePreview.svg");
-         themeList.append(def);
-  
-         mCurrentTheme = def;
-    }
-
-}
-
-const QList<CpThemeChanger::ThemeInfo>& CpThemeChangerPrivate::themes() const
-{
-   return themeList;
-}
-
-bool CpThemeChangerPrivate::connectToServer()
-{
-    return themeClient->connectToServer();
-}
-
-/**
- * Indicate if the client is connected to the server
- */
-bool CpThemeChangerPrivate::isConnected() const
-{
-    return themeClient->isConnected();
-}
-
-/**
- * Change a theme
- */
-bool CpThemeChangerPrivate::changeTheme(const QString& newTheme)
-{
-    bool result = false;
-    // Skip doing this if the request is for the current theme
-    if (newTheme.isEmpty() || newTheme == mCurrentTheme.name) return result;
-
-    // Make sure it's a valid theme name
-    bool exists = false;
-    QList<CpThemeChanger::ThemeInfo> themeList = themes();
-    QList<CpThemeChanger::ThemeInfo>::const_iterator i;
-    for (i = themeList.constBegin(); i != themeList.constEnd(); ++i) {
-        if ( newTheme == i->name) {
-            exists = true;
-            break;
-        }
-    }
-
-    if (exists) {
-        result = themeClient->changeTheme(newTheme);
-		updateThemeList(newTheme);
-    }
-    return result;
-}
-
-void CpThemeChangerPrivate::_q_themeDirectoryChanged(const QString&)
-{
-    updateThemeList();
-}
-
-/*
-    HbThemeChangerModel provides an interface to the data contained in the
-    HbThemeChanger using QAbstractListModel.
-*/
-
-/*
-    Constructor
-*/
-HbThemeListModel::HbThemeListModel(CpThemeChangerPrivate *dd, QObject* parent)
-    : QAbstractListModel(parent)
-    , mThemeChangerPrivate(dd)
-{
-    connect(dd->fileWatcher, SIGNAL(directoryChanged(const QString&)),
-        this, SLOT(themeListChanged()));
-}
-
-/*
-    Destructor
-*/
-HbThemeListModel::~HbThemeListModel()
-{
-
-}
-
-/*
-    Reimplemented from QAbstractListModel.
-*/
-int HbThemeListModel::rowCount(const QModelIndex&) const
-{
-    return mThemeChangerPrivate->themeList.size();
-}
-
-/*
-    Reimplemented from QAbstractListModel.  Provides the data for Qt::DisplayRole and
-    Qt::DecorationRole.
-*/
-QVariant HbThemeListModel::data(const QModelIndex& index, int role) const
-{
-    QVariant retVal = QVariant();
-
-    if (index.isValid()) {
-        switch (role) {
-            case Qt::DisplayRole:
-                retVal = mThemeChangerPrivate->themeList.at(index.row()).name;
-                break;
-
-            case Qt::DecorationRole:
-                retVal = mThemeChangerPrivate->themeList.at(index.row()).icon;
-                break;
-
-        case Qt::SizeHintRole:
-                retVal = mThemeChangerPrivate->themeList.at(index.row()).icon.size();
-                break;
-        case CpThemeChanger::PortraitPreviewRole:
-                retVal = mThemeChangerPrivate->themeList.at(index.row()).portraitPreviewIcon;
-                break;
-        case CpThemeChanger::LandscapePreviewRole:
-                retVal = mThemeChangerPrivate->themeList.at(index.row()).landscapePreviewIcon;
-
-            default:
-                // do nothing
-                qt_noop();
-        }
-    }
-
-    return retVal;
-}
-
-/*
-    Responds appropriately when the underlying data in the theme changer is modified.
-
-    Unfortunately the directory watcher from QFileWatcher only says when something changed
-    not what changed.  Therefore the model is considered reset rather than having rows
-    with dataChanged.
-*/
-void HbThemeListModel::themeListChanged()
-{
-    beginResetModel();
-
-    mThemeChangerPrivate->themes();
-
-    endResetModel();
-}
-
-// End of file