javauis/lcdui_akn/lcdui/inc/CMIDItem.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 27 Apr 2010 16:30:29 +0300
branchRCL_3
changeset 14 04becd199f91
permissions -rw-r--r--
Revision: v2.1.22 Kit: 201017

/*
* Copyright (c) 2003-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:  ?Description
*
*/


#ifndef CMIDITEM_H
#define CMIDITEM_H

// CEikBorderedControl inheritance in class declaration
#include <eikbctrl.h>
#include "lcdui.h"
// API for using commands that item owns
#include "CMIDCommand.h"

class CMIDCommandList;
class CMIDForm;
class CMIDMenuHandler;
class CMIDUIManager;

// Base class for all Items

NONSHARABLE_CLASS(CMIDItem) : public CEikBorderedControl, public MMIDCommandObserver
{
public:
    virtual ~CMIDItem();
    //
    // Returns basic properties shared by all items
    //
    virtual TPtrC Label() const;
    MMIDItem::TLayout Layout() const;
    CMIDCommandList* CommandList() const;
    virtual TBool IsSelectable() const = 0;
    /**
     * Returns the appropriate command for the MSK at the moment. It can be a
     * built-in command if set or a default command, if set.
     **/
    CMIDCommand* GetMSKCommand() const;
    CMIDCommand* DefaultCommand() const;
    virtual void SetForm(CMIDForm* aForm);
    CMIDForm* Form() const;
    virtual void ItemAddedToFormL();
    virtual void ItemRemovedFromForm();
    virtual void HandleCurrentL(TBool aCurrent);

    /**
     * Used to notify item that form scrolling has been completed and
     * new position has been set for the item.
     *
     * @since S60 3.2
     */
    virtual void NotifyScrollingCompleted();

    //
    // Get functions used by form
    //
    TSize PreferredSize();
    MMIDItem::TLayout Layout();
    virtual TInt ItemPreferredHeightWithoutLabel() = 0;
    //
    // Set functions used by form
    //
    void SetPreferredWidth(TInt aWidth);
    void SetPreferredHeight(TInt aHeight);
    void SetLayoutL(MMIDItem::TLayout aLayout);
    //
    virtual TInt Type();

    /**
     * Command handling function from MMIDCommandObserver. Default implementation
     * in CMIDItem is empty, but subclasses can override the method if they
     * provide commands that need to be processed internally rather than sent
     * to Java side (e.g. build-in MSK commands).
     **/
    TBool ProcessCommandL(CMIDCommand* aCommand);

    /**
     * Get UI manager
     * @return CMIDUIManager instance
     *
     * @since s60
     */
    virtual CMIDUIManager* GetUIManager() const;

protected:
    CMIDItem(MMIDItem::TLayout aLayout, CMIDUIManager* aUIManager);
    void ConstructL();
    //
    // Sets some basic item properties from subclasses
    //
    virtual void SetLabelL(const TDesC& aLabel);
    /**
     * Adds command for item
     * @param aCommand - command to add
     * @param aFormNotification - form notification flag
     *          ETrue (default) - form is notified about command change
     *          EFalse - avoid form notification
     */
    void AddCommandL(MMIDCommand* aCommand, TBool aFormNotification = ETrue);
    /**
     * Remove command from item
     * @param aCommand - command to remove
     * @param aFormNotification - form notification flag
     *          ETrue (default) - form is notified about command change
     *          EFalse - avoid form notification
     */
    void RemoveCommand(MMIDCommand* aCommand, TBool aFormNotification = ETrue);
    void SetDefaultCommand(MMIDCommand* aCommand);
    /**
     * Sets a new command to be displayed in the MSK. If the command is
     * not NULL, it will override the default command set by the application
     * programmer.
     * Built-in MSK command is used e.g. in lists for selecting and in date
     * field items to toggle the am/pm field.
     **/
    void SetBuiltInMSKCommand(CMIDCommand* aCommand);

    void NotifyFormAboutCommandChange();

    void SetPreferredSize(const TSize& aSize,const TSize& aMinimumSize);
    virtual TSize CheckRequestedSize(const TSize& aRequestedSize) const;

protected:
    //
    // Layout and label are stored here even though, especially for label, it may
    // be stored in the subclass instead/as well
    //
    MMIDItem::TLayout iLayout;
    HBufC* iLabel;
    //
    CMIDForm* iForm;
    //
    CMIDCommandList* iCommandList;
    //
    // The default command
    //
    CMIDCommand* iDefaultCommand;
    //
    // The built-in MSK command that will override default command if not null.
    CMIDCommand* iBuiltInMSKCommand;
    //
    // This can be used to store the actual preferred size that the item
    // reports
    //
    TSize iPreferredSize;
    //
    // This is set to the size requested by the MIDlet and may not be the
    // actual preferred size reported by the item. It needs to be stored since
    // any recalculation of size needs to take this into account
    //
    TSize iRequestedPreferredSize;
    //
    // Set when this Item is added to a Form.
    // Used to restrict the preferred size.
    //
    TInt iFormWidth;
    // UI manager instance
    CMIDUIManager* iUIManager;
public:
    //
    // For layout algorithm. Calculated by Form
    //
    MMIDItem::TLayout iEffectiveLayout;
    //
    // This defines whether there's a new line BEFORE the item is added
    // to the form. Calculated by Form
    //
    TBool iNewLine;
    //
    // we can use this to get the type
    //
    MMIDItem* iMMidItem;

    CMIDMenuHandler* iMenuHandler; // we don't own this
};

#endif // CMIDITEM_H