phoneuis/bubblemanager2/bubblecore/src/bubbleexpandedhandler.cpp
author hgs
Mon, 04 Oct 2010 16:06:10 +0300
changeset 76 cfea66083b62
parent 65 2a5d4ab426d3
permissions -rw-r--r--
201039

/*!
* 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:  Expanded call bubble handler.
*
*/

#include <QtGui>
#include <hbaction.h>
#include <hbtextitem.h>

#include "bubblemanager2.h"
#include "bubbleexpandedhandler.h"
#include "bubbleheader.h"
#include "bubbleutils.h"
#include "bubbleimagewidget.h"
#include "bubbleheadingwidget.h"
#include "bubblebutton.h"

BubbleExpandedHandler::BubbleExpandedHandler(
    BubbleWidgetManager& widgetManager,
    BubbleWidgetManager::View view,
    BubbleWidgetManager::Container container,
    QObject* parent )
    : BubbleHandler(widgetManager,view,container,parent)
{
    mHeading = qobject_cast<BubbleHeadingWidget*>(
        widget(BubbleWidgetManager::Heading));
    Q_ASSERT(mHeading);

    mImage = qobject_cast<BubbleImageWidget*>(
        widget(BubbleWidgetManager::Image));
    Q_ASSERT(mImage);

    mButtonCenter = qobject_cast<BubbleButton*>(
        widget(BubbleWidgetManager::CenterButton));
    Q_ASSERT(mButtonCenter);
    mButtonLeft = qobject_cast<BubbleButton*>(
        widget(BubbleWidgetManager::LeftButton));
    Q_ASSERT(mButtonLeft);
    mButtonRight = qobject_cast<BubbleButton*>(
        widget(BubbleWidgetManager::RightButton));
    Q_ASSERT(mButtonRight);

    reset();
}

BubbleExpandedHandler::~BubbleExpandedHandler()
{
}

void BubbleExpandedHandler::reset()
{  
    mHeader = 0;
    mButtonCenter->hide();
    mButtonCenter->setDown(false);
    mButtonCenter->disconnect();
    mButtonLeft->hide();
    mButtonLeft->setDown(false);
    mButtonLeft->disconnect();
    mButtonRight->hide();
    mButtonRight->setDown(false);
    mButtonRight->disconnect();
    mImage->hide();
    mHeading->reset();
}

void BubbleExpandedHandler::readBubbleHeader(
    const BubbleHeader& header )
{
    mHeader = &header;

    mHeading->readBubbleHeader(header);

    if (!header.callImage().isEmpty() ||
        header.showDefaultAvatar()) {
        mImage->setImageName(header.callImage());
        if (header.callFlags()&BubbleManagerIF::EmergencyCall) {
            mImage->displayEmergencyCallIcon();
        }
        mImage->show();
    } else {
        mImage->hide();
    }

    setButtons(mHeader->actions());
}

void BubbleExpandedHandler::setButtons(const QList<HbAction*>& actions)
{
    if ( actions.count()==1 && mButtonCenter ) {
        HbAction* action = actions.at(0);
        mButtonCenter->setIcon( action->icon() );
        connect(mButtonCenter, SIGNAL( clicked() ),
                action, SLOT( trigger() ) );
        connect(mButtonCenter, SIGNAL( longPress(QPointF)),
                action, SLOT( trigger() ) );
        BubbleUtils::setButtonStyleForAction(*mButtonCenter,*action);
        mButtonCenter->show();
    } else  if (actions.count()==2 && mButtonLeft && mButtonRight ) {
        // Left button
        HbAction* action1 = actions.at(0);
        mButtonLeft->setIcon(action1->icon());
        connect( mButtonLeft, SIGNAL( clicked() ),
                 action1, SLOT( trigger() ) );
        connect( mButtonLeft, SIGNAL( longPress(QPointF)),
                 action1, SLOT( trigger() ) );
        BubbleUtils::setButtonStyleForAction(*mButtonLeft,*action1);
        mButtonLeft->show();
        // Right button
        HbAction* action2 = actions.at(1);
        mButtonRight->setIcon( action2->icon() );
        connect( mButtonRight, SIGNAL( clicked() ),
                 action2, SLOT( trigger() ) );
        connect( mButtonRight, SIGNAL( longPress(QPointF)),
                 action2, SLOT( trigger() ) );
        BubbleUtils::setButtonStyleForAction(*mButtonRight,*action2);
        mButtonRight->show();
    }
}

QGraphicsWidget* BubbleExpandedHandler::graphicsWidgetForAction(
    HbAction* action ) const
{
    if ( mButtonLeft->text() == action->text() ) {
        return mButtonLeft;
    } else if ( mButtonRight->text() == action->text() ) {
        return mButtonRight;
    } else if ( mButtonCenter->text() == action->text() ) {
        return mButtonCenter;
    } else {
        return 0;
    }
}

void BubbleExpandedHandler::updateTimerDisplayNow()
{
    mHeading->updateTimerDisplayNow();
}