--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/controlpanelplugins/themeplugin/src/cpthemecontrol.cpp Fri Apr 16 14:59:22 2010 +0300
@@ -0,0 +1,241 @@
+/*
+ * 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:
+ *
+ */
+
+/*!
+ \class CpThemeControl
+ \brief CpThemeControl creates and controls two views for Theme Changer plugin and handles
+ user interaction to preview and change the themes.
+
+ It creates a list view of the themes. When a list item is selected, it creates a preview
+ of the theme icon using a CpThemePreview class.
+
+ This class also connects to the theme server using the HbThemeChanger and sets the theme
+ based on user interaction with the views.
+
+ */
+
+#include <QString>
+#include <QModelIndex>
+#include <QStandardItemModel>
+#include <QStandardItem>
+#include <QTranslator>
+
+#include <hbmainwindow.h>
+#include <hbinstance.h>
+#include "cpthemechanger.h"
+
+#include "cpthemecontrol.h"
+#include "cpthemelistview.h"
+#include "cpthemepreview.h"
+
+static const QString KPlaceholderPreview = ":/image/themePreview.svg";
+
+/*!
+ Helper function to fetch the main window.
+*/
+
+static HbMainWindow *mainWindow()
+{
+ QList< HbMainWindow* > mainWindows = hbInstance->allMainWindows();
+ if (!mainWindows.isEmpty()) {
+ return mainWindows.front();
+ }
+ return 0;
+}
+
+/*!
+ constructor.
+*/
+CpThemeControl::CpThemeControl(): mThemeListView(0),
+ mThemePreview(0),
+ mThemeChanger(0),
+ mListModel(0)
+{
+ mThemeChanger = new CpThemeChanger();
+
+
+ QTranslator *translator = new QTranslator(this);
+ QString lang = QLocale::system().name();
+ QString path = "Z:/resource/qt/translations/";
+ translator->load("control_panel_" + lang, path);
+ qApp->installTranslator(translator);
+
+}
+
+
+
+/*!
+ destorys the list view, preview and theme changer objects.
+*/
+CpThemeControl::~CpThemeControl()
+{
+ delete mThemeListView;
+ mThemeListView = 0;
+
+ delete mThemeChanger;
+ mThemeChanger = 0;
+
+ delete mThemePreview;
+ mThemePreview = 0;
+}
+
+/*!
+ Creates the theme list view. Gets the themes, creates a model based on
+ theme names, icons, and icon paths and sets the list model.
+*/
+void CpThemeControl::createThemeList()
+{
+
+ mThemeListView = new CpThemeListView();
+
+ mListModel = &mThemeChanger->model();
+
+ // Set the model for theme list.
+ mThemeListView->setModel(mListModel);
+
+ //connect to signal for selecting a list item.
+ connect(mThemeListView,SIGNAL(newThemeSelected(const QModelIndex&)),
+ this,SLOT(newThemeSelected(const QModelIndex&)));
+
+ //handle signal for list view closing. (e.g Back softkey pressed)
+ connect(mThemeListView,SIGNAL(aboutToClose()),
+ this,SLOT(themeListClosed()));
+}
+
+/*!
+ returns the instance of themelist view. Used by control panel to set
+ the view.
+*/
+CpBaseSettingView* CpThemeControl::themeListView()
+{
+ //If the view was removed before by control panel app, create it again.
+ if(!mThemeListView)
+ createThemeList();
+
+ return mThemeListView;
+}
+
+/*!
+ returns the name of the current theme.
+*/
+QString CpThemeControl::currentThemeName() const
+{
+ return mThemeChanger->currentTheme().name;
+}
+
+/*!
+ returns the repersenatative icon of the current theme.
+*/
+HbIcon CpThemeControl::currentThemeIcon() const
+{
+ return mThemeChanger->currentTheme().icon;
+}
+
+/*!
+ Slot called when a list item of the theme list is selected.
+*/
+void CpThemeControl::newThemeSelected(const QModelIndex& index)
+{
+ if(!index.isValid()) {
+ return;
+ }
+
+ CpThemeChanger::ThemeInfo themeInfo = mThemeChanger->themes().at(index.row());
+
+ //Set up the theme preview and set it to
+ //the current view of main window.
+ HbMainWindow* mWindow = ::mainWindow();
+
+ if(!mThemePreview){
+ mThemePreview = new CpThemePreview(themeInfo);
+ mWindow->addView(mThemePreview);
+
+ connect(mThemePreview,SIGNAL(aboutToClose()),
+ this, SLOT(previewClosed()));
+
+ connect(mThemePreview, SIGNAL(applyTheme(const QString&)),
+ this, SLOT(themeApplied(const QString&)));
+ } else {
+ mThemePreview->setThemeInfo(themeInfo);
+ }
+ //TODO: use qtTrId(text_id).
+ mThemePreview->setTitle(tr("Control Panel"));
+
+ mWindow->setCurrentView(mThemePreview);
+
+}
+
+/*!
+ Slot called when a Select key is pressed in theme preview view.
+*/
+void CpThemeControl::themeApplied(const QString& theme)
+{
+ bool success = false;
+
+ success = mThemeChanger->connectToServer();
+
+ if (success) {
+ mThemeChanger->changeTheme(theme);
+ emit themeUpdated(mThemeChanger->currentTheme().name, mThemeChanger->currentTheme().icon);
+ }
+
+ //Go back to control panel view. Close theme preview.
+ previewClosed();
+ //ask the themelistview to close. Control Panel will
+ //take care of removing it from window.
+ triggerThemeListClose();
+
+}
+/*!
+ Slot called when the theme preview view is closed.
+*/
+void CpThemeControl::previewClosed()
+{
+ //The theme preview closed, go back
+ //to theme list view.
+ HbMainWindow* mainWindow = ::mainWindow();
+ mainWindow->removeView(mThemePreview);
+ mThemePreview->deleteLater();
+ mThemePreview = 0;
+
+ mainWindow->setCurrentView(mThemeListView);
+}
+
+/*!
+ Slot for when the theme list view is closed. Ownership of the theme list was given to
+ control panel, so the class won't delete it.
+
+*/
+void CpThemeControl::themeListClosed()
+{
+ mThemeListView = 0;
+
+ delete mThemePreview;
+ mThemePreview = 0;
+}
+
+/*!
+ asks the theme list view to close.
+*/
+void CpThemeControl::triggerThemeListClose()
+{
+ mThemeListView->closeView();
+}
+
+
+
+