ganeswidgets/src/hgmediawall_p.cpp
author hgs
Fri, 06 Aug 2010 09:27:34 +0300
changeset 12 6c0ec0ccd2d4
parent 11 42505cd701c6
permissions -rw-r--r--
201031

/*
* Copyright (c) 2010 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:
*
*/

#include <HbTextItem>
#include <HbEvent>
#include <QApplication>
#include "hgmediawall_p.h"
#include "hgwidgetitem.h"
#include "hgcoverflowcontainer.h"
#include "hgcenteritemarea.h"
#include "trace.h"

HgMediawallPrivate::HgMediawallPrivate() : HgWidgetPrivate()
{
    FUNC_LOG;
    mStaticScrollDirection = true;
}

HgMediawallPrivate::~HgMediawallPrivate()
{
    FUNC_LOG;
}

void HgMediawallPrivate::init(Qt::Orientation orientation)
{
    FUNC_LOG;

    Q_Q(HgMediawall);

    mTitleItem = new HbTextItem("", q);
    q->style()->setItemName(mTitleItem, "title");
    mTitleItem->setElideMode(Qt::ElideRight);

    mDescriptionItem = new HbTextItem("", q);
    q->style()->setItemName(mDescriptionItem, "description");
    mDescriptionItem->setElideMode(Qt::ElideRight);
    
    mCenterItemArea = new HgCenterItemArea(q);
    q->style()->setItemName(mCenterItemArea, "centeritem");

    HgCoverflowContainer* container = new HgCoverflowContainer(q);
    q->style()->setItemName(container, "content");
    container->setCenterItemArea(mCenterItemArea);
    // Mediawall supports only horizontal scrolling.
    container->init(orientation);

    HgWidgetPrivate::init(container);

    q->connect( container, SIGNAL(animationAboutToEnd(QModelIndex)),
                q, SIGNAL(animationAboutToEnd(QModelIndex)) );
}

void HgMediawallPrivate::setTitleFontSpec(const HbFontSpec &fontSpec)
{
    FUNC_LOG;

    Q_Q(HgMediawall);
    if (mTitleItem) {
        mTitleItem->setFontSpec(fontSpec);
    }
}

HbFontSpec HgMediawallPrivate::titleFontSpec() const
{
    FUNC_LOG;

    if (mTitleItem) {
        return mTitleItem->fontSpec();
    }
    return HbFontSpec();
}

void HgMediawallPrivate::setDescriptionFontSpec(const HbFontSpec &fontSpec)
{
    FUNC_LOG;

    Q_Q(HgMediawall);
    if (mDescriptionItem) {
        mDescriptionItem->setFontSpec(fontSpec);
    }
}

HbFontSpec HgMediawallPrivate::descriptionFontSpec() const
{
    FUNC_LOG;

    if (mDescriptionItem) {
        return mDescriptionItem->fontSpec();
    }
    return HbFontSpec();
}

HgCoverflowContainer *HgMediawallPrivate::container()
{
    HANDLE_ERROR_NULL(mContainer);
    return qobject_cast<HgCoverflowContainer *>(mContainer);
}

const HgCoverflowContainer *HgMediawallPrivate::container() const
{
    HANDLE_ERROR_NULL(mContainer);
    return qobject_cast<const HgCoverflowContainer *>(mContainer);
}

void HgMediawallPrivate::updateCurrentItem(const QModelIndex &currentItem)
{
    FUNC_LOG;

    if (!mContainer || !currentItem.isValid()) return;

    HgWidgetItem* item = mContainer->itemByIndex(currentItem);
    INFO("Updating texts for index" << currentItem << ", " << item);

    if (item) {
        mTitleItem->setText(item->title());
        mDescriptionItem->setText(item->description());
    }
}

void HgMediawallPrivate::handleThemeChanged()
{
    HgWidgetPrivate::handleThemeChanged();
    
    if (mTitleItem || mDescriptionItem) {
        Q_Q(HgMediawall);
    
        // this is needed to enforce color fetch from CSS
        HbEvent themeEvent(HbEvent::ThemeChanged);
        QApplication::sendEvent(q, &themeEvent);    
    }
}

// EOF