ipsservices/ipssossettings/inc/ipssetuifinder.h
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsservices/ipssossettings/inc/ipssetuifinder.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,319 @@
+/*
+* Copyright (c) 2007 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:  Decleares class for tree structure searching.
+*
+*/
+
+
+#ifndef IPSSETUIITEMFINDER_H
+#define IPSSETUIITEMFINDER_H
+
+#include <e32base.h>
+
+#include "ipssetuiitembase.h"
+#include "ipssetuifinderinterface.h"
+
+class CIpsSetUiItem;
+
+
+/**
+ *  Class to find item(s) from the setting tree
+ *
+ *  @lib IpsSosSettings.lib
+ *  @since FS v1.0
+ */
+class CIpsSetUiFinder : public CBase
+    {
+public:
+
+// Constructors and destructor
+
+    /**
+     * Destructor
+     */
+    ~CIpsSetUiFinder();
+
+    /**
+     * @param aObserver Observer for search operation.
+     * @return New finder object.
+     */
+    static CIpsSetUiFinder* NewL(
+        MIpsSetUiFinder& aObserver );
+
+    /**
+     * @param aObserver Observer for search operation.
+     * @return New finder object.
+     */
+    static CIpsSetUiFinder* NewLC(
+        MIpsSetUiFinder& aObserver );
+
+// New functions
+
+    /**
+     * Set method to member iSearchFlags
+     * @param aSearchFlags, Sets value of iSearchFlags
+     */
+    void SetSearchFlags( const TUint64& aSearchFlags );
+
+    /**
+     * Get function for member iSearchFlags
+     * @return value of iSearchFlags
+     */
+    TUint64 SearchFlags() const;
+
+    /**
+     *
+     * @param aItemArray Array to be searched.
+     */
+    void StartSearchL(
+        CIpsSetUiBaseItemArray& aItemArray,
+        const TUid& aId );
+
+    /**
+     *
+     * @param aItemArray Array to be searched.
+     *
+     */
+    void StartSearchL(
+        CIpsSetUiBaseItemArray& aItemArray,
+        const TInt aItem );
+
+    /**
+     * Get function for member iFinderArray
+     * @return value of iFinderArray
+     */
+    CIpsSetUiFinderArray* FinderArray() const;
+
+    /**
+     * Gets the copy of finder array and saves it to stack
+     * @return value of iFinderArray
+     */
+    CIpsSetUiFinderArray* FinderArrayLC() const;
+
+private:
+
+// Constructors
+
+    /**
+     * Constructor
+     *
+     * @param aObserver Observer for search operation.
+     */
+    CIpsSetUiFinder(
+        MIpsSetUiFinder& aObserver );
+
+    /**
+     * 2nd phase constructor
+     */
+    void ConstructL();
+
+// New functions
+
+    /**
+     * Prepare for search.
+     *
+     * @param aNth Start from nth item in the array.
+     */
+    void InitializeSearchL( const TInt aNth );
+
+    /**
+     * Clear all internal data.
+     */
+    void FinalizeSearchL();
+
+    /**
+     * Check, if the search criterias have been met.
+     *
+     * @param aCurrentItem Index of the current item
+     * @param aMaxItems Maximum number of items in the array.
+     * @return ETrue, when the search should be continued.
+     */
+    TBool ContinueSearch(
+        const TInt aCurrentItem,
+        const TInt aMaxItems );
+
+    /**
+     * @return ETrue, when the item fills the search criterias.
+     */
+    TBool SearchingItem();
+
+    /**
+     * Adds new branch to search array.
+     */
+    void ItemToArrayL();
+
+    /**
+     * Item check for ID search algorithm.
+     *
+     * @param aId Id to be searched
+     */
+    void ItemCheckL( const TUid& aId );
+
+    /**
+     * Item check for index search algorithm.
+     */
+    void ItemCheckL();
+
+    /**
+     * @return ETrue, when item doesn't have container for other items.
+     */
+    TBool ItemSubArrayCheck();
+
+    /**
+     * @return ETrue, when search criterias are not met.
+     */
+    TBool ContinueSubSearch();
+
+    /**
+     * Intelligence to search the ID from the subarrays.
+     *
+     * @param aId Id to be searched
+     */
+    void DoIdSearchSubArraysL( const TUid& aId );
+
+    /**
+     * Intelligence to search index from the sub arrays.
+     */
+    void DoIndexSearchSubArraysL();
+
+    /**
+     * Stops the search opertion.
+     */
+    void DoEndSearch();
+
+    /**
+     * Main intelligence to search ID from the tree.
+     *
+     * @param aItemArray Array to be searched.
+     * @param aId Id to be searched
+     */
+    void DoIdSearchL(
+        CIpsSetUiBaseItemArray& aItemArray,
+        const TUid& aId );
+
+    /**
+     * Main intelligence for index search.
+     * @param aItemArray Array to be searched.
+     */
+    void DoIndexSearchL( CIpsSetUiBaseItemArray& aItemArray );
+
+    /**
+     * Searches for the item from the array based on the id.
+     *
+     * @param aItemArray Array, which may contain the item.
+     * @param aId Id to be searched
+     */
+    void SearchIdFromTreeL(
+        CIpsSetUiBaseItemArray& aItemArray,
+        const TUid& aId );
+
+    /**
+     * Searches for the item's index from the given array.
+     *
+     * @param aItemArray Array to be searched.
+     */
+    void SearchIndexFromTreeL(
+        CIpsSetUiBaseItemArray& aItemArray );
+
+    /**
+     * @return ETrue, when item is hidden. Otherwise EFalse.
+     */
+    TBool IsHidden();
+
+    /**
+     * Check wheter searching has met the conditions to finish itself.
+     */
+    void SearchShouldStop();
+
+public:
+
+// Data
+
+    /** Flags to control finder's search routine. */
+    enum TIpsSetUiFinderFlags
+        {
+        // Following flags are for set up the search
+
+        // When enabled, user defined check is made
+        EFinderCustomCheck          = 0x001,
+        // Includes subfolders in search
+        EFinderSearchSubFolders     = 0x002,
+        // Overrides the item spesific tests for one round
+        EFinderOverrideChecks       = 0x004,
+        // Hidden items will not be included into the search
+        EFinderDoHideCheck          = 0x008,
+        // Searches for resources instead of item
+        EFinderResourceSearch       = 0x010,
+        // Goes through whole array regardless of hits
+        EFinderSearchAll            = 0x020,
+        // Keeps the last search result in memory
+        EFinderKeepLastResult       = 0x040,
+        // Searches items that doesn't match the set
+        EFinderExlusiveSearch       = 0x080,
+        // The result tree's ownership is moved to client
+        EFinderMoveOwnership        = 0x100,
+
+        // Following flags are mainly for internal use
+        EFinderItemFound            = 0x200,
+        EFinderItemFindError        = 0x400,
+        EFinderExit                 = 0x800
+        };
+
+private:
+
+// Data
+
+
+    /**
+     * Observer for search operation.
+     */
+    MIpsSetUiFinder&        iObserver;
+
+    /**
+     * Flags to control the finder
+     */
+    TUint64                 iSearchFlags;
+
+    /**
+     * Container for subarrays.
+     * Owned.
+     */
+    CIpsSetUiBaseItemArray* iSubArrays;
+
+    /**
+     * Temporary item storage.
+     * Not owned.
+     */
+    CIpsSetUiItem*          iTempItem;
+
+    /**
+     * Starting point as index for search.
+     */
+    TInt                    iSearchItem;
+
+    /**
+     * Current item index, used for passing forward
+     */
+    TInt                    iCurrentItem;
+
+    /**
+     * Container for search results.
+     * Owned.
+     */
+    CIpsSetUiFinderArray*   iFinderArray;
+    };
+
+#endif      // IPSSETUIITEMFINDER_H
+
+// End of File