diff -r 613943a21004 -r 9386f31cc85b bluetoothengine/btui/btcpplugin/btcpuideviceview.cpp --- a/bluetoothengine/btui/btcpplugin/btcpuideviceview.cpp Tue Aug 31 15:25:10 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,672 +0,0 @@ -/* - * 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 "btcpuideviceview.h" -#include "btuiviewutil.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "btcpuimainview.h" -#include -#include -#include -#include "btuiiconutil.h" -#include "btuidevtypemap.h" - -#include "btcpuidevicedetail.h" - -// docml to load -const char* BTUI_DEVICEVIEW_DOCML = ":/docml/bt-device-view.docml"; - - -BtCpUiDeviceView::BtCpUiDeviceView( - BtSettingModel &settingModel, - BtDeviceModel &deviceModel, - QGraphicsItem *parent) : - BtCpUiBaseView(settingModel,deviceModel,parent), - mPairedStatus(false), mConnectedStatus(false),mPreviousConnectedStatus(false), mTrustedStatus(false), - mBlockedStatus(false), mConnectable(false), mAbstractDelegate(0), mDeviceDetail(0) -{ - mDeviceIndex = QModelIndex();//is it needed to initialize mIndex??? - - mMainView = (BtCpUiMainView *) parent; - - mMainWindow = hbInstance->allMainWindows().first(); - - mSoftKeyBackAction = new HbAction(Hb::BackNaviAction, this); - BTUI_ASSERT_X(mSoftKeyBackAction, "BtCpUiBaseView::BtCpUiBaseView", "can't create back action"); - - // read view info from docml file - - // Create view for the application. - // Set the name for the view. The name should be same as the view's - // name in docml. - setObjectName("bt_device_view"); - - mLoader = new HbDocumentLoader(); - // Pass the view to documentloader. Document loader uses this view - // when docml is parsed, instead of creating new view. - QObjectList objectList; - objectList.append(this); - mLoader->setObjectTree(objectList); - - bool ret = false; - - bool ok = false; - mLoader->load( BTUI_DEVICEVIEW_DOCML, &ok ); - // Exit if the file format is invalid - BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file" ); - - mOrientation = mMainWindow->orientation(); - - if (mOrientation == Qt::Horizontal) { - mLoader->load(BTUI_DEVICEVIEW_DOCML, "landscape", &ok); - BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: landscape section problem" ); - } - else { - mLoader->load(BTUI_DEVICEVIEW_DOCML, "portrait", &ok); - BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: landscape section problem" ); - } - - // listen for orientation changes - ret = connect(mMainWindow, SIGNAL(orientationChanged(Qt::Orientation)), - this, SLOT(changeOrientation(Qt::Orientation))); - BTUI_ASSERT_X( ret, "BtCpUiDeviceView::BtCpUiDeviceView()", "connect orientationChanged() failed"); - - - // assign automatically created widgets to local variables - /* - mGroupBox = 0; - mGroupBox = qobject_cast( mLoader->findWidget( "groupBox_deviceView" ) ); - BTUI_ASSERT_X( mGroupBox != 0, "bt-device-view", "Device groupbox not found" ); - */ - mDeviceIcon=0; - //can't use qobject_cast since HbIcon is not derived from QObject! - mDeviceIcon = qobject_cast( mLoader->findWidget( "deviceIcon" ) ); - BTUI_ASSERT_X( mDeviceIcon != 0, "bt-device-view", "Device Icon not found" ); - - mDeviceName=0; - mDeviceName = qobject_cast( mLoader->findWidget( "deviceName" ) ); - BTUI_ASSERT_X( mDeviceName != 0, "bt-device-view", "Device Name not found" ); - ret = connect(mDeviceName, SIGNAL(editingFinished ()), this, SLOT(changeBtDeviceName())); - - mDeviceCategory=0; - mDeviceCategory = qobject_cast( mLoader->findWidget( "deviceCategory" ) ); - BTUI_ASSERT_X( mDeviceCategory != 0, "bt-device-view", "Device Category not found" ); - - mDeviceStatus=0; - mDeviceStatus = qobject_cast( mLoader->findWidget( "deviceStatus" ) ); - BTUI_ASSERT_X( mDeviceStatus != 0, "bt-device-view", "Device status not found" ); - - - mConnectionCombobox = 0; - mConnectionCombobox = qobject_cast( mLoader->findWidget( "connectionCombobox" ) ); - BTUI_ASSERT_X( mConnectionCombobox != 0, "bt-device-view", "connection combobox not found" ); - - mConnectionComboboxModel = new HbDataFormModel(); - - mPair_Unpair=0; - mPair_Unpair = qobject_cast( mLoader->findWidget( "pushButton_0" ) ); - BTUI_ASSERT_X( mPair_Unpair != 0, "bt-device-view", "pair/unpair button not found" ); - ret = connect(mPair_Unpair, SIGNAL(clicked()), this, SLOT(pairUnpair())); - BTUI_ASSERT_X( ret, "BtCpUiDeviceView::BtCpUiDeviceView", "can't connect pair button" ); - - mConnect_Disconnect=0; - mConnect_Disconnect = qobject_cast( mLoader->findWidget( "pushButton_1" ) ); - BTUI_ASSERT_X( mConnect_Disconnect != 0, "bt-device-view", "connect/disconnect button not found" ); - ret = connect(mConnect_Disconnect, SIGNAL(clicked()), this, SLOT(connectDisconnect())); - BTUI_ASSERT_X( ret, "BtCpUiDeviceView::BtCpUiDeviceView", "can't connect disconnect button" ); - - mDeviceSetting = 0; - mDeviceSetting = qobject_cast( mLoader->findWidget( "pushButton_2" ) ); - BTUI_ASSERT_X( mDeviceSetting != 0, "bt-device-view", "settings button not found" ); - - - ret = connect(mDeviceSetting, SIGNAL(clicked()), this, - SLOT(handleDeviceSetting())); - BTUI_ASSERT_X( ret, "Btui, BtCpUiDeviceView::BtCpUiDeviceView", "clicked() connect failed"); - - setConnectionCombobox(); - -} - -BtCpUiDeviceView::~BtCpUiDeviceView() -{ - delete mLoader; // Also deletes all widgets that it constructed. - - delete mConnectionComboboxModel; - - setNavigationAction(0); - delete mSoftKeyBackAction; - if(mAbstractDelegate) - { - delete mAbstractDelegate; - mAbstractDelegate = 0; - } - -} - - -void BtCpUiDeviceView::setSoftkeyBack() -{ - if (navigationAction() != mSoftKeyBackAction) { - setNavigationAction(mSoftKeyBackAction); - connect( mSoftKeyBackAction, SIGNAL(triggered()), this, SLOT(switchToPreviousView()) ); - } -} - -void BtCpUiDeviceView::switchToPreviousView() -{ - BTUI_ASSERT_X(mMainView, "BtCpUiSearchView::switchToPreviousView", "invalid mMainView"); - mMainView->switchToPreviousView(); - - if(mDeviceDetail) { - mDeviceDetail->sendCloseEvent(); - } - unloadDeviceDetails(); -} - -void BtCpUiDeviceView::loadDeviceDetails() -{ - bool ret(false); - - unloadDeviceDetails(); - - mDeviceDetail = new BtCpUiDeviceDetail(); - - ret=connect(mDeviceDetail, SIGNAL(deviceSettingsChanged(bool)), - this, SLOT(handleDeviceSettingsChange(bool))); - BTUI_ASSERT_X( ret, "Btui, BtCpUiDeviceView::loadDeviceDetails", "deviceSettingsChanged() connect failed"); - - mDeviceDetail->loadDeviceDetailPlugins(mDeviceBdAddr.toString(), mDeviceName->text()); -} - -void BtCpUiDeviceView::unloadDeviceDetails() -{ - if(mDeviceDetail) { - disconnect(mDeviceDetail); - delete mDeviceDetail; - mDeviceDetail = 0; - } -} - -void BtCpUiDeviceView::activateView( const QVariant& value, bool fromBackButton ) -{ - - Q_UNUSED( fromBackButton ); - - mConnectedStatus = false; - setSoftkeyBack(); - - - QModelIndex index = value.value(); - mDeviceBdAddr = (mDeviceModel->data(index, BtDeviceModel::ReadableBdaddrRole)); - - //activate view is called when device is selected - //clearViewData(); - updateDeviceData(); - - mDeviceSetting->setVisible(false); - - bool ret(false); - ret=connect(mDeviceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SLOT(updateDeviceData())); - BTUI_ASSERT_X( ret, "Btui, BtCpUiDeviceView::activateView", "dataChanged() connect failed"); - -} - -void BtCpUiDeviceView::handleDeviceSettingsChange(bool status) -{ - mDeviceSetting->setVisible(status); -} - -void BtCpUiDeviceView::handleDeviceSetting() -{ - if(mDeviceDetail) { - mDeviceDetail->loadDeviceDetailsView(); - } -} - -void BtCpUiDeviceView::deactivateView() -{ -} - -// called due to real orientation change event coming from main window -void BtCpUiDeviceView::changeOrientation( Qt::Orientation orientation ) -{ - bool ok = false; - mOrientation = orientation; - if( orientation == Qt::Vertical ) { - // load "portrait" section - mLoader->load( BTUI_DEVICEVIEW_DOCML, "portrait", &ok ); - BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: portrait section problem" ); - } else { - // load "landscape" section - mLoader->load( BTUI_DEVICEVIEW_DOCML, "landscape", &ok ); - BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: landscape section problem" ); - } -} - -void BtCpUiDeviceView::clearViewData() -{ - mDeviceIcon->clear(); - mDeviceCategory->clear(); - mDeviceStatus->clear(); - mConnectable = false; - /* - mPairedStatus = false; - mConnectedStatus = false; - mTrustedStatus = false; - mBlockedStatus = false; - - mConnectable = false; - */ -} - -void BtCpUiDeviceView::updateDeviceData() -{ - clearViewData(); - //Get the QModelIndex of the device using the device BDAddres - QModelIndex start = mDeviceModel->index(0,0); - QModelIndexList indexList = mDeviceModel->match(start,BtDeviceModel::ReadableBdaddrRole, mDeviceBdAddr); - mDeviceIndex = indexList.at(0); - - //populate device view with device data fetched from UiModel - QString deviceName = (mDeviceModel->data(mDeviceIndex, - BtDeviceModel::NameAliasRole)).toString(); - mDeviceName->setText(deviceName); - - int cod = (mDeviceModel->data(mDeviceIndex,BtDeviceModel::CoDRole)).toInt(); - - int majorRole = (mDeviceModel->data(mDeviceIndex,BtDeviceModel::MajorPropertyRole)).toInt(); - - setDeviceCategory(cod, majorRole); - setDeviceStatus(majorRole); - setTextAndVisibilityOfButtons(); -} - -void BtCpUiDeviceView::setDeviceCategory(int cod,int majorRole) -{ - mDeviceCategory->setPlainText( getDeviceTypeString( cod )); - HbIcon icon = - getBadgedDeviceTypeIcon(cod, majorRole, - BtuiBottomLeft | BtuiBottomRight | BtuiTopLeft | BtuiTopRight ); - mDeviceIcon->setIcon(icon); - - if (majorRole & BtuiDevProperty::Connectable ) { - mConnectable = true; - } -} - -void BtCpUiDeviceView::setDeviceStatus(int majorRole) -{ - QString deviceStatus; - - updateStatusVariables(majorRole); // should we use bitmap instead?? - - if (majorRole & BtuiDevProperty::Bonded && - majorRole & BtuiDevProperty::Trusted && - majorRole & BtuiDevProperty::Connected ) { - mDeviceStatus->setPlainText(hbTrId("txt_bt_info_paired_trused_connected")); - } - else if (majorRole & BtuiDevProperty::Bonded && - majorRole & BtuiDevProperty::Connected ) { - mDeviceStatus->setPlainText(hbTrId("txt_bt_info_paired_connected")); - } - else if (majorRole & BtuiDevProperty::Bonded && - majorRole & BtuiDevProperty::Trusted ) { - mDeviceStatus->setPlainText(hbTrId("txt_bt_info_paired_trusted")); - } - else if (majorRole & BtuiDevProperty::Bonded) { - mDeviceStatus->setPlainText(hbTrId("txt_bt_info_paired")); - } - else if (majorRole & BtuiDevProperty::Connected) { - mDeviceStatus->setPlainText(hbTrId("txt_bt_info_connected")); - } - else if (majorRole & BtuiDevProperty::Blocked) { - mDeviceStatus->setPlainText(hbTrId("txt_bt_info_blocked")); - } - else { - // device not paired, connected, trusted or blocked. is this ok? - } - -} - -void BtCpUiDeviceView::setConnectionCombobox(){ - - //create a model class - - mConnectionComboboxModel->appendDataFormItem( - HbDataFormModelItem::ComboBoxItem, QString("Connection"), mConnectionComboboxModel->invisibleRootItem()); - - //set the model to the view, once model and data class are created - mConnectionCombobox->setModel(mConnectionComboboxModel); - - - -} - - -/*! - * instead of using separate boolean variables we could use bitmap in single variable - */ -void BtCpUiDeviceView::updateStatusVariables(int majorRole) -{ - mPreviousConnectedStatus = mConnectedStatus; - - if (majorRole & BtuiDevProperty::Trusted ) { - mTrustedStatus = true; - } - else { - mTrustedStatus = false; - } - if (majorRole & BtuiDevProperty::Bonded) { - mPairedStatus = true; - } - else { - mPairedStatus = false; - } - if (majorRole & BtuiDevProperty::Connected) { - mConnectedStatus = true; - if (!mPreviousConnectedStatus){ - //Loading device detail plugins after successfull connection. - loadDeviceDetails(); - } - } - else { - mConnectedStatus = false; - } - if (majorRole & BtuiDevProperty::Blocked) { - mBlockedStatus = true; - } - else { - mBlockedStatus = false; - } -} - -void BtCpUiDeviceView::setTextAndVisibilityOfButtons() -{ - mPair_Unpair->setStretched(true); - if (mPairedStatus) - { - HbIcon icon("qtg_mono_bt_unpair"); - icon.setIconName("qtg_mono_bt_unpair"); - mPair_Unpair->setIcon(icon); - mPair_Unpair->setText(hbTrId("txt_bt_button_unpair")); - - } - else - { - HbIcon icon("qtg_mono_bt_pair"); - icon.setIconName("qtg_mono_bt_pair"); - mPair_Unpair->setIcon(icon); - mPair_Unpair->setText(hbTrId("txt_bt_button_pair")); - } - - if (mConnectable) - { - mConnect_Disconnect->setVisible(true); - mConnect_Disconnect->setStretched(true); - if (mConnectedStatus) - { - HbIcon icon("qtg_mono_speaker_off"); - icon.setIconName("qtg_mono_speaker_off"); - mConnect_Disconnect->setIcon(icon); - mConnect_Disconnect->setText(hbTrId("txt_bt_button_disconnect")); - } - else - { - HbIcon icon("qtg_mono_speaker"); - icon.setIconName("qtg_mono_speaker"); - mConnect_Disconnect->setIcon(icon); - mConnect_Disconnect->setText(hbTrId("txt_bt_button_connect")); - } - - } - else - { - //it is not possible to connect, set the button invisible - mConnect_Disconnect->setVisible(false); - } - -} - - -void BtCpUiDeviceView::pairUnpair() -{ - if (mPairedStatus) - { - //if the device is paired, call unpairDevice() when the button is tabbed - unpairDevice(); - } - else - { - //if the device is unpaired, call pairDevice() when the button is tabbed - pairDevice(); - - } - - -} - -void BtCpUiDeviceView::connectDisconnect() -{ - if (mConnectedStatus) - { - //if the device is connected, call disconnectDevice() when the button is tabbed - disconnectDevice(); - } - else - { - //if the device is disconnected, call connectDevice() when the button is tabbed - connectDevice(); - - } -} - -void BtCpUiDeviceView::pairDevice() -{ - if (!mAbstractDelegate)//if there is no other delegate running - { - QVariant params; - params.setValue(mDeviceIndex); - mAbstractDelegate = BtDelegateFactory::newDelegate( - BtDelegate::Pair, mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(pairDelegateCompleted(int)) ); - mAbstractDelegate->exec(params); - } - -} - -void BtCpUiDeviceView::pairDelegateCompleted(int status) -{ - Q_UNUSED(status); - //TODO: handle the error here - if (mAbstractDelegate) - { - disconnect(mAbstractDelegate); - delete mAbstractDelegate; - mAbstractDelegate = 0; - } -} - -void BtCpUiDeviceView::unpairDevice() -{ - if (!mAbstractDelegate)//if there is no other delegate running - { - QVariant params; - params.setValue(mDeviceIndex); - mAbstractDelegate = BtDelegateFactory::newDelegate( - BtDelegate::Unpair, mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(unpairDelegateCompleted(int)) ); - mAbstractDelegate->exec(params); - } - - -} - -void BtCpUiDeviceView::unpairDelegateCompleted(int status) -{ - Q_UNUSED(status); - //TODO: handle the error here - if (mAbstractDelegate) - { - disconnect(mAbstractDelegate); - delete mAbstractDelegate; - mAbstractDelegate = 0; - } -} - -void BtCpUiDeviceView::connectDevice() -{ - - - if (!mAbstractDelegate)//if there is no other delegate running - { - QVariant params; - params.setValue(mDeviceIndex); - mAbstractDelegate = BtDelegateFactory::newDelegate( - BtDelegate::Connect, mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(connectDelegateCompleted(int)) ); - mAbstractDelegate->exec(params); - } - - -} - -void BtCpUiDeviceView::connectDelegateCompleted(int status) -{ - Q_UNUSED(status); - if (mAbstractDelegate) - { - disconnect(mAbstractDelegate); - delete mAbstractDelegate; - mAbstractDelegate = 0; - } -} - -void BtCpUiDeviceView::disconnectDevice() -{ - if (!mAbstractDelegate)//if there is no other delegate running - { - - - DisconnectOption discoOpt = ServiceLevel; - - QListlist; - QVariant paramFirst; - paramFirst.setValue(mDeviceIndex); - - QVariant paramSecond; - paramSecond.setValue((int)discoOpt); - - list.append(paramFirst); - list.append(paramSecond); - - QVariant params; - params.setValue(list); - - - //params.setValue(mDeviceIndex); - mAbstractDelegate = BtDelegateFactory::newDelegate( - BtDelegate::Disconnect, mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(disconnectDelegateCompleted(int)) ); - mAbstractDelegate->exec(params); - } - -} - -void BtCpUiDeviceView::disconnectDelegateCompleted(int status) -{ - Q_UNUSED(status); - if (mAbstractDelegate) - { - disconnect(mAbstractDelegate); - delete mAbstractDelegate; - mAbstractDelegate = 0; - } -} - -void BtCpUiDeviceView::setPrevBtDeviceName() -{ - QString deviceName = (mDeviceModel->data(mDeviceIndex, - BtDeviceModel::NameAliasRole)).toString(); - mDeviceName->setText(deviceName); -} - -void BtCpUiDeviceView::changeBtDeviceName(){ - if (!mAbstractDelegate)//if there is no other delegate running - { - QListlist; - - QVariant index; - index.setValue(mDeviceIndex); - - QVariant name; - name.setValue(mDeviceName->text()); - - list.append(index); - list.append(name); - - QVariant params; - params.setValue(list); - - mAbstractDelegate = BtDelegateFactory::newDelegate( - BtDelegate::RemoteDevName, mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int, QVariant)), this, SLOT(changeDevNameDelegateCompleted(int, QVariant)) ); - mAbstractDelegate->exec(params); - } - else { - setPrevBtDeviceName(); - } - -} - -void BtCpUiDeviceView::changeDevNameDelegateCompleted(int status, QVariant param) -{ - - - if(KErrNone == status) { - mDeviceName->setText(param.toString()); - } - else { - setPrevBtDeviceName(); - } - //TODO:Error handling has to be done. - if (mAbstractDelegate) - { - disconnect(mAbstractDelegate); - delete mAbstractDelegate; - mAbstractDelegate = 0; - } - - -}