uifw/AvKon/src/aknqueryeditorindicator.cpp
changeset 0 2f259fa3e83a
child 4 8ca85d2f0db7
equal deleted inserted replaced
-1:000000000000 0:2f259fa3e83a
       
     1 /*
       
     2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <barsread.h>
       
    20 #include "aknenv.h"
       
    21 #include "avkon.hrh"
       
    22 #include <avkon.rsg>
       
    23 #include "AknUtils.h"
       
    24 #include "aknqueryeditorindicator.h"
       
    25 #include "aknQueryControl.h"
       
    26 
       
    27 #include <AknTasHook.h> // for testability hooks
       
    28 //
       
    29 // CAknQueryEditIndicator
       
    30 //  Handles editor indicator for queries
       
    31 CAknQueryEditIndicator* CAknQueryEditIndicator::NewL(CCoeControl* aControl)
       
    32     {
       
    33     CAknQueryEditIndicator* self = new(ELeave)CAknQueryEditIndicator();
       
    34     CleanupStack::PushL(self);
       
    35     self->ConstructL(aControl);
       
    36     CleanupStack::Pop();    //self
       
    37     AKNTASHOOK_ADDL( self, "CAknQueryEditIndicator" );
       
    38     return self;
       
    39     }
       
    40 
       
    41 CAknQueryEditIndicator::~CAknQueryEditIndicator()
       
    42     {
       
    43     AKNTASHOOK_REMOVE();
       
    44     }
       
    45 
       
    46 CAknQueryEditIndicator::CAknQueryEditIndicator()
       
    47     : CAknIndicatorContainer(CAknIndicatorContainer::EQueryEditorIndicators),
       
    48     iQueryType(-1)
       
    49     {
       
    50     }
       
    51 
       
    52 void CAknQueryEditIndicator::ConstructL(CCoeControl* aControl)
       
    53     {
       
    54     if ( CAknEnv::Static()->TransparencyEnabled() )
       
    55         {
       
    56         // In transparency everything broke when this had its own
       
    57         // window.
       
    58         SetContainerWindowL( *aControl );
       
    59         }
       
    60     else
       
    61         {
       
    62         CreateWindowL(aControl);
       
    63         }
       
    64     
       
    65     TResourceReader reader;
       
    66     iCoeEnv->CreateResourceReaderLC(reader, R_AVKON_NAVI_PANE_EDITOR_INDICATORS);
       
    67     ConstructFromResourceL(reader);
       
    68     CleanupStack::PopAndDestroy();  // resource reader
       
    69 
       
    70     // Set to zero size - derived queries must set extent in PreDynInitLayout
       
    71     SetExtent(TPoint(0,0), TSize(0,0));
       
    72     ActivateL();
       
    73     }
       
    74 
       
    75 void CAknQueryEditIndicator::SetState(TAknEditingState aState)
       
    76     {
       
    77     iState = aState;
       
    78     if (Observer())
       
    79     	{
       
    80     	Observer()->HandleControlEventL( this, MCoeControlObserver::EEventStateChanged );
       
    81     	}
       
    82     
       
    83     if ( iFlags.IsSet(CAknQueryControl::EEditorIndicatorOff) )
       
    84         {
       
    85         return;
       
    86         }
       
    87 
       
    88     if ( AknLayoutUtils::Variant() == EEuropeanVariant )
       
    89         {
       
    90         TBool t9IsOn = ((aState >= ET9Upper) && (aState <= ET9Shifted) || 
       
    91             aState == ET9FarsiAndUrdu || aState == ET9Arabic || aState == ET9Hebrew 
       
    92             || aState == ET9Thai || aState == EIndicatorStatePredictiveHindi
       
    93 #ifdef RD_MARATHI
       
    94             || aState == EIndicatorStatePredictiveMarathi
       
    95 #endif
       
    96             );
       
    97         TBool upper = (( aState == ET9Upper) || ( aState == EMultitapUpper));
       
    98         TBool lower = (( aState == ET9Lower) || ( aState == EMultitapLower));
       
    99         TBool shifted = (( aState == ET9Shifted) || ( aState == EMultitapShifted));
       
   100         TBool arabic = (( aState == ET9Arabic ) || (aState == EMultitapArabic ));
       
   101         TBool hebrew = (( aState == ET9Hebrew ) || (aState == EMultitapHebrew ));
       
   102         TBool farsiandurdu = (( aState == ET9FarsiAndUrdu ) || (aState == EMultitapFarsiAndUrdu ));
       
   103 
       
   104     	TBool hindi = (( aState == EIndicatorStatePredictiveHindi ) || (aState == EIndicatorStateMultitapHindi ));
       
   105 
       
   106         TBool thai = (( aState == ET9Thai ) || (aState == EMultitapThai ));
       
   107 #ifdef RD_MARATHI
       
   108     	TBool marathi = (( aState == EIndicatorStatePredictiveMarathi ) || (aState == EIndicatorStateMultitapMarathi ));
       
   109 #endif
       
   110 
       
   111         SetIndicator(EAknNaviPaneEditorIndicatorTextCase, 
       
   112             shifted ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   113         SetIndicator(EAknNaviPaneEditorIndicatorLowerCase, 
       
   114             lower ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   115         SetIndicator(EAknNaviPaneEditorIndicatorUpperCase, 
       
   116             upper ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   117         SetIndicator(EAknNaviPaneEditorIndicatorArabicCase, 
       
   118             arabic ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   119         SetIndicator(EAknNaviPaneEditorIndicatorHebrewCase, 
       
   120             hebrew ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   121         SetIndicator(EAknNaviPaneEditorIndicatorFarsiAndUrduCase, 
       
   122             farsiandurdu
       
   123             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   124 
       
   125         // for Hindi ( One of a call for setindicator for Hindi Language needs 
       
   126 		// to be removed)    
       
   127         SetIndicator(EAknNaviPaneEditorIndicatorDevanagariCase,
       
   128         	hindi
       
   129         	? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse); 
       
   130         SetIndicator(EAknNaviPaneEditorIndicatorDevanagariIndicNumberCase, 
       
   131             (aState == EDevanagariIndicNumeric) ? EAknIndicatorStateOn : EAknIndicatorStateOff, 
       
   132             EFalse);	   
       
   133 
       
   134 SetIndicator(EAknNaviPaneEditorIndicatorThai, 
       
   135             thai
       
   136             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse); 
       
   137 
       
   138 #ifdef RD_MARATHI
       
   139         SetIndicator(EAknNaviPaneEditorIndicatorDevanagariCase,
       
   140         	marathi
       
   141         	? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse); 
       
   142         SetIndicator(EAknNaviPaneEditorIndicatorDevanagariIndicNumberCase, 
       
   143             (aState == EDevanagariIndicNumeric) ? EAknIndicatorStateOn : EAknIndicatorStateOff, 
       
   144             EFalse);
       
   145 #endif
       
   146 
       
   147 #ifdef RD_HINDI_PHONETIC_INPUT
       
   148 SetIndicator(EAknNaviPaneEditorIndicatorDevanagariPhoneticUpperCase,
       
   149             (aState == EIndicatorStateHindiPhoneticUpper) ? EAknIndicatorStateOn : EAknIndicatorStateOff,
       
   150             EFalse); 
       
   151         SetIndicator(EAknNaviPaneEditorIndicatorDevanagariPhoneticLowerCase, 
       
   152             (aState == EIndicatorStateHindiPhoneticLower) ? EAknIndicatorStateOn : EAknIndicatorStateOff, 
       
   153             EFalse);
       
   154 #endif
       
   155 
       
   156         SetIndicator(EAknNaviPaneEditorIndicatorNumberCase, 
       
   157             (aState == ENumeric) ? EAknIndicatorStateOn : EAknIndicatorStateOff, 
       
   158             EFalse);    
       
   159         SetIndicator(EAknNaviPaneEditorIndicatorArabicIndicNumberCase, 
       
   160             (aState == EArabicIndicNumeric) ? EAknIndicatorStateOn : EAknIndicatorStateOff, 
       
   161             EFalse);    
       
   162         SetIndicator(EAknNaviPaneEditorIndicatorQuery, 
       
   163             (t9IsOn || aState == EStateNone)  ? 
       
   164             EAknIndicatorStateOff : EAknIndicatorStateOn, EFalse);
       
   165         SetIndicator(EAknNaviPaneEditorIndicatorT9, 
       
   166             t9IsOn ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   167         }
       
   168     else    // APAC
       
   169         {
       
   170         TBool query = !( aState == EIndicatorStatePinyin ||
       
   171             aState == EIndicatorStateZhuyin ||
       
   172 			aState == EIndicatorStateZhuyinFind ||
       
   173 			aState == EIndicatorStateStrokeFind ||
       
   174             aState == EIndicatorStateStroke ||
       
   175 			aState == EIndicatorStateCangJie ||
       
   176             aState == EIndicatorStateStrokeTrad ||
       
   177             aState == EIndicatorStatePinyinPhrase ||
       
   178             aState == EIndicatorStateZhuyinPhrase ||
       
   179             aState == EIndicatorStateStrokePhrase ||
       
   180             aState == EIndicatorStateStrokeTradPhrase ||
       
   181             aState == EIndicatorStateJapanesePredictive); 
       
   182         TBool thai = (( aState == ET9Thai ) || (aState == EMultitapThai ));
       
   183 
       
   184 		TBool hindi = (( aState == EIndicatorStatePredictiveHindi ) || (aState == EIndicatorStateMultitapHindi ));
       
   185 
       
   186 #ifdef RD_MARATHI 
       
   187         TBool marathi = (( aState == EIndicatorStatePredictiveMarathi ) || (aState == EIndicatorStateMultitapMarathi ));
       
   188 #endif
       
   189                
       
   190         SetIndicator(EAknNaviPaneEditorIndicatorNumberCase, 
       
   191             (aState == ENumeric) 
       
   192             ? EAknIndicatorStateOn : EAknIndicatorStateOff,  EFalse);
       
   193         
       
   194         TBool upper = (( aState == ET9Upper) || ( aState == EMultitapUpper));
       
   195         TBool lower = (( aState == ET9Lower) || ( aState == EMultitapLower));
       
   196         TBool shifted = (( aState == ET9Shifted) || ( aState == EMultitapShifted));
       
   197         SetIndicator(EAknNaviPaneEditorIndicatorLowerCase, 
       
   198             lower
       
   199             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   200         SetIndicator(EAknNaviPaneEditorIndicatorUpperCase, 
       
   201             upper
       
   202             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);        
       
   203         SetIndicator(EAknNaviPaneEditorIndicatorTextCase, 
       
   204             shifted 
       
   205             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   206         
       
   207         TBool predictiveMode = 
       
   208             (( aState == EIndicatorStatePinyin) ||
       
   209              ( aState == EIndicatorStateZhuyin) ||
       
   210              ( aState == EIndicatorStateZhuyinFind) ||
       
   211              ( aState == EIndicatorStateStrokeFind) ||
       
   212              ( aState == EIndicatorStateStroke) || 
       
   213 			 ( aState == EIndicatorStateCangJie) ||
       
   214              ( aState == EIndicatorStateStrokeTrad) || 
       
   215              ( aState == EIndicatorStatePinyinPhrase) ||
       
   216              ( aState == EIndicatorStateZhuyinPhrase) ||
       
   217              ( aState == EIndicatorStateStrokePhrase) ||  
       
   218              ( aState == EIndicatorStateStrokeTradPhrase) ||           
       
   219              ( aState == ET9Upper) ||
       
   220              ( aState == ET9Shifted) ||
       
   221              ( aState == ET9Lower) ||
       
   222              ( aState == ET9Arabic) ||
       
   223              ( aState == ET9Hebrew) ||
       
   224              ( aState == ET9Thai) ||
       
   225 
       
   226              ( aState == EIndicatorStatePredictiveHindi) ||
       
   227 
       
   228 #ifdef RD_MARATHI
       
   229              ( aState == EIndicatorStatePredictiveMarathi) ||
       
   230 #endif
       
   231              ( aState == EIndicatorStateJapanesePredictive) ||
       
   232              ( aState == ET9UpperVietnamese) ||
       
   233              ( aState == ET9LowerVietnamese) ||
       
   234              ( aState == EMultitapShiftedVietnamese) );                     
       
   235                 
       
   236         SetIndicator(EAknNaviPaneEditorIndicatorQuery, 
       
   237             (!predictiveMode) && query && (aState != EStateNone)
       
   238             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   239         SetIndicator(EAknNaviPaneEditorIndicatorT9,             
       
   240             predictiveMode
       
   241             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   242             
       
   243         SetIndicator(EAknNaviPaneEditorIndicatorThai, 
       
   244             thai
       
   245             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);    
       
   246         SetIndicator(EAknNaviPaneEditorIndicatorPinyin, 
       
   247             aState == EIndicatorStatePinyin 
       
   248             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   249         SetIndicator(EAknNaviPaneEditorIndicatorPinyinPhrase, 
       
   250             aState == EIndicatorStatePinyinPhrase 
       
   251             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);            
       
   252         SetIndicator(EAknNaviPaneEditorIndicatorZhuyin, 
       
   253             aState == EIndicatorStateZhuyin 
       
   254             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   255         SetIndicator(EAknNaviPaneEditorIndicatorZhuyinPhrase, 
       
   256             aState == EIndicatorStateZhuyinPhrase 
       
   257             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   258 		// for japanese
       
   259         SetIndicator(EAknNaviPaneEditorIndicatorJapaneseHiraganaKanji, 
       
   260             (aState == EIndicatorStateHiraganaKanji || aState == EIndicatorStateJapanesePredictive)
       
   261             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   262         SetIndicator(EAknNaviPaneEditorIndicatorJapaneseFullKatakana, 
       
   263             aState == EIndicatorStateFullKatakana 
       
   264             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   265         SetIndicator(EAknNaviPaneEditorIndicatorJapaneseHalfKatakana, 
       
   266             aState == EIndicatorStateHalfKatakana 
       
   267             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   268         SetIndicator(EAknNaviPaneEditorIndicatorJapaneseFullTextAlphabet, 
       
   269             aState == EIndicatorStateFullLatinText 
       
   270             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   271         SetIndicator(EAknNaviPaneEditorIndicatorJapaneseFullUpperAlphabet, 
       
   272             aState == EIndicatorStateFullLatinUpper 
       
   273             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   274         SetIndicator(EAknNaviPaneEditorIndicatorJapaneseFullLowerAlphabet, 
       
   275             aState == EIndicatorStateFullLatinLower 
       
   276             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   277         SetIndicator(EAknNaviPaneEditorIndicatorJapaneseFullNumeric, 
       
   278             aState == EIndicatorStateFullNumeric 
       
   279             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   280         SetIndicator(EAknNaviPaneEditorIndicatorJapaneseHiragana, 
       
   281             aState == EIndicatorStateHiragana 
       
   282             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   283 
       
   284         SetIndicator(EAknNaviPaneEditorIndicatorStroke, 
       
   285             aState == EIndicatorStateStroke 
       
   286             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   287 
       
   288         SetIndicator(EAknNaviPaneEditorIndicatorStrokeTradPhrase, 
       
   289             aState == EIndicatorStateStrokeTradPhrase 
       
   290             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   291             
       
   292         SetIndicator(EAknNaviPaneEditorIndicatorStrokePhrase, 
       
   293             aState == EIndicatorStateStrokePhrase 
       
   294             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   295 
       
   296         SetIndicator(EAknNaviPaneEditorIndicatorCangJie, 
       
   297             aState == EIndicatorStateCangJie 
       
   298             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   299 
       
   300         SetIndicator(EAknNaviPaneEditorIndicatorStrokeTrad, 
       
   301             aState == EIndicatorStateStrokeTrad 
       
   302             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   303 
       
   304         SetIndicator(EAknNaviPaneEditorIndicatorZhuyinFind, 
       
   305             aState == EIndicatorStateZhuyinFind 
       
   306             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   307         SetIndicator(EAknNaviPaneEditorIndicatorStrokeFind, 
       
   308             aState == EIndicatorStateStrokeFind 
       
   309             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   310 
       
   311 		// for Hindi ( One of a call for setindicator for Hindi Language needs 
       
   312 		// to be removed)
       
   313 		SetIndicator(EAknNaviPaneEditorIndicatorDevanagariCase,
       
   314         	hindi
       
   315         	? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   316         SetIndicator(EAknNaviPaneEditorIndicatorDevanagariIndicNumberCase, 
       
   317             (aState == EDevanagariIndicNumeric) ? EAknIndicatorStateOn : EAknIndicatorStateOff, 
       
   318             EFalse);	
       
   319 
       
   320         SetIndicator(EAknNaviPaneEditorIndicatorKoreanHangul, 
       
   321             aState == EIndicatorStateHangul 
       
   322             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   323 
       
   324 #ifdef RD_MARATHI
       
   325 		SetIndicator(EAknNaviPaneEditorIndicatorDevanagariCase,
       
   326         	marathi
       
   327         	? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   328         SetIndicator(EAknNaviPaneEditorIndicatorDevanagariIndicNumberCase, 
       
   329             (aState == EDevanagariIndicNumeric) ? EAknIndicatorStateOn : EAknIndicatorStateOff, 
       
   330             EFalse);	
       
   331 #endif        
       
   332         }
       
   333 
       
   334     SetIndicator(EAknNaviPaneEditorIndicatorQwertyShift, 
       
   335         aState == EQwertyShift ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   336 
       
   337 #ifdef RD_INTELLIGENT_TEXT_INPUT
       
   338 	SetIndicator(EAknNaviPaneEditorIndicatorFnKeyPressed,
       
   339             (aState == EFnKeyPressed) ? EAknIndicatorStateOn : EAknIndicatorStateOff,
       
   340             EFalse); 
       
   341     SetIndicator(EAknNaviPaneEditorIndicatorFnKeyLocked, 
       
   342             (aState == EFnKeyLocked) ? EAknIndicatorStateOn : EAknIndicatorStateOff, 
       
   343             EFalse);
       
   344 #endif
       
   345     // for Vietnamese
       
   346     TBool upperVietnamese = ( (aState == ET9UpperVietnamese) || (aState == EMultitapUpperVietnamese) );
       
   347     TBool lowerVietnamese = ( (aState == ET9LowerVietnamese) || (aState == EMultitapLowerVietnamese) );
       
   348     TBool shiftedVietnamese = ( (aState == ET9ShiftedVietnamese) || (aState == EMultitapShiftedVietnamese) );
       
   349 
       
   350     SetIndicator( EAknNaviPaneEditorIndicatorVietnameseTextCase,
       
   351         shiftedVietnamese ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse );
       
   352     SetIndicator( EAknNaviPaneEditorIndicatorVietnameseLowerCase,
       
   353         lowerVietnamese ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse );
       
   354     SetIndicator( EAknNaviPaneEditorIndicatorVietnameseUpperCase,
       
   355         upperVietnamese ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse );
       
   356      
       
   357     if( CAknEnv::Static()->TransparencyEnabled() )
       
   358         {
       
   359         CWindowGc& controlGc = SystemGc();
       
   360         CWindowGc& systemGc = iCoeEnv->SystemGc();
       
   361         // If Gc's do not match there is ongoing transition effect.
       
   362         // Drawing indicator will cause background flicker in that 
       
   363         // situation.
       
   364         if( &controlGc == &systemGc )
       
   365             {
       
   366             DrawDeferred();
       
   367             }
       
   368         }
       
   369     else
       
   370         {
       
   371         DrawDeferred();
       
   372         }
       
   373     }
       
   374 
       
   375 CAknIndicatorContainer* CAknQueryEditIndicator::IndicatorContainer()
       
   376     {
       
   377     return this;
       
   378     }
       
   379 
       
   380 
       
   381 void CAknQueryEditIndicator::SetIndicator(TInt aIndicator, TInt aState, TBool aDrawNow)
       
   382     {
       
   383     SetIndicatorState(TUid::Uid(aIndicator), aState, aDrawNow);
       
   384     }
       
   385 
       
   386 void CAknQueryEditIndicator::SetFlags(TBitFlags16 aFlags)
       
   387     {
       
   388     iFlags = aFlags;
       
   389     }
       
   390     
       
   391 TAknEditingState CAknQueryEditIndicator::State()
       
   392 	{
       
   393 	return iState;
       
   394 	}
       
   395 	
       
   396 void CAknQueryEditIndicator::SetQueryType(TInt aQueryType)
       
   397 	{
       
   398 	iQueryType = aQueryType;
       
   399 	}
       
   400 	
       
   401 void CAknQueryEditIndicator::HandlePointerEventL( const TPointerEvent& aPointerEvent )
       
   402 	{
       
   403 	CAknIndicatorContainer::HandlePointerEventL( aPointerEvent );
       
   404 	}
       
   405 
       
   406 // End of File