idlehomescreen/inc/xneditmode.h
branchRCL_3
changeset 83 5456b4e8b3a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/inc/xneditmode.h	Wed Sep 01 12:32:46 2010 +0100
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2002-2004 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: Edit mode for widget drag and drop.
+*
+*/
+
+#ifndef XNEDITMODE_H
+#define XNEDITMODE_H
+
+// System includes
+#include <coecntrl.h>
+
+// Forward declarations
+class CXnUiEngine;
+class CXnViewManager;
+class CXnPluginData;
+class CXnNode;
+class CFbsBitGc;
+class CFbsBitmap;
+class CFbsBitmapDevice;
+class CWindowToBitmapMappingGc;
+
+// Class declaration
+
+/**
+ * Edit mode. Enables widget drag and drop.
+ *
+ * @ingroup group_xnlayoutengine
+ * @lib xnlayoutengine.lib
+ * @since Series 60 5.1
+ */
+NONSHARABLE_CLASS( CXnEditMode ) : public CCoeControl  
+    {
+public:
+    // Data types
+    enum TEditState
+        {
+        ENone = 0x00,
+        EWaitDrag = 0x01,        
+        EShootContent = 0x02,
+        EDragging = 0x04,
+        EDragAndDrop = 0x08,
+        EKeyMove = 0x10
+        };
+
+public:
+    /**
+     * Two-phased constructor.
+     */
+    static CXnEditMode* NewL( CXnUiEngine& aUiEngine );
+
+    /**
+     * Destructor.
+     */
+    ~CXnEditMode();
+
+private:
+    // from CCoeControl
+
+    /**
+     * @see CCoeControl
+     */
+    void Draw( const TRect& aRect ) const;
+
+    /**
+     * @see CCoeControl
+     */    
+    void MakeVisible( TBool aVisible );
+
+    /**
+     * @see CCoeControl
+     */        
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+
+    /**
+     * @see CCoeControl
+     */        
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, 
+            TEventCode aType );
+
+    /**
+     * @see CCoeControl
+     */            
+    void SizeChanged();
+            
+public:
+    // New functions
+
+    /**
+     * Changes the state of edit mode.
+     *
+     * @since Series 60 5.0
+     * @param aSet The state of edit mode.     
+     */
+    void SetEditModeL( CXnEditMode::TEditState aSet );
+
+    /**
+     * Gets the status of the edit mode.
+     *
+     * @since Series 60 5.0
+     * @return Edit mode state.
+     */
+    CXnEditMode::TEditState EditState() const;
+    
+    /**
+     * This is for to re-initializing the double buffer when the orientations
+     * is changed
+     *
+     * @since Series 60 5.0
+     */
+    void HandleScreenDeviceChangedL();
+
+    /**
+     * Sets control rect.
+     *
+     * @since Series 60 5.0
+     */
+    void SetClientRect( TRect aRect );
+
+    /**
+     * Reset the dragging state and update screen
+     *
+     * @since Series 60 5.0
+     */
+    void StopDraggingL();
+
+private:
+    // new functions
+
+    /**
+     * Organizing starts using drag and drop.
+     *
+     * @since Series 60 5.0
+     * @param aPlugin Plugin to drag.
+     */
+    void StartDragL( const CXnPluginData& aPlugin );
+    
+    /**
+     * Reset the dragging state and deletes screenshot bitmaps.
+     *
+     * @since Series 60 5.0
+     */
+    void StopDragL();
+    
+    /**
+     * Updates invalid parts of the screen. Calls internally DrawNow
+     *
+     * @since Series 60 5.0     
+     */
+    void UpdateScreen();
+    
+private:    
+    // Constructors
+    
+    /**
+     * C++ default constructor.
+     */
+    CXnEditMode( CXnUiEngine& aEngine );
+
+    /**
+     * 2nd phase constructor.
+     */    
+    void ConstructL();
+    
+private:
+    // Data
+
+    /**
+     * UI engine
+     * Not own.
+     */
+    CXnUiEngine& iUiEngine;
+
+    /**
+     * View manager
+     * Not own.
+     */
+    CXnViewManager& iViewManager;
+    
+    /**
+     * Screenshot of part of mainpane
+     * Owned
+     */    
+    CFbsBitmap* iMainpane;
+
+    /**
+     * Screenshot of widget
+     * Owned
+     */
+    CFbsBitmap* iWidget;
+    
+    /**
+     * Mapping Gc
+     * Owned
+     */
+    CWindowToBitmapMappingGc* iMapGc;
+    
+    /**
+     * Bmp device
+     * Owned
+     */
+    CFbsBitmapDevice* iBmpDevice;
+    
+    /**
+     * Bmp Gc
+     * Owned
+     */
+    CFbsBitGc* iBmpGc;          
+    
+    /**
+     * A pointer to the node that is being dragged.
+     * Not own.
+     */
+    CXnNode* iDraggingNode;
+
+    /**
+     * A pointer to the node that is underneath of the dragging node.
+     * Not own.
+     */
+    CXnNode* iTargetNode;
+    
+    /**
+     * State of edit mode
+     */
+    CXnEditMode::TEditState iState;
+        
+    /**
+     * A point where dragging started from.
+     */
+    TPoint iStylusDownPos;
+
+    /**
+     * A point where drawing was done last time.
+     */
+    TPoint iPreviousPos;
+               
+    /**
+     * Screenshot draw position
+     */
+    TPoint iDrawPos;
+    
+    /**
+     * Last redraw rect
+     */
+    TRect iLastDrawRect;
+    
+    /**
+     * Flag determine whether drag is occured
+     */
+    TBool iDragged;
+    };
+
+#endif