mpviewplugins/mpcollectionviewplugin/src/mpcollectioninfobar.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Mar 2010 09:28:13 +0200
changeset 19 4e84c994a771
permissions -rw-r--r--
Revision: 201007 Kit: 201011

/*
* 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: Music Player collection container information bar.
*
*/

#include <QPainter>
#include <QColor>

#include <hbstackedlayout.h>
#include <hblabel.h>
#include <hbdocumentloader.h>
#include <hbinstance.h>
#include <hbmainwindow.h>

#include "mpcollectioninfobar.h"
#include "mptrace.h"


const char*MUSIC_COLLECTION_INFOBAR_DOCML = ":/docml/musiccollection_infobar.docml";


/*!
    \class MpCollectionInfoBar
    \brief Music Player collection container information bar.

    Collection Info Bar is a custom widget,similar to HbWidget that provides
    up to two text labels, one aligned to left and the other to the right.
*/

/*!
 Constructs the information bar widget.
 */
MpCollectionInfoBar::MpCollectionInfoBar( QGraphicsItem *parent )
    : HbWidget(parent),
      mContainer(0),
      mTextLeft(0),
      mTextRight(0)
{
    TX_ENTRY
    mDocumentLoader = new HbDocumentLoader();
    bool ok = false;
    mDocumentLoader->load( MUSIC_COLLECTION_INFOBAR_DOCML, &ok );
    if ( ok ) {
        QGraphicsWidget *widget;
        widget = mDocumentLoader->findWidget(QString("infoBarContainer"));
        mContainer = qobject_cast<HbWidget*>(widget);

        widget = mDocumentLoader->findWidget(QString("leftText"));
        mTextLeft = qobject_cast<HbLabel*>(widget);

        widget = mDocumentLoader->findWidget(QString("rightText"));
        mTextRight = qobject_cast<HbLabel*>(widget);
    }
    else {
        TX_LOG_ARGS("Error: invalid xml file.");
        Q_ASSERT_X(ok, "MpCollectionInfoBar", "invalid xml file");
    }

    HbStackedLayout *layout = new HbStackedLayout(this);
    layout->addItem(mContainer);

	HbMainWindow *mainWindow = hbInstance->allMainWindows()[0];
    mOrientation = mainWindow->orientation();
    connect( mainWindow, SIGNAL( orientationChanged(Qt::Orientation) ),
             this, SLOT( orientationChange(Qt::Orientation) ) );
    TX_EXIT
}

/*!
 Destructs the widget.
 */
MpCollectionInfoBar::~MpCollectionInfoBar()
{
    TX_ENTRY
    delete mContainer;
    delete mDocumentLoader;
    TX_EXIT
}

/*!
 Sets the left label text to \a textLeft.
 */
void MpCollectionInfoBar::setText(const QString &textLeft)
{
    TX_ENTRY_ARGS("textLeft=" << textLeft);

    mTextLeft->setPlainText(textLeft);
    mTextRight->setPlainText(QString::null);

    bool ok1 = false;
    bool ok2 = false;
    mDocumentLoader->load(MUSIC_COLLECTION_INFOBAR_DOCML, "single", &ok1);
    if ( mOrientation == Qt::Vertical ) {
        mDocumentLoader->load(MUSIC_COLLECTION_INFOBAR_DOCML, "single singlePortrait", &ok2);
    }
    else {
        mDocumentLoader->load(MUSIC_COLLECTION_INFOBAR_DOCML, "single singleLandscape", &ok2);
    }
    if ( !ok1 || !ok2 ) {
        TX_LOG_ARGS("Error: invalid xml file.");
        Q_ASSERT_X((ok1 || ok2), "MpCollectionInfoBar::setText 1", "invalid xml file");
    }
    mSingleText = true;
    TX_EXIT
}

/*!
 Sets the left label text to \a textLeft and the right label text to \a textRight.
 */
void MpCollectionInfoBar::setText(const QString &textLeft, const QString &textRight)
{
    TX_ENTRY_ARGS("textLeft=" << textLeft << ", textRight=" << textRight);

    mTextLeft->setPlainText(textLeft);
    mTextRight->setPlainText(textRight);

    bool ok1 = false;
    bool ok2 = false;
    mDocumentLoader->load(MUSIC_COLLECTION_INFOBAR_DOCML, "double", &ok1);
    if ( mOrientation == Qt::Vertical ) {
        mDocumentLoader->load(MUSIC_COLLECTION_INFOBAR_DOCML, "double doublePortrait", &ok2);
    }
    else {
        mDocumentLoader->load(MUSIC_COLLECTION_INFOBAR_DOCML, "double doubleLandscape", &ok2);
    }
    if ( !ok1 || !ok2 ) {
        TX_LOG_ARGS("Error: invalid xml file.");
        Q_ASSERT_X((ok1 || ok2), "MpCollectionInfoBar::setText 2", "invalid xml file");
    }
    mSingleText = false;
    TX_EXIT
}

/*!
    \reimp
 */
void MpCollectionInfoBar::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    TX_ENTRY
    HbWidget::paint(painter, option, widget);
    QColor color(105,105,105,255);
    painter->fillRect(rect(), color);
    TX_EXIT
}

/*!
 Slot to be called when orientation is changed.
 Loads the correct layout based on the \a orientation.
 */
void MpCollectionInfoBar::orientationChange( Qt::Orientation orientation )
{
    TX_ENTRY
    mOrientation = orientation;
    if ( mSingleText ) {
        setText( mTextLeft->plainText() );
    }
    else {
        setText( mTextLeft->plainText(), mTextRight->plainText() );
    }
    TX_EXIT
}