ui/views/detailsview/src/glxdetailsview.cpp
changeset 23 74c9f037fd5d
child 24 99ad1390cd33
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/views/detailsview/src/glxdetailsview.cpp	Fri Mar 19 09:28:59 2010 +0200
@@ -0,0 +1,445 @@
+/*
+* 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:   ?Description
+*
+*/
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+
+#include <QModelIndex>
+#include <QtDebug>
+#include <qdatetime.h>
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+
+#include <hbdataform.h>
+#include <hblabel.h>
+#include <hbinstance.h>
+#include <hbiconitem.h>
+#include <hblineedit.h>
+#include <hbdataformmodel.h>
+#include <hbdataformmodelitem.h>
+#include <hbdataformviewitem.h>
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+
+#include <glxmediamodel.h>
+#include "glxdetailsview.h"
+#include "glxmodelparm.h"
+#include "glxdetailscustomwidgets.h"
+#include "glxviewids.h"
+#include <glxcommandhandlers.hrh>
+
+
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//GlxDetailsView
+//--------------------------------------------------------------------------------------------------------------------------------------------
+GlxDetailsView::GlxDetailsView(HbMainWindow *window) :  GlxView ( GLX_DETAILSVIEW_ID),
+    mDetailsPixmap(NULL), 
+    mBlackBackgroundItem(NULL), 
+    mModel(NULL), 
+    mWindow(window), 
+    mDataForm(NULL), 
+    mDetailModel(NULL),
+    mCustomPrototype(NULL),
+    mSelIndex (0)
+{
+    qDebug("@@@GlxDetailsView::GlxDetailsView constructor Enter");
+    setContentFullScreen( true );//for smooth transtion between grid to full screen and vice versa
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//~GlxDetailsView
+//--------------------------------------------------------------------------------------------------------------------------------------------
+GlxDetailsView::~GlxDetailsView()
+{
+    qDebug("@@@GlxDetailsView::~GlxDetailsView Enter");
+
+    if(mDetailsPixmap) {
+        delete mDetailsPixmap;
+        mDetailsPixmap = NULL;
+    }
+
+    if(mDataForm && mDataForm->model()) {
+        delete mDataForm->model();
+        mDataForm->setModel(0);
+    }
+
+    if(mDataForm) {
+        delete mDataForm;
+        mDataForm = NULL;
+    }
+
+
+    if(mBlackBackgroundItem) {
+        delete mBlackBackgroundItem;
+        mBlackBackgroundItem = NULL;
+    }
+    
+    clearCurrentModel();
+    disconnect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(updateLayout(Qt::Orientation)));
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//activate
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::activate()
+{
+    qDebug("@@@GlxDetailsView::activate Enter");
+    setFormData();
+    connect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(updateLayout(Qt::Orientation)));
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//initializeView
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::initializeView(QAbstractItemModel *model)
+{   
+    qDebug("@@@GlxDetailsView::initializeView Enter");
+    
+    mBlackBackgroundItem = new HbIconItem(this);
+    mBlackBackgroundItem->setBrush(QBrush(Qt::black));
+    mBlackBackgroundItem->hide();
+
+    //To show the thumbnail 
+    mDetailsPixmap = new QGraphicsPixmapItem(this);
+
+    //Create the form and the model for the data form
+    mDataForm = new HbDataForm(this);
+    mDetailModel = new HbDataFormModel();
+
+    //custom prototype
+    mCustomPrototype = new GlxDetailsCustomWidgets(mDataForm);
+    mDataForm->setItemPrototype(mCustomPrototype);
+
+    //Set the Model
+    mModel = model;
+    initializeNewModel();
+    
+    //Add the Widgets according to the mime type
+    addWidgets();
+    
+    //Set the Layout Correspondingly.
+    updateLayout(mWindow->orientation());
+    
+    //Shows the Image 
+    showImage();
+        
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//resetView
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::resetView()
+{
+ //Do Nothing here
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//deActivate
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::deActivate()
+{ 
+    qDebug("@@@GlxDetailsView::deActivate Enter");
+
+    //mWindow->setItemVisible(Hb::AllItems, FALSE) ;
+
+    if(mDetailsPixmap) {
+        delete mDetailsPixmap;
+        mDetailsPixmap = NULL;
+    }
+
+    if(mDataForm && mDataForm->model()) {
+        delete mDataForm->model();
+        mDataForm->setModel(0);
+    }
+
+    if(mDataForm) {
+        delete mDataForm;
+        mDataForm = NULL;
+    }
+
+    if(mBlackBackgroundItem) {
+        delete mBlackBackgroundItem;
+        mBlackBackgroundItem = NULL;
+    }
+    
+    clearCurrentModel();
+    disconnect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(updateLayout(Qt::Orientation)));
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//addWidgets
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::addWidgets()
+    {
+    qDebug("@@@GlxDetailsView::addWidgets create the form");
+
+    //----------------------------START OF CREATION OF WIDGETS---------------------------------//
+    // To add new widgets in the details view, add it here.
+
+    //---------------------------IMAGE NAME LABEL --------------------------------------------//
+    qDebug("@@@GlxDetailsView::addWidgets create Image name Label"); 
+    HbDataFormModelItem *imageLabelitem = mDetailModel->appendDataFormItem((HbDataFormModelItem::DataItemType)(ImageNameItem), QString("Name"), mDetailModel->invisibleRootItem());
+    imageLabelitem->setData(HbDataFormModelItem::KeyRole,QString(""));
+
+    //---------------------------DATE LABEL --------------------------------------------//
+    qDebug("@@@GlxDetailsView::addWidgets create Image name Label"); 
+    HbDataFormModelItem *dateLabelItem = mDetailModel->appendDataFormItem((HbDataFormModelItem::DataItemType)(DateLabelItem), QString("Date"), mDetailModel->invisibleRootItem());
+    dateLabelItem->setData(HbDataFormModelItem::KeyRole,QString(""));
+
+    //---------------------------LOCATION LABEL--------------------------------------------//
+    qDebug("@@@GlxDetailsView::addWidgets create Location Label");
+    HbDataFormModelItem *locationLabelItem = mDetailModel->appendDataFormItem((HbDataFormModelItem::DataItemType)(LocationTagItem), QString("Location Tag"), mDetailModel->invisibleRootItem());
+    locationLabelItem->setData(HbDataFormModelItem::KeyRole, QString(""));
+
+    //---------------------------DURATION LABEL--------------------------------------------//
+    /*
+     Need to Add a check here for the type of the item, if it is video or image
+     qDebug("@@@GlxDetailsView::addWidgets create Duration Label");
+     HbDataFormModelItem *DurationLabelItem = mDetailModel->appendDataFormItem((HbDataFormModelItem::DataItemType)(DurationItem), QString("Duration"), mDetailModel->invisibleRootItem());
+     DurationLabelItem->setData(HbDataFormModelItem::KeyRole, QString("")); 
+    */
+
+    //----------------------------COMMENTS TEXT ITEM---------------------------------------------//
+    qDebug("@@@GlxDetailsView::addWidgets create Comment text edit");
+    HbDataFormModelItem *commentsLabelItem = mDetailModel->appendDataFormItem((HbDataFormModelItem::DataItemType)(CommentsItem), QString("Comments"), mDetailModel->invisibleRootItem());
+    commentsLabelItem->setData(HbDataFormModelItem::KeyRole, QString(""));
+
+    //----------------------------END OF CREATION OF WIDGETS-------------------------------------//
+
+    //Set the model to the Data Form
+     mDataForm->setModel(mDetailModel);
+    }
+
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//setModel
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::setModel(QAbstractItemModel *model)
+{
+    qDebug("@@@GlxDetailsView::setModel");
+    if ( mModel == model ) {
+        return ;
+    }
+    clearCurrentModel();
+    mModel = model;
+    initializeNewModel();
+}
+
+QGraphicsItem * GlxDetailsView::getAnimationItem(GlxEffect transtionEffect)
+{
+    if ( transtionEffect == FULLSCREEN_TO_DETAIL
+            || transtionEffect == DETAIL_TO_FULLSCREEN ) {
+        return this;
+    }
+    
+    return NULL;    
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//updateLayout
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::updateLayout(Qt::Orientation orient)
+    {
+    qDebug("GlxDetailsView::updateLayout() %d", orient );
+
+    QRect screen_rect = mWindow->geometry(); 
+    setGeometry(screen_rect);
+
+    if(orient == Qt::Horizontal)
+        {
+        qDebug("GlxDetailsView::updateLayout HORIZONTAL");
+
+        mBlackBackgroundItem->setSize(QSize(280,280));
+        mBlackBackgroundItem->setPos(11,71);
+
+        mDetailsPixmap->setPos(15,75);
+        mDetailsPixmap->setZValue(mBlackBackgroundItem->zValue() + 1);
+
+       // mDataForm->setPos(301,5);
+        mDataForm->setGeometry(301,60,335,300);
+
+        }
+    else
+        {
+        qDebug("GlxDetailsView::updateLayout VERTICAL");
+
+        mBlackBackgroundItem->setSize(QSize(310,260));
+        mBlackBackgroundItem->setPos(25,75);
+
+        mDetailsPixmap->setPos(25,75);
+        mDetailsPixmap->setZValue(mBlackBackgroundItem->zValue() + 1);
+
+//        mDataForm->setPos(5,291);
+        mDataForm->setGeometry(5,351,335,300);
+        mDataForm->setMaximumWidth(340);
+        }
+    }
+
+void GlxDetailsView::rowsRemoved(const QModelIndex &parent, int start, int end)
+{
+    Q_UNUSED(parent);
+    Q_UNUSED(start);
+    Q_UNUSED(end);
+    qDebug("GlxDetailsView::rowsRemoved");
+    
+    if ( mModel->rowCount() <= 0 ) {
+        return emit actionTriggered( EGlxCmdEmptyData );
+    }
+    
+    if ( start <= mSelIndex && end >= mSelIndex ) {
+        return emit actionTriggered( EGlxCmdBack );
+    }
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//showImage
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::showImage()
+    {
+    qDebug("GlxDetailsView::showImage() Enter" );
+    
+    QVariant variant = mModel->data( mModel->index(0,0), GlxFocusIndexRole );    
+    if ( variant.isValid() &&  variant.canConvert<int> () ) {
+        mSelIndex = variant.value<int>();  
+    }
+
+    variant = mModel->data( mModel->index( mSelIndex ,0), GlxFsImageRole);
+    if ( variant.isValid() &&  variant.canConvert<HbIcon> () )
+        {
+        QIcon itemIcon = variant.value<HbIcon>().qicon();
+        if(mWindow->orientation() == Qt::Horizontal)
+            {
+            qDebug("GlxDetailsView::showImage HORIZONTAL");
+            QPixmap itemPixmap = itemIcon.pixmap(128,128);
+            QSize sz( 270, 270);
+            itemPixmap = itemPixmap.scaled(sz, Qt::IgnoreAspectRatio );
+            if(itemPixmap.isNull())
+                {
+                qDebug("@@@GlxDetailsView::showImage Null Pixmap");
+                }
+            else
+                {
+                qDebug("@@@GlxDetailsView::showImage NOT --Null Pixmap");
+                mDetailsPixmap->setPixmap(itemPixmap);
+                }
+            }
+        else
+            {
+            qDebug("GlxDetailsView::showImage VERTICAL");
+
+            QPixmap itemPixmap = itemIcon.pixmap(128,128);
+            QSize sz( 310, 260);
+            itemPixmap = itemPixmap.scaled(sz, Qt::IgnoreAspectRatio );
+
+            if(itemPixmap.isNull())
+                {
+                qDebug("@@@GlxDetailsView::showImage Null Pixmap");
+                }
+            else
+                {
+                qDebug("@@@GlxDetailsView::showImage NOT --Null Pixmap");
+                mDetailsPixmap->setPixmap(itemPixmap);
+                }
+            }
+        }
+    }
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//FillData
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::setFormData()
+    {
+    qDebug("GlxDetailsView::FillData Enter");
+    //Call to set the Image Name
+    setImageName();
+    //Call to set the date in the from
+    setDate();
+    }
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//setImageName
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::setImageName()
+    {
+    qDebug("GlxDetailsView::setImageName Enter");
+
+    QString imagePath = (mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxUriRole)).value<QString>();
+    QString imageName = imagePath.section('\\',-1);
+
+    //Fetch the text edit for displaying the Name from the Form Model
+    GlxDetailsCustomWidgets * imageLabel = (GlxDetailsCustomWidgets *)mDataForm->itemByIndex(mDetailModel->index(0,0));
+
+    if(imageLabel)
+        {
+        qDebug("GlxDetailsView::setImageName  imageLabel!=NULL");
+        HbLineEdit* label = static_cast<HbLineEdit*>(imageLabel->dataItemContentWidget());
+
+        if(label) 
+            {
+            qDebug("GlxDetailsView::setImageName,setText");
+            label->setText(imageName);
+            }
+        }
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//setDate
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::setDate()
+    {
+    qDebug("GlxDetailsView::setDate Enter");
+
+    QString datestring;
+    QString str("dd.MM.yyyy");
+    QDate date = (mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxDateRole)).value<QDate>();
+
+    if(date.isNull() == FALSE )
+        {
+        qDebug("GlxDetailsView::setDate date is not Null");
+        datestring = date.toString(str);
+        }
+
+    //Fetch the Label from the Form Model
+    GlxDetailsCustomWidgets * dateLabel = (GlxDetailsCustomWidgets *)mDataForm->itemByIndex(mDetailModel->index(1,0));
+
+    if(dateLabel) 
+        {
+        qDebug("GlxDetailsView::setDate  dateLabel!=NULL");
+        HbLabel* label = static_cast<HbLabel*>(dateLabel->dataItemContentWidget());
+
+        if(label) 
+            {
+            qDebug("GlxDetailsView::setDate,setText");
+            label->setPlainText(datestring);
+            }
+        }    
+    }
+
+void GlxDetailsView::initializeNewModel()
+{
+    if ( mModel ) {
+        connect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(rowsRemoved(QModelIndex,int,int)));
+    }
+}
+
+void GlxDetailsView::clearCurrentModel()
+{
+    if ( mModel ) {
+        disconnect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(rowsRemoved(QModelIndex,int,int)));
+        mModel = NULL ;
+    }    
+}