diff -r 0ba996a9b75d -r 613943a21004 bluetoothengine/btnotif/btdevicedialogplugin/src/btmoredevicesdialogwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btmoredevicesdialogwidget.cpp Tue Aug 31 15:25:10 2010 +0300 @@ -0,0 +1,296 @@ +/* + * 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: + * + */ + +#include "btmoredevicesdialogwidget.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +const char* DOCML_BT_MORE_DEV_DIALOG = ":/docml/bt-more-devices-dialog.docml"; + + +BTMoreDevicesDialogWidget::BTMoreDevicesDialogWidget(const QVariantMap ¶meters) + { + mDeviceDialogData = 0; + mLoader = 0; + mContentItemModel = 0; + constructDialog(parameters); +/* try + { + //May throws badAlloc on exception + constructDialog(parameters); + } + catch(std::bad_alloc &badAlloc) + { + //Failure to allocate memory + Q_UNUSED(badAlloc); + // = UnknownDeviceDialogError; + }*/ + } + +BTMoreDevicesDialogWidget::~BTMoreDevicesDialogWidget() + { + delete mLoader; + delete mContentItemModel; + } + +bool BTMoreDevicesDialogWidget::setDeviceDialogParameters(const QVariantMap ¶meters) + { + double cod = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)).toDouble(); + int uiMajorDevice; + int uiMinorDevice; + + BtuiDevProperty::mapDeiveType(uiMajorDevice, uiMinorDevice, cod); + if ((uiMajorDevice & BtuiDevProperty::Phone)||(uiMajorDevice & BtuiDevProperty::Computer) ) + { + BtSendDataItem devData; + devData[NameAliasRole] = QVariant(parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceName)).toString()); + devData[ReadableBdaddrRole] = QVariant(parameters.value(QString::number(TBluetoothDialogParams::EAddress)).toString()); + devData[CoDRole] = QVariant(cod); + + setMajorProperty(devData,BtuiDevProperty::Bonded, + parameters.value("Bonded").toBool()); + setMajorProperty(devData,BtuiDevProperty::Blocked, + parameters.value("Blocked").toBool()); + setMajorProperty(devData,BtuiDevProperty::Trusted, + parameters.value("Trusted").toBool()); + setMajorProperty(devData,BtuiDevProperty::Connected, + parameters.value("Connected").toBool()); + mData.append(devData); + + QStandardItem* listitem = new QStandardItem(); + QStringList info; + info.append(devData[NameAliasRole].toString()); + + listitem->setData(info, Qt::DisplayRole); + HbIcon icon = getBadgedDeviceTypeIcon(devData[CoDRole].toDouble(), + devData[MajorPropertyRole].toInt(), + BtuiBottomLeft | BtuiBottomRight | BtuiTopLeft | BtuiTopRight); + listitem->setIcon(icon.qicon()); + // listitem->setIcon(icon(parameters.value("deviceType").toString())); + + mContentItemModel->appendRow(listitem); + } + return true; + } + + + + +int BTMoreDevicesDialogWidget::deviceDialogError() const + { + return 0; + } + +void BTMoreDevicesDialogWidget::closeDeviceDialog(bool byClient) + { + Q_UNUSED(byClient); + // below code is required and written based on the documentation of closeDeviceDialog API + mMoreDeviceDialog->close(); + QVariantMap val; + QVariant index(-1); + val.insert("selectedindex",index); + emit deviceDialogData(val); + //below signal is emitted to make dialog server aware that our dialog is closed + emit deviceDialogClosed(); + } + +HbPopup* BTMoreDevicesDialogWidget::deviceDialogWidget() const + { + return mMoreDeviceDialog; + } + +QObject* BTMoreDevicesDialogWidget::signalSender() const + { + return const_cast(this); + } + +bool BTMoreDevicesDialogWidget::constructDialog(const QVariantMap &/*parameters*/) + { + mLoader = new HbDocumentLoader(); + bool ok = false; + + mLoader->load(DOCML_BT_MORE_DEV_DIALOG, &ok); + if(ok) + { + mMoreDeviceDialog = qobject_cast(mLoader->findWidget("lastuseddialog")); + mMoreDeviceDialog->setFrameType(HbDialog::Strong); + mMoreDeviceDialog->setBackgroundFaded(false); +/* HbLabel* label = qobject_cast(mLoader->findWidget("label")); + if(label) + { + label->setTextWrapping(Hb::TextWordWrap); + label->setPlainText("Send to:"); + } + this->setHeadingWidget(label);*/ + // HbPushButton* moreDevices = qobject_cast(mLoader->findWidget("moreDevices")); + // HbPushButton* cancel = qobject_cast(mLoader->findWidget("cancel")); + + HbListView* listView = qobject_cast(mLoader->findWidget("listView")); + listView->setSelectionMode(HbAbstractItemView::SingleSelection); + + mContentItemModel = new QStandardItemModel(this); + listView->setModel(mContentItemModel);//, prototype); + + // QList values = parameters.values(); + + /* for(int i=0;i < values.count();i++) + { + QStandardItem* listitem = new QStandardItem(); + // parameters. + // QString string = values.at(i).toString(); + + listitem->setData(values.at(i).toString(), Qt::DisplayRole); + // listitem->setData(QString("search"), Qt::DisplayRole); + //Todo - Insert icons based on the device class + QIcon icon(QString(":/qgn_prop_sml_bt.svg")); + listitem->setIcon(icon); + + mContentItemModel->appendRow(listitem); + }*/ + + connect(listView, SIGNAL(activated(QModelIndex)), this, SLOT(deviceSelected(QModelIndex))); + // connect(moreDevices, SIGNAL(clicked()), this, SLOT(moreDevicesClicked())); + // connect(cancel, SIGNAL(clicked()), this, SLOT(cancelClicked())); + mMoreAction = static_cast( mLoader->findObject( "moreaction" ) ); + mMoreAction->disconnect(mMoreDeviceDialog); + + mCancelAction = static_cast( mLoader->findObject( "cancelaction" ) ); + mCancelAction->disconnect(mMoreDeviceDialog); +// QGraphicsWidget *widget = mLoader->findWidget(QString("container")); + // mMoreDeviceDialog->setContentWidget(widget); + + connect(mMoreAction, SIGNAL(triggered()), this, SLOT(moreDevicesClicked())); + connect(mCancelAction, SIGNAL(triggered()), this, SLOT(cancelClicked())); + + } + + + mMoreDeviceDialog->setBackgroundFaded(false); + mMoreDeviceDialog->setDismissPolicy(HbPopup::NoDismiss); + mMoreDeviceDialog->setTimeout(HbPopup::NoTimeout); + mMoreDeviceDialog->setAttribute(Qt::WA_DeleteOnClose); + return true; + } + +/*void BTMoreDevicesDialogWidget::hideEvent(QHideEvent *event) + { + //HbDialog::hideEvent(event); + mMoreDeviceDialog->hideEvent(event); +// if(mDeviceDialogData == 0) + { + QVariantMap val; + QVariant index(-1); + val.insert("selectedindex",index); + emit deviceDialogData(val); + emit deviceDialogClosed(); + }*/ + // + // } + +/*void BTMoreDevicesDialogWidget::showEvent(QShowEvent *event) + { + //HbDialog::showEvent(event); + }*/ + +void BTMoreDevicesDialogWidget::moreDevicesClicked() + { + QVariantMap val; + QVariant index("MoreDevices"); + val.insert("MoreDevices",index); + emit deviceDialogData(val); + // mDeviceDialogData = 1;//flag is to say that device dialog data is emitted required when we cancel the dialog + // this->close(); + // TODO + } + +void BTMoreDevicesDialogWidget::cancelClicked() + { + // TODO + mMoreDeviceDialog->close(); + QVariantMap val; + QVariant index(-1); + val.insert("selectedindex",index); + emit deviceDialogData(val); + emit deviceDialogClosed(); + } + +void BTMoreDevicesDialogWidget::deviceSelected(const QModelIndex& modelIndex) + { + int row = modelIndex.row(); + QVariantMap val; +// QVariant index(row); + const BtSendDataItem& qtdev = mData.at(row); + val.insert("selectedindex",QVariant(row)); + val.insert("devicename",QVariant(qtdev[NameAliasRole])); + val.insert("deviceaddress",QVariant(qtdev[ReadableBdaddrRole])); + val.insert("deviceclass",QVariant(qtdev[CoDRole])); + emit deviceDialogData(val); + // mDeviceDialogData = 1;//flag is to say that device dialog data is emitted required when we cancel the dialog + // this->close(); + + } + +QIcon BTMoreDevicesDialogWidget::icon(/*QString deviceType*/) + { + /* if(deviceType == "Audio") + { + return (QIcon(QString(":/qgn_prop_bt_audio.svg"))); + } + else if(deviceType == "Car-kit") + { + return (QIcon(QString(":/qgn_prop_bt_car_kit.svg"))); + } + else if(deviceType == "Computer") + { + return (QIcon(QString(":/qgn_prop_bt_computer.svg"))); + } + else if(deviceType == "Headset") + { + return (QIcon(QString(":/qgn_prop_bt_headset.svg"))); + } + else if(deviceType == "Keyboard") + { + return (QIcon(QString(":/qgn_prop_bt_keyboard.svg"))); + } + else if(deviceType == "Mouse") + { + return (QIcon(QString(":/qgn_prop_bt_mouse.svg"))); + } + else if(deviceType == "Phone") + { + return (QIcon(QString(":/qgn_prop_bt_phone.svg"))); + } + else if(deviceType == "Printer") + { + return (QIcon(QString(":/qgn_prop_bt_printer.svg"))); + } + else + { + return (QIcon(QString(":/qgn_prop_bt_unknown.svg"))); + }*/ + return QIcon(QString(":/icons/qtg_large_bluetooth.svg")); + } +