photosgallery/viewframework/uiutilities/src/glxvisualutilities.cpp
branchRCL_3
changeset 24 ea65f74e6de4
parent 23 b023a8d2866a
child 25 8e5f6eea9c9f
--- a/photosgallery/viewframework/uiutilities/src/glxvisualutilities.cpp	Thu Jul 15 18:39:01 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-/*
-* Copyright (c) 2008-2009 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:    ALF visual utilities
-*
-*/
-
-
-
-
-// CLASS HEADER
-#include "glxvisualutilities.h"
-
-// EXTERNAL HEADERS
-#include <uiacceltk/huicontrol.h>
-#include <uiacceltk/huivisual.h>
-
-namespace NGlxVisualUtilities
-    {
-    /**
-     * TGlxVisualTransferCleanup
-     * This class handles the awkward situation in visual ownership transfer
-     * that some of the visuals are transferred to new parent and a leave occurs.
-     * In leave case we need to undo the ownership transfer completely.
-     * This class also removes the ownership from the old control in case
-     * there was no leave.
-     * @usage:
-     * \code
-     *      RArray<CHuiVisual*> allvisuals;
-     *      TGlxVisualTransferCleanup cleanup( allvisuals );
-     *       // set the parent to remove from to be the new one
-     *      cleanup.iParentToRemoveFrom = aNewParent;
-     *      CleanupClosePushL( cleanup );
-     *      // start to append the visuals to the new parent
-     *      // in case of leave they are removed from new parent
-     *      RecurseAndTransferVisualsL( visualcleanup, aVisual, aNewParent );
-     *      // set the parent to remove to be the old one
-     *      cleanup.iParentToRemoveFrom = oldParent;
-     *      // remove the item from cleanupstack,
-     *      // this removes the visuals from their old parent 
-     *      CleanupStack::PopAndDestroy( &cleanup );
-     * \endcode
-     */
-    NONSHARABLE_CLASS( TGlxVisualTransferCleanup )
-    	{
-    	public:
-
-            /**
-    		 * Constructor.
-    		 * @param aArray, the array of Visuals 
-    		 * @param aOldParent, the old parent of visuals
-    		 * @param aNewParent, the new parent for visuals
-    		 */
-    		inline TGlxVisualTransferCleanup( 
-                RArray<CHuiVisual*>& aArray )
-                : iArray( aArray )
-    			{
-                }
-
-            /**
-             * Close. Put this class to Cleanupstack with 
-             * CleanupClosePushL so that this gets called in case of a leave
-             */
-            inline void Close()
-                {
-                // need to remove all visuals from the given parent
-                // loop through all the CHuiVisuals
-                for( TInt i = 0; i < iArray.Count(); ++i )
-                    {
-                    // remove from the given parent
-                    iParentToRemoveFrom->Remove( iArray[ i ] );
-                    }
-                // reset the array
-                iArray.Reset();
-                }
-
-            /// Ref: the parent where to remove
-            MHuiVisualOwner* iParentToRemoveFrom;
-
-        private: // Implementation
-
-            /// Ref: the array containing all the visuals
-            RArray<CHuiVisual*>& iArray; 
-
-    	};
-
-    /**
-     * Recursive helper method to transfer the ownership of visuals
-     * @param aVisualCleanup an array containing all visuals in the hierarchy
-     * @param aVisual the visual to move to new control
-     * @param aNewParent the new parent for the visual
-     */
-    void RecurseAndTransferVisualsL(
-        RArray<CHuiVisual*>& aVisualCleanup,
-        CHuiVisual& aVisual, CHuiControl& aNewParent )
-        {
-        // make room to the pointer so that we always succeed in appending
-        // Note that we need to make room for one new item, thus count + 1
-        aVisualCleanup.ReserveL( aVisualCleanup.Count() + 1 );
-        // append us to the new parent, Note that for a while we are
-        // owner by two controls but thats not a problem as the other parent 
-        // is removed by either TGlxVisualTransferCleanup.Close() by CleanupStack
-        // or destructor of TGlxVisualTransferCleanup and there is no other way
-        // of getting out from this method (of course panic is ;)
-        aNewParent.AppendL( &aVisual );
-        // add us in the cleanuparray so that we can be removed from the 
-        // new parent in case some of the following AppendLs leave
-        // this does not fail as reserve was called so no AppendL needed
-        aVisualCleanup.Append( &aVisual );
-        // check if the visual has childs
-        TInt childCount = aVisual.Count();
-        // transfer all the childs
-        while( childCount-- > 0 )
-            {
-            // get the child
-            CHuiVisual& childVisual = aVisual.Visual( childCount );
-            // call transfer recursively on the child
-            RecurseAndTransferVisualsL( 
-                aVisualCleanup, childVisual, aNewParent );
-            }
-        }
-
-    // -------------------------------------------------------------------------
-	// TransferVisualsL
-	// -------------------------------------------------------------------------
-    EXPORT_C void TransferVisualsL( 
-        CHuiVisual& aVisual, CHuiControl& aNewParent )
-        {
-        // check if parent is already correct
-        if( &( aVisual.Owner() ) == 
-            static_cast< MHuiVisualOwner* >( &aNewParent ) )
-            {
-            // nothing else to be done
-            return;
-            }
-        // create an array for visual pointers on the stack
-        RArray< CHuiVisual* > visualcleanup;
-        // create the cleanup item from stack as well
-        TGlxVisualTransferCleanup removeParent( visualcleanup );
-        // set the parent to remove from to be the new one
-        removeParent.iParentToRemoveFrom = &aNewParent;
-        // need to remember the old parent
-        MHuiVisualOwner* oldParent = &( aVisual.Owner() );
-        // put it to cleanupstack so that close gets called in case of leave
-        CleanupClosePushL( removeParent );
-        // run the recursive loop, if it leaves the visuals are removed from
-        // new parent by the Close method of cleanParents
-        RecurseAndTransferVisualsL( visualcleanup, aVisual, aNewParent );
-        // set the parent to remove to be the old one
-        removeParent.iParentToRemoveFrom = oldParent;
-        // remove the item from cleanupstack,
-        // this removes the visuals from the old parent 
-        CleanupStack::PopAndDestroy( &removeParent );
-        // close the array
-        visualcleanup.Close();
-        }
-    }