--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandleraddtocontainer.cpp Tue Aug 31 15:14:51 2010 +0300
@@ -0,0 +1,276 @@
+/*
+* 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:
+*
+*/
+
+#include <mpxcollectionpath.h>
+#include <mglxmedialist.h>
+#include <glxcommandfactory.h>
+#include <glxcommandhandleraddtocontainer.h>
+#include <glxcommandhandlernewmedia.h>
+
+#include <QStringListModel>
+#include <hblabel.h>
+#include <hbaction.h>
+
+#include <glxalbummodel.h>
+#include <glxcollectionpluginalbums.hrh>
+#include <glxmodelparm.h>
+#include <glxfilterfactory.h>
+#include <QEventLoop>
+
+#include <hblistwidget.h>
+#include <hbview.h>
+#include <hbpushbutton.h>
+#include <QGraphicsGridLayout>
+#include <hbselectiondialog.h>
+
+#include <hbmessagebox.h>
+
+#include <glxcommandhandlers.hrh>
+#include "glxlocalisationstrings.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "glxcommandhandleraddtocontainerTraces.h"
+#endif
+
+
+const TInt KSelectionPopupListHierarchy = 5;
+
+GlxAlbumSelectionPopup::GlxAlbumSelectionPopup()
+ : mSelectionModel( 0 ),
+ mEventLoop( 0 ),
+ mResult( false )
+{
+}
+
+GlxAlbumSelectionPopup::~GlxAlbumSelectionPopup()
+{
+}
+
+QModelIndexList GlxAlbumSelectionPopup::GetSelectionList(GlxAlbumModel *model, bool *ok)
+{
+ HbSelectionDialog *dlg = new HbSelectionDialog;
+ dlg->setHeadingWidget(new HbLabel(GLX_ALBUM_SELECTION_TITLE));
+ dlg->setSelectionMode(HbAbstractItemView::SingleSelection);
+ dlg->setModel(model);
+ dlg->setAttribute(Qt::WA_DeleteOnClose);
+ dlg->clearActions();
+ HbAction *action;
+ action= new HbAction(GLX_BUTTON_NEW);
+ action->setObjectName( "ch_new_album_button" );
+ dlg->addAction(action);
+ action= new HbAction(GLX_BUTTON_CANCEL);
+ action->setObjectName( "ch_cancel_album_button" );
+ dlg->addAction(action);
+ dlg->open(this, SLOT(dialogClosed(HbAction*)));
+
+ QEventLoop eventLoop;
+ mEventLoop = &eventLoop;
+
+ eventLoop.exec( );
+ mEventLoop = 0 ;
+ if ( ok ) {
+ *ok = mResult ;
+ }
+
+ QModelIndexList selectedIndexes = dlg->selectedModelIndexes();
+ return selectedIndexes;
+}
+
+
+void GlxAlbumSelectionPopup::dialogClosed(HbAction *action)
+{
+ HbSelectionDialog *dlg = (HbSelectionDialog*)(sender());
+
+ if( action == dlg->actions().at(1) ) {
+ mResult = false ;
+ }
+ else {
+ mResult = true ;
+ }
+ if ( mEventLoop && mEventLoop->isRunning( ) ) {
+ mEventLoop->exit( 0 );
+ }
+}
+
+GlxCommandHandlerAddToContainer::GlxCommandHandlerAddToContainer() :
+ mNewMediaAdded(false),mAlbumName(QString())
+ {
+ OstTraceFunctionEntry0( GLXCOMMANDHANDLERADDTOCONTAINER_GLXCOMMANDHANDLERADDTOCONTAINER_ENTRY );
+ mTargetContainers = NULL;
+ OstTraceFunctionExit0( GLXCOMMANDHANDLERADDTOCONTAINER_GLXCOMMANDHANDLERADDTOCONTAINER_EXIT );
+ }
+
+GlxCommandHandlerAddToContainer::~GlxCommandHandlerAddToContainer()
+ {
+ OstTraceFunctionEntry0( DUP1_GLXCOMMANDHANDLERADDTOCONTAINER_GLXCOMMANDHANDLERADDTOCONTAINER_ENTRY );
+ delete mTargetContainers;
+ OstTraceFunctionExit0( DUP1_GLXCOMMANDHANDLERADDTOCONTAINER_GLXCOMMANDHANDLERADDTOCONTAINER_EXIT );
+ }
+
+CMPXCommand* GlxCommandHandlerAddToContainer::CreateCommandL(TInt aCommandId,
+ MGlxMediaList& aMediaList, TBool& /*aConsume*/) const
+ {
+ OstTraceFunctionEntry0( GLXCOMMANDHANDLERADDTOCONTAINER_CREATECOMMANDL_ENTRY );
+ CMPXCommand* command = NULL;
+ mAlbumName.clear();
+ if(aCommandId == EGlxCmdAddToFav)
+ {
+ mAlbumName = GLX_ALBUM_FAV;
+ CMPXCollectionPath* targetCollection = CMPXCollectionPath::NewL();
+ CleanupStack::PushL(targetCollection);
+ // The target collection has to be appeneded with the albums plugin id
+ targetCollection->AppendL(KGlxCollectionPluginAlbumsImplementationUid);
+ // The target collection has also to be appeneded with the the relation id.
+ // appending another level into the albums to get favourites and 1 is the relation id of albums
+ targetCollection->AppendL( TMPXItemId(KGlxCollectionFavoritesId) );
+ targetCollection->Set( 0 );
+
+ CMPXCollectionPath* sourceItems = aMediaList.PathLC( NGlxListDefs::EPathFocusOrSelection );
+
+ command = TGlxCommandFactory::AddToContainerCommandLC(
+ *sourceItems, *targetCollection);
+ CleanupStack::Pop(command);
+
+ CleanupStack::PopAndDestroy(sourceItems);
+ CleanupStack::PopAndDestroy(targetCollection);
+ }
+ else
+ {
+
+ CMPXCollectionPath* sourceItems = aMediaList.PathLC(
+ NGlxListDefs::EPathFocusOrSelection);
+ bool ok = false;
+
+ //create target medialist
+ CMPXCollectionPath* path = CMPXCollectionPath::NewL();
+ CleanupStack::PushL(path);
+ path->AppendL(KGlxCollectionPluginAlbumsImplementationUid);
+
+ CMPXFilter* filter =
+ TGlxFilterFactory::CreateCameraAlbumExclusionFilterL();
+ CleanupStack::PushL(filter);
+
+ // Create the media list
+ MGlxMediaList* targetMediaList = MGlxMediaList::InstanceL(*path,
+ TGlxHierarchyId(KSelectionPopupListHierarchy), filter); //todo take actual hierarchy
+ CleanupStack::PopAndDestroy(filter);
+ CleanupStack::PopAndDestroy(path);
+
+ //create target model
+ GlxModelParm modelParm(KGlxCollectionPluginAlbumsImplementationUid,
+ KSelectionPopupListHierarchy, EGlxFilterExcludeCamera);
+ GlxAlbumModel *albumMediaModel = new GlxAlbumModel(modelParm);
+ albumMediaModel->setData(QModelIndex(), (int) GlxContextSelectionList,
+ GlxContextRole);
+
+ GlxAlbumSelectionPopup popupWidget;
+ QModelIndexList modelList = popupWidget.GetSelectionList(albumMediaModel, &ok);
+ if(ok && modelList.count() == 0)
+ {
+ createNewMedia();
+ ok = false;
+ }
+ OstTraceExt2( TRACE_NORMAL, GLXCOMMANDHANDLERADDTOCONTAINER_CREATECOMMANDL, "GlxCommandHandlerAddToContainer::CreateCommandL;ok=%d;newMedia=%d", ok, mNewMediaAdded );
+
+ if (ok || mNewMediaAdded)
+ {
+ int count = modelList.count();
+
+ for (int i = 0; i < count; i++)
+ {
+ albumMediaModel->setData(modelList[i], modelList[i].row(),
+ GlxSelectedIndexRole);
+ }
+
+ if (!mNewMediaAdded)
+ {
+ CMPXCollectionPath* targetContainers = targetMediaList->PathLC(
+ NGlxListDefs::EPathFocusOrSelection);
+ CleanupStack::Pop(targetContainers);
+ delete mTargetContainers;
+ mTargetContainers = NULL;
+ mTargetContainers = targetContainers;
+
+ const TGlxMedia& item = targetMediaList->Item(targetMediaList->SelectedItemIndex(0));
+ const TDesC& title = item.Title();
+ mAlbumName = QString::fromUtf16(title.Ptr(),title.Length());
+ }
+
+ command = TGlxCommandFactory::AddToContainerCommandLC(*sourceItems,
+ *mTargetContainers);
+ CleanupStack::Pop(command);
+ mNewMediaAdded = false;
+ }
+ else
+ {
+ MGlxMediaList::UnmarkAllL(aMediaList);
+ }
+
+ MGlxMediaList::UnmarkAllL(*targetMediaList);
+ targetMediaList->Close();
+ CleanupStack::PopAndDestroy(sourceItems);
+ delete albumMediaModel;
+ }
+ OstTraceFunctionExit0( GLXCOMMANDHANDLERADDTOCONTAINER_CREATECOMMANDL_EXIT );
+ return command;
+ }
+
+void GlxCommandHandlerAddToContainer::createNewMedia() const
+ {
+ OstTraceFunctionEntry0( GLXCOMMANDHANDLERADDTOCONTAINER_CREATENEWMEDIA_ENTRY );
+ GlxCommandHandlerNewMedia* commandHandlerNewMedia =
+ new GlxCommandHandlerNewMedia();
+ TGlxMediaId newMediaId;
+ QString newTitle;
+ TInt error = commandHandlerNewMedia->ExecuteLD(newMediaId,newTitle);
+
+ while (error == KErrAlreadyExists)
+ {
+ HbMessageBox::warning(GLX_NAME_ALREADY_EXIST);
+ error = KErrNone;
+ error = commandHandlerNewMedia->ExecuteLD(newMediaId,newTitle);
+ }
+
+ if (error == KErrNone)
+ {
+ CMPXCollectionPath* path = CMPXCollectionPath::NewL();
+ CleanupStack::PushL(path);
+ path->AppendL(KGlxCollectionPluginAlbumsImplementationUid);
+ path->AppendL(newMediaId.Value());
+ CleanupStack::Pop(path);
+ delete mTargetContainers;
+ mTargetContainers = NULL;
+ mTargetContainers = path;
+ mAlbumName = newTitle;
+ mNewMediaAdded = true;
+ }
+ OstTraceFunctionExit0( GLXCOMMANDHANDLERADDTOCONTAINER_CREATENEWMEDIA_EXIT );
+ }
+
+QString GlxCommandHandlerAddToContainer::CompletionTextL() const
+ {
+ if(!mAlbumName.isNull()){
+ return (hbTrId(GLX_IMAGES_ADDED).arg(mAlbumName));
+ }
+ return QString();
+ }
+
+QString GlxCommandHandlerAddToContainer::ProgressTextL() const
+ {
+ return GLX_ADDING_IMAGES;
+ }