controlpanelplugins/themeplugin/src/cpthemecontrol.cpp
changeset 11 10d0dd0e43f1
child 12 624337f114fe
--- /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();
+}
+
+
+
+