textinput/peninputgenericitut/src/peninputitutcustomizationresourcemgr.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputgenericitut/src/peninputitutcustomizationresourcemgr.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,261 @@
+/*
+* Copyright (c) 2002-2005 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:  drop-down list control
+*
+*/
+
+
+#include <peninputlayout.h>
+#include <peninputlayoutbutton.h>
+#include <peninputlayoutvkb.h>
+#include <peninputrawkeybutton.h>
+#include <AknIconUtils.h>
+#include <fbs.h>
+
+#include "peninputitutcustomizationresourcemgr.h"
+#include "peninputgenericitutlayoutcontext.h"
+#include "peninputgenericitutdata.h"
+#include "peninputgenericitutdatamgr.h"
+#include "peninputgenericitutconverter.h"
+
+CItutCustomizedRscMgr* CItutCustomizedRscMgr::NewL(CFepUiLayout* aUiLayout,
+                                                   MItutLayoutContext* aLayoutContext)
+    {
+    CItutCustomizedRscMgr* self = new (ELeave) CItutCustomizedRscMgr(aUiLayout, aLayoutContext);
+    CleanupStack::PushL(self);
+    self->ConstructL(); 
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CItutCustomizedRscMgr::~CItutCustomizedRscMgr()
+    {
+    iAddedCtrls.Reset();
+    iAddedCtrls.Close();
+
+    iDimmedCtrls.Reset();
+    iDimmedCtrls.Close();
+
+    iHidedCtrls.Reset();
+    iHidedCtrls.Close();
+    
+    iDimmedVKeys.Reset();
+    iDimmedVKeys.Close();
+    }
+
+void CItutCustomizedRscMgr::Restore()
+    {
+    // in customized case, only keypad's key and button can be dimmed
+    for (TInt i = 0; i < iDimmedCtrls.Count(); i++)
+        {
+        static_cast<CButtonBase*>(iDimmedCtrls[i])->SetDimmed(EFalse);
+        }
+    iDimmedCtrls.Reset();
+    
+    for (TInt i = 0; i < iHidedCtrls.Count(); i++)
+        {
+        iHidedCtrls[i]->Hide(EFalse);
+        }
+    iHidedCtrls.Reset();
+    
+    for (TInt i = 0; i < iDimmedVKeys.Count(); i++)
+        {
+        iDimmedVKeys[i]->SetDimmed(EFalse);
+        }
+    iDimmedVKeys.Reset();
+        
+    // hide all new created ctrl
+    for (TInt i = 0; i < iAddedCtrls.Count(); i++)
+        {
+        iAddedCtrls[i].iCtrl->Hide(ETrue);
+        }
+    }
+
+void CItutCustomizedRscMgr::RemoveAddedCtrls()
+    {
+    for (TInt i = 0; i < iAddedCtrls.Count(); i++)
+        {
+        iUiLayout->RemoveControl(iAddedCtrls[i].iCtrl);
+        }
+    iAddedCtrls.Reset();
+
+    iNewCtrlId = ECtrlIdLastStdCtrl;
+    }
+
+void CItutCustomizedRscMgr::CreateCustomizedRawKeyButtonL(TItutKey aKeyInfo)
+    {
+    CAknFepCtrlRawKeyButton* rawkeybtn = NULL;
+
+    rawkeybtn = CAknFepCtrlRawKeyButton::NewL(iUiLayout,
+                                              iNewCtrlId,
+											  KAknsIIDQsnFrFunctionButtonNormal,
+										   	  KAknsIIDQsnFrFunctionButtonPressed,
+										      KAknsIIDQsnFrFunctionButtonInactive,                                             
+                                              EEventRawKeyDownEvent,
+                                              EEventRawKeyUpEvent);
+    rawkeybtn->SetRect(TItutDataConverter::AnyToRect(
+                               iLayoutContext->DataMgr()->RequestData(aKeyInfo.iPos)));
+    rawkeybtn->SetForgroundBmpRect(TItutDataConverter::AnyToRect(
+                               iLayoutContext->DataMgr()->RequestData(aKeyInfo.iInnerPos)));
+    rawkeybtn->SetScanCode(aKeyInfo.iScanCode);
+
+    TItutBmp itutbmp = aKeyInfo.iForgroundBmp;
+
+    if (IsBmpValid(itutbmp))
+        {
+        CFbsBitmap* bmp = new (ELeave) CFbsBitmap;
+        CleanupStack::PushL(bmp);
+        bmp->Duplicate(itutbmp.iBmpHandle);
+        CleanupStack::Pop(bmp);
+        
+        if (IsMaskBmpValid(itutbmp))
+            {
+            CFbsBitmap* maskbmp = new (ELeave) CFbsBitmap;
+            CleanupStack::PushL(maskbmp);
+            maskbmp->Duplicate(itutbmp.iMaskBmpHandle);
+            CleanupStack::Pop(maskbmp);
+            
+            rawkeybtn->SetForegroundBmpL(bmp, maskbmp);
+            }
+        else
+            {
+            rawkeybtn->SetForegroundBmpL(bmp, NULL);
+            }    
+        }
+
+    rawkeybtn->SetTextL(aKeyInfo.iText);
+    rawkeybtn->SetTextFormat(aKeyInfo.iTextFormat);
+
+    TAddedRawKeyCtrl newctrl = {aKeyInfo.iPos, aKeyInfo.iInnerPos, 
+                                aKeyInfo.iTextFormat, rawkeybtn};
+
+    iUiLayout->AddControlL(rawkeybtn);
+    iAddedCtrls.AppendL(newctrl);
+    rawkeybtn->Draw();
+    iUiLayout->UpdateArea(rawkeybtn, rawkeybtn->Rect(), EFalse);
+    iNewCtrlId++;
+    }
+
+void CItutCustomizedRscMgr::ResizeAddedCtrls()
+    {
+    for (TInt i = 0; i < iAddedCtrls.Count(); i++)
+        {
+        iAddedCtrls[i].iCtrl->SetTextFormat(iAddedCtrls[i].iTextFormat);
+        iAddedCtrls[i].iCtrl->SizeChanged(
+                     TItutDataConverter::AnyToRect(
+                        iLayoutContext->DataMgr()->RequestData(iAddedCtrls[i].iPos)), 
+                     TItutDataConverter::AnyToRect(
+                        iLayoutContext->DataMgr()->RequestData(iAddedCtrls[i].iInnerPos)),
+                     ETrue);
+        }
+    }
+
+TInt CItutCustomizedRscMgr::AddDimmedCtrl(CFepUiBaseCtrl* aCtrl)
+    {
+    if (!aCtrl)
+        {
+        return KErrNone;
+        }
+    
+    if (iDimmedCtrls.Find(aCtrl) == KErrNotFound)
+        {
+        return iDimmedCtrls.Append(aCtrl);
+        }
+
+    return KErrNone;
+    }
+    
+TInt CItutCustomizedRscMgr::AddDimmedVKey(CVirtualKey* aKey)
+    {
+    if (!aKey)
+        {
+        return KErrNone;
+        }
+    
+    if (iDimmedVKeys.Find(aKey) == KErrNotFound)
+        {
+        return iDimmedVKeys.Append(aKey);
+        }
+    
+    return KErrNone;    
+    }
+
+TInt CItutCustomizedRscMgr::AddHidedCtrl(CFepUiBaseCtrl* aCtrl)
+    {
+    if (!aCtrl)
+        {
+        return KErrNone;
+        }
+
+    if (iHidedCtrls.Find(aCtrl) == KErrNotFound)
+        {
+        aCtrl->Hide(ETrue);
+        return iHidedCtrls.Append(aCtrl);
+        }
+
+    return KErrNone;    
+    }
+
+CItutCustomizedRscMgr::CItutCustomizedRscMgr(
+    CFepUiLayout* aUiLayout, MItutLayoutContext* aLayoutContext)
+    :iUiLayout(aUiLayout), 
+     iLayoutContext(aLayoutContext),
+     iNewCtrlId(ECtrlIdLastStdCtrl)
+    {
+    }
+
+void CItutCustomizedRscMgr::ConstructL()
+    {
+    }
+
+TBool CItutCustomizedRscMgr::IsBmpValid(const TItutBmp& aBmp)
+    {
+    return aBmp.iBmpHandle != KInvalidBmp;
+    }
+
+TBool CItutCustomizedRscMgr::IsMaskBmpValid(const TItutBmp& aMaskBmp)
+    {
+    return aMaskBmp.iMaskBmpHandle != KInvalidBmp;
+    }
+
+TInt CItutCustomizedRscMgr::FindRawKeyBtn(TInt aScanCode)
+    {
+    for (TInt i = 0; i < iAddedCtrls.Count(); i++)
+        {
+        CAknFepCtrlRawKeyButton* rawkeybtn = 
+                                      static_cast<CAknFepCtrlRawKeyButton*>(iAddedCtrls[i].iCtrl);
+        if (rawkeybtn->ScanCode() == aScanCode)
+            {
+            return i;
+            }
+        }
+
+    return KErrNotFound;
+    }
+
+void CItutCustomizedRscMgr::ShowRawKeyBtn(TInt aScanCode, TBool aShow)
+    {
+    for (TInt i = 0; i < iAddedCtrls.Count(); i++)
+        {
+        CAknFepCtrlRawKeyButton* rawkeybtn = 
+                                      static_cast<CAknFepCtrlRawKeyButton*>(iAddedCtrls[i].iCtrl);
+        if (rawkeybtn->ScanCode() == aScanCode)
+            {
+            rawkeybtn->Hide(!aShow);
+            return;
+            }
+        }
+    }
+
+// End Of File