javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swttextbase.h
branchRCL_3
changeset 14 04becd199f91
child 19 71c436fe3ce0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swttextbase.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,273 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - S60 implementation
+ *******************************************************************************/
+
+
+#ifndef SWTTEXTBASE_H
+#define SWTTEXTBASE_H
+
+
+#include <coecntrl.h>
+#include "swtscrollablebase.h"
+#include "swteditindicator.h"
+
+#if defined( RD_SCALABLE_UI_V2)
+#include <fepbase.h>
+#endif //RD_SCALABLE_UI_V2
+
+class CEikEdwin;
+
+
+/**
+ * CSwtTextBase
+ * @lib eswt
+ */
+NONSHARABLE_CLASS(CSwtTextBase)
+        : public CAknControl
+        , public ASwtScrollableBase
+#if defined( RD_SCALABLE_UI_V2)
+        , public MCoeCaptionRetrieverForFep
+#endif //RD_SCALABLE_UI_V2
+{
+protected:
+    /**
+     * First phase constructor.
+     * @param aDisplay parent display
+     * @param aPeer java peer
+     * @param aParen composite parent
+     * @param aStyle supported styles
+     */
+    CSwtTextBase(
+        MSwtDisplay& aDisplay,
+        TSwtPeer aPeer,
+        MSwtComposite& aParent,
+        TInt aStyle);
+
+    /**
+     * Second phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Destructor.
+     */
+    ~CSwtTextBase();
+
+    /**
+     * Get reference to the current Edwin editor.
+     * @return Edwin reference.
+     */
+    inline CEikEdwin& Editor() const;
+
+    /**
+     * Set Edwin editor. Cannot be NULL.
+     * @param aEditor Edwin pointer.
+     */
+    void SetEditor(CEikEdwin* aEditor);
+
+    /**
+     * Update default font.
+     */
+    void RetrieveDefaultFontL();
+
+    /**
+     * Compute size between text and control's rect.
+     * @return computed size
+     */
+    TSize ComputeDelta() const;
+
+    /**
+     * Check if specified key event trnaslates into a hotkey.
+     * param aKeyEvent key event structure.
+     * @return one of CEikEdwin::TEdwinHotKeys or -1 if cannot translate.
+     */
+    TInt HotKeyL(const TKeyEvent& aKeyEvent) const;
+
+    /**
+     * Is the editor editable?
+     * @return editability state.
+     */
+    inline TBool GetEditable() const;
+
+    /**
+     * Make the editor editable.
+     * @param aEditable editability state.
+     */
+    void SetEditable(TBool aEditable);
+
+    /**
+     * Replace the entire text of the editor.
+     * @param aText the text to be set.
+     * @return ETrue if operation succeeded, EFalse otherwise.
+     */
+    TBool SetTextL(const TDesC& aText);
+
+    /**
+     * Append at the end of the editor's text.
+     * @param aText the text to be appended.
+     * @return ETrue if operation succeeded, EFalse otherwise.
+     */
+    TBool AppendL(const TDesC& aText);
+
+    /**
+     * Insert into editor's text starting at cursor's position.
+     * @param aText the text to be inserted.
+     * @return ETrue if operation succeeded, EFalse otherwise.
+     */
+    TBool InsertL(const TDesC& aText);
+
+    /**
+     * Cut into clipboard the text that is selected in the editor.
+     * @return ETrue if operation succeeded, EFalse otherwise.
+     */
+    TBool CutL();
+
+    /**
+     * Set the maximum length of the editor's text. Typing, appending
+     * inserting and setting text should not pass over this limit.
+     * @param aLimit limit in number of chars.
+     * @return ETrue if operation succeeded, EFalse otherwise.
+     */
+    TBool SetLimitL(TInt aLimit);
+
+    /**
+     * Forward key event to the contained Edwin editor.
+     */
+    void ForwardKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+
+    /**
+     * Resource change leaving helper
+     */
+    void SwtHandleResourceChangeL(TInt aType);
+
+    /**
+     * Adds some reasonable spacing to facilitate finger touch usability.
+     */
+    void FixPadding();
+
+#if defined( RD_SCALABLE_UI_V2)
+// From MCoeCaptionRetrieverForFep
+private:
+    virtual void GetCaptionForFep(TDes& aCaption) const;
+    virtual void MCoeCaptionRetrieverForFep_Reserved_1();
+    virtual void MCoeCaptionRetrieverForFep_Reserved_2();
+#endif //RD_SCALABLE_UI_V2
+
+// From CCoeControl
+public:
+    TInt CountComponentControls() const;
+    CCoeControl* ComponentControl(TInt aIndex) const;
+    void MakeVisible(TBool aVisible);
+    void SetDimmed(TBool aDimmed);
+    void HandleResourceChange(TInt aType);
+    void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+// From CCoeControl
+protected:
+    void FocusChanged(TDrawNow aDrawNow);
+    void PositionChanged();
+    void SizeChanged();
+    TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
+#if defined( RD_SCALABLE_UI_V2)
+    TCoeInputCapabilities InputCapabilities() const;
+#endif //RD_SCALABLE_UI_V2
+
+// From MSwtControl
+public:
+    TBool SetSwtFocus(TInt aReason = KSwtFocusByApi);
+    TInt FocusBackgroundPolicy() const;
+    TRect ClientRect() const;
+    CCoeControl& CoeControl();
+    const CCoeControl& CoeControl() const;
+    void SetFontL(const MSwtFont* aFont);
+    TSize ComputeSizeL(TInt aWHint, TInt aHHint);
+    TBool IsKeyUsed(TUint aKeyCode) const;
+    TBool CanDrawOutsideRect() const;
+    void SetBackgroundL(const MSwtColor* aColor);
+    void SetForegroundL(const MSwtColor* aColor);
+
+// From ASwtControlBase
+protected:
+    const MSwtFont& DefaultFont() const;
+
+// From ASwtScrollableBase
+protected:
+    CEikScrollBarFrame* SbFrame() const;
+    void ProcessFontUpdateL();
+
+// From MEikScrollBarObserver
+public:
+    void HandleScrollEventL(CEikScrollBar* aScrollBar,
+                            TEikScrollEvent aEventType);
+
+// Data
+protected:
+
+    /**
+     * Edit indicator for multipage dialog can be NULL
+     * Own.
+     */
+    CSwtEditIndicator* iIndicator;
+
+    /**
+     * Flag for ignoring the first pointer down event after gaining focus,
+     * used for disabling showing of VKB when unfocused Text is tapped.
+     */
+    TBool iIgnorePointerDown;
+
+// Data
+private:
+    /**
+     * The contained editor.
+     * Own.
+     */
+    CEikEdwin* iEditor;
+
+    /**
+     * The default font, cannot be NULL.
+     * Own.
+     */
+    MSwtFont* iDefaultFont;
+
+    /**
+     * Maximum length of the text.
+     */
+    TInt iTextLimit;
+
+    /**
+    * The Custom Color checking, setted by API.
+    */
+    TBool iTextColor;
+
+    /**
+     * Global text in single line need to change the font later.
+     */
+    CCharFormatLayer* iCharFormatLayer;
+
+    /**
+     * Deliver all pointer event to the scrollbar when this on.
+     */
+    TBool iVScrollBarGrabsPointerEvents;
+};
+
+
+inline CEikEdwin& CSwtTextBase::Editor() const
+{
+    ASSERT(iEditor);
+    return *iEditor;
+}
+
+inline TBool CSwtTextBase::GetEditable() const
+{
+    return !(iStyle & KSwtStyleReadOnly);
+}
+
+
+#endif // SWTTEXTBASE_H