mediasettings/videosettingsplugin/src/videosettingsaccesspointentry.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:14:16 +0300
changeset 46 adbe7d5ba2f5
child 67 72c709219fcd
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

/*
 * 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 "mpxvideo_debug.h"
#include "videosettingsaccesspointentry.h"
#include "videosettingsgroup.h"
#include <cmmanager_shim.h>
#include <cmconnectionmethod_shim.h>
#include <cpitemdatahelper.h>

// ---------------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------------
//
VideoSettingsAccessPointEntry::VideoSettingsAccessPointEntry(
    CpItemDataHelper &itemDataHelper,
    const QString& text,
    VideoSettingsGroup *parent) :
    CpSettingFormEntryItemData(CpSettingFormEntryItemData::ButtonEntryItem, 
        itemDataHelper, text, QString(), QString(), parent),
    mParent(parent)
{
    MPX_ENTER_EXIT(_L("VideoSettingsAccessPointEntry::VideoSettingsAccessPointEntry()"));
    
    itemDataHelper.addConnection(this,SIGNAL(clicked()),this,SLOT(openSelectionDialogSlot()));
    mApplSettings = new CmApplSettingsUi(this);
    connect(mApplSettings, SIGNAL(finished(uint)), this, SLOT(accessPointDialogFinished(uint)));
    mSelection.result = CmApplSettingsUi::SelectionTypeConnectionMethod;
    mSelection.id = 0;
    mCmManager = new CmManagerShim();
}

// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
VideoSettingsAccessPointEntry::~VideoSettingsAccessPointEntry()
{
    MPX_ENTER_EXIT(_L("VideoSettingsAccessPointEntry::~VideoSettingsAccessPointEntry()"));
    
    delete mCmManager;
}

// ---------------------------------------------------------------------------
// accessPointNameFromIapId
// ---------------------------------------------------------------------------
//
void VideoSettingsAccessPointEntry::setIapId(const uint& apId)
{
    MPX_ENTER_EXIT(_L("VideoSettingsAccessPointEntry::accessPointNameFromIapId()"), 
        _L("apId = %i"), apId);
    
    QList<uint> cmArray;
    mCmManager->connectionMethod(cmArray, false);
    
    bool found = false;
    foreach(uint id, cmArray)
    {
        CmConnectionMethodShim* connMethod = getConnectionMethod(id);
        if(connMethod && connMethod->getIntAttribute(CMManagerShim::CmIapId) == apId)
        {
            mSelection.id = connMethod->getIntAttribute(CMManagerShim::CmId);
            setAccessPointName(connMethod);
            found = true;
            break;
        }
    }
    
    if(!found)
    {
        this->setDescription(hbTrId("txt_videos_dblist_none"));
    }
}

// ---------------------------------------------------------------------------
// createSettingView
// ---------------------------------------------------------------------------
//
CpBaseSettingView* VideoSettingsAccessPointEntry::createSettingView() const
{
    MPX_ENTER_EXIT(_L("VideoSettingsAccessPointEntry::createSettingView()"));
    
    // does not create a new view.
    return 0;
}

// ---------------------------------------------------------------------------
// getConnectionMethod
// ---------------------------------------------------------------------------
//
CmConnectionMethodShim* VideoSettingsAccessPointEntry::getConnectionMethod(const uint& id)
{
    MPX_ENTER_EXIT(_L("VideoSettingsAccessPointEntry::getConnectionMethod()"));
    
    CmConnectionMethodShim* connMethod = 0;
    try {
        connMethod = mCmManager->connectionMethod(id);
    } catch (const std::exception& exc) {
        MPX_DEBUG(_L("Caught exception while fetching connection method. Exception: %s"), exc.what());
        return 0;
    }
    
    return connMethod;
}

// ---------------------------------------------------------------------------
// setName
// ---------------------------------------------------------------------------
//
void VideoSettingsAccessPointEntry::setAccessPointName(CmConnectionMethodShim* connMethod)
{
    MPX_ENTER_EXIT(_L("VideoSettingsAccessPointEntry::setAccessPointName()"));
    
    QString name = connMethod->getStringAttribute(CMManagerShim::CmName);
    this->setDescription(name);
}

// ---------------------------------------------------------------------------
// openSelectionDialogSlot
// ---------------------------------------------------------------------------
//
void VideoSettingsAccessPointEntry::openSelectionDialogSlot()
{
    MPX_ENTER_EXIT(_L("VideoSettingsAccessPointEntry::openSelectionDialogSlot()"));
    
    QFlags<CmApplSettingsUi::SelectionDialogItems> listItems;
    QSet<CmApplSettingsUi::BearerTypeFilter> filter;
    
    listItems |= CmApplSettingsUi::ShowConnectionMethods;
    
    mApplSettings->setOptions(listItems, filter);
    mApplSettings->setSelection(mSelection);
    
    mApplSettings->open();
}

// ---------------------------------------------------------------------------
// accessPointDialogFinished
// ---------------------------------------------------------------------------
//
void VideoSettingsAccessPointEntry::accessPointDialogFinished(uint error)
{
    MPX_ENTER_EXIT(_L("VideoSettingsAccessPointEntry::accessPointDialogFinished()"), 
        _L("error = %i"), error);
    
    if(error == CmApplSettingsUi::ApplSettingsErrorNone)
    {
        CmApplSettingsUi::SettingSelection selection =
            mApplSettings->selection();
        MPX_DEBUG(_L("New access point connection method id = %i"), selection.id);
        CmConnectionMethodShim* connMethod = getConnectionMethod(selection.id);
        if(connMethod)
        {
            mSelection.id = selection.id;
            mParent->setAccessPointId(connMethod->getIntAttribute(CMManagerShim::CmIapId));
            setAccessPointName(connMethod);
        }
        else
        {
            MPX_DEBUG(_L("FATAL: Could not find connection method with id %i"), selection.id);
        }
    }
}