browserui/browser/FavouritesInc/CommandVisibility.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:31:04 +0100
branchRCL_3
changeset 48 8e6fa1719340
parent 0 84ad3b177aa3
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201032 Kit: 201035

/*
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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: 
*      Declaration of class TCmdVisibility.
*      
*
*/


#ifndef COMMAND_VISIBILITY_H
#define COMMAND_VISIBILITY_H

// INCLUDE FILES

#include <e32base.h>

// FORWARD DECLARATION

struct TBrowserFavouritesSelectionState;

// CLASS DECLARATION

/**
* Visibility info on one menu command. Unfortunately this cannot be put into
* a class, since it is initialized statically. Commands of menu panes are
* put into TCommandVisibilityMap-s (an array of TCommandVisibilityInfo).
* One TCommandVisibilityInfo contains the following information:
* 0. TInt The command.
* 1-5. Visibility under different selection conditions.
* TCommandVisibility::TIndex is used to index into the array.
*/
typedef const TInt TCommandVisibilityInfo[6];

/**
* Variable length array of TCommandVisibilityInfo (i.e. commands and their
* visibility); the array is terminated with -1. This array is handled by
* TCommandVisibility.
*/
typedef const TCommandVisibilityInfo* TCommandVisibilityMap;

/*
* This struct provides a way to initialize menu panes with using visibility
* info arrays.
*/
class TCommandVisibility
    {
    public:     // types

        /*
        * Indexes into the visibility info.
        */
        enum TIndex
            {
            ECommand = 0,   ///<      The command.
            ENothing,       ///< (0)  Visibility (nothing is selected).
            EOneItem,       ///< (1i) Visibility (one item is selected).
            EOneFolder,     ///< (1f) Visibility (one folder is selected).
            EMoreItems,     ///< (*i) Visibility (more selected no folders).
            EItemsFolders,  ///< (*)  Visibility (more selected, incl folders).
            EInvalid = -1   ///<      Unused (sanity checking).
            };

    public:     // new methods

        /**
        * Apply visibility to this menu pane (dim commands).
        * @param aMenuPane Menu pane to dim.
        * @param aCommandInfo Command visibility info to apply.
        * @param aIndex Index to use.
        */
        static void Apply
            (
            CEikMenuPane* aMenuPane,
            TCommandVisibilityMap aCommandInfo,
            TIndex aIndex
            );

        /**
        * Checks whether the menu item can be shown. As this method does not
        * get any menu panes, it will not dim menu items.
        * @param aCommandInfo Command visibility info to apply.
        * @param aIndex Index to use.
        * @return EFalse if the menu item for the appropriate command is not
        * to be shown. This method returns EFalse otherwise.
        */
        static TBool Apply
            (
            const TCommandVisibilityInfo& aCommandInfo,
            TIndex aIndex
            );

        /**
        * Calculate index into the visibility info, based on selection state.
        * @param aSelectionState Selection state.
        * @param aMarkedOnly If ETrue, consider only marked items.
        * @return The index.
        */
        static TIndex Index
            (
            const TBrowserFavouritesSelectionState& aSelectionState,
            TBool aMarkedOnly
            );
    };


// CONSTANTS

// Controlling the visibility.
#define SHOW ETrue      ///< Show this command (do not dim).
#define DIM EFalse      ///< Dim this command.
#define CUSTOM ETrue    ///< Custom handling (for the moment, do not dim).
#define VOID ETrue      ///< Never evaluated.

#endif

// End of file