extras/calcsoft/src/CalcCmdBtn.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:54 +0100
branchRCL_3
changeset 24 10c6e6d6e4d9
parent 0 3ee3dfdd8d69
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 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 "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:The Function-Map's button class, CCalcCommandButton
*                Derived from CEikCommandButtonBase
*                The CCalcCommandButton is flat button.
*                In making disable, it calls SetDimmed() function.
*
*/


// INCLUDE FILES
#include    <gulicon.h>
#include    <calcsoft.rsg>
#include    <aknutils.h>

#include    "CalcFunc.h"
#include    "CalcCmdBtn.h"
#include    "CalcDrawingConst.laf"
#include <AppLayout.cdl.h>
#include <AknIconUtils.h>
#include "fbs.h"

// skin support
#include    <AknsDrawUtils.h>
#include  <AknLayoutScalable_Avkon.cdl.h>  
#include <aknlayoutscalable_avkon.cdl.common.h>
#include <AknLayout2ScalableDef.h>

#include <aknsconstants.h>
#include <AknLayoutScalable_Apps.cdl.h>

// skin support
#include    <AknsDrawUtils.h>


//  LOCAL CONSTANTS AND MACROS  

// ================= MEMBER FUNCTIONS =======================

// Two-phased constructor.
CCalcCommandButton* CCalcCommandButton::NewL(
                    CCalcFuncmapSubPane* aFuncmapSubPane,
                    const CGulIcon* aUnpressedBmp,
                    const CGulIcon* aPressedBmp,
                    const CGulIcon* aInactiveBmp) 
    {
    CCalcCommandButton* self = new (ELeave) CCalcCommandButton();
    CleanupStack::PushL(self);
    self->ConstructL(aFuncmapSubPane, aUnpressedBmp,
                     aPressedBmp, aInactiveBmp);
    CleanupStack::Pop(self); 
    return self;
    }

// Destructor
CCalcCommandButton::~CCalcCommandButton()
    {
    }



// ---------------------------------------------------------
// CCalcCommandButton::SetStateAndRedraw
// Button state is set and re-draw.
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CCalcCommandButton::SetStateAndRedraw
      (const TState& aState)      
    {
    iState = aState;
    DrawNow();
    }


// ---------------------------------------------------------
// CCalcCommandButton::SetIsSelectedAndRedraw
// Set flag which button is selected or not, and redraw.
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CCalcCommandButton::SetIsSelectedAndRedraw(TBool aIsSelected)
    {
    iIsSelected = aIsSelected;
    DrawNow();    
    }


// ---------------------------------------------------------
// CCalcCommandButton::State
// Button state is returned.
// (other items were commented in a header).
// ---------------------------------------------------------
//
CCalcCommandButton::TState CCalcCommandButton::State() const
    {
    return iState;
    }



// C++ default constructor can NOT contain any code, that
// might leave.
//
CCalcCommandButton::CCalcCommandButton()
        : iState(ENormal),
          iIsSelected(EFalse)
    {
    }

// Second-phase constructor
void CCalcCommandButton::ConstructL
            (CCalcFuncmapSubPane* aFuncmapSubPane,
             const CGulIcon* aUnpressedButtonIcon,
             const CGulIcon* aPressedButtonIcon,
             const CGulIcon* aInactiveButtonIcon)  
    {
    iUnpressedButton = aUnpressedButtonIcon;
    iPressedButton = aPressedButtonIcon;
    iInactiveButton = aInactiveButtonIcon;
    SetContainerWindowL(*aFuncmapSubPane);
    }


// ---------------------------------------------------------
// CCalcCommandButton::SizeChanged
// Data of control is set.
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CCalcCommandButton::SizeChanged()
    {
    TRect buttonRect(Rect());
    TRect aParentRect;
    TAknWindowLineLayout area;
    TAknWindowLineLayout cursor_color;
    
    if (AknLayoutUtils::ScalableLayoutInterfaceAvailable())
		{
	
	area = AknLayoutScalable_Apps::cell_calc_pane_g1().LayoutLine();
	
	// For drawing cursor color.     
    cursor_color = AknLayoutScalable_Apps::grid_highlight_pane_cp02().LayoutLine();
    
    	
		}
	
	else
	{
			
    area = AppLayout::Cell_pane_elements__calc__Line_1();
// For drawing cursor color.     
    cursor_color = AppLayout::Cell_pane_highlight_elements__various__Line_1(aParentRect);
    
	}
	
	area.iC = cursor_color.iC;
    iLayoutRect.LayoutRect(buttonRect,area); 
              
    }

// ---------------------------------------------------------
// CCalcCommandButton::Draw
// Draw a button
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CCalcCommandButton::Draw
      (const TRect& /* aRect */) const  
    {
    const CGulIcon* drawButton = iUnpressedButton;
    
    switch (iState)
        {
        case EPressed:
            {
            drawButton = iPressedButton;
            break;
            }
        case EDimmed:
            {
            drawButton = iInactiveButton;
            break;
            }
        default:
            {
            break;
            }
        }
    CWindowGc& gc = SystemGc();

    // Clear with skin background
    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
    AknsDrawUtils::Background( skin, AknsDrawUtils::ControlContext(this), this, gc, Rect());

	if (AknLayoutUtils::ScalableLayoutInterfaceAvailable())
		{
		TAknWindowLineLayout layout = AknLayoutScalable_Apps::grid_highlight_pane_cp02().LayoutLine();
		TAknWindowLineLayout area = AknLayoutScalable_Apps::cell_calc_pane_g1().LayoutLine();

		TAknLayoutRect topLeft;
		topLeft.LayoutRect(Rect(), area);

		TAknLayoutRect bottomRight;
		bottomRight.LayoutRect(Rect(),area);

		TRect outerRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr);
		TRect innerRect = outerRect;
		innerRect.Shrink(TSize(5,5));
		gc.SetPenStyle(CGraphicsContext::ENullPen);
		 if (iIsSelected)
			TBool highlightDrawn = AknsDrawUtils::DrawFrame(skin, gc, outerRect, innerRect,
			KAknsIIDQsnFrGrid, KAknsIIDNone); 
		}
	else
		{
		if (iIsSelected)
			{
			iLayoutRect.DrawOutLineRect(gc);
			}

		}



	//Set the size of the bitmap. SVG-T upgrade.
	TRect rect(Rect()); 
	 AknIconUtils::SetSize(drawButton->Bitmap(),rect.Size()); 
	 AknIconUtils::SetSize(drawButton->Mask(), rect.Size());
    iLayoutRect.DrawImage(gc, drawButton->Bitmap(), drawButton->Mask());

    }
 
// ---------------------------------------------------------
// CCalcCommandButton::SetBitmapIcons
// Sets the button bitmap Icons when the skin changes.
// ---------------------------------------------------------
//
void CCalcCommandButton::SetBitmapIcons(CGulIcon* aUnpressedBmp,
                    CGulIcon* aPressedBmp,
                    CGulIcon* aInactiveBmp)
{
	iUnpressedButton = aUnpressedBmp;
    iPressedButton = aPressedBmp;
    iInactiveButton = aInactiveBmp;
}

// ---------------------------------------------------------
// CCalcCommandButton::ButtonLayout
// Gets the button layout. Used for pen input.
// ---------------------------------------------------------
//
TRect CCalcCommandButton::ButtonLayout()
	{
	TRect buttonRect(Rect());
	return buttonRect;
	}
//  End of File