bluetoothengine/btui/btcpplugin/btcpuibaseview.cpp
changeset 63 bcf742120177
parent 41 0b2439c3e397
equal deleted inserted replaced
52:4545c04e61e1 63:bcf742120177
    15  *
    15  *
    16  */
    16  */
    17 
    17 
    18 #include "btcpuibaseview.h"
    18 #include "btcpuibaseview.h"
    19 #include <hbaction.h>
    19 #include <hbaction.h>
       
    20 #include <HbInstance>
       
    21 #include <bluetoothuitrace.h>
       
    22 #include "btcpuiviewmgr.h"
       
    23 #include <HbSelectionDialog>
       
    24 #include <HbLabel>
       
    25 #include "btuidevtypemap.h"
       
    26 #include <btabstractdelegate.h>
       
    27 #include <btdelegatefactory.h>
    20 
    28 
    21 /*!
    29 /*!
    22     This constructor constructs new setting and device models.
    30     This constructor constructs new setting and device models.
    23  */
    31  */
    24 BtCpUiBaseView::BtCpUiBaseView(QGraphicsItem *parent )
    32 BtcpuiBaseView::BtcpuiBaseView(QGraphicsItem *parent) :
    25     :CpBaseSettingView( 0 , parent )
    33     CpBaseSettingView(0, parent), mViewMgr(0), mDelegate(0), mPreviousView(0),
       
    34             mBack(0), mQuery(0), mContextMenu(0), mBtuiModelSortFilter(0)
    26 {
    35 {
    27     mSettingModel = new BtSettingModel(this);
    36     mSettingModel = new BtSettingModel(this);
    28     mDeviceModel = new BtDeviceModel(this);
    37     mDeviceModel = new BtDeviceModel(this);
       
    38     initialise();
    29 }
    39 }
    30 
    40 
    31 /*!
    41 /*!
    32     This constructor constructs models from the given setting and device models.
    42     This constructor constructs models from the given setting and device models.
    33     This implies the model impl and data structure is shared.
    43     This implies the model impl and data structure are shared.
    34  */
    44  */
    35 BtCpUiBaseView::BtCpUiBaseView(
    45 BtcpuiBaseView::BtcpuiBaseView(BtSettingModel &settingModel, 
    36         BtSettingModel &settingModel, 
    46         BtDeviceModel &deviceModel,
    37         BtDeviceModel &deviceModel, 
    47         QGraphicsItem *parent) :
    38         QGraphicsItem *parent )
    48     CpBaseSettingView(0, parent), mViewMgr(0), mDelegate(0), mPreviousView(0),
    39     :CpBaseSettingView( 0 , parent )
    49             mBack(0), mQuery(0), mContextMenu(0), mBtuiModelSortFilter(0)
    40 {
    50 {
    41     mSettingModel = new BtSettingModel(settingModel, this);
    51     mSettingModel = new BtSettingModel(settingModel, this);
    42     mDeviceModel = new BtDeviceModel(deviceModel, this);    
    52     mDeviceModel = new BtDeviceModel(deviceModel, this);
       
    53     initialise();
    43 }
    54 }
    44 
    55 
    45 /*!
    56 /*!
    46     Destructor.
    57     Destructor.
    47  */
    58  */
    48 BtCpUiBaseView::~BtCpUiBaseView()
    59 BtcpuiBaseView::~BtcpuiBaseView()
    49 {
    60 {
    50 
    61     BOstraceFunctionEntry1( DUMMY_DEVLIST, this );
    51 }
    62     delete mDelegate;
    52 
    63     delete mQuery;
    53 
    64     
    54 
    65     if(mContextMenu) {
    55 
    66         mContextMenu->clearActions();
       
    67         delete mContextMenu;
       
    68     }
       
    69 
       
    70     BOstraceFunctionExit0(DUMMY_DEVLIST);
       
    71 }
       
    72 
       
    73 void BtcpuiBaseView::initialise()
       
    74 {
       
    75     bool ret(false); 
       
    76     mMainWindow = hbInstance->allMainWindows().first();
       
    77     mContextMenu = new HbMenu();
       
    78     ret = connect(mContextMenu, SIGNAL(triggered(HbAction *)), this, SLOT(contextMenuTriggered(HbAction *)));
       
    79     BTUI_ASSERT_X( ret, "bt-main-view", "Context Menu can't connect" );
       
    80 }
       
    81 
       
    82 void BtcpuiBaseView::setPreviousView(BtcpuiBaseView *view)
       
    83 {
       
    84     BOstraceFunctionEntry1( DUMMY_DEVLIST, this );
       
    85     mPreviousView = view;
       
    86     // when a non-null previous view is set, it means this view is navigated from an existing
       
    87     // view. And the back-action should navigate to the previous view.
       
    88     if (mPreviousView) {
       
    89         // Back action is created on demand.
       
    90         if (!mBack) {
       
    91             mBack = new HbAction(Hb::BackNaviAction, this);
       
    92             BTUI_ASSERT_X(mBack, "BtcpuiBaseView::setPreviousView", "can't create back action");
       
    93             connect(mBack, SIGNAL(triggered()), this, SLOT(backToPreviousView()));
       
    94         }
       
    95         if (navigationAction() != mBack) {
       
    96             setNavigationAction(mBack);
       
    97         }
       
    98     }
       
    99     else {
       
   100         setNavigationAction(0);
       
   101     }
       
   102     BOstraceFunctionExit0(DUMMY_DEVLIST);
       
   103 }
       
   104 
       
   105 void BtcpuiBaseView::setViewMgr(BtcpuiViewMgr *mgr)
       
   106 {
       
   107     mViewMgr = mgr;
       
   108 }
       
   109 
       
   110 void BtcpuiBaseView::backToPreviousView()
       
   111 {
       
   112     BOstraceFunctionEntry1( DUMMY_DEVLIST, this );
       
   113     if ( mPreviousView ) {
       
   114         viewMgr()->switchView(this, mPreviousView, QVariant(), true);
       
   115     }
       
   116     BOstraceFunctionExit0(DUMMY_DEVLIST);
       
   117 }
       
   118 
       
   119 BtSettingModel *BtcpuiBaseView::settingModel()
       
   120 {
       
   121     return mSettingModel;
       
   122 }
       
   123 
       
   124 BtDeviceModel *BtcpuiBaseView::deviceModel()
       
   125 {
       
   126     return mDeviceModel;
       
   127 }
       
   128 
       
   129 BtcpuiViewMgr *BtcpuiBaseView::viewMgr()
       
   130 {
       
   131     return mViewMgr;
       
   132 }
       
   133 
       
   134 bool BtcpuiBaseView::createDelegate(BtDelegate::EditorType type,
       
   135         QObject *receiver, const char *member)
       
   136 {
       
   137     bool ok(false);
       
   138     if(!mDelegate) {
       
   139         mDelegate = BtDelegateFactory::newDelegate(type, mSettingModel, mDeviceModel); 
       
   140         ok = connect(mDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)),
       
   141                 receiver, member);
       
   142         BOstraceExt1(TRACE_DEBUG, DUMMY_DEVLIST, "BtcpuiBaseView::createDelegate signal connect %d", ok);
       
   143         if (!ok) {
       
   144             delete mDelegate;
       
   145             mDelegate = 0;
       
   146         }
       
   147     }
       
   148     BOstraceExt2(TRACE_DEBUG, DUMMY_DEVLIST, "BtcpuiBaseView::createDelegate: mDe: 0x%08X, ret %d", mDelegate, ok);
       
   149     return ok;
       
   150 }
       
   151 
       
   152 bool BtcpuiBaseView::createExecuteDelegate(BtDelegate::EditorType type,
       
   153         QObject *receiver, const char *member, const QVariant &param)
       
   154 {
       
   155     bool ok = createDelegate(type, receiver, member);
       
   156     if (ok) {
       
   157         mDelegate->exec(param);
       
   158     }
       
   159     return ok;
       
   160 }
       
   161 
       
   162 void BtcpuiBaseView::viewByDeviceTypeDialog()
       
   163 {
       
   164     if ( !mQuery ) {
       
   165         mQuery = new HbSelectionDialog();
       
   166         QStringList devTypeList;
       
   167         devTypeList << hbTrId("txt_bt_list_audio_devices")
       
   168                 << hbTrId("txt_bt_list_computers") 
       
   169                 << hbTrId("txt_bt_list_input_devices") 
       
   170                 << hbTrId("txt_bt_list_phones") 
       
   171                 << hbTrId("txt_bt_list_other_devices");
       
   172 
       
   173         
       
   174         mQuery->setStringItems(devTypeList, 0);
       
   175         mQuery->setSelectionMode(HbAbstractItemView::MultiSelection);
       
   176     
       
   177         QList<QVariant> current;
       
   178         current.append(QVariant(0));
       
   179         mQuery->setSelectedItems(current);
       
   180     
       
   181         // Set the heading for the dialog.
       
   182         HbLabel *headingLabel = new HbLabel(hbTrId("txt_bt_title_show"), mQuery);
       
   183         mQuery->setHeadingWidget(headingLabel);
       
   184     }
       
   185     mQuery->open(this,SLOT(viewByDialogClosed(HbAction*)));
       
   186 }
       
   187 
       
   188 void BtcpuiBaseView::viewByDialogClosed(HbAction* action)
       
   189 {
       
   190     Q_UNUSED(action)
       
   191     //ReImpemented in derived classes.
       
   192 }
       
   193 
       
   194 int BtcpuiBaseView::selectedDeviceTypes(HbAction* action)
       
   195 {
       
   196     int devTypesWanted = 0;
       
   197     
       
   198     disconnect( mQuery, 0, this, 0);  // remove signal
       
   199     if (action == mQuery->actions().first()) {  // user pressed "Ok"
       
   200         // Get selected items.
       
   201         QList<QVariant> selections;
       
   202         selections = mQuery->selectedItems();
       
   203         
       
   204         for (int i=0; i < selections.count(); i++) {
       
   205             switch (selections.at(i).toInt()) {
       
   206             case BtUiDevAudioDevice:
       
   207                 devTypesWanted |= BtuiDevProperty::AVDev;
       
   208                 break;
       
   209             case BtUiDevComputer:
       
   210                 devTypesWanted |= BtuiDevProperty::Computer;
       
   211                 break;
       
   212             case BtUiDevInputDevice:
       
   213                 devTypesWanted |= BtuiDevProperty::Peripheral;
       
   214                 break;
       
   215             case BtUiDevPhone:
       
   216                 devTypesWanted |= BtuiDevProperty::Phone;
       
   217                 break;
       
   218             case BtUiDevOtherDevice:
       
   219                 devTypesWanted |= (BtuiDevProperty::LANAccessDev |
       
   220                         BtuiDevProperty::Toy |
       
   221                         BtuiDevProperty::WearableDev |
       
   222                         BtuiDevProperty::ImagingDev |
       
   223                         BtuiDevProperty::HealthDev |
       
   224                         BtuiDevProperty::UncategorizedDev);
       
   225                 break;
       
   226             default:
       
   227                 // should never get here
       
   228                 BTUI_ASSERT_X(false, "BtcpuiSearchView::viewByDialogClosed()", 
       
   229                         "wrong device type in viewBy dialog!");
       
   230             }
       
   231         }
       
   232     }
       
   233     
       
   234     return devTypesWanted;
       
   235 }
       
   236 
       
   237 void BtcpuiBaseView::deviceSelected(const QModelIndex& modelIndex)
       
   238 {
       
   239     BOstraceFunctionEntry1( DUMMY_DEVLIST, this );
       
   240     BtcpuiBaseView *devView = viewMgr()->deviceView();
       
   241     // For navigating back to this view:
       
   242     devView->setPreviousView( this );
       
   243     QModelIndex index = mBtuiModelSortFilter->mapToSource(modelIndex);
       
   244     QVariant params;
       
   245     params.setValue(index);
       
   246     viewMgr()->switchView(this, devView, params, false);
       
   247     BOstraceFunctionExit0(DUMMY_DEVLIST);
       
   248 }
       
   249 
       
   250 void BtcpuiBaseView::createContextMenuActions(int majorRole)
       
   251 {
       
   252     //Re-Implemented in derived classes.
       
   253     Q_UNUSED(majorRole)
       
   254 }
       
   255 
       
   256 void BtcpuiBaseView::take(BtAbstractDelegate *delegate)
       
   257 {
       
   258     mDelegate = delegate;
       
   259     if (mDelegate) {
       
   260         disconnect(mDelegate, 0, 0, 0);
       
   261         connect(mDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)),
       
   262                 this, SLOT(handleDelegateCompleted(int)));
       
   263     }
       
   264 }
       
   265 
       
   266 void BtcpuiBaseView::contextMenuTriggered(HbAction *action)
       
   267 {
       
   268     if(!(action->text().compare(hbTrId("txt_common_menu_open")))) {
       
   269             deviceSelected(mLongPressedItem->modelIndex());
       
   270         }
       
   271 }
       
   272 
       
   273 void BtcpuiBaseView::showContextMenu(HbAbstractViewItem *item, const QPointF &coords)
       
   274 {
       
   275     mLongPressedItem = item;
       
   276     mContextMenu->clearActions();
       
   277     
       
   278     mContextMenu->addAction(hbTrId("txt_common_menu_open"));
       
   279     
       
   280     QModelIndex index = mBtuiModelSortFilter->mapToSource(mLongPressedItem->modelIndex());  
       
   281     
       
   282     int majorPropRole = (mDeviceModel->data(index,BtDeviceModel::MajorPropertyRole)).toInt();
       
   283     if (majorPropRole & BtuiDevProperty::Connectable ) {
       
   284         createContextMenuActions(majorPropRole);
       
   285     }
       
   286     mContextMenu->setPreferredPos(coords);
       
   287     mContextMenu->open();
       
   288 }
       
   289 
       
   290 void BtcpuiBaseView::handleDelegateCompleted(int error, BtAbstractDelegate* delegate)
       
   291 {
       
   292     BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, error );
       
   293     Q_UNUSED(error);
       
   294     delete mDelegate;
       
   295     mDelegate = 0;
       
   296     BOstraceFunctionExit0(DUMMY_DEVLIST);
       
   297 }