diff -r 923ff622b8b9 -r 4633027730f5 src/hbapps/hbthemechanger/themeselectionlist.cpp --- a/src/hbapps/hbthemechanger/themeselectionlist.cpp Tue Jul 06 14:36:53 2010 +0300 +++ b/src/hbapps/hbthemechanger/themeselectionlist.cpp Wed Aug 18 10:05:37 2010 +0300 @@ -140,10 +140,8 @@ // Automatic updation of the themelist when some theme is installed or uninstalled // when the hbthemechanger app is open watcher=new QFileSystemWatcher(); - foreach(const QString &KThemeRootPath, rootPaths()) { - if(!KThemeRootPath.contains("/romthemes")){ - watcher->addPath(KThemeRootPath+"/themes/icons/"); - } + foreach(const QString &themePath, themePaths()) { + watcher->addPath(themePath); } connect(watcher,SIGNAL(directoryChanged(const QString &)),this,SLOT(updateThemeList(const QString &))); QObject::connect(this,SIGNAL(newThemeSelected(QString)),this,SLOT(sendThemeName(QString))); @@ -191,127 +189,45 @@ */ void ThemeSelectionList::displayThemes() { - rootThemes.clear(); - bool entryAdded = false; - bool themePresent = false; - foreach(const QString &KThemeRootPath, rootPaths()){ - dir.setPath(KThemeRootPath) ; - QStringList list = dir.entryList(QDir::AllDirs|QDir::NoDotAndDotDot,QDir::Name); - if(list.contains("themes",Qt::CaseInsensitive )) { - themePresent = true; - QDir root = KThemeRootPath; - dir.setPath(root.path()+"/themes/icons/") ; - QStringList iconthemeslist=dir.entryList(QDir::AllDirs|QDir::NoDotAndDotDot,QDir::Name); - foreach(QString themefolder, iconthemeslist) { - QDir iconThemePath(root.path()+"/themes/icons/"+themefolder); - QFile themeIndexFile(root.path()+"/themes/"+themefolder+".themeindex"); - if(themeIndexFile.exists() && iconThemePath.exists("index.theme")) { - QSettings iniSetting(iconThemePath.path()+"/index.theme",QSettings::IniFormat); - iniSetting.beginGroup("Icon Theme"); - QString hidden = iniSetting.value("Hidden").toString(); - iniSetting.endGroup(); - if((hidden == "true") ||( hidden == "")) { - iconthemeslist.removeOne(themefolder); - } -#ifdef Q_OS_SYMBIAN - if (KThemeRootPath[0] == 'z') { -#endif - rootThemes.append(iconThemePath.absolutePath()); -#ifdef Q_OS_SYMBIAN - } -#endif + QList > themes; + + // First add default entry + themes.append(QPair("hbdefault", ":/themes/icons/hbdefault")); + // And then rest of the themes + themes.append(HbThemeServices::availableThemes()); + + for (int i=0; i setText(themes.at(i).first); + item->setSecondaryText(themes.at(i).second); - } - else { - iconthemeslist.removeOne(themefolder); - } - - } - if(!entryAdded){ - rootThemes.append(":/themes/icons/hbdefault"); - //adding one default entry - HbListWidgetItem *item = new HbListWidgetItem(); - item->setText("hbdefault"); - item->setSecondaryText(":/themes/icons/hbdefault"); - QString thumbPath(":/themes/icons/hbdefault/scalable/qtg_graf_theme_preview_thumbnail.svg"); - if (!QFile::exists(thumbPath)) { - thumbPath = "qtg_large_corrupted"; - } - HbIcon *icon = new HbIcon(thumbPath); - thumbnails.append(icon); - item->setIcon(*icon); - if (HbInstance::instance()->theme()->name() == "hbdefault") { - item->setSecondaryIcon(*rightMark); - themelist->addItem(item); - themelist->setCurrentRow(themelist->count()-1); - } else { - item->setSecondaryIcon(*noMark); - themelist->addItem(item); - } - entryAdded = true; - } - list=iconthemeslist; - for (int i=0; i setIcon(*icon); - QSettings iniSetting(root.path()+"/themes/icons/"+list.at(i)+"/index.theme",QSettings::IniFormat); - iniSetting.beginGroup("Icon Theme"); - QString name = iniSetting.value("Name").toString(); - iniSetting.endGroup(); - item->setText(name); - item->setSecondaryText(root.path()+"/themes/icons/"+list.at(i)); - QString thumbPath(root.path()+"/themes/icons/"+list.at(i)+"/scalable/qtg_graf_theme_preview_thumbnail."); - QString nvgPath(thumbPath + "nvg"); - QString svgPath(thumbPath + "svg"); - if (QFile::exists(nvgPath)) { - thumbPath = nvgPath; - } else if (QFile::exists(svgPath)) { - thumbPath = svgPath; - } - else { - thumbPath = "qtg_large_corrupted"; - } - HbIcon *icon = new HbIcon(thumbPath); - thumbnails.append(icon); - item->setIcon(*icon); - - - if (QFileInfo(HbThemeServices::themePath()) == QFileInfo(item->secondaryText())) { - item->setSecondaryIcon(*rightMark); - themelist->addItem(item); - themelist->setCurrentRow(themelist->count()-1); - } - else { - item->setSecondaryIcon(*noMark); - themelist->addItem(item); - } - } + if (QFileInfo(HbThemeServices::themePath()) == QFileInfo(item->secondaryText())) { + item->setSecondaryIcon(*rightMark); + themelist->addItem(item); + themelist->setCurrentRow(themelist->count()-1); + } + else { + item->setSecondaryIcon(*noMark); + themelist->addItem(item); } } - // else{//add a case for no theme ,make hbdefault entry - if(!themePresent) { - rootThemes.append(":/themes/icons/hbdefault"); - //adding one default entry - HbListWidgetItem *item = new HbListWidgetItem(); - item->setText("hbdefault"); - item->setSecondaryText(":/themes/icons/hbdefault"); - QString thumbPath(":/themes/icons/hbdefault/scalable/qtg_graf_theme_preview_thumbnail.svg"); - if (!QFile::exists(thumbPath)) { - thumbPath = "qtg_large_corrupted"; - } - HbIcon *icon = new HbIcon(thumbPath); - thumbnails.append(icon); - item->setIcon(*icon); - item->setSecondaryIcon(*rightMark); - themelist->addItem(item); - QString themeName=HbInstance::instance()->theme()->name(); - if (themeName != "hbdefault") - { - emit newThemeSelected(":/themes/icons/hbdefault"); - } - } } /** @@ -359,21 +275,48 @@ { QStringList rootDirs; #if defined(Q_OS_SYMBIAN) - rootDirs << "z:/resource/hb" - << "c:/resource/hb" - << "e:/resource/hb" - << "f:/resource/hb"; + rootDirs << "z:/resource/hb/themes"; #else - QString envDir = qgetenv("HB_THEMES_DIR"); + QString envDir = QDir::fromNativeSeparators(qgetenv("HB_THEMES_DIR")); if (!envDir.isEmpty()) - rootDirs << envDir; + rootDirs << envDir + "/themes"; #endif -#if defined(Q_OS_MAC) - rootDirs << QDir::homePath() + "/Library/UI Extensions for Mobile"; -#elif !defined(Q_OS_SYMBIAN) - rootDirs << HB_RESOURCES_DIR; + rootDirs << ":/themes"; + return rootDirs; +} + +void ThemeSelectionList::updateRootThemes() +{ + QDir dir; + mRootThemes.clear(); + foreach(const QString &rootPath, rootPaths()){ + dir.setPath(rootPath+"/icons"); + QStringList iconthemeslist = dir.entryList(QDir::AllDirs|QDir::NoDotAndDotDot,QDir::Name); + foreach(const QString &themefolder, iconthemeslist) { + QDir iconThemePath(dir.path()+'/'+themefolder); + QFile themeIndexFile(rootPath+'/'+themefolder+".themeindex"); + if(themeIndexFile.exists() && iconThemePath.exists("index.theme")) { + mRootThemes.append(iconThemePath.absolutePath()); + } + } + } +} + +QStringList ThemeSelectionList::themePaths() +{ + QStringList themeDirs; +#if defined(Q_OS_SYMBIAN) + themeDirs << "z:/resource/hb/themes" + << "c:/resource/hb/themes" + << "e:/resource/hb/themes" + << "f:/resource/hb/themes"; +#else + QString envDir = QDir::fromNativeSeparators(qgetenv("HB_THEMES_DIR")); + if (!envDir.isEmpty()) { + themeDirs << envDir + "/themes"; + } #endif - return rootDirs; + return themeDirs; } void ThemeSelectionList::onLongPressed(HbListWidgetItem* listViewItem, const QPointF& coords) @@ -419,7 +362,9 @@ void ThemeSelectionList::showSettingsView() { if (!settingsView) { - settingsView = new SettingsView(rootThemes, mMainWindow, this); + // update root themes list + updateRootThemes(); + settingsView = new SettingsView(mRootThemes, mMainWindow, this); } mMainWindow->setCurrentView(settingsView); }