--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btui/btcpplugin/btcpuidevicedetail.cpp Tue Aug 31 15:25:10 2010 +0300
@@ -0,0 +1,230 @@
+/*
+ * Copyright (c) 2010 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 "btcpuidevicedetail.h"
+#include "btcpuideviceview.h"
+#include "btcpuidevicedetailsview.h"
+
+#include <btdevsettingpluginloader.h>
+#include <bluetoothuitrace.h>
+#include <HbInstance>
+
+
+BtCpUiDeviceDetail::BtCpUiDeviceDetail(QObject *parent) :
+ QObject(parent), mDeviceDetailView(0)
+{
+ mMainWindow = hbInstance->allMainWindows().first();
+}
+
+BtCpUiDeviceDetail::~BtCpUiDeviceDetail()
+{
+ clearDeviceDetailList();
+ delete mDeviceDetailView;
+}
+
+void BtCpUiDeviceDetail::loadDeviceDetailPlugins(QString deviceAddress, QString deviceName)
+{
+ QList<BtDevSettingInterface*> interfaces;
+ BtAbstractDevSetting *devSetting;
+
+ clearDeviceDetailList();
+ interfaces = BtDevSettingPluginLoader::loadDevSettingInterfaces();
+ QList<BtDevSettingInterface*>::const_iterator i;
+
+ for (i = interfaces.constBegin(); i != interfaces.constEnd(); ++i) {
+ devSetting = 0;
+ devSetting = (*i)->createDevSetting( deviceAddress );
+ if(devSetting) {
+ appendDeviceToList(devSetting);
+ }
+ }
+
+ for (int i = interfaces.count() - 1; i >= 0; --i ) {
+ delete interfaces.at(i);
+ }
+
+ createDeviceDetailsView(deviceName);
+ notifyDeviceDetailStatus();
+
+}
+
+void BtCpUiDeviceDetail::appendDeviceToList(BtAbstractDevSetting *devSetting)
+{
+ bool ret = false;
+ BtDeviceDetails devicedetails;
+ devicedetails.mSetting = 0;
+ devicedetails.mSettingForm = 0;
+ devicedetails.mSettingAvailable = false;
+
+ devicedetails.mSetting = devSetting;
+ devicedetails.mSettingAvailable = devSetting->isSettingAvailable();
+ devicedetails.mSettingForm = devSetting->getSettingWidget();
+
+ mDeviceDetailList.append(devicedetails);
+
+ ret = connect(devicedetails.mSetting, SIGNAL(settingAvailabilityChanged(BtAbstractDevSetting *, bool)),
+ this, SLOT(handleSettingChange(BtAbstractDevSetting *, bool)));
+ BTUI_ASSERT_X( ret, "BtCpUiDeviceDetail::appendDeviceToList", "connect settingAvailabilityChanged() failed");
+
+}
+
+void BtCpUiDeviceDetail::handleSettingChange(BtAbstractDevSetting *setting, bool available)
+{
+ QList<BtDeviceDetails>::iterator i;
+
+ for (i = mDeviceDetailList.begin(); i != mDeviceDetailList.end(); ++i) {
+ if((setting == (*i).mSetting) && mDeviceDetailView) {
+ (*i).mSettingAvailable = available;
+ if(available) {
+ if(((*i).mSettingForm)) {
+ //If item already exists, remove it first.
+ mDeviceDetailView->removeItem((*i).mSettingForm);
+ }
+ (*i).mSettingForm = setting->getSettingWidget();
+ //add widget
+ mDeviceDetailView->addItem((*i).mSettingForm);
+ }
+ else {
+ if((*i).mSettingForm) {
+ //remove widget
+ mDeviceDetailView->removeItem((*i).mSettingForm);
+ (*i).mSettingForm = 0;
+ checkDeviceDetailSettings();
+ }
+ }
+ notifyDeviceDetailStatus();
+ }
+ }
+}
+
+
+void BtCpUiDeviceDetail::checkDeviceDetailSettings()
+{
+ QList<BtDeviceDetails>::const_iterator i;
+ bool devicedetail = false;
+
+ for (i = mDeviceDetailList.constBegin(); i != mDeviceDetailList.constEnd(); ++i) {
+ if((*i).mSettingForm) {
+ devicedetail = true;
+ break;
+ }
+ }
+ //If no setting is available and current view is device detail
+ //view move to previous view.
+ if((!devicedetail) && (mMainWindow->currentView() == mDeviceDetailView)) {
+ mMainWindow->removeView(mDeviceDetailView);
+ mMainWindow->setCurrentView( mPreviousView );
+ }
+}
+
+void BtCpUiDeviceDetail::notifyDeviceDetailStatus()
+{
+ QList<BtDeviceDetails>::const_iterator i;
+ bool devicedetail = false;
+
+ for (i = mDeviceDetailList.constBegin(); i != mDeviceDetailList.constEnd(); ++i) {
+ if(((*i).mSettingAvailable == true) && ((*i).mSettingForm) ) {
+ devicedetail = true;
+ break;
+ }
+ }
+ emit deviceSettingsChanged(devicedetail);
+}
+
+void BtCpUiDeviceDetail::clearDeviceDetailList()
+{
+ QList<BtDeviceDetails>::const_iterator i;
+
+ for (i = mDeviceDetailList.constBegin(); i != mDeviceDetailList.constEnd(); ++i) {
+ if((*i).mSetting ) {
+ disconnect((*i).mSetting);
+ delete (*i).mSetting;
+ }
+ }
+ mDeviceDetailList.clear();
+}
+
+void BtCpUiDeviceDetail::createDeviceDetailsView(QString deviceName)
+{
+ bool ret = false;
+ //Launch Device Detail View.
+ mDeviceDetailView = new BtCpUiDeviceDetailsView();
+ mDeviceDetailView->setDeviceName(deviceName);
+
+ ret = connect(mDeviceDetailView, SIGNAL(aboutToClose()), this,
+ SLOT(handleDeviceDetailViewClose()));
+ BTUI_ASSERT_X( ret, "BtCpUiDeviceDetail::loadDeviceDetailsView", "connect deviceDetailViewClosed() failed");
+
+ QList<BtDeviceDetails>::const_iterator i;
+
+ for (i = mDeviceDetailList.constBegin(); i != mDeviceDetailList.constEnd(); ++i) {
+ if((*i).mSettingForm) {
+ mDeviceDetailView->addItem((*i).mSettingForm);
+ }
+ }
+}
+
+void BtCpUiDeviceDetail::loadDeviceDetailsView()
+{
+
+ mPreviousView = mMainWindow->currentView();
+ mMainWindow->addView(mDeviceDetailView);
+
+ notifyViewStatusToPlugins(AboutToShow);
+
+ mMainWindow->setCurrentView( mDeviceDetailView );
+}
+
+void BtCpUiDeviceDetail::handleDeviceDetailViewClose()
+{
+ notifyViewStatusToPlugins(AboutToHide);
+
+ mMainWindow->removeView(mDeviceDetailView);
+
+ mMainWindow->setCurrentView( mPreviousView );
+
+}
+
+void BtCpUiDeviceDetail::notifyViewStatusToPlugins(BtCpUiDeviceDetail::NotifyType type)
+{
+ QList<BtDeviceDetails>::const_iterator i;
+ BtAbstractDevSetting *deviceSetting = 0;
+ for (i = mDeviceDetailList.constBegin(); i != mDeviceDetailList.constEnd(); ++i) {
+ deviceSetting = (*i).mSetting;
+ if(deviceSetting) {
+ switch(type) {
+ case AboutToShow:
+ deviceSetting->aboutToForeground();
+ break;
+ case AboutToHide:
+ deviceSetting->aboutToBackground();
+ break;
+ case AboutToClose:
+ deviceSetting->aboutToClose();
+ break;
+ }
+ }
+ }
+
+}
+
+void BtCpUiDeviceDetail::sendCloseEvent()
+{
+ notifyViewStatusToPlugins(AboutToClose);
+}
+
+