--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicesearchdialogwidget.cpp Tue Aug 31 15:25:10 2010 +0300
@@ -0,0 +1,445 @@
+/*
+ * 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 "btdevicesearchdialogwidget.h"
+
+#include <hblistview.h>
+#include <hbtoolbar.h>
+
+
+#include <qstandarditemmodel.h>
+#include <hbaction.h>
+#include <xqconversions.h>
+#include <qtranslator.h>
+#include <qcoreapplication.h>
+#include <bluetoothdevicedialogs.h>
+#include <btuidevtypemap.h>
+#include <btuiiconutil.h>
+
+const char* DOCML_BTDEV_SEARCH_DIALOG = ":/docml/bt-device-search-dialog.docml";
+
+
+#define LOC_SEARCHING_DEVICE hbTrId("txt_bt_subhead_searching")
+#define LOC_SEARCH_DONE hbTrId("txt_bt_subhead_search_done")
+#define LOC_SEARCH_STOP hbTrId("txt_common_button_stop")
+#define LOC_SEARCH_RETRY hbTrId("txt_common_button_retry")
+
+
+BTDeviceSearchDialogWidget::BTDeviceSearchDialogWidget(const QVariantMap ¶meters)
+ {
+// mDeviceLstIdx = 0;
+// mViewByChosen = false;
+ mSelectedDeviceType = 0;
+ // mDeviceDialogData = 0;
+ mLoader = 0;
+ mContentItemModel = 0;
+ mStopRetryFlag = 0; // Stop
+ mQuery = 0;
+ mSelectedDeviceType |= (BtuiDevProperty::AVDev | BtuiDevProperty::Computer |
+ BtuiDevProperty::Phone | BtuiDevProperty::Peripheral |
+ BtuiDevProperty::LANAccessDev | BtuiDevProperty::Toy |
+ BtuiDevProperty::WearableDev | BtuiDevProperty::ImagingDev |
+ BtuiDevProperty::HealthDev | BtuiDevProperty::UncategorizedDev);
+ constructDialog(parameters);
+ }
+
+BTDeviceSearchDialogWidget::~BTDeviceSearchDialogWidget()
+ {
+ delete mLoader;
+ delete mContentItemModel;
+ if ( mQuery ) {
+ delete mQuery;
+ }
+
+ // delete mRbl;
+ // delete mViewByDialog;
+ }
+
+bool BTDeviceSearchDialogWidget::setDeviceDialogParameters(const QVariantMap ¶meters)
+ {
+ if(parameters.keys().at(0).compare("Search Completed")==0)
+ {
+ mStopRetryFlag = 1; // Retry
+ mSearchLabel->hide();
+
+ mSearchIconLabel->hide();
+
+ mSearchDoneLabel->show();
+ mSearchDoneLabel->setTextWrapping(Hb::TextWordWrap);
+ mSearchDoneLabel->setAlignment(Qt::AlignLeft);
+ mSearchDoneLabel->setPlainText(LOC_SEARCH_DONE);
+
+ mStopRetryAction->setText(LOC_SEARCH_RETRY);
+ }
+ else
+ {
+ double cod = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)).toDouble();
+ int uiMajorDevice;
+ int uiMinorDevice;
+
+ BtuiDevProperty::mapDeiveType(uiMajorDevice, uiMinorDevice, cod);
+
+ 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);
+ devData[DeviceTypeRole] = QVariant(uiMajorDevice);
+ 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);
+
+ if(mSelectedDeviceType & devData[DeviceTypeRole].toInt())
+ {
+ 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());
+ mContentItemModel->appendRow(listitem);
+ mSelectedData.append(devData);
+ }
+ }
+
+ return true;
+ }
+
+int BTDeviceSearchDialogWidget::deviceDialogError() const
+ {
+ return 0;
+ }
+
+void BTDeviceSearchDialogWidget::closeDeviceDialog(bool byClient)
+ {
+ Q_UNUSED(byClient);
+ mSearchDevicesDialog->close();
+ //@ TODO to check below code is required which is written based on the documentation of closeDeviceDialog API
+
+ /* QVariantMap val;
+ QVariant index(-1);
+ val.insert("selectedindex",index);
+ emit deviceDialogData(val);
+ emit deviceDialogClosed();*/
+ }
+
+HbPopup* BTDeviceSearchDialogWidget::deviceDialogWidget() const
+ {
+ return mSearchDevicesDialog;
+ }
+
+QObject* BTDeviceSearchDialogWidget::signalSender() const
+ {
+ return const_cast<BTDeviceSearchDialogWidget*>(this);
+ }
+
+bool BTDeviceSearchDialogWidget::constructDialog(const QVariantMap ¶meters)
+ {
+ (void) parameters;
+ bool ok = false;
+
+ mLoader = new HbDocumentLoader();
+ mLoader->load(DOCML_BTDEV_SEARCH_DIALOG, &ok);
+ if(ok)
+ {
+ mSearchDevicesDialog = qobject_cast<HbDialog*>(mLoader->findWidget("searchdialog"));
+
+ /* HbLabel* heading = qobject_cast<HbLabel*>(mLoader->findWidget("heading"));
+ heading->setTextWrapping(Hb::TextWordWrap);
+ heading->setAlignment(Qt::AlignHCenter);
+ heading->setPlainText("Bluetooth - Found devices");
+ setHeadingWidget(heading);*/
+
+ mSearchLabel = qobject_cast<HbLabel*>(mLoader->findWidget("searchLabel"));
+ mSearchLabel->setTextWrapping(Hb::TextWordWrap);
+ mSearchLabel->setAlignment(Qt::AlignHCenter);
+ mSearchLabel->setPlainText(LOC_SEARCHING_DEVICE);
+
+ mSearchIconLabel = qobject_cast<HbLabel*>(mLoader->findWidget("iconLabel"));
+ mSearchIconLabel->setIcon(QIcon(QString(":/icons/qtg_large_bluetooth.svg")));
+
+ mSearchDoneLabel = qobject_cast<HbLabel*>(mLoader->findWidget("searchDoneLabel"));
+ mSearchDoneLabel->hide();
+
+
+ mSearchDevicesDialog->setFrameType(HbDialog::Strong);
+ mSearchDevicesDialog->setBackgroundFaded(false);
+
+ // mViewByBtn = qobject_cast<HbPushButton*>(mLoader->findWidget("viewby"));
+ // mStopRetryBtn = qobject_cast<HbPushButton*>(mLoader->findWidget("stop"));
+
+ mListView = qobject_cast<HbListView*>(mLoader->findWidget("listView"));
+ mListView->setSelectionMode(HbAbstractItemView::SingleSelection);
+
+ mContentItemModel = new QStandardItemModel(this);
+ mListView->setModel(mContentItemModel);//, prototype);
+
+ connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(deviceSelected(QModelIndex)));
+ // connect(mStopRetryBtn, SIGNAL(clicked()), this, SLOT(stopRetryClicked()));
+ // connect(mViewByBtn, SIGNAL(clicked()), this, SLOT(viewByClicked()));
+
+ mShowAction = static_cast<HbAction*>( mLoader->findObject( "viewaction" ) );
+ mShowAction->disconnect(mSearchDevicesDialog);
+
+ mStopRetryAction = static_cast<HbAction*>( mLoader->findObject( "stopretryaction" ) );
+ mStopRetryAction->disconnect(mSearchDevicesDialog);
+
+// mCancelAction = static_cast<HbAction*>( mLoader->findObject( "cancelaction" ) );
+// mCancelAction->disconnect(mSearchDevicesDialog);
+
+ connect(mShowAction, SIGNAL(triggered()), this, SLOT(viewByClicked()));
+ connect(mStopRetryAction, SIGNAL(triggered()), this, SLOT(stopRetryClicked()));
+
+ connect(mSearchDevicesDialog, SIGNAL(aboutToClose()), this, SLOT(searchDialogClosed()));
+
+// QGraphicsWidget *widget = mLoader->findWidget(QString("container"));
+ //setContentWidget(widget);
+ }
+ mSearchDevicesDialog->setBackgroundFaded(false);
+ mSearchDevicesDialog->setDismissPolicy(HbPopup::NoDismiss);
+ mSearchDevicesDialog->setTimeout(HbPopup::NoTimeout);
+ mSearchDevicesDialog->setAttribute(Qt::WA_DeleteOnClose);
+
+ mDevTypeList << hbTrId("txt_bt_list_audio_devices")
+ << hbTrId("txt_bt_list_computers")
+ << hbTrId("txt_bt_list_input_devices")
+ << hbTrId("txt_bt_list_phones")
+ << hbTrId("txt_bt_list_other_devices");
+
+ /* mViewByDialog = new HbDialog();
+ mRbl = new HbRadioButtonList(mViewByDialog);
+ connect(mRbl, SIGNAL(itemSelected(int)), this, SLOT(viewByItemSelected(int)));*/
+
+ return true;
+ }
+
+
+void BTDeviceSearchDialogWidget::stopRetryClicked()
+ {
+ QVariantMap val;
+ if(mStopRetryFlag == 1)//mStopRetryAction->text().compare(LOC_SEARCH_RETRY)==0
+ {
+ mStopRetryFlag = 0; // Stop
+ QVariant index("Retry");
+ val.insert("Retry",index);
+ emit deviceDialogData(val);
+ delete mContentItemModel;
+ mContentItemModel = new QStandardItemModel(this);
+ mListView->setModel(mContentItemModel);
+ mStopRetryAction->setText(LOC_SEARCH_STOP);
+
+ mSearchLabel->setTextWrapping(Hb::TextWordWrap);
+ mSearchLabel->setAlignment(Qt::AlignHCenter);
+ mSearchLabel->setPlainText(LOC_SEARCHING_DEVICE);
+
+ mSearchIconLabel->setIcon(QIcon(QString(":/icons/qtg_large_bluetooth.svg")));
+ mSearchLabel->show();
+
+ mSearchIconLabel->show();
+
+ mSearchDoneLabel->hide();
+ }
+ else
+ {
+ mStopRetryFlag = 1; //Retry
+ mStopRetryAction->setText(LOC_SEARCH_RETRY);
+
+ mSearchLabel->hide();
+
+ mSearchIconLabel->hide();
+
+ mSearchDoneLabel->show();
+ mSearchDoneLabel->setTextWrapping(Hb::TextWordWrap);
+ mSearchDoneLabel->setAlignment(Qt::AlignLeft);
+ mSearchDoneLabel->setPlainText(LOC_SEARCH_DONE);
+
+ QVariantMap val;
+ QVariant index("Stop");
+ val.insert("Stop",index);
+ emit deviceDialogData(val);
+ }
+ }
+
+void BTDeviceSearchDialogWidget::retryClicked()
+ {
+ QVariantMap val;
+ QVariant index("Retry");
+ val.insert("Retry",index);
+ emit deviceDialogData(val);
+ delete mContentItemModel;
+ mContentItemModel = new QStandardItemModel(this);
+ mListView->setModel(mContentItemModel);
+
+
+ }
+
+void BTDeviceSearchDialogWidget::viewByClicked()
+ {
+
+ if ( !mQuery ) {
+ mQuery = new HbSelectionDialog;
+ mQuery->setStringItems(mDevTypeList, 0);
+ mQuery->setSelectionMode(HbAbstractItemView::MultiSelection);
+
+ QList<QVariant> current;
+ current.append(QVariant(0));
+ mQuery->setSelectedItems(current);
+
+ //todo need to check whether the dialog is destroyed without setting this flag
+ //if not destoryed then set this flag in the destructor and then delete it
+
+// mQuery->setAttribute(Qt::WA_DeleteOnClose);
+ // Set the heading for the dialog.
+ HbLabel *headingLabel = new HbLabel(hbTrId("txt_bt_title_show"), mQuery);
+ mQuery->setHeadingWidget(headingLabel);
+ }
+ mQuery->open(this,SLOT(selectionDialogClosed(HbAction*)));
+
+
+ }
+
+void BTDeviceSearchDialogWidget::searchDialogClosed()
+ {
+ QVariantMap val;
+ QVariant index(-1);
+ val.insert("selectedindex",index);
+ emit deviceDialogData(val);
+ emit deviceDialogClosed();
+ }
+
+void BTDeviceSearchDialogWidget::selectionDialogClosed(HbAction* action)
+ {
+ Q_UNUSED(action);
+
+ disconnect( mQuery );
+ int devTypesWanted = 0;
+
+ if (action == mQuery->actions().first()) { // user pressed "Ok"
+ // Get selected items.
+ QList<QVariant> selections;
+ selections = mQuery->selectedItems();
+
+ for (int i=0; i < selections.count(); i++) {
+ switch (selections.at(i).toInt()) {
+ case BtUiDevAudioDevice:
+ devTypesWanted |= BtuiDevProperty::AVDev;
+ break;
+ case BtUiDevComputer:
+ devTypesWanted |= BtuiDevProperty::Computer;
+ break;
+ case BtUiDevInputDevice:
+ devTypesWanted |= BtuiDevProperty::Peripheral;
+ break;
+ case BtUiDevPhone:
+ devTypesWanted |= BtuiDevProperty::Phone;
+ break;
+ case BtUiDevOtherDevice:
+ devTypesWanted |= (BtuiDevProperty::LANAccessDev |
+ BtuiDevProperty::Toy |
+ BtuiDevProperty::WearableDev |
+ BtuiDevProperty::ImagingDev |
+ BtuiDevProperty::HealthDev |
+ BtuiDevProperty::UncategorizedDev);
+ break;
+ default:
+ // should never get here
+ break;
+ }
+ }
+ }
+ else
+ {
+ devTypesWanted = mSelectedDeviceType;
+ }
+
+
+
+ /* HbSelectionDialog *dlg = (HbSelectionDialog*)(sender());
+ if(dlg->actions().first() == action) {
+
+ }
+ else if(dlg->actions().at(1) == action) {
+ }*/
+
+ if((devTypesWanted != mSelectedDeviceType) &&(devTypesWanted !=0))
+ {
+ mSelectedDeviceType = devTypesWanted;
+// mViewByChosen = true;
+ delete mContentItemModel;
+ mContentItemModel = new QStandardItemModel(this);
+ mListView->setModel(mContentItemModel);
+ mSelectedData.clear();
+ for(int i=0;i<mData.count();i++)
+ {
+ const BtSendDataItem& qtdev = mData[i];
+ if(devTypesWanted & qtdev[DeviceTypeRole].toInt() )
+ {
+ QStandardItem* listitem = new QStandardItem();
+ QStringList info;
+ info.append(qtdev[NameAliasRole].toString());
+
+ listitem->setData(info, Qt::DisplayRole);
+ HbIcon icon = getBadgedDeviceTypeIcon(qtdev[CoDRole].toDouble(),
+ qtdev[MajorPropertyRole].toInt(),
+ BtuiBottomLeft | BtuiBottomRight | BtuiTopLeft | BtuiTopRight);
+ listitem->setIcon(icon.qicon());
+ mContentItemModel->appendRow(listitem);
+ mSelectedData.append(qtdev);
+ }
+ }
+ }
+ }
+
+void BTDeviceSearchDialogWidget::deviceSelected(const QModelIndex& modelIndex)
+ {
+ int row = 0;
+
+ /* if(mViewByChosen)
+ {
+ row = mDeviceLstOfType[modelIndex.row()].mDeviceIdx;
+ }
+
+ else*/
+ {
+ row = modelIndex.row();
+ }
+
+ QVariantMap val;
+// QVariant index(row);
+// val.insert("selectedindex",index);
+
+ const BtSendDataItem& qtdev = mSelectedData.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
+ //emit deviceDialogClosed();
+ // this->close();
+ }
+
+