telutils/dialpad/src/dialpadbuttonstyle.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 03 May 2010 13:01:45 +0300
changeset 15 d7fc66ccd6fb
parent 13 e32024264ebb
permissions -rw-r--r--
Revision: 201015 Kit: 201018

/*!
* Copyright (c) 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: Custom button style
*
*/

#include <hbicon.h>
#include <hbstyleoptionpushbutton.h>
#include <hbframeitem.h>
#include <hbframedrawer.h>
#include "dialpadbuttonstyle.h"

DialpadButtonStyle::DialpadButtonStyle()
    : mButtonStyle(NormalButtonStyle)
{
}

DialpadButtonStyle::~DialpadButtonStyle()
{
}

void DialpadButtonStyle::updatePrimitive(
    QGraphicsItem *item,
    HbStyle::Primitive primitive,
    const QStyleOption *option ) const
{
    switch(primitive){
    case P_PushButton_background:{
        const HbStyleOptionPushButton *opt = 
            qstyleoption_cast<const HbStyleOptionPushButton *>(option);
        HbFrameItem *frameItem = qgraphicsitem_cast<HbFrameItem*>( item );
        if(!frameItem)
            return;

        frameItem->setZValue(-1.0);
        if(opt->backgroundFrameDrawer &&!(opt->backgroundFrameDrawer->isNull())) {
            frameItem->setFrameDrawer( (opt->backgroundFrameDrawer));
        } else {
            QString frameGraphicsName;
            QIcon::Mode mode = QIcon::Disabled;
            QIcon::State state = QIcon::Off;
            if (opt->state & QStyle::State_Enabled)
                mode = QIcon::Normal;
            if (opt->state & QStyle::State_Active)
                mode = QIcon::Active;
            if (opt->state & QStyle::State_Selected)
                mode = QIcon::Selected;
            if (opt->state & QStyle::State_On)
                state = QIcon::On;

            if (mode == QIcon::Disabled && state == QIcon::Off) {
                frameGraphicsName = "qtg_fr_input_btn_function_disabled";
            } else if (mode == QIcon::Normal && state == QIcon::On) {
                if (mButtonStyle==CallButtonStyle) {
                    frameGraphicsName = "qtg_fr_btn_green_pressed";
                } else if (mButtonStyle==NormalButtonStyle) {
                    frameGraphicsName = "qtg_fr_input_btn_keypad_pressed";
                } else {
                    frameGraphicsName = "qtg_fr_input_btn_function_pressed";
                }
            } else if (mode == QIcon::Selected && state == QIcon::Off) {
                frameGraphicsName = "qtg_fr_btn_highlight";
            } else {
                if (mButtonStyle==CallButtonStyle) {
                    frameGraphicsName = "qtg_fr_btn_green_normal";
                } else if (mButtonStyle==NormalButtonStyle) {
                    frameGraphicsName = "qtg_fr_input_btn_keypad_normal";
                } else {
                    frameGraphicsName = "qtg_fr_input_btn_function_normal";
                }
            }

            frameItem->frameDrawer().setFrameGraphicsName(frameGraphicsName);
            if (!opt->background.isNull()) {
                QString customName = opt->background.iconName(mode, state);
                frameItem->frameDrawer().setFrameGraphicsName(customName);
                frameItem->setGeometry(opt->rect);
                frameItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
                break;
            }
            frameItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
        }

        frameItem->setGeometry(opt->rect);
        break;
    }

    default:
        HbStyle::updatePrimitive(item,primitive,option);
        break;
    } // switch
}

void DialpadButtonStyle::setButtonStyle(ButtonStyle style)
{
    mButtonStyle = style;
}