textinput/peninputcommonctrls/src/peninputselectionlist/peninputlayoutinputmodechoice.cpp
changeset 0 eb1f2e154e89
child 9 e6a39382bb9c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrls/src/peninputselectionlist/peninputlayoutinputmodechoice.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,392 @@
+/*
+* 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:  Implement of touch input mode switch
+*
+*/
+ 
+  
+#include <peninputlayoutchoicelist.h>
+#include <peninputlayout.h>
+#include <AknIconUtils.h>
+#include <AknLayoutDef.h>
+#include <AknUtils.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <barsread.h>
+#include <AknsUtils.h>
+#include <peninputmodeswitchutilsnew.rsg>
+#include <bautils.h>
+#include <AknFepGlobalEnums.h> 
+#include <peninputlayoutinputmodechoice.h>
+#include <AknFepInternalCRKeys.h>
+#include <centralrepository.h>
+#include <aknappui.h> 
+
+// CONSTANT 
+const TInt KInvalidImg = -1 ;
+_LIT(KAknUtilsResourceFileName, "z:\\resource\\peninputmodeswitchutilsnew.rsc");
+const TInt KCCMask(0x00000fff);
+
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CPeninputLayoutInputmodelChoice::CPeninputLayoutInputmodelChoice(CFepUiLayout* aUiLayout, 
+            TInt aControlId,TPluginInputMode aInputMode) 
+: CPeninputCommonChoiceList( aUiLayout, aControlId, KAknsIIDNone, KAknsIIDNone, EAutoFitLength )
+    { 
+    iConstructed = EFalse;
+    iUiLayout = aUiLayout;
+    iCurPluginInputMode = aInputMode;
+    iInputLanguage = ELangTest;
+    iSecretEditor = EFalse;       
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPeninputLayoutInputmodelChoice* CPeninputLayoutInputmodelChoice::NewL(
+    CFepUiLayout* aUiLayout,
+    TInt aControlId, TPluginInputMode aInputMode)
+    {
+    CPeninputLayoutInputmodelChoice *self = new (ELeave) 
+        CPeninputLayoutInputmodelChoice(aUiLayout, aControlId, aInputMode);
+    
+    CleanupStack::PushL(self);
+    self->CustomConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPeninputLayoutInputmodelChoice::~CPeninputLayoutInputmodelChoice()
+    {
+    iInputModeItems.Close();
+    delete iAknFepRepository;
+    }
+
+// ---------------------------------------------------------------------------
+// Pop up touch input switch list
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputLayoutInputmodelChoice::PopUpSwitchListL( const TRect& aRtControl )
+    {
+    ResetListItemL();
+
+    if (ItemsCount() > 0 && ItemByIndex(0))
+        {
+        Display(aRtControl);    
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Initialize internal control
+// ---------------------------------------------------------------------------
+//
+void CPeninputLayoutInputmodelChoice::DoInitializeControlL()
+    {
+    if (iConstructed)
+        {
+        return;
+        }
+    iAknFepRepository = CRepository::NewL(KCRUidAknFep);
+        
+    SizeChanged();
+    
+    RFs fsSession;
+
+    User::LeaveIfError(fsSession.Connect());
+    CleanupClosePushL(fsSession);
+
+    RResourceFile rsFile;
+    
+    TFileName resourceName(KAknUtilsResourceFileName);
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    BaflUtils::NearestLanguageFile(fsSession, resourceName);
+    
+    rsFile.OpenL(fsSession, resourceName);
+    CleanupClosePushL(rsFile);
+    
+    // Create choice list
+    TResourceReader reader;
+
+    HBufC8* rBuffer = rsFile.AllocReadLC(PENINPUTMODE_SWITCH_CHOICELIST & KCCMask); 
+    reader.SetBuffer(rBuffer);
+
+    TPtrC bmpFileName = reader.ReadTPtrC();
+    TInt32 imgMajorSkinId = reader.ReadInt32();
+
+    if (CreateItemIconL(reader, &iPopupWndBgImg, bmpFileName, imgMajorSkinId))
+        {
+       SetBackgroundBitmapL(iPopupWndBgImg);
+        }
+
+    if (CreateItemIconL(reader, &iPopupWndFocusImg, bmpFileName, imgMajorSkinId))
+        {
+        SetFocusBmp(iPopupWndFocusImg);
+        }
+    	
+    CleanupStack::PopAndDestroy(1); 
+    
+    // read name to list
+    
+    CreateChoiceItemL( reader, rsFile );
+/*    CreateChoiceItemL(iInputModeItem[EPenInputHwr], EPluginInputModeHwr, 
+                      R_PENINPUTMODE_NAMES, reader, rsFile);
+                      
+    CreateChoiceItemL(iInputModeItem[EPenInputVkb], EPluginInputModeVkb, 
+                      R_PENINPUTMODE_VKB, reader, rsFile);
+                      
+    CreateChoiceItemL(iInputModeItem[EPenInputItut], EPluginInputModeItut, 
+                      R_PENINPUTMODE_FINGERITUT, reader, rsFile);
+                      
+    CreateChoiceItemL(iInputModeItem[EPenInputFSc], EPluginInputModeFSc,
+                      R_PENINPUTMODE_FULLHWR, reader, rsFile);
+    
+*/
+    CleanupStack::PopAndDestroy(2);
+    
+    iConstructed = ETrue;  
+    }
+
+// ---------------------------------------------------------------------------
+// Application size Changed
+// ---------------------------------------------------------------------------
+//
+void CPeninputLayoutInputmodelChoice::SizeChanged()    
+    {
+    /*
+    if ( Hiden() )
+        {
+        iChoiceList->CloseWindow();
+        }
+    */    
+    TRect mainPaneRect = MainPaneRect();
+        
+    TAknWindowLineLayout choiceWnd = 
+        AknLayoutScalable_Avkon::popup_choice_list_window(1).LayoutLine();
+    
+    TAknLayoutRect choiceRect;
+    choiceRect.LayoutRect(mainPaneRect, choiceWnd);
+
+   iItemRect = TRect(
+        0, 0, choiceRect.Rect().Width(),
+        AknLayoutScalable_Avkon::list_single_choice_list_pane(0).LayoutLine().iH);
+
+    TAknTextLineLayout choiceTextLayout = 
+        AknLayoutScalable_Avkon::list_single_choice_list_pane_t1(1).LayoutLine();
+
+    const CFont* font = AknLayoutUtils::FontFromId(choiceTextLayout.iFont, NULL);
+ 
+    SetFont(font);
+    SetItemRect(iItemRect, iItemRect);
+
+    const TInt leftMargin = choiceTextLayout.il;
+   
+    SetMarginAndBaseline(leftMargin,font->HeightInPixels());
+    SetFontColor(AKN_LAF_COLOR_STATIC(choiceTextLayout.iC));
+
+    if (iPopupWndBgImg)
+    	{
+    	AknIconUtils::SetSize(iPopupWndBgImg, 
+    	                      TSize(iItemRect.Width(), iItemRect.Height() * 3), 
+    	                      EAspectRatioNotPreserved);
+    	}
+    
+    if (iPopupWndFocusImg)
+    	{
+    	AknIconUtils::SetSize(iPopupWndFocusImg, 
+    	                      TSize(iItemRect.Width(), iItemRect.Height() * 3), 
+    	                      EAspectRatioNotPreserved);
+    	}
+
+    iPopupItemSize = iItemRect.Size();    
+    }    
+    
+// ---------------------------------------------------------------------------
+// Symbian second-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CPeninputLayoutInputmodelChoice::CustomConstructL( )
+    {
+    //CFepLayoutChoiceList::NewL(iUiLayout, aControlId);
+    // call base class construction
+    this->ConstructL();
+    
+    DoInitializeControlL();
+    }
+
+// ---------------------------------------------------------------------------
+// Insert choice item to input mode switch list
+// ---------------------------------------------------------------------------
+//
+void CPeninputLayoutInputmodelChoice::CreateChoiceItemL( TResourceReader &aReader, 
+                                                         RResourceFile& aRsFile )
+    {
+    HBufC8* rBuffer = aRsFile.AllocReadLC( R_PENINPUTMODE_NAMES & KCCMask );
+    aReader.SetBuffer(rBuffer);
+    
+    TInt index;
+    TInt number;
+    number = aReader.ReadInt16();
+    
+    CFepLayoutChoiceList::SItem item;
+    for (index = 0; index < number ; index++)
+        {
+        item.iCommand = aReader.ReadInt32();
+        //TPtrC ptr = aReader.ReadTPtrC();
+        HBufC* buf = aReader.ReadHBufCL();
+        item.iText.Copy( buf->Des() );
+        delete buf;
+        iInputModeItems.AppendL( item );
+        }
+
+    CleanupStack::PopAndDestroy(1);
+    }
+
+// ---------------------------------------------------------------------------
+// Create choice item icon
+// ---------------------------------------------------------------------------
+//
+TBool CPeninputLayoutInputmodelChoice::CreateItemIconL(TResourceReader &aReader, 
+    CFbsBitmap** aImg, TPtrC& aBmpFileName, TInt32 aMajorSkinId)
+    {
+    MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
+    
+    const TInt bmpId = aReader.ReadInt16();
+    const TInt bmpMaskId = aReader.ReadInt16();
+    const TInt bmpSkinId = aReader.ReadInt16();
+
+    TAknsItemID id;
+    id.Set(TInt(aMajorSkinId), bmpSkinId);
+    
+    if (bmpId != KInvalidImg)
+    	{
+        AknsUtils::CreateIconL(skinInstance,
+                               id,
+                               *aImg,
+                               aBmpFileName,
+                               bmpId);
+                                
+        AknIconUtils::SetSize(*aImg, iPopupItemSize, EAspectRatioNotPreserved); 
+    	
+    	return ETrue;
+    	}
+    	
+    return EFalse;
+    }    
+
+    
+// ---------------------------------------------------------------------------
+// Get main pane rect
+// ---------------------------------------------------------------------------
+//
+TRect CPeninputLayoutInputmodelChoice::MainPaneRect()
+    {
+    TAknWindowLineLayout appWnd; 
+    TAknWindowLineLayout mainPane;
+    TAknLayoutRect mainPaneLayout;
+             
+    appWnd = AknLayoutScalable_Avkon::application_window( 0 ).LayoutLine();
+
+    TInt id = appWnd.iW > appWnd.iH ? 4 : 1;
+    
+    mainPane = AknLayoutScalable_Avkon::main_pane(id).LayoutLine();
+    mainPaneLayout.LayoutRect(appWnd.Rect(), mainPane);
+
+    return mainPaneLayout.Rect();
+    }
+
+
+// ---------------------------------------------------------------------------
+// Reset choice list item
+// ---------------------------------------------------------------------------
+//
+void CPeninputLayoutInputmodelChoice::ResetListItemL()
+    {
+    TInt layouts = iUiLayout->GetEnabledPluginMode();
+        
+    ClearItemsL();
+    
+    for ( int i = 0; i < iInputModeItems.Count(); i++ )
+        {
+        if ( layouts & iInputModeItems[i].iCommand  )
+            {
+            InsertListItemL( iInputModeItems[i], iInputModeItems[i].iCommand );
+            }
+        }
+       
+    SetListColumnNumWithLafL( ItemsCount() );
+    }
+
+// ---------------------------------------------------------------------------
+// Insert list item
+// ---------------------------------------------------------------------------
+//
+void CPeninputLayoutInputmodelChoice::InsertListItemL( const CFepLayoutChoiceList::SItem& item,
+     TInt aInputMode)
+    {
+    TInt value = 0;
+    if (iAknFepRepository)
+        {
+        iAknFepRepository->Get(KAknFepInputTxtLang, value);
+        
+        iInputLanguage = TLanguage(value);
+        }
+
+    if (iSecretEditor && (aInputMode == EPluginInputModeHwr ||
+        aInputMode == EPluginInputModeFSc || aInputMode == EPluginInputModeFingerHwr))
+        {
+        return;
+        }
+
+    // Added for <Single Click>. Do not insert current input mode to the list
+    if (iUiLayout && (iUiLayout->PenInputType() == aInputMode))
+    	{
+    	return;
+    	}
+    
+    // if current input mode is in choice list, add item to it
+    // (!ItemByCommand(aInputMode))
+    if(FindCommand(aInputMode) < 0)
+        {
+        AddItemL( item );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Set current editor is secure
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputLayoutInputmodelChoice::SetSecretEditor(TBool aSecret)
+    {
+    iSecretEditor = aSecret;
+    }    
+
+
+// ---------------------------------------------------------------------------
+// Get switch list rect
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TRect CPeninputLayoutInputmodelChoice::SwitchListRect()
+    {
+    return TRect(0,0,iItemRect.Width(), iItemRect.Height() * ItemsCount());
+    }
+    
+// End Of File