diff -r f7f0874bfe7d -r 74c9f037fd5d ui/views/gridview/src/glxgridview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/views/gridview/src/glxgridview.cpp Fri Mar 19 09:28:59 2010 +0200 @@ -0,0 +1,379 @@ +/* +* 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 +* +*/ + + + +//Includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//User Includes +#include "glxuistd.h" +#include "glxviewids.h" +#include "glxgridview.h" +#include "glxmodelparm.h" +#include "glxloggerenabler.h" +#include "glxdocloaderdefs.h" +#include "glxcommandhandlers.hrh" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "glxgridviewTraces.h" +#endif + +GlxGridView::GlxGridView(HbMainWindow *window) : GlxView ( GLX_GRIDVIEW_ID ), + mGridView(NULL), mView(NULL), mWindow(window), mModel ( NULL), mVisualIndex(0), + mItem(NULL) + { + OstTraceFunctionEntry0( GLXGRIDVIEW_GLXGRIDVIEW_ENTRY ); + mDocLoader = new HbDocumentLoader(); + OstTraceFunctionExit0( GLXGRIDVIEW_GLXGRIDVIEW_EXIT ); + setContentFullScreen( true ); + } + +void GlxGridView::activate() + { + OstTraceFunctionEntry0( GLXGRIDVIEW_ACTIVATE_ENTRY ); + + loadGridView(mWindow->orientation()); + addViewConnection(); + // mVisualIndex = 0; //To:Do remove later once we get visual index change notification from grid view + + + + mGridView->resetTransform(); //to reset the transition effect (reset transform matrix) + mGridView->setOpacity( 1); + + if ( mItem ) { + mItem->resetTransform(); //to reset the transition effect (reset transform matrix) + mItem->setOpacity( 1); + mItem->setZValue( mItem->zValue() - 20); + disconnect( mItem, SIGNAL( destroyed() ), this, SLOT( itemDestroyed() ) ); + mItem = NULL; + } + OstTraceFunctionExit0( GLXGRIDVIEW_ACTIVATE_EXIT ); + } + +void GlxGridView::deActivate() + { + OstTraceFunctionEntry0( GLXGRIDVIEW_DEACTIVATE_ENTRY ); + removeViewConnection(); + + + /*if ( mItem ) { + mItem->resetTransform(); //to reset the transition effect + mItem->setOpacity( 1); + disconnect( mItem, SIGNAL( destroyed() ), this, SLOT( itemDestroyed() ) ); + mItem = NULL; + }*/ + takeToolBar(); //To:Do improved later + emit toolBarChanged(); + OstTraceFunctionExit0( GLXGRIDVIEW_DEACTIVATE_EXIT ); + } + +void GlxGridView::setModel(QAbstractItemModel *model) + { + OstTraceFunctionEntry0( GLXGRIDVIEW_SETMODEL_ENTRY ); + + mModel = model ; + mGridView->setModel(mModel); + QVariant variant = mModel->data( mModel->index(0,0), GlxFocusIndexRole ); + if ( variant.isValid() && variant.canConvert () ) { + mGridView->scrollTo( mModel->index( variant.value(),0), HbGridView::PositionAtCenter ); + } + + OstTraceFunctionExit0( GLXGRIDVIEW_SETMODEL_EXIT ); + } + +void GlxGridView::addToolBar( HbToolBar *toolBar ) + { + OstTraceFunctionEntry0( GLXGRIDVIEW_ADDTOOLBAR_ENTRY ); + //toolBar->setParent(this); + if ( mGridView ) { + toolBar->setZValue(mGridView->zValue()); + } + setToolBar(toolBar) ; + OstTraceFunctionExit0( GLXGRIDVIEW_ADDTOOLBAR_EXIT ); + } + +void GlxGridView::enableMarking() + { + OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_ENABLEMARKING, "GlxGridView::enableMarking" ); + mGridView->setSelectionMode(HbGridView::MultiSelection); + } + +void GlxGridView::disableMarking() + { + OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_DISABLEMARKING, "GlxGridView::disableMarking" ); + mGridView->setSelectionMode(HbGridView::NoSelection); + } + +void GlxGridView::handleUserAction(qint32 commandId) + { + OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_HANDLEUSERACTION, "GlxGridView::handleUserAction" ); + switch( commandId ){ + case EGlxCmdMarkAll : + mGridView->selectAll(); + break; + + case EGlxCmdUnMarkAll : + mGridView->clearSelection(); + break; + + case EGlxCmdSend: + { + OstTrace0( TRACE_NORMAL, DUP1_GLXGRIDVIEW_HANDLEUSERACTION, "GlxGridView::handleUserAction-SendUI" ); + + QString imagePath = (mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value() + ,0),GlxUriRole)).value(); + + if(imagePath.isNull()) + { + OstTrace0( TRACE_NORMAL, DUP2_GLXGRIDVIEW_HANDLEUSERACTION, "GlxGridView::SendUi path is NULL" ); + } + qDebug() << "GlxGridView::SendUi() imagePath= " << imagePath; + + ShareUi dialog; + QList fileList; + fileList.append(QVariant(imagePath)); + dialog.init(fileList,true); + } + break; + + default : + break; + } + } + +QItemSelectionModel * GlxGridView::getSelectionModel() + { + OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_GETSELECTIONMODEL, "GlxGridView::getSelectionModel" ); + return mGridView->selectionModel(); + } + +QGraphicsItem * GlxGridView::getAnimationItem(GlxEffect transitionEffect) + { + OstTraceFunctionEntry0( GLXGRIDVIEW_GETANIMATIONITEM_ENTRY ); + int selIndex = -1; + + if ( transitionEffect == FULLSCREEN_TO_GRID ) { + return mGridView; + } + + if ( transitionEffect == GRID_TO_FULLSCREEN ) { + QVariant variant = mModel->data( mModel->index(0,0), GlxFocusIndexRole ); + if ( variant.isValid() && variant.canConvert () ) { + selIndex = variant.value(); + } + + mItem = mGridView->itemByIndex( mModel->index(selIndex,0) ); + connect(mItem, SIGNAL(destroyed()), this, SLOT( itemDestroyed())); + mItem->setZValue( mItem->zValue() + 20); + return mItem; + } + + if ( transitionEffect == GRID_TO_ALBUMLIST || transitionEffect == ALBUMLIST_TO_GRID ){ + return mGridView; + } + return NULL; + OstTraceFunctionExit0( GLXGRIDVIEW_GETANIMATIONITEM_EXIT ); + } + +void GlxGridView::loadGridView(Qt::Orientation orient) + { + OstTraceFunctionEntry0( GLXGRIDVIEW_LOADGRIDVIEW_ENTRY ); + bool loaded = true; + QString section; + //Load the widgets accroding to the current Orientation + if(orient == Qt::Horizontal) + { + section = GLX_GRIDVIEW_LSSECTION ; + } + else + { + section = GLX_GRIDVIEW_PTSECTION ; + } + + if (mGridView == NULL ) + { + mDocLoader->load(GLX_GRIDVIEW_DOCMLPATH,&loaded); + if(loaded) + { + //retrieve the widgets + mView = static_cast(mDocLoader->findWidget(QString(GLX_GRIDVIEW_VIEW))); + mGridView = static_cast(mDocLoader->findWidget(GLX_GRIDVIEW_GRID)); + setWidget( mView ); + } + } + //Load the Sections + mDocLoader->load(GLX_GRIDVIEW_DOCMLPATH,section,&loaded); + OstTraceFunctionExit0( GLXGRIDVIEW_LOADGRIDVIEW_EXIT ); + } + +void GlxGridView::itemDestroyed() + { + OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_ITEMDESTROYED, "GlxGridView::itemDestroyed" ); + disconnect( mItem, SIGNAL( destroyed() ), this, SLOT( itemDestroyed() ) ); + mItem = NULL; + } + +QVariant GlxGridView::itemChange (GraphicsItemChange change, const QVariant &value) + { + OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_ITEMCHANGE, "GlxGridView::itemChange" ); + + static bool isEmit = true; + + if ( isEmit && change == QGraphicsItem::ItemVisibleHasChanged && value.toBool() ) { + emit actionTriggered( EGlxCmdSetupItem ); + isEmit = false; + } + return HbWidget::itemChange(change, value); + } + +void GlxGridView::addViewConnection () + { + OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_ADDVIEWCONNECTION, "GlxGridView::addViewConnection" ); + connect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(loadGridView(Qt::Orientation))); + connect(mGridView, SIGNAL(activated(const QModelIndex &)), this, SLOT( itemSelected(const QModelIndex &))); + connect( mGridView, SIGNAL( scrollingEnded() ), this, SLOT( setVisvalWindowIndex() ) ); + if(XQServiceUtil::isService()){ + connect(mGridView, SIGNAL(activated(const QModelIndex &)), this, SIGNAL( gridItemSelected(const QModelIndex &))); + } + // connect(mGridView, SIGNAL(scrollPositionChange(QPointF , Qt::Orientations)), this, SLOT( scrollPositionChange(QPointF, Qt::Orientations))); + connect(mGridView, SIGNAL(longPressed( HbAbstractViewItem*, QPointF )),this, SLOT( indicateLongPress( HbAbstractViewItem*, QPointF ) ) ); + } + +void GlxGridView::removeViewConnection () + { + OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_REMOVEVIEWCONNECTION, "GlxGridView::removeViewConnection" ); + disconnect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(orientationChanged(Qt::Orientation))); + disconnect(mGridView, SIGNAL(activated(const QModelIndex &)), this, SLOT( itemSelected(const QModelIndex &))); + disconnect(mGridView, SIGNAL(activated(const QModelIndex &)), this, SIGNAL( gridItemSelected(const QModelIndex &))); + disconnect( mGridView, SIGNAL( scrollingEnded() ), this, SLOT( setVisvalWindowIndex() ) ); + disconnect(mGridView, SIGNAL(longPressed( HbAbstractViewItem*, QPointF )),this, SLOT( indicateLongPress( HbAbstractViewItem*, QPointF ) ) ); + } + +void GlxGridView::itemSelected(const QModelIndex & index) + { + OstTrace1( TRACE_NORMAL, GLXGRIDVIEW_ITEMSELECTED, "GlxGridView::itemSelected;index=%d", index.row() ); + + if ( mGridView->selectionMode() == HbGridView::MultiSelection ){ //in multi selection mode no need to open the full screen + return ; + } + OstTraceEventStart0( EVENT_DUP1_GLXGRIDVIEW_ITEMSELECTED_START, "Fullscreen Launch Time" ); + + if ( mModel ) + { + mModel->setData( index, index.row(), GlxFocusIndexRole ); + } + emit actionTriggered( EGlxCmdFullScreenOpen ); + OstTraceEventStop( EVENT_DUP1_GLXGRIDVIEW_ITEMSELECTED_STOP, "Fullscreen Launch Time", EVENT_DUP1_GLXGRIDVIEW_ITEMSELECTED_START ); + } + +void GlxGridView::setVisvalWindowIndex() + { + OstTrace0( TRACE_IMPORTANT, GLXGRIDVIEW_SETVISVALWINDOWINDEX, "GlxGridView::setVisvalWindowIndex" ); + QList< HbAbstractViewItem * > visibleItemList = mGridView->visibleItems(); + qDebug("GlxGridView::setVisvalWindowIndex() %d", visibleItemList.count()); + OstTrace1( TRACE_IMPORTANT, DUP1_GLXGRIDVIEW_SETVISVALWINDOWINDEX, "GlxGridView::setVisvalWindowIndex;visibleitemindex=%d", + visibleItemList.count() ); + + if ( visibleItemList.count() <= 0 ) + return ; + + HbAbstractViewItem *item = visibleItemList.at(0); + if ( item == NULL ) + return ; + + OstTrace1( TRACE_IMPORTANT, DUP2_GLXGRIDVIEW_SETVISVALWINDOWINDEX, "GlxGridView::setVisvalWindowIndex item=%d", item ); + OstTrace1( TRACE_IMPORTANT, DUP3_GLXGRIDVIEW_SETVISVALWINDOWINDEX, "GlxGridView::setVisvalWindowIndex;visual index=%d", + item->modelIndex().row() ); + + if ( item->modelIndex().row() < 0 || item->modelIndex().row() >= mModel->rowCount() ) + return ; + + mModel->setData( item->modelIndex (), item->modelIndex().row(), GlxVisualWindowIndex); + } + +//To:Do remove later once we get visual index change notification from grid view +void GlxGridView::scrollPositionChange (QPointF newPosition, Qt::Orientations importantDimensions) + { + OstTrace0( TRACE_IMPORTANT, DUP1_GLXGRIDVIEW_SCROLLPOSITIONCHANGE, "GlxGridView::scrollPositionChange" ); + Q_UNUSED(importantDimensions); + qreal x = newPosition.x(); + qreal y = newPosition.y(); + int index = 0; + OstTraceExt2( TRACE_IMPORTANT, GLXGRIDVIEW_SCROLLPOSITIONCHANGE, "GlxGridView::scrollPositionChange;x=%f;y=%f", x, y ); + + if( mWindow->orientation() == Qt::Vertical ) { + index = y / 100; + index = index * NBR_COL; + } + else { + index = y / 98; + index = index * NBR_ROW; + } + + OstTraceExt2( TRACE_IMPORTANT, DUP2_GLXGRIDVIEW_SCROLLPOSITIONCHANGE, + "GlxGridView::scrollPositionChange;index=%d;visualindex=%d", index, mVisualIndex ); + + if ( qAbs (index - mVisualIndex) >= NBR_PAGE && index >=0 && index < mModel->rowCount() ) { + mVisualIndex = index; + OstTrace0( TRACE_IMPORTANT, DUP3_GLXGRIDVIEW_SCROLLPOSITIONCHANGE, + "GlxGridView::scrollPositionChange visual index changed" ); + //To:Do call back of model for visual index change + //mModel->setVisibleWindowIndex( mModel->index(mVisualIndex, 0 )); + } + } + + +GlxGridView::~GlxGridView() + { + OstTraceFunctionEntry0( DUP1_GLXGRIDVIEW_GLXGRIDVIEW_ENTRY ); + removeViewConnection(); + delete mGridView; + mGridView = NULL; + + delete mDocLoader; + mDocLoader = NULL; + + OstTraceFunctionExit0( DUP1_GLXGRIDVIEW_GLXGRIDVIEW_EXIT ); + } + +void GlxGridView::indicateLongPress(HbAbstractViewItem *item, QPointF coords) + { + OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_INDICATELONGPRESS, "GlxGridView::indicateLongPress" ); + qDebug() << "GlxGridView:indicateLongPress Item " << item->modelIndex() << "long pressed at " + << coords; + + if ( mGridView->selectionMode() == HbGridView::MultiSelection ){ //in multi selection mode no need to open the context menu + return ; + } + + if ( mModel ) { + mModel->setData( item->modelIndex(), item->modelIndex().row(), GlxFocusIndexRole ); + } + emit itemSpecificMenuTriggered(viewId(),coords); + }