diff -r 000000000000 -r eb1f2e154e89 textinput/peninputgenericitut/src/peninputitutcustomizationresourcemgr.cpp --- /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 +#include +#include +#include +#include +#include + +#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(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(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(iAddedCtrls[i].iCtrl); + if (rawkeybtn->ScanCode() == aScanCode) + { + rawkeybtn->Hide(!aShow); + return; + } + } + } + +// End Of File