bluetoothengine/bthid/bthidkbdsettings/src/bthidsettingview.cpp
branchRCL_3
changeset 56 9386f31cc85b
parent 0 f63038272f30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/bthid/bthidkbdsettings/src/bthidsettingview.cpp	Wed Sep 01 12:20:04 2010 +0100
@@ -0,0 +1,436 @@
+/*
+* Copyright (c) 2006 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:  This is the implementation of setting view class
+*
+*/
+
+#include <aknViewAppUi.h>
+#include <avkon.hrh>
+#include <eiklabel.h>
+#include <akntitle.h>
+#include <StringLoader.h>
+#include <hlplch.h>                   // Help launcher
+#include <aknradiobuttonsettingpage.h>
+#include <bautils.h>
+#include <BthidResource.rsg>
+#include <csxhelp/bt.hlp.hrh>           // Help IDs
+#include <aknnavide.h>
+#include <akncontext.h>
+#include "bthidsettingview.h"
+#include "bthidsettingcontainer.h"
+#include "bthidsettings.h"
+#include "bthidsettinglist.h"
+#include "btkeyboard.hrh"
+#include <btkeyboard.mbg>
+#include "btengprivatecrkeys.h"
+#include "layoutmgr.h"
+#include "hidlayoutids.h"
+#include "debug.h"
+
+const TUid KBtHidSettingViewId =
+    {
+        0x2001E30B
+    }
+    ; // UID of HID device setting view.
+// ---------------------------------------------------------
+// CBtHidSettingView::NewNewGsPluginL
+// Two phased constructor
+// ---------------------------------------------------------
+//
+CBtHidSettingView* CBtHidSettingView::NewBtuiPluginL()
+    {
+    //TRACE_FUNC(_L("[BTHID]\t CBtHidSettingView::NewBtuiPluginL(), BEGIN"));
+
+    CBtHidSettingView* self = new (ELeave) CBtHidSettingView();
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    //TRACE_INFO( (_L("[BTHID]\t CBtHidSettingView[0x%08x]::NewBtuiPluginL, END"),self) );
+
+    return self;
+    }
+
+
+// ----------------------------------------------------
+// CBtHidSettingView::CBtHidSettingView
+// default constructor
+// ----------------------------------------------------
+//
+CBtHidSettingView::CBtHidSettingView()
+    {}
+
+// ----------------------------------------------------
+// CBtHidSettingView::ConstructL
+// ----------------------------------------------------
+//
+void CBtHidSettingView::ConstructL()
+    {
+    TRACE_INFO( (_L("[BTHID]\t CBtHidSettingView[0x%08x]:ConstructL(), BEGIN"),this) );
+
+    User::LeaveIfError(iLayoutSession.Connect());
+
+    // Check to see what type of layout code the layout manager will return
+    // us. (i.e nokia or standard)
+    // This is used to know which settings page to display.
+    TBool ignore;
+    TRACE_INFO(_L("[BTHID]\t CBtHidMainView::ConstructL(), get layout info..."));
+    User::LeaveIfError(iLayoutSession.GetDeviceInfo(iIsNokiaKeyboard, ignore));
+
+    iEikEnv = CEikonEnv::Static();
+    TFileName filename;
+    filename += KFileDrive;
+    filename += KDC_RESOURCE_FILES_DIR;
+    filename += KResourceFileName;
+    BaflUtils::NearestLanguageFile( iEikEnv->FsSession(), filename );
+    iResourceFileFlag=iEikEnv->AddResourceFileL(filename);
+    BaseConstructL( R_BTKEYBOARD_SETTING_VIEW );
+
+    CEikStatusPane *sp = ((CAknAppUi*)iEikonEnv->EikAppUi())->StatusPane();
+    // Fetch pointer to the default title pane control
+    iContextPane = (CAknContextPane *)sp->ControlL(TUid::Uid(EEikStatusPaneUidContext));
+
+    iSettings = CBtHidSettings::NewL();
+
+    TRACE_INFO( (_L("[BTHID]\t CBtHidSettingView[0x%08x]:ConstructL(), END"),this) );
+    }
+// ----------------------------------------------------
+// CBtHidSettingView::~CBtHidSettingView()
+// Destructor
+// Frees reserved resources
+// ----------------------------------------------------
+//
+CBtHidSettingView::~CBtHidSettingView()
+    {
+    TRACE_INFO( (_L("[BTHID]\t CBtHidSettingView[0x%08x]::~CBtHidSettingView()"), this) );
+    iLayoutSession.Close();
+
+    delete iNaviDecorator;
+    iEikEnv->DeleteResourceFile(iResourceFileFlag);
+
+    if ( iSettingList )
+        {
+        AppUi()->RemoveFromStack( (CCoeControl*) iSettingList );
+        delete iSettingList;
+        }
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromStack(iContainer );
+        delete iContainer;
+        }
+    if( iCenRepWatcher )
+        delete iCenRepWatcher;
+
+    if (iSettings )
+        delete iSettings;
+    TRACE_FUNC_EXIT
+    }
+
+// ---------------------------------------------------------
+// TUid CBtHidSettingView::Id
+// ---------------------------------------------------------
+//
+TUid CBtHidSettingView::Id() const
+    {
+    TUid id = KBtHidSettingViewId;    //view id
+    return id;
+    }
+
+// ----------------------------------------------------
+// CBtHidSettingView::HandleCommandL(TInt aCommand)
+// takes care of command handling
+// ----------------------------------------------------
+//
+void CBtHidSettingView::HandleCommandL(TInt aCommand)
+    {
+    TRACE_INFO( (_L("[BTHID]\t CBtHidSettingView[0x%08x]::HandleCommandL(%d)"),this, aCommand) );
+    switch ( aCommand )
+        {
+        case EEikCmdExit:           // fall-through, handled similarily
+        case EAknSoftkeyExit:       // fall-through, handled similarily
+        //case EBTKeyCmdExit:
+            {
+            AppUi()->HandleCommandL( EEikCmdExit);
+            }
+        case EAknSoftkeyChange:
+        case EBTKeyCmdAppChange:
+            {
+            if( iSettingList )
+                {
+                iCenRepWatcher->DisableNotifications();
+                iSettingList->EditCurrentItemL( aCommand );
+                iCenRepWatcher->EnableNotifications();
+                }
+            break;
+            }
+        case EAknSoftkeyBack:
+            {
+            AppUi()->ActivateLocalViewL( iPrevViewId.iViewUid );
+            break;
+            }
+
+#ifdef __SERIES60_HELP
+        case EBTKeyCmdAppHelp:
+            {
+            HlpLauncher::LaunchHelpApplicationL(
+                    iEikEnv->WsSession(), AppUi()->AppHelpContextL());
+            break;
+            }
+
+#endif
+        default:
+            {
+            AppUi()->HandleCommandL( aCommand );
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CBtHidSettingView::DoActivateL()
+// ---------------------------------------------------------------------------
+//
+void CBtHidSettingView::DoActivateL( const TVwsViewId& aPrevViewId,
+                                     TUid aCustomMessageId,
+                                     const TDesC8& aCustomMessage )
+    {
+    TRACE_INFO( (_L("[BTHID]\t CBtHidSettingView[0x%08x]::DoActivateL, BEGIN"),this) );
+    iPrevViewId = aPrevViewId;
+    (void) aCustomMessageId;
+
+    // Setup the title
+    HBufC* title;
+    title = iCoeEnv->AllocReadResourceLC(R_BTKEYBOARD_SETTINGS_STATUS_PANE_TITLE);
+
+    CEikStatusPane* statusPane = StatusPane();
+    CAknTitlePane* titlePane;
+    titlePane = (CAknTitlePane*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle));
+    titlePane->SetTextL(title->Des());
+    CleanupStack::PopAndDestroy(); // title
+    title = NULL;
+
+    TRACE_INFO( (_L("[BTHID]\t CBtHidSettingView[0x%08x]::DoActivateL(), Creating container..."),this) );
+    iContainer = new (ELeave) CBTHidSettingContainer;
+    iContainer->SetMopParent(this);
+    iContainer->ConstructL( ClientRect());
+    iContainer->MakeVisible( ETrue );
+    iContainer->ActivateL();
+    AppUi()->AddToStackL(iContainer);
+
+    CreateSettingListL();
+    iCenRepWatcher = CBtHidCenRepWatcher::NewL( KCRUidBTEngPrivateSettings, *this ); // create listener for cenrep events.
+    SetNavipaneTextL(aCustomMessage);
+
+    TRACE_INFO((_L("[BTHID]\t CBtHidSettingView[0x%08x]::DoActivateL, END"),this) );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CBtHidSettingView::DoDeactivate
+//
+// Deactivate the settings view.
+// ---------------------------------------------------------------------------
+//
+void CBtHidSettingView::DoDeactivate()
+    {
+    TRACE_INFO( (_L("[BTHID]\t CBtHidSettingView[0x%08x]::DoDeactivate, BEGIN"),this) );
+    if ( iSettingList )
+        {
+        AppUi()->RemoveFromStack( (CCoeControl*) iSettingList );
+        delete iSettingList;
+        iSettingList = NULL;
+        }
+    if( iContainer )
+        {
+        iContainer->MakeVisible(EFalse);
+        AppUi()->RemoveFromStack( iContainer );
+        delete iContainer;
+        iContainer = NULL;
+        }
+
+    if (iNaviDecorator)
+        {
+        delete iNaviDecorator;
+        iNaviDecorator = NULL;
+        }
+    iLastSelectedLayout = iSettings->LoadLayoutSetting();
+    iLayoutSession.SetLayout(iLastSelectedLayout);
+    delete iCenRepWatcher;
+    iCenRepWatcher = NULL;
+    TRACE_FUNC_EXIT
+    }
+
+// ----------------------------------------------------
+// CBtHidSettingView::DynInitMenuPaneL
+// ----------------------------------------------------
+//
+void CBtHidSettingView::DynInitMenuPaneL(
+    TInt aResourceId, CEikMenuPane* aMenuPane)
+    {
+    if (aResourceId == R_BTKEYBOARD_SETTING_MENU )
+        {
+        aMenuPane->SetItemDimmed(EBTKeyCmdAppChange, ETrue); 
+        }
+    
+    
+    }
+
+// ----------------------------------------------------
+// CBtHidSettingView::CreateSettingListL
+// ----------------------------------------------------
+//
+void CBtHidSettingView::CreateSettingListL()
+    {
+    TRACE_INFO( (_L("[BTHID]\t CBtHidSettingView[0x%08x]::CreateSettingListL, BEGIN"),this) );
+
+    TInt resourceId = R_BTKEYBOARD_STANDARD_SETTING_LIST;
+
+    TBool foundLayout;
+    User::LeaveIfError(iLayoutSession.GetDeviceInfo(iIsNokiaKeyboard, foundLayout));
+
+    if(iIsNokiaKeyboard)
+        {
+        resourceId = R_BTKEYBOARD_NOKIA_SETTING_LIST;
+        }
+    else
+        {
+        resourceId = R_BTKEYBOARD_STANDARD_SETTING_LIST;
+        }
+
+    TInt layoutCode;
+    if ( !foundLayout )
+        {
+        //No layout found, find an appropriate one.
+        layoutCode = CurrentLayoutL();
+        SetCurrentLayoutL(static_cast<THidKeyboardLayoutId>(layoutCode));
+        }
+    else
+        {
+        //Layout found, load it as default
+        iLayoutSession.GetLayout(layoutCode);
+        SetCurrentLayoutL(static_cast<THidKeyboardLayoutId>(layoutCode));
+        }
+
+    if ( iSettingList )
+        {
+        AppUi()->RemoveFromStack( (CCoeControl*) iSettingList );
+        }
+    delete iSettingList;
+    iSettingList = NULL;
+
+    iSettingList = new (ELeave) CBTKeySettingList( *iSettings, this);
+    iSettingList->SetMopParent(this);
+    iSettingList->ConstructFromResourceL(resourceId);
+    AppUi()->AddToStackL( (CCoeControl*) iSettingList );
+    iSettingList->MakeVisible(ETrue);
+    iSettingList->SetRect(ClientRect());
+    iSettingList->ActivateL();
+    iSettingList->DrawNow();
+    TRACE_INFO( (_L("[BTHID]\t CBtHidSettingView[0x%08x]::CreateSettingListL, END"),this) );
+    }
+
+// ----------------------------------------------------
+// CBtHidSettingView::SetCurrentLayoutL
+// ----------------------------------------------------
+//
+void CBtHidSettingView::SetCurrentLayoutL(THidKeyboardLayoutId aLayoutValue)
+    {
+    // Ask the layout manager to change layout.
+    // Use the leaving version so we the user can't confirm a selection
+    // if an error occurs.
+    iLayoutSession.SetLayoutL(aLayoutValue);
+
+    iSettings->SaveLayoutSettingL( aLayoutValue );
+    }
+
+THidKeyboardLayoutId CBtHidSettingView::CurrentLayoutL() const
+    {
+    // Ask the layout manager for the current layout.
+    // Use the leaving version.
+    TInt layoutCode = iLayoutSession.GetLayoutL();
+
+    // Convert the Int to the enum.
+    THidKeyboardLayoutId layoutID =
+        static_cast<THidKeyboardLayoutId>(layoutCode);
+
+    // If we believe this to be a Nokia keyboard then the layout settings
+    // page will contain the list of Nokia Su8 items.
+    // Conversly if we think this is a Standard keyboard the layout settings
+    // page will contain the list of Standard layouts.
+    // We must pass a valid value to the Settings page or it will panic.
+    // Validate the code from the Layout Manager before returning it.
+    if ( iIsNokiaKeyboard )
+        {
+        CLayoutUtils::ValidateNokiaSU8Layout(layoutID);
+        }
+    else
+        {
+        CLayoutUtils::ValidateStandardLayout(layoutID);
+        }
+
+    return layoutID;
+    }
+
+void CBtHidSettingView::SetNavipaneTextL(const TDesC8& aDeviceName)
+    {
+    TRACE_INFO(_L("[BTHID]\t CBtHidSettingView::SetNavipaneTextL Start"));
+    CEikStatusPane* sp =
+        iEikonEnv->AppUiFactory()->StatusPane();
+
+    CAknNavigationControlContainer* np =
+        static_cast<CAknNavigationControlContainer*>(
+            sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+
+    delete iNaviDecorator;
+    iNaviDecorator = NULL;
+
+    TInt blank(1);
+    if (aDeviceName.Length()>0 )
+        {
+        HBufC* stringHolder = HBufC::NewLC(aDeviceName.Length() + blank);
+        stringHolder->Des().Copy(aDeviceName);
+        stringHolder->Des().Append(_L(" "));
+        iNaviDecorator = np->CreateNavigationLabelL( *stringHolder );
+        np->PushL( *iNaviDecorator );
+        sp->DrawNow();
+        CleanupStack::PopAndDestroy(stringHolder);  // stringHolder
+        }
+    else
+        {
+        HBufC* temp = HBufC::NewLC(aDeviceName.Length());
+        temp->Des().Copy(aDeviceName);
+        iNaviDecorator = np->CreateNavigationLabelL( *temp );
+        np->PushL( *iNaviDecorator );
+        sp->DrawNow();
+        CleanupStack::PopAndDestroy(temp);  // temp
+        }
+    TRACE_INFO(_L("[BTHID]\t CBtHidSettingView::SetNavipaneTextL End"));
+    }
+// ----------------------------------------------------
+// CBtHidSettingView::CenRepDataChanged
+// ----------------------------------------------------
+//
+void CBtHidSettingView::CenRepDataChanged(TUid& aUid, TUint32 aKey)
+    {
+    // just recreate the setting list
+    TRACE_INFO((_L("[BTHID]\t CBtHidSettingView[0x%08x]::CenRepDataChanged"),this));
+    (void) aUid;
+    if ( aKey == KBtHidKeyboardLayout )
+        {
+        TRAPD( err, CreateSettingListL());
+        err = err;
+        }
+    }
+// End of File