fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlInputPane.cpp
changeset 40 2cb9bae34d17
parent 31 f1bdd6b078d1
child 49 37f5d84451bd
equal deleted inserted replaced
31:f1bdd6b078d1 40:2cb9bae34d17
     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 *       Provides the CAknFepUICtrlInputPane methods.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 
       
    21 
       
    22 
       
    23 
       
    24 
       
    25 
       
    26 
       
    27 
       
    28 
       
    29 
       
    30 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
       
    31 #include <uikon/eikdefmacros.h>
       
    32 #endif
       
    33 #include <gulfont.h> 
       
    34 #include <eiklabel.h>
       
    35 #include <AknUtils.h>
       
    36 #include <AknsDrawUtils.h>
       
    37 #include <skinlayout.cdl.h>
       
    38 
       
    39 #include "AknFepUIAvkonCtrlInputPane.h"
       
    40 #include "AknFepUIAvkonCtrlPinyinPopup.h"
       
    41 #include "aknfepchineseuidataconv.h"
       
    42 #include "aknfepuilayoutdatamgr.h"
       
    43 
       
    44 CAknFepUICtrlInputPane* CAknFepUICtrlInputPane::NewL(RWindow& aParent, 
       
    45                                                      TInputPaneLayout aPaneLayout,
       
    46                                                      CAknFepUiLayoutDataMgr* aLafDataMgr )
       
    47     {
       
    48     CAknFepUICtrlInputPane* self = new(ELeave) CAknFepUICtrlInputPane(aPaneLayout,aLafDataMgr);
       
    49     CleanupStack::PushL(self);
       
    50     self->ConstructL(aParent);
       
    51     CleanupStack::Pop();
       
    52     return self;
       
    53     }
       
    54 
       
    55 CAknFepUICtrlInputPane::~CAknFepUICtrlInputPane()
       
    56     {
       
    57     delete iBuffer;
       
    58     delete iLabel;
       
    59     delete iLabelToneMark;
       
    60     }
       
    61 
       
    62 void CAknFepUICtrlInputPane::SetSizeChangedObserver(
       
    63     MAknFepUICtrlPinyinPopupSizeChangedObserver* aObserver)
       
    64     {
       
    65     iSizeChangedObserver = aObserver;
       
    66     }
       
    67 
       
    68 void CAknFepUICtrlInputPane::SetText(const TDesC& aDes)
       
    69     {
       
    70     // make sure that we only copy as many characters as we can show
       
    71     if(iLayout == ELayoutPhraseInputPane)
       
    72         {
       
    73         TPtrC newText = aDes.Right(CalculateMaxTextLength(aDes));        
       
    74         TPtr ptr = iBuffer->Des();
       
    75 
       
    76         if(ptr != newText)
       
    77             {
       
    78             ptr.Copy(newText);
       
    79             UpdateLabelContents();
       
    80 
       
    81             if(iLayout == ELayoutPhraseInputPane) 
       
    82                 {
       
    83                 iSizeChangedObserver->SelectionPopupSizeChanged(CAknFepUICtrlPinyinPopup::EMaxCandidates + 1); // indicate input pane layout
       
    84                 }
       
    85             DrawNow();
       
    86             }
       
    87         }
       
    88     else
       
    89         {
       
    90         TPtrC newText= aDes.Right(iMaxInputChars - EMaxToneMarkLength);
       
    91         TPtr ptr = iBuffer->Des();
       
    92 
       
    93         if(ptr != newText)
       
    94             {
       
    95             ptr.Copy(newText);
       
    96             UpdateLabelContents();
       
    97 
       
    98             if(iLayout == ELayoutPhraseInputPane) 
       
    99                 {
       
   100                 iSizeChangedObserver->SelectionPopupSizeChanged(CAknFepUICtrlPinyinPopup::EMaxCandidates + 1); // indicate input pane layout
       
   101                 }
       
   102             DrawNow();
       
   103             }
       
   104         }
       
   105     }
       
   106 
       
   107 void CAknFepUICtrlInputPane::GetText(TDes& aText) const
       
   108     {
       
   109     aText.Copy(*iBuffer);
       
   110     }
       
   111 
       
   112 void CAknFepUICtrlInputPane::SetHighlighted(TBool aHighlighted)
       
   113     {
       
   114     if(!COMPARE_BOOLS(iHighlighted, aHighlighted))
       
   115         {
       
   116         iHighlighted = aHighlighted;
       
   117         // need to change highlight colors
       
   118         LayoutContainedControls();
       
   119         DrawDeferred();
       
   120         }
       
   121     }
       
   122 
       
   123 TBool CAknFepUICtrlInputPane::Highlighted() const
       
   124     {
       
   125     return iHighlighted;
       
   126     }
       
   127 
       
   128 void CAknFepUICtrlInputPane::SetToneMark(const TDesC& aToneMark)
       
   129     {
       
   130     TPtrC newText = aToneMark.Left(EMaxToneMarkLength);
       
   131     TPtr tonePtr = iToneMarkBuffer.Des();
       
   132 
       
   133     if(tonePtr != newText)
       
   134         {
       
   135         tonePtr.Copy(newText);
       
   136         UpdateLabelContents();
       
   137         if(iLayout == ELayoutPhraseInputPane)
       
   138             {
       
   139             iSizeChangedObserver->SelectionPopupSizeChanged(CAknFepUICtrlPinyinPopup::EMaxCandidates + 1);
       
   140             }
       
   141         DrawDeferred();
       
   142         }
       
   143     }
       
   144 
       
   145 void CAknFepUICtrlInputPane::GetToneMark(TDes& aToneMark) const
       
   146     {
       
   147     TInt length = aToneMark.MaxLength();
       
   148     TPtrC toneMark = iToneMarkBuffer.Left(length);
       
   149     aToneMark.Copy(toneMark);
       
   150     }
       
   151 
       
   152 void CAknFepUICtrlInputPane::SetToneMarkValidity(TBool aValid)
       
   153     {
       
   154     if(!COMPARE_BOOLS(iToneMarkValidity, aValid))
       
   155         {
       
   156         iToneMarkValidity = aValid;
       
   157         LayoutContainedControls();
       
   158         UpdateLabelContents();
       
   159         DrawDeferred();
       
   160         }
       
   161     }
       
   162 
       
   163 void CAknFepUICtrlInputPane::SetLayoutIndex(TInt aIndex)
       
   164     {
       
   165     if(iLayoutIndex != aIndex)
       
   166         {
       
   167         iLayoutIndex = aIndex;
       
   168         LayoutContainedControls();
       
   169         }
       
   170     }
       
   171 
       
   172 void CAknFepUICtrlInputPane::SetOverrideFontId(TInt aFontId)
       
   173     {
       
   174     if(iFontId != aFontId)
       
   175         {
       
   176         iFontId = aFontId;
       
   177         // need to update the layout, and then force the text to be formatted
       
   178         LayoutContainedControls();
       
   179         UpdateLabelContents();
       
   180         DrawDeferred();
       
   181         }
       
   182     }
       
   183 
       
   184 void CAknFepUICtrlInputPane::MakeTextVisible(TBool aVisible)
       
   185     {
       
   186     if(aVisible)
       
   187         {
       
   188         UpdateLabelContents();
       
   189         }
       
   190     else
       
   191         {
       
   192         TRAP_IGNORE( 
       
   193             iLabel->SetTextL(KNullDesC);
       
   194             iLabelToneMark->SetTextL(KNullDesC);
       
   195             );
       
   196         }
       
   197     }
       
   198 
       
   199 TInt CAknFepUICtrlInputPane::LabelTextWidthInPixels() const
       
   200     {
       
   201     TAknLayoutText layoutText = 
       
   202             CAknFepChineseUIDataConv::AnyToLayoutText( iLafDataMgr->RequestData( ELayoutInputPaneText ));
       
   203     const CFont* font = layoutText.Font();
       
   204 
       
   205     TInt labelWidthInPixels = 0;
       
   206     if(font)
       
   207         {
       
   208         TBufC<EMaxInputCharsInputPane> buf1;
       
   209         TPtr ptr1 = buf1.Des();
       
   210         GetText(ptr1);
       
   211         TBufC<EMaxToneMarkLength> buf2;
       
   212         TPtr ptr2 = buf2.Des();
       
   213         GetToneMark(ptr2);
       
   214         labelWidthInPixels = font->TextWidthInPixels(ptr1); 
       
   215         labelWidthInPixels += font->TextWidthInPixels(ptr2);
       
   216         }
       
   217     TInt maxWidth = layoutText.TextRect().Width(); 
       
   218     labelWidthInPixels = labelWidthInPixels > maxWidth? maxWidth:labelWidthInPixels;
       
   219     return labelWidthInPixels;
       
   220     }
       
   221 
       
   222 void CAknFepUICtrlInputPane::SizeChanged()
       
   223     {
       
   224     LayoutContainedControls();
       
   225     }
       
   226 
       
   227 TInt CAknFepUICtrlInputPane::CountComponentControls() const
       
   228     {
       
   229     CCoeControl* controls[] = 
       
   230         {
       
   231         iLabel,
       
   232         iLabelToneMark
       
   233         } ;
       
   234 
       
   235     TInt count = 0 ;
       
   236     for (TUint ii = 0 ; ii < (sizeof(controls) / sizeof(CCoeControl*)) ; ii++)
       
   237         {
       
   238         if(controls[ii])
       
   239             {
       
   240             count++ ;
       
   241             }
       
   242         }
       
   243     return count ;
       
   244     }
       
   245 
       
   246 CCoeControl* CAknFepUICtrlInputPane::ComponentControl(TInt aIndex) const 
       
   247     {
       
   248     CCoeControl* controls[] = 
       
   249         {
       
   250         iLabel,
       
   251         iLabelToneMark
       
   252         } ;
       
   253 
       
   254     for (TUint ii = 0; (ii < sizeof(controls) / sizeof(CCoeControl*)) ; ii++)
       
   255         {
       
   256         if (controls[ii] && aIndex-- == 0)
       
   257             {
       
   258             return controls[ii] ;
       
   259             }
       
   260         }
       
   261     // shouldn't be called while no components.
       
   262     return NULL ;
       
   263     }
       
   264 
       
   265 void CAknFepUICtrlInputPane::Draw(const TRect& /*aRect*/) const
       
   266     {
       
   267     TBool skinnedDraw = EFalse;
       
   268     CWindowGc& gc = SystemGc();
       
   269 
       
   270     MAknsSkinInstance* skin = AknsUtils::SkinInstance();
       
   271     if(iHighlighted)
       
   272         {
       
   273         TRect outerRect;
       
   274         TRect innerRect;
       
   275         CalculateFrameRects(outerRect, innerRect);
       
   276         skinnedDraw = AknsDrawUtils::DrawFrame(
       
   277             skin, gc, outerRect, innerRect, KAknsIIDQsnFrList, KAknsIIDQsnFrListCenter); // or KAknsIIDDefault?
       
   278         }
       
   279     else
       
   280         {
       
   281         MAknsControlContext* cc = AknsDrawUtils::ControlContext(this);
       
   282         skinnedDraw = AknsDrawUtils::Background(skin, cc, this, gc, Rect());
       
   283         }
       
   284 
       
   285     if(!skinnedDraw)
       
   286         {
       
   287         if(iHighlighted)
       
   288             {
       
   289             iUnselectedStringHighlight.DrawRect(gc);
       
   290             }
       
   291         else
       
   292             {
       
   293             gc.SetBrushColor(AKN_LAF_COLOR_STATIC(0)); 
       
   294             gc.Clear(iUnselectedStringHighlight.Rect());
       
   295             }
       
   296         }
       
   297     }
       
   298 
       
   299 void CAknFepUICtrlInputPane::ConstructL(RWindow& aParent)
       
   300     {
       
   301     SetContainerWindowL(aParent);
       
   302     iBuffer = HBufC::NewL(iMaxInputChars);
       
   303 
       
   304     // force label to contain required number of characters from the outset
       
   305     iLabel = new(ELeave) CEikLabel;
       
   306     iLabel->SetBufferReserveLengthL(iMaxInputChars); // this will do a realloc now, so no need to later
       
   307     iLabel->SetContainerWindowL(aParent);
       
   308     iLabel->SetMopParent(this);
       
   309 
       
   310     iLabelToneMark = new(ELeave) CEikLabel;
       
   311     iLabelToneMark->SetBufferReserveLengthL(EMaxToneMarkLength); // this will do a realloc now, so no need to later
       
   312     iLabelToneMark->SetContainerWindowL(aParent);
       
   313     iLabelToneMark->SetMopParent(this);
       
   314 
       
   315     }
       
   316 
       
   317 CAknFepUICtrlInputPane::CAknFepUICtrlInputPane(TInputPaneLayout aPaneLayout, CAknFepUiLayoutDataMgr* aLafDataMgr)
       
   318     : 
       
   319     iHighlighted(EFalse),
       
   320     iLayout(aPaneLayout),
       
   321     iToneMarkValidity(ETrue),
       
   322     iFlags(0),
       
   323     iLafDataMgr(aLafDataMgr)
       
   324     {
       
   325     switch(iLayout)
       
   326         {
       
   327         case ELayoutPhraseInputPane:
       
   328             iMaxInputChars = EMaxInputCharsInputPane;
       
   329             break;
       
   330         case ELayoutPhrasePinyinPopupPane:
       
   331             iMaxInputChars = EMaxInputCharsPinyinPopup;
       
   332             break;
       
   333         default:
       
   334             iMaxInputChars = EMaxInputCharsInputPane;
       
   335             break;
       
   336         };
       
   337     }
       
   338 
       
   339 void CAknFepUICtrlInputPane::UpdateLabelContents()
       
   340     {
       
   341     // add on the tone mark for the purposes of clipping
       
   342     TBufC<EMaxInputChars> combinedBuffer;
       
   343     TPtr combinedPtr = combinedBuffer.Des();
       
   344     combinedPtr.Copy(*iBuffer);
       
   345     combinedPtr.Append(iToneMarkBuffer);
       
   346 
       
   347     TRect rect = Rect();
       
   348     if(iLayout == ELayoutPhrasePinyinPopupPane)
       
   349         {
       
   350         TAknLayoutRect layoutLineRectEntryPane = 
       
   351                 CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ELayoutLineRectEntryPane ));
       
   352         rect = layoutLineRectEntryPane.Rect();
       
   353         }
       
   354     // avoid accessing text layout member data
       
   355     TAknLayoutRect labelRect;
       
   356     
       
   357     TAknWindowLineLayout layoutEntryItem = 
       
   358             CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem));
       
   359     labelRect.LayoutRect(rect, layoutEntryItem);
       
   360     TAknLayoutText layoutText;
       
   361     TAknTextLineLayout entryTextLine = 
       
   362         CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout));
       
   363     layoutText.LayoutText(labelRect.Rect(),entryTextLine);
       
   364     TInt maxWidth = layoutText.TextRect().Width(); 
       
   365     
       
   366     TAknLayoutText layoutText1 = 
       
   367             CAknFepChineseUIDataConv::AnyToLayoutText( iLafDataMgr->RequestData( ELayoutInputPaneText ));
       
   368     const CFont* font = layoutText1.Font();
       
   369 
       
   370     TInt labelWidthInPixels = 0;
       
   371     if(font)
       
   372         {
       
   373         TBufC<EMaxInputCharsInputPane> buf1;
       
   374         TPtr ptr1 = buf1.Des();
       
   375         GetText(ptr1);
       
   376         TBufC<EMaxToneMarkLength> buf2;
       
   377         TPtr ptr2 = buf2.Des();
       
   378         GetToneMark(ptr2);
       
   379         labelWidthInPixels = font->TextWidthInPixels(ptr1); 
       
   380         labelWidthInPixels += font->TextWidthInPixels(ptr2);
       
   381         }
       
   382     
       
   383     if(labelWidthInPixels > maxWidth)
       
   384 		{
       
   385 		AknTextUtils::ClipToFit(
       
   386 		combinedPtr,
       
   387 		*(iLabel->Font()),
       
   388 		maxWidth,
       
   389 		AknTextUtils::EClipFromBeginning, 
       
   390 		KDefaultClipWidth, 
       
   391 		KNullDesC); 
       
   392 		}
       
   393 
       
   394     // now remove the tone mark again, as it has a separate label
       
   395     TInt uncombinedLength = combinedPtr.Length() - iToneMarkBuffer.Length();
       
   396     if(uncombinedLength < 0)
       
   397         uncombinedLength = 0;
       
   398     combinedPtr.SetLength(uncombinedLength); // always shorter, so won't be bigger than max
       
   399 
       
   400     // ignore any errors... we have guaranteed that the descriptor already has sufficient characters to avoid a realloc
       
   401     TRAP_IGNORE( 
       
   402         iLabel->SetTextL(combinedPtr);
       
   403         iLabelToneMark->SetTextL(iToneMarkBuffer);
       
   404         );
       
   405     }
       
   406 
       
   407 void CAknFepUICtrlInputPane::LayoutContainedControls()
       
   408     {
       
   409     TRect rect = Rect();
       
   410     if(iLayout == ELayoutPhraseInputPane)
       
   411 		{
       
   412 	    TAknWindowLineLayout layoutEntryItem = 
       
   413 	            CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem));
       
   414         iUnselectedStringHighlight.LayoutRect(rect, layoutEntryItem);
       
   415         }
       
   416     else if(iLayout == ELayoutPhrasePinyinPopupPane) 
       
   417 		{
       
   418         iUnselectedStringHighlight.LayoutRect(rect, AKN_LAYOUT_WINDOW_Input_highlight_Line_1(rect));
       
   419         }
       
   420 
       
   421     // layout spelling label    
       
   422     TAknTextLineLayout textLayout = 
       
   423         CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout));
       
   424     TAknLayoutText layoutText;
       
   425     TRect rectHighlight = iUnselectedStringHighlight.Rect();
       
   426     TRect textRect;
       
   427     
       
   428     layoutText.LayoutText(rectHighlight,textLayout);
       
   429     textRect = layoutText.TextRect();
       
   430     TRgb labelTextColor = layoutText.Color();
       
   431 
       
   432     TInt labelWidth = LabelTextWidthInPixels();
       
   433     if(textRect.Width() > labelWidth)
       
   434         {
       
   435         textRect.SetWidth(labelWidth);
       
   436         }
       
   437     iLabel->SetRect(textRect);
       
   438     const CFont* font = layoutText.Font();
       
   439     iLabel->SetFont(font);
       
   440     
       
   441     // layout tone mark label
       
   442     TRgb labelToneMarkTextColor = labelTextColor;
       
   443     TRect toneMarkRect;
       
   444     TPtrC ptr = *iBuffer;
       
   445     TInt toneMarkOffset = 0;
       
   446 
       
   447     toneMarkOffset = iLabel->CalcMinimumSize(ptr).iWidth;
       
   448     toneMarkRect.iTl.iX = textRect.iTl.iX + toneMarkOffset;
       
   449     toneMarkRect.iTl.iY = textRect.iTl.iY;
       
   450     toneMarkRect.iBr.iY = textRect.iBr.iY;
       
   451     toneMarkRect.SetWidth(labelWidth - toneMarkOffset);
       
   452     iLabelToneMark->SetRect(toneMarkRect);
       
   453     iLabelToneMark->SetFont(font);
       
   454     
       
   455     // once we have layed out the labels from LAF, override the colours from the skin if necessary
       
   456     // as the skin utils will only return RGB values, not colour ids.
       
   457     MAknsSkinInstance* skin = AknsUtils::SkinInstance();
       
   458     TInt colorIndex = EAknsCIQsnTextColorsCG19;
       
   459     if (iHighlighted)
       
   460         {
       
   461         colorIndex = EAknsCIQsnTextColorsCG11;
       
   462         }
       
   463             
       
   464     AknsUtils::GetCachedColor(skin, labelTextColor, KAknsIIDQsnTextColors, colorIndex);
       
   465 
       
   466     colorIndex = iToneMarkValidity ? EAknsCIQsnTextColorsCG10: EAknsCIQsnTextColorsCG11; 
       
   467     AknsUtils::GetCachedColor(skin, labelToneMarkTextColor, KAknsIIDQsnTextColors, colorIndex);
       
   468 
       
   469     TRgb tonemarkColor;
       
   470     
       
   471     if (iToneMarkValidity)
       
   472     	{
       
   473     	tonemarkColor = labelToneMarkTextColor;
       
   474     	}
       
   475     else
       
   476     	{
       
   477     	tonemarkColor = KRgbGray;	
       
   478     	}	
       
   479 
       
   480     TRAP_IGNORE( 
       
   481         iLabel->OverrideColorL(EColorLabelText, labelTextColor);
       
   482         iLabelToneMark->OverrideColorL(EColorLabelText, tonemarkColor);
       
   483         );    
       
   484     }
       
   485 
       
   486 void CAknFepUICtrlInputPane::CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const
       
   487     {
       
   488     TRect windowRect = Rect();
       
   489     TRect entryRect = 
       
   490         CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData(EEntryPaneRect));
       
   491     
       
   492     windowRect.SetHeight(entryRect.iBr.iY - entryRect.iTl.iY);
       
   493     
       
   494     TAknLayoutRect topLeft;
       
   495     topLeft.LayoutRect(windowRect,SkinLayout::Submenu_skin_placing_Line_2());
       
   496 
       
   497     TAknLayoutRect bottomRight;
       
   498     bottomRight.LayoutRect(windowRect, SkinLayout::Submenu_skin_placing_Line_5());
       
   499 
       
   500     aOuterRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr);
       
   501     aInnerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl);
       
   502     if (aInnerRect.Width() <= 4)
       
   503         {
       
   504         aInnerRect.SetWidth(5);
       
   505         }
       
   506     }
       
   507 
       
   508 TInt CAknFepUICtrlInputPane::CalculateMaxTextLength(const TDesC& aDes) const
       
   509     {
       
   510     TAknLayoutText layoutText = 
       
   511             CAknFepChineseUIDataConv::AnyToLayoutText( iLafDataMgr->RequestData( ELayoutInputPaneText ));
       
   512     TInt maxWidth = layoutText.TextRect().Width();
       
   513     TInt textWidth = 0;
       
   514     
       
   515     textWidth = aDes.Length();
       
   516     
       
   517     while (maxWidth < CalculateTextLength(aDes.Right(textWidth)))
       
   518         {
       
   519         textWidth--;
       
   520         }
       
   521     
       
   522     return textWidth;
       
   523     }
       
   524 
       
   525 TInt CAknFepUICtrlInputPane::CalculateTextLength(const TDesC& aDes) const
       
   526     {
       
   527     TAknLayoutText layoutText = 
       
   528             CAknFepChineseUIDataConv::AnyToLayoutText( iLafDataMgr->RequestData( ELayoutInputPaneText ));
       
   529     const CFont* font = layoutText.Font();
       
   530 
       
   531     TInt labelWidthInPixels = 0;
       
   532     if(font)
       
   533         {
       
   534         labelWidthInPixels = font->TextWidthInPixels(aDes); 
       
   535         }
       
   536         
       
   537     return labelWidthInPixels;
       
   538     }
       
   539 
       
   540 void CAknFepUICtrlInputPane::SetLayout( TInputPaneLayout aPaneLayout )
       
   541     {
       
   542     switch(aPaneLayout)
       
   543         {
       
   544         case ELayoutPhraseInputPane:
       
   545             iMaxInputChars = EMaxInputCharsInputPane;
       
   546             break;
       
   547         case ELayoutPhrasePinyinPopupPane:
       
   548             iMaxInputChars = EMaxInputCharsPinyinPopup;
       
   549             break;
       
   550         case ELayoutPhraseMiniQwertyZhuyin:
       
   551             iMaxInputChars = EMaxInputCharsZhuyinPopup;
       
   552             break;
       
   553         default:
       
   554             iMaxInputChars = EMaxInputCharsInputPane;
       
   555             break;
       
   556         };
       
   557     }
       
   558     
       
   559 // End of file