--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutctrlgroup.h Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,554 @@
+/*
+* Copyright (c) 2005-2005 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: header file of control group and button group
+*
+*/
+
+#ifndef C_CCONTROLBROUP_H
+#define C_CCONTROLBROUP_H
+
+#include <peninputlayoutbasecontrol.h>
+class CButtonBase;
+class CCoeControl;
+/**
+ * CControlGroup
+ *
+ * CControl group. A CControl group will consists of several controls.
+ *
+ * @lib feplayoutcontrol.lib
+ * @since S60 V4.0
+ */
+class CControlGroup : public CFepUiBaseCtrl
+ {
+public:
+ //constructor and destructor
+ /**
+ * Factory function.
+ *
+ * @since S60 V4.0
+ * @param aUiLayout Ui layout who contains this control.Ownership not transferred
+ * @param aControlId control Id
+ * @return An instance of CControlGroup class
+ */
+ IMPORT_C static CControlGroup* NewL(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TBool aRedrawBg = ETrue);
+
+ CControlGroup* NewL(CFepUiLayout* aUiLayout,CCoeControl* aControl);
+ /**
+ * Destructor
+ *
+ * @since S60 V4.0
+ */
+ IMPORT_C virtual ~ CControlGroup();
+
+ /**
+ * Add a control to group
+ *
+ * @since S60 V4.0
+ * @param aControl New control to be added.Ownership transferred
+ * @param aOwnerFlag The flag tells whether transfer ownership to group. ETrue if group will be the owner
+ * A owner is responsible for free the control.
+ * Deafult value is ETrue
+ */
+ IMPORT_C void AddControlL(CFepUiBaseCtrl* aControl, TBool aOwnerFlag = ETrue);
+ /**
+ * Add a control to group
+ *
+ * @since S60 V4.0
+ * @param aControl New control to be added.Ownership transferred. A CFepUiBasedCtrl
+ * will be created for this window based control
+ * @param aOwnerFlag The flag tells whether transfer ownership to group. ETrue if group will be the owner
+ * A owner is responsible for free the control.
+ * Deafult value is ETrue
+ * @return The control associated to this window based control
+ */
+ IMPORT_C CFepUiBaseCtrl* AddControlL(CCoeControl* aControl);
+
+ /**
+ * RemoveControl
+ * Remove a control from the control group
+ *
+ * @since S60 v4.0
+ * @param aControl The control to be removed.
+ * @return ETrue if remove successfully.
+ */
+ IMPORT_C TBool RemoveControl(CFepUiBaseCtrl* aControl);
+
+
+ /**
+ * Get control for an position index
+ *
+ * @since S60 V4.0
+ * @param aIndex Control index in group. Index starts from 0
+ * @return The control for position
+ */
+ IMPORT_C CFepUiBaseCtrl* At(TInt aIndex);
+
+ /**
+ * Get control counts
+ *
+ * @since S60 V4.0
+ * @param None
+ * @return Number of controls in group
+ */
+ IMPORT_C TInt NumOfControls();
+
+ /**
+ * Find qualified control in layout whose control type is exactly the same as
+ * the given one.
+ *
+ * @since S60 v4.0
+ * @param aType The contol type
+ * @param aIndex The control index. The nth control for such type in this group.
+ * The index is counted seperated for different control type.
+ * @return The contrl found.
+ */
+ IMPORT_C CFepUiBaseCtrl* ControlByType(TControlType aType,TInt aIndex = 0);
+
+ /**
+ * Find qualified control in layout according to the type and index.
+ * Unlike ControlByType, it finds all controls which is kind of such type,
+ * includes those derived controls.
+ *
+ * @since S60 v4.0
+ * @param aType The contol type
+ * @param aIndex The control index. The nth control for such type in this group.
+ * The index is counted seperated for different control type.
+ * @return The contrl found.
+ */
+ IMPORT_C CFepUiBaseCtrl* ControlForKindOfType(TStockBaseCtrlType aType,
+ TInt aIndex = 0);
+ /**
+ * Set control to be actived.
+ *
+ * @since S60 V4.0
+ * @param aControl The control to be set to actived. Ownership not transferred.
+ * @return Previous active control
+ */
+ IMPORT_C virtual CFepUiBaseCtrl* SetActiveCtrl(CFepUiBaseCtrl* aControl);
+
+ /**
+ * Set control to be temparory actived. When button is pressed, the control is
+ * temparary set to be actived. When button is up, it's set to be actived.
+ *
+ * @since S60 V4.0
+ * @param aControl The control to be set to actived. Ownership not transferred.
+ * @return Previous active control
+ */
+ CFepUiBaseCtrl* SetTempActiveCtrl(CFepUiBaseCtrl* aCtrl);
+ /**
+ * Set control to be actived
+ *
+ * @since S60 V4.0
+ * @param aIndex The control index. Ownership not transferred.
+ * @return current active control
+ */
+ IMPORT_C CFepUiBaseCtrl* SetActiveCtrl(TInt aIndex);
+
+ /**
+ * Get active control
+ *
+ * @since S60 V4.0
+ * @param None
+ * @return The active control
+ */
+ IMPORT_C CFepUiBaseCtrl* ActiveControl();
+
+ /**
+ * Hide Control
+ *
+ * @since S60 V4.0
+ * @param aIndex control index
+ * @param aFlag control hide flag. ETrue if going to be hiden. Otherwise EFalse
+ * Deafult value is ETrue
+ */
+ IMPORT_C void HideControl(TInt aIndex,TBool aFlag = ETrue);
+
+ /**
+ * Hide Control
+ *
+ * @since S60 V4.0
+ * @param aControl The button to be hiden
+ * @param aFlag Contrl hide flag. ETrue if going to be hiden. Otherwise EFalse
+ * Default value is ETrue
+ */
+ IMPORT_C void HideControl(CFepUiBaseCtrl* aControl,TBool aFlag = ETrue);
+
+ /**
+ * Get the sub control for given control Id.
+ *
+ * @param aCtrlId The control id
+ * @return The contrl found.
+ */
+ IMPORT_C CFepUiBaseCtrl* ControlById(TInt aCtrlId);
+
+ /**
+ * Get control list
+ *
+ * @since S60 v4.0
+ * @return The layout control list
+ */
+ inline const RPointerArray<CFepUiBaseCtrl>& ControlList() const;
+
+ inline const RPointerArray<CFepUiBaseCtrl>& PopCtrlList() const;
+
+ /**
+ * Check whether this control is in the control group
+ *
+ * @since S60 v4.0
+ * @param aCtrl The control to be found
+ * @return EFalse if not included in the group. ETrue if founded
+ */
+ CFepUiBaseCtrl* Find(CCoeControl* aCtrl);
+
+ /**
+ //From base class CFepUiBaseCtrl
+ /**
+ * From CFepUiBaseCtrl
+ * Draw control
+ *
+ * @since S60 V4.0
+ */
+ IMPORT_C virtual void Draw();
+
+ /**
+ * From CFepUiBaseCtrl
+ * Redraws the content in a control
+ *
+ * @since S60 V4.0
+ * @param aRect The rect to be redrawed
+ */
+ IMPORT_C virtual void ReDrawRect(const TRect& aRect);
+
+ /**
+ * Redraws the content in a control if needed. The redraw is caused by aCtrl's updating aRect.
+ *
+ * @since S60 V5.0
+ * @param aRect The rect to be redrawed
+ * @param aCtrl The control who initiates the updating.
+ */
+ void RedrawRectIfNeeded(const TRect& aRect, CFepUiBaseCtrl* aCtrl);
+
+ /**
+ * From CFepUiBaseCtrl
+ * Hide or shoe control. A hiden control will not handle the event.
+ *
+ * @since S60 V4.0
+ * @param aFlag ETrue if want to hide the control.
+ */
+ IMPORT_C virtual void Hide(TBool aFlag);
+
+ /**
+ * From CFepUiBaseCtrl
+ * Move control
+ *
+ * @since S60 V4.0
+ * @param aOffset The offset to be moved
+ */
+ IMPORT_C void Move(const TPoint& aOffset);
+
+ /**
+ * From CFepUiBaseCtrl
+ * Cancel pointer down event.
+ * This will be called when a control has pointer down but pointer up
+ * event happens in other ways.
+ *
+ * @since S60 V4.0
+ * @param aFocusedFlag ETrue if got focused, otherwise EFalse
+ */
+ IMPORT_C virtual void CancelPointerDownL();
+
+ /**
+ * From CFepUiBaseCtrl
+ * Handle pointer levae event.
+ * This will be called only when it's got pointer down event before and
+ * now pointer leaves without pointer up event
+ *
+ * @since S60 V4.0
+ * @param aPoint current pointer position
+ */
+ IMPORT_C virtual void HandlePointerLeave(const TPoint& aPoint);
+
+ /**
+ * From CFepUiBaseCtrl
+ * Handle pointer enter event.
+ * This will be called only when it's got pointer down event before and
+ * pointer leaves but now comes back without pointer up event.
+ *
+ * @since S60 V4.0
+ * @param aPoint current pointer position
+ */
+ IMPORT_C virtual void HandlePointerEnter(const TPoint& aPoint);
+
+ /**
+ * From CFepUiBaseCtrl
+ * OnActivate. Called when the layout is going to be shown.
+ *
+ * @since S60 v4.0
+ */
+ IMPORT_C void OnActivate();
+
+ /**
+ * From CFepUiBaseCtrl
+ * OnDeActivate. Called when the layout is going to be hidden
+ *
+ * @since S60 v4.0
+ */
+ IMPORT_C void OnDeActivate();
+ /**
+ * From CFepUiBaseCtrl
+ * Call back function when layout starts dragging
+ *
+ * @since S60 V4.0
+ */
+ virtual IMPORT_C void OnLayoutDraggingStart();
+
+ /**
+ * From CFepUiBaseCtrl
+ * Call back function when layout ends dragging
+ *
+ * @since S60 V4.0
+ */
+ virtual IMPORT_C void OnLayoutDraggingEnd();
+
+ /**
+ * From CFepUiBaseCtrl
+ * Construct from resource. Handle resource change
+ *
+ * @since S60 V4.0
+ */
+ IMPORT_C void ConstructFromResourceL();
+
+ /**
+ * Update control's valid region when other control hiding or displaying.
+ * This is usually used for HWR window to change it's writing area.
+ *
+ * @since S60 V4.0
+ * @param aCtrl The control whose displaying status changed
+ * @param bFlag ETrue if control is hiden, otherwise EFalse
+ */
+ IMPORT_C virtual void UpdateValidRegion(CFepUiBaseCtrl* aCtrl,TBool aRemoveFlag);
+
+ /**
+ * Bring the control to top most in current control group and show it.
+ *
+ * @since S60 V5.0
+ * @aParam aCtrl The control to be shown.
+ */
+ IMPORT_C virtual void BringToTopInGroup(CFepUiBaseCtrl* aCtrl);
+
+ IMPORT_C virtual void BringToBackInGroup(CFepUiBaseCtrl* aCtrl);
+ void UpdateAreaInGrp(CFepUiBaseCtrl* aControl,const TRect& aRect,TBool aUpdateFlag); // = EFalse
+
+ void UpdateAreaInGrpImmed(CFepUiBaseCtrl* aControl,const TRect& aRect,TBool aUpdateFlag);
+ void RedrawRectInGrp( CFepUiBaseCtrl* aControl,const TRect& aRect );
+
+ TInt GetNestedLevel();
+
+ TInt GetIdx(const CFepUiBaseCtrl* aCtrl);
+
+ void AdjustBkCtrlPos();
+
+protected:
+ /**
+ * Symbian second phrase constructor
+ *
+ * @since S60 V4.0
+ */
+ IMPORT_C void ConstructL();
+
+ /**
+ * From CFepUiBaseCtrl
+ * Handle pointer down event
+ *
+ * @since S60 V4.0
+ * @param aPoint The point position relative the layout
+ * @return The control which handles the event.
+ */
+ IMPORT_C virtual CFepUiBaseCtrl* HandlePointerDownEventL(const TPoint& aPoint);
+
+ /**
+ * From CFepUiBaseCtrl
+ * Handle pointer move event
+ *
+ * @since S60 V4.0
+ * @param aPoint The point position relative the layout
+ * @return The control which handles the event.
+ */
+ IMPORT_C virtual CFepUiBaseCtrl* HandlePointerMoveEventL(const TPoint& aPoint);
+
+ /**
+ * From CFepUiBaseCtrl
+ * Handle pointer up event
+ *
+ * @since S60 V4.0
+ * @param aPoint The point position relative the layout
+ * @return The control which handles the event.
+ */
+ IMPORT_C virtual CFepUiBaseCtrl* HandlePointerUpEventL(const TPoint& aPoint);
+
+ const RRegion& CalculateNonHwrStartPtArea();
+ void CalculateClipRegion();
+
+ /**
+ * Handle system resource change
+ *
+ * @since S60 V5.0
+ * @param aType The system resource change type
+ */
+ virtual IMPORT_C void HandleResourceChange(TInt aType);
+
+ /**
+ * Handle pen UI graphic device size change event
+ *
+ * @since S60 V5.0
+ */
+ virtual IMPORT_C void GraphicDeviceSizeChanged();
+protected:
+ /**
+ * Default constructor.
+ *
+ * @since S60 V4.0
+ * @param aUiLayout Ui layout who contains this control
+ * @param aControlId control Id
+ */
+ IMPORT_C CControlGroup(CFepUiLayout* aUiLayout,TInt aControlId);
+
+ /**
+ * Default constructor.
+ *
+ * @since S60 V4.0
+ * @param aUiLayout Ui layout who contains this control
+ * @param aControlId control Id
+ */
+ IMPORT_C CControlGroup(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TBool aRedrawBg);
+
+ /*
+ * ControlForPoints
+ * Get the control which contains the given point
+ *
+ * @param aPt the point to be checked
+ * @return The control which contains the point
+ */
+ CFepUiBaseCtrl* ControlForPoints(const TPoint& aPt);
+
+ /**
+ * Draw ControlGroup Background
+ *
+ * @since S60 V5.0
+ * @param aUpdateRegion The rect to be updated
+ */
+ virtual IMPORT_C void DrawControlGroupBackground( const TRect& aUpdateRegion );
+private:
+ /**
+ * RemoveOwnedControl
+ * Remove a control from group's owned control list
+ *
+ * @since S60 v4.0
+ * @param aControl The control to be removed.
+ * @return ETrue if remove successfully.
+ */
+ TBool RemoveOwnedControl(CFepUiBaseCtrl* aControl);
+
+ TInt FindSubRegion(CFepUiBaseCtrl* aCtrl);
+
+ void RemoveCtrlFromSubCtrlInfoList(CFepUiBaseCtrl* aControl);
+ void SaveSubCtrlShownState();
+ void RemoveSubRegion(TInt aIdx);
+ void AddSubRegionL(CFepUiBaseCtrl* aCtrl);
+ void CalculateClipRegion(CFepUiBaseCtrl* aCtrl);
+ TBool MoveSubCtrlToTop(CFepUiBaseCtrl* aCtrl, RPointerArray<CFepUiBaseCtrl>& aList);
+ TBool MoveSubCtrlToBack(CFepUiBaseCtrl* aCtrl,RPointerArray<CFepUiBaseCtrl>& aList);
+ void OnDeActivateL();
+protected:
+ /**
+ * Control list for all controls
+ */
+ RPointerArray<CFepUiBaseCtrl> iCtrlList;
+
+ /**
+ * Active control
+ * Not own
+ */
+ CFepUiBaseCtrl* iActiveCtrl;
+
+ /**
+ * Control which gets the pointer down event
+ * Not own
+ */
+ CFepUiBaseCtrl* iCtrlWithPointerDown;
+
+ RRegion iNonHwrStartPtRegion;
+ /**
+ * Control list for all owned controls.
+ * Control group will be responsible for release owned controls
+ */
+ RPointerArray<CFepUiBaseCtrl> iOwnedCtrlList;
+
+ /**
+ * This is the control list for those control which must be shown on top, and
+ * which doesn't directly belong ( as a direct child of)
+ * to current group
+ */
+ RPointerArray<CFepUiBaseCtrl> iPopCtrlList;
+
+private:
+ //internal class to record sub control's information
+ class CSubRegionArea : public CBase
+ {
+ public:
+ ~CSubRegionArea();
+ private:
+ CSubRegionArea(const CFepUiBaseCtrl* aCtrl,const RRegion &aRegion);
+ private:
+ const CFepUiBaseCtrl* iSubCtrl;
+ RRegion iSubRegion;
+ friend class CControlGroup;
+ };
+ struct TSubCtrlShownState
+ {
+ CFepUiBaseCtrl* iSubCtrl;
+ TBool iHiden;
+ };
+ /**
+ * temparory active control
+ * Not own
+ */
+ CFepUiBaseCtrl* iTempActiveCtrl;
+
+ RPointerArray<CSubRegionArea> iSubRegionArea;
+
+ /**
+ * list to record sub control's hide/show state before control group is hidden
+ */
+ RArray<TSubCtrlShownState> iSubCtrlShowStateBeforeHiden;
+
+ /**
+ * Reserved item1
+ */
+ TInt iNeedRedrawBg;
+
+ /**
+ * Reserved item2
+ */
+ TInt iReserved2;
+ };
+//end of classd CControlGroup
+
+#include "peninputlayoutctrlgroup.inl"
+
+#endif //C_CCONTROLBROUP_H
\ No newline at end of file