javauis/lcdui_akn/lcdui/inc/CMIDEdwin.h
changeset 21 2a9601315dfc
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDEdwin.h	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,234 @@
+/*
+* 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 TextField and TextBox
+*
+*/
+
+
+#ifndef CMIDEDWIN_H
+#define CMIDEDWIN_H
+
+#include <eikedwin.h>
+#include <lafmain.h>
+
+#include "CMIDForm.h"
+#include "CMIDDisplayable.h"
+// MTickerObserver interface in class declaration
+#include "CMIDTicker.h"
+// for MMIDCommandObserver interface in class declaration
+#include "CMIDCommand.h"
+#include "CMIDEdwinUtils.h"
+#include "CMIDUtils.h"
+
+// FORWARD DECLARATIONS
+class CMIDTextFieldItem;
+class CMIDTextFieldEdwin;
+
+// Abstract class for TextField and TextBox.
+
+class CMIDEdwin : public CEikEdwin, public MMIDTextBox,
+        public MCoeControlObserver, public MEikEdwinObserver,
+        public MMIDTickerObserver, public MMIDCommandObserver
+{
+public:
+
+    ~CMIDEdwin();
+    //
+    // From MMIDTextBox
+    //
+    void DeleteTextL(TInt aOffset,TInt aLength);
+    void SetTextL(const TDesC& aText);
+    void InsertTextL(const TDesC& aText,TInt aPosition);
+    void SetConstraintsL(TUint aConstraints);
+    TInt SetMaxSizeL(TInt aSize);
+    TInt GetMaxSize();
+    TInt Size();
+    TInt GetCaretPosition();
+    HBufC* GetTextL();
+    void SetInitialInputModeL(const TDesC& aCharacterSubset);
+    //
+    // From MMIDComponent
+    //
+    inline CBase* Ptr();
+    inline void Dispose();
+    //
+    // From CCoeControl
+    //
+    virtual void SetContainerWindowL(const CCoeControl& aContainer);
+    virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+    virtual void FocusChanged(TDrawNow aDrawNow);
+    //
+    // From MEikEdwinObserver
+    //
+    void HandleEdwinEventL(CEikEdwin* aEdwin,TEdwinEvent aEventType);
+    //
+    // From MTickerObserver
+    //
+    void TickerShowing(TBool aShowing);
+
+    void SetTextWithNewConstraintsL(HBufC* aText);
+
+    /**
+     * Layouts the Edwin control relative to the parent
+     *
+     * @note aLayout.iNumberOfLinesShown is changed in case of TextFieldItem
+     * @param aRect the parent rect
+     * @param aLayout multi line layout info
+     */
+    virtual void DoLayout(const TRect& aRect) = 0;
+
+    void ProcessModifiers();
+    inline void SetTextFieldItem(CMIDTextFieldItem* aTextFieldItem);
+    void HandleCurrentL(TBool aActivate);
+    //
+    // From MCoeControlObserver
+    //
+    void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+    //
+    // From MMIDCommandObserver
+    //
+    TBool ProcessCommandL(CMIDCommand* aCommand);
+
+    /**
+    * Determines if languge conversion for numbers is needed based
+    * on constraints, language settings, display language setting
+    * and general setting.
+    * @returns ETrue to indicate whether digit conversions need to be used.
+    * @returns EFalse to indicate that no conversion is needed.
+    */
+    TBool IsNumberConversionNeeded();
+public:
+    inline TUint GetConstraints() const;
+    inline TBool IsConstraintSet(TUint aConstraints);
+    /**
+     * Detects if Edwin control is in partial formatting mode
+     * When the text is longer than a specific limit (e.g. 1900),
+     * the Edwin formats the non-visible text lines in background.
+     * <p>
+     * @note This is useful only for TextFieldItem
+     * @see CEikEdwin::LowerPartialFormattingLength()
+     * @return ETrue if Edwin formats text in partial mode, and EFalse otherwise
+     */
+    inline TBool IsPartialFormatting() const;
+
+protected:
+    /**
+     * Constructor
+     */
+    CMIDEdwin(TUint aConstraints, MMIDDisplayable* aDisplayable,
+              CMIDTextFieldItem* aTextFieldItem);
+
+    /**
+     * Second phase constructor
+     * @param aText a text to be set in the field
+     * @param aMaxSize maximum number of characters to allow
+     */
+    void ConstructL(const TDesC& aText,TInt aMaxSize);
+
+protected:
+    virtual void AddCommandsToEdwinL(RPointerArray<MMIDCommand>& aArray) = 0;
+
+private:
+
+    void CMIDEdwin::HandleMinusCharEventL(TEdwinEvent aEventType);
+    void CreatePasswordTextL();
+    void SetFEPModeAndCharFormat();
+
+    virtual void CreateNonMidletCommandsL();
+    void AddCommandToArrayL(RPointerArray<MMIDCommand>& aArray,
+                            TInt aCommandResId, TInt aCommandId);
+    void AddCommandToArrayL(RPointerArray<MMIDCommand>& aArray,
+                            TInt aCommandResIdShort, TInt aCommandResIdLong, TInt aCommandId);
+    void RemoveNonMidletCommands();
+
+    /*
+     * Initiates the phone call.
+     * After the phone call is ended, the form is brought to foreground.
+     * AiwDialApi takes care of switching to the window back.
+     * The MIDlet's window group is needed
+     *
+     * @note The current implementation considers that making phone calls
+     *      is not so often use-case, and therefore all needed data is initialized
+     *      in this call
+     */
+    void CreatePhoneCallL();
+
+    TPtrC Read() const;
+
+    void UpdateTextCapacityIndicatorValueL();
+    void HandleTextPastedL(TInt aStartPos,TInt& aLength);
+    void ResetNumericContentL();
+
+protected:
+    CMIDDisplayable* iDisplayable;
+    CMIDUIManager* iUIManager;
+    // used to pass EEventStateChanged back to CMIDTextFieldEdwin
+    CMIDTextFieldItem* iTextFieldItem;
+    TUint iConstraints;
+    TBool iStateChanged;
+
+private:
+    /**
+     * Pointer to CMIDEdwinUtils
+     */
+    CMIDEdwinUtils*             iEdwinUtils;
+
+    TBool iKeyEventsPending;
+    TInt iMaxSize;
+    TInt iInitialCurrentCase;       // text case (abc/ABC/etc.) to be set when getting focus
+    TInt iInitialCurrentInputMode;  // input mode (text/numeric) to be set when getting focus
+    TLanguage iInitialCurrentLanguage;
+
+    TInt iThisMultitapKey;          // stores keycode of the current key; used in multitap transaction exceeding editor limit
+    TInt iLastMultitapKey;          // stores keycode of the last key; used in multitap transaction exceeding editor limit
+
+    TChar iDecimalSeparator;
+
+    /** True when we are displaying the text capacity indicator */
+    TBool iDisplayingCapacityIndic;
+    CMIDAiwPbk2Client* iAiwPbkClient;
+    TBool useEnterKey;      // used for EnterKey
+};
+
+inline TUint CMIDEdwin::GetConstraints() const
+{
+    return iConstraints;
+}
+
+inline TBool CMIDEdwin::IsConstraintSet(TUint aConstraints)
+{
+    return (iConstraints & MMIDTextField::EConstraintMask) == aConstraints ;
+}
+
+inline TBool CMIDEdwin::IsPartialFormatting() const
+{
+    return TextLength() >= LowerPartialFormattingLength();
+}
+
+inline CBase* CMIDEdwin::Ptr()
+{
+    return this;
+}
+
+inline void CMIDEdwin::Dispose()
+{
+    delete this;
+}
+
+inline void CMIDEdwin::SetTextFieldItem(CMIDTextFieldItem* aTextFieldItem)
+{
+    iTextFieldItem = aTextFieldItem;
+}
+
+#endif // CMIDEDWIN_H