javauis/lcdui_akn/lcdui/src/CMIDTextBoxEdwin.cpp
changeset 21 2a9601315dfc
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdui/src/CMIDTextBoxEdwin.cpp	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2003-2006 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:  Implementation class for TextBox
+*
+*/
+
+
+#include <lafmain.h>
+// LAF API use in GetLayout function
+#include <aknlayoutscalable_avkon.cdl.h>
+
+#include "CMIDEdwin.h"
+#include "CMIDTextBoxEdwin.h"
+// API for iCustomDraw
+#include "CMIDTextBoxEdwinCustomDraw.h"
+#include "CMIDDisplayable.h"
+
+// class CMIDTextBoxEdwin
+
+CMIDTextBoxEdwin* CMIDTextBoxEdwin::NewL(TInt aConstraints,
+        const TDesC& aText,
+        TInt aMaxSize,
+        MMIDDisplayable* aDisplayable)
+{
+    CMIDTextBoxEdwin* textBox = new(ELeave)CMIDTextBoxEdwin(aConstraints, aDisplayable);
+    CleanupStack::PushL(textBox);
+    textBox->ConstructL(aText,aMaxSize);
+    CleanupStack::Pop(textBox);
+    return textBox;
+}
+
+void CMIDTextBoxEdwin::ConstructL(const TDesC& aText,TInt aMaxSize)
+{
+    // just call superclass, for now
+    CMIDEdwin::ConstructL(aText, aMaxSize);
+}
+
+// ----------------------------------------------------------------------------
+// CMIDTextBoxEdwin::GetLayout()
+// ----------------------------------------------------------------------------
+TAknMultiLineTextLayout CMIDTextBoxEdwin::GetLayout() const
+{
+    TAknMultiLineTextLayout         edwinLayout;
+    TAknTextComponentLayout         textLayout;
+    RArray<TAknTextComponentLayout> edwinLayoutLines;
+
+    // TextBox case
+    TAknWindowComponentLayout   rowPaneLayout;  // row pane
+    TAknTextComponentLayout     textRowLayout;  // text within a row pane
+
+    textLayout = AknLayoutScalable_Avkon::list_single_midp_pane_t1();
+
+    // get the number of layout lines for panel rows
+    TAknLayoutScalableParameterLimits limits =
+        AknLayoutScalable_Avkon::list_single_midp_pane_ParamLimits();
+    TInt linesCount = limits.LastRow() + 1;
+
+    for (TInt i = 0; i < linesCount; i++)
+    {
+        // translate one row of text layout inside a row pane
+        textRowLayout = TAknWindowComponentLayout::ComposeText(
+                            AknLayoutScalable_Avkon::list_single_midp_pane(i),
+                            textLayout);
+
+        TRAP_IGNORE(edwinLayoutLines.AppendL(textRowLayout));
+    }
+
+    edwinLayout = TAknTextComponentLayout::Multiline(edwinLayoutLines);
+    edwinLayoutLines.Reset();
+
+    return edwinLayout;
+}
+
+
+CMIDTextBoxEdwin::CMIDTextBoxEdwin(TUint aConstraints, MMIDDisplayable* aDisplayable)
+        : CMIDEdwin(aConstraints, aDisplayable, NULL)
+{
+}
+
+CMIDTextBoxEdwin::~CMIDTextBoxEdwin()
+{
+    // just calls superclass destructor
+}
+
+CLafEdwinCustomDrawBase* CMIDTextBoxEdwin::CreateCustomDrawL()
+{
+    // set custom drawing to the editor
+    const MFormCustomDraw* customDraw = CEikEdwin::CreateCustomDrawL(); // we will take ownership of the original custom draw
+    iCustomDraw = CMIDTextBoxEdwinCustomDraw::NewL(iEikonEnv->LafEnv(), customDraw, this);
+    return iCustomDraw;
+}
+
+void CMIDTextBoxEdwin::DoLayout(const TRect& aRect)
+{
+    TAknMultiLineTextLayout layout;
+
+    /** The skin text color overrides the text color in LAF. */
+    TAknsQsnTextColorsIndex skinTextColor;
+
+    if (iConstraints & MMIDTextField::EUneditable)
+    { // skinning colour groups for uneditable text
+        skinTextColor = EAknsCIQsnTextColorsCG52;
+    }
+    else
+    { // skinning colour groups for editable text
+        skinTextColor = EAknsCIQsnTextColorsCG6;
+    }
+
+    // get layout
+    layout = GetLayout();
+
+    // layout the control
+    AknLayoutUtils::LayoutEdwin(this, aRect, layout, skinTextColor);
+    // layout the custom draw
+    if (iCustomDraw != NULL) // the custom draw is created by us, so if it is defined we have the right version
+    {
+        iCustomDraw->CalculateLayout(aRect);
+    }
+}
+
+
+#ifdef RD_SCALABLE_UI_V2
+void CMIDTextBoxEdwin::HandlePointerEventL(const TPointerEvent &aPointerEvent)
+{
+    if (AknLayoutUtils::PenEnabled())
+    {
+        TBool consumed = STATIC_CAST(CMIDDisplayable*, iDisplayable)->TryDetectLongTapL(aPointerEvent);
+        if (!consumed)
+        {
+            CEikEdwin::HandlePointerEventL(aPointerEvent);
+        }
+    }
+
+}
+#endif // RD_SCALABLE_UI_V2
+
+
+TCoeInputCapabilities CMIDTextBoxEdwin::InputCapabilities() const
+{
+    TCoeInputCapabilities inputCapabilities(TCoeInputCapabilities::ENone, NULL,
+                                            const_cast<CMIDTextBoxEdwin*>(this));
+    inputCapabilities.MergeWith(CMIDEdwin::InputCapabilities());
+    return inputCapabilities;
+}
+
+
+void CMIDTextBoxEdwin::GetCaptionForFep(TDes& aCaption) const
+{
+    ASSERT(iDisplayable);
+    HBufC* title = static_cast<CMIDDisplayable*>(iDisplayable)->Title();
+
+    if (title)
+    {
+        const TInt maximumLength = aCaption.MaxLength();
+        if (title->Length() > maximumLength)
+        {
+            aCaption = title->Left(maximumLength);
+        }
+        else
+        {
+            aCaption = *title;
+        }
+    }
+    else
+    {
+        aCaption = KNullDesC;
+    }
+}
+
+
+void CMIDTextBoxEdwin::AddCommandsToEdwinL(RPointerArray<MMIDCommand>& aArray)
+{
+    for (TInt i = 0; i < aArray.Count(); i++)
+    {
+        STATIC_CAST(CMIDDisplayable*, iDisplayable)->AddCommandL(aArray[i]);
+    }
+}
+
+// ---------------------------------------------------------
+// CMIDTextBoxEdwin::GetCustomDraw()
+// ---------------------------------------------------------
+//
+CMIDTextBoxEdwinCustomDraw* CMIDTextBoxEdwin::GetCustomDraw() const
+{
+    return iCustomDraw;
+}
+