diff -r b13cd05eeb2f -r 57b735022c18 voiceui/vcommand/src/vcgenericview.cpp --- a/voiceui/vcommand/src/vcgenericview.cpp Mon Jan 18 20:20:30 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,587 +0,0 @@ -/* -* Copyright (c) 2006 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: Generic view class for vcommand app -* -*/ - - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include "vcappui.h" -#include "vcgenericview.h" -#include "vcfolderview.h" -#include "vcgenericcontainer.h" -#include "vcommandconstants.h" -#include "vcommand.hrh" -#include "vcommandconstants.h" -#include "vcplaybackdialog.h" -#include "voiceuibldvariant.hrh" - -#include -#include - -#include -#include -#include -#include - -#include "rubydebug.h" - - -// ================= MEMBER FUNCTIONS ======================= - - -// ---------------------------------------------------------------------------- -// CVCGenericView::CVCGenericView -// C++ constructor -// ---------------------------------------------------------------------------- -// -CVCGenericView::CVCGenericView( CVCModel& aModel ): - iModel( aModel ) - { - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::ConstructL -// Two-phased constructor -// ---------------------------------------------------------------------------- -// -void CVCGenericView::ConstructL( TInt aResourceId ) - { - RUBY_DEBUG_BLOCKL( "CVCGenericView::ConstructL" ); - - BaseConstructL( aResourceId ); - SetFolderTitleL( KNullDesC() ); - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::~CVCGenericView -// Destructor -// ---------------------------------------------------------------------------- -// -CVCGenericView::~CVCGenericView() - { - delete iFolderName; - - if( iContainer ) - { - AppUi()->RemoveFromStack( iContainer ); - delete iContainer; - iContainer = NULL; - } - } - -// ---------------------------------------------------------------------------- -// TUid CVCGenericView::Id -// ---------------------------------------------------------------------------- -// -TUid CVCGenericView::Id() const - { - return KUidVCMainView; - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::HandleCommandL -// ---------------------------------------------------------------------------- -// -void CVCGenericView::HandleCommandL( TInt aCommand ) - { - RUBY_DEBUG_BLOCKL( "CVCGenericView::HandleCommandL" ); - - // We will only handle one event at a time - if( !iContainer->IsHandlingKeyPressInProgress() ) - { - iContainer->SetHandlingKeyPressInProgress( ETrue ); - DoHandleCommandL( aCommand ); - iContainer->SetHandlingKeyPressInProgress( EFalse ); - } - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::DoHandleCommandL -// ---------------------------------------------------------------------------- -// -// Defines basic operations for listbox items. Those operations are: opening a folder, -// editing an item, playing an item and launching help. More sophisticated features -// can be defined in inherited classes. -// -void CVCGenericView::DoHandleCommandL( TInt aCommand ) - { - RUBY_DEBUG_BLOCKL( "CVCGenericView::DoHandleCommandL" ); - - switch ( aCommand ) - { - case EAknSoftkeySelect: // Middle softkey - { - TInt current( iContainer->CurrentSelection() ); - - // Msk can be pressed before the listbox is populated in which case - // we ignore the key press - if( current != KErrNotFound ) - { - if( iContainer->IsItemFolderL( current ) ) - { - DoHandleCommandL( EVCCmdOpen ); - } - else - { - DoHandleCommandL( EVCCmdEdit ); - } - } - - break; - } - - case EAknSoftkeyExit: // exit the application - { - static_cast( iEikonEnv->AppUi() )->ExitProgram(); - break; - } - - case EAknSoftkeyBack: // back to main view from folder - { -#ifdef __VCOMMAND_CONTROL_PANEL - if( Id() == KUidVCMainView ) - { - static_cast( iEikonEnv->AppUi() )->ExitProgram(); - break; - } - else // Id() == KUidVCFolderView - { - AppUi()->ActivateLocalViewL( KUidVCMainView ); - break; - } -#else - AppUi()->ActivateLocalViewL( KUidVCMainView ); - break; -#endif - } - - case EVCCmdOpen: // open folder - { - TInt current = iContainer->CurrentSelection(); - static_cast - ( AppUi()->View( KUidVCFolderView ) ) - ->SetFolderTitleL( iContainer->GetFolderTitle( current ) ); - // Store the focused folder. Used when returning from folder view. - iFocusedIndex = current; - AppUi()->ActivateLocalViewL( KUidVCFolderView ); - - break; - } - - case EVCCmdEdit: // edit voice command extra text - { - TRAPD(err, iContainer->ShowEditTextL() ); - if ( err == KErrNoMemory || err == KErrDiskFull ) User::Leave(err); - break; - } - - case EVCCmdPlayback: // playback voice command - { - TRAP_IGNORE( PlaybackVoiceCommandL() ); - break; - } - - case EVCCmdDelete: // delete a voice command - { - TRAP_IGNORE( iContainer->DeleteVCommandL() ); - break; - } - - case EVCCmdSettings: // modify settings - { - iFocusedIndex = iContainer->CurrentSelection(); - AppUi()->ActivateLocalViewL( KUidVCSettingsView ); - break; - } - - case EVCCmdStartVui: // start in tutorial mode - { - TRAP_IGNORE( LaunchDemoVoiceUiL() ); - break; - } - - case EAknCmdHelp: // launch help dialog - { - HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), - AppUi()->AppHelpContextL() ); - break; - } - - case EVCCmdRemove: // item can not be removed - { - CannotDeleteNoteL(); - break; - } - - case EVCCmdIgnore: - { - break; // do nothing - } - - default: - { - AppUi()->HandleCommandL( aCommand ); - break; - } - } - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::LaunchDemoVoiceUiL -// ---------------------------------------------------------------------------- -// -void CVCGenericView::LaunchDemoVoiceUiL() const - { - RUBY_DEBUG_BLOCKL( "CVCGenericView::LaunchDemoVoiceUiL" ); - - CRepository* client = CRepository::NewLC( KCRUidVCommandSettings ); - User::LeaveIfError( client->Set( KVuiDemoMode, ETrue ) ); - CleanupStack::PopAndDestroy( client ); - - TApaTaskList apaTaskList( CCoeEnv::Static()->WsSession() ); - TApaTask apaTask = apaTaskList.FindApp( KVoiceUiUid ); - - if ( apaTask.Exists() ) - { - apaTask.BringToForeground(); - } - else - { - RApaLsSession apaLsSession; - User::LeaveIfError( apaLsSession.Connect() ); - - TApaAppInfo appInfo; - User::LeaveIfError( apaLsSession.GetAppInfo( appInfo, KVoiceUiUid ) ); - - TFileName appName = appInfo.iFullName; - CApaCommandLine* apaCommandLine = CApaCommandLine::NewLC(); - - apaCommandLine->SetExecutableNameL( appName ); - apaCommandLine->SetCommandL( EApaCommandRunWithoutViews ); - User::LeaveIfError ( apaLsSession.StartApp( *apaCommandLine ) ); - CleanupStack::PopAndDestroy( apaCommandLine ); - - apaLsSession.Close(); - } - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::CheckMiddleSoftkeyLabelL -// ---------------------------------------------------------------------------- -// -void CVCGenericView::SetMiddleSoftkeyLabelL( TInt aIndex ) const - { - RUBY_DEBUG_BLOCKL( "CVCGenericView::SetMiddleSoftkeyLabelL" ); - - RemoveCommandFromMSK(); - - if( iModel.Count() == 0 ) - { - DoSetMiddleSoftKeyLabelL( R_TEXT_SOFTKEY_EMPTY, EVCCmdIgnore ); - } - else if( iContainer->IsItemFolderL( aIndex ) ) - { - DoSetMiddleSoftKeyLabelL( R_QTN_VC_OPEN, EVCCmdOpen ); - } - else - { - DoSetMiddleSoftKeyLabelL( R_QTN_VC_EDIT, EVCCmdEdit ); - } - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::SetMiddleSoftKeyLabelL -// ---------------------------------------------------------------------------- -// -void CVCGenericView::DoSetMiddleSoftKeyLabelL( const TInt aResourceId, - const TInt aCommandId ) const - { - RUBY_DEBUG_BLOCKL( "CVCGenericView::DoSetMiddleSoftKeyLabelL" ); - - CEikButtonGroupContainer* cbaGroup = Cba(); - if ( cbaGroup ) - { - HBufC* mskText = StringLoader::LoadLC( aResourceId ); - TPtr mskPtr = mskText->Des(); - cbaGroup->AddCommandToStackL( KVcMskControlID, aCommandId, mskPtr ); - CleanupStack::PopAndDestroy( mskText ); - } - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::RemoveCommandFromMSK -// ---------------------------------------------------------------------------- -// -void CVCGenericView::RemoveCommandFromMSK() const - { - if ( Cba() ) - { - Cba()->RemoveCommandFromStack( KVcMskControlID, EVCCmdOpen ); - Cba()->RemoveCommandFromStack( KVcMskControlID, EVCCmdEdit ); - } - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::HandleClientRectChange -// ---------------------------------------------------------------------------- -// -void CVCGenericView::HandleClientRectChange() - { - if ( iContainer ) - { - iContainer->SetRect( ClientRect() ); - } - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::DoActivateL -// ---------------------------------------------------------------------------- -// -void CVCGenericView::DoActivateL( const TVwsViewId& aPrevViewId, - TUid, const TDesC8& ) - { - RUBY_DEBUG_BLOCKL( "CVCGenericView::DoActivateL" ); - - if( !iContainer ) - { - iContainer = new ( ELeave ) CVCGenericContainer( MenuBar(), iModel, *this ); - iContainer->SetMopParent( this ); - iContainer->ConstructL( ClientRect() ); - AppUi()->AddToStackL( *this, iContainer ); - - iContainer->ActivateL(); - } - - // Returning from folder or settings view - if( aPrevViewId.iViewUid.iUid == KUidVCFolderView.iUid || - aPrevViewId.iViewUid.iUid == KUidVCSettingsView.iUid ) - { - // Set the focus on the folder that was opened previously - iContainer->SetCurrentSelection( iFocusedIndex ); - } - - // Set msk label - SetMiddleSoftkeyLabelL( iContainer->CurrentSelection() ); - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::DoDeactivate -// ---------------------------------------------------------------------------- -// -void CVCGenericView::DoDeactivate() - { - if( iContainer ) - { - AppUi()->RemoveFromStack( iContainer ); - delete iContainer; - iContainer = NULL; - } - } - - -// ---------------------------------------------------------------------------- -// CVCGenericView::DynInitMenuPaneL -// ---------------------------------------------------------------------------- -void CVCGenericView::DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - RUBY_DEBUG_BLOCKL( "CVCGenericView::DynInitMenuPaneL" ); - - if( aMenuPane ) - { - // Check which menu item we are handling - if( aResourceId == R_VCOMMAND_MENU ) - { - // if help is not enabled, do not show "help" - if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); - } - - TInt listBoxIndex( iContainer->CurrentSelection() ); - - if( listBoxIndex >= 0 ) - { - TBool isFolder = iContainer->IsItemFolderL( listBoxIndex ); - - if( isFolder ) // Folder is highlighted. - { - aMenuPane->SetItemDimmed( EVCCmdPlayback, ETrue ); - aMenuPane->SetItemDimmed( EVCCmdEdit, ETrue ); - aMenuPane->SetItemDimmed( EVCCmdDelete, ETrue ); - } - else // Folder is not highlighted. - { - aMenuPane->SetItemDimmed( EVCCmdOpen, ETrue ); - - // Show delete item only if the command is user edited - TDesC* secondRow = iContainer->GetSecondRowNameLC( - iContainer->CurrentSelection() ); - if( secondRow->Length() == 0 ) - { - aMenuPane->SetItemDimmed( EVCCmdDelete, ETrue ); - } - CleanupStack::PopAndDestroy( secondRow ); - } - } - else // No items in listbox - { - aMenuPane->SetItemDimmed( EVCCmdPlayback, ETrue ); - aMenuPane->SetItemDimmed( EVCCmdEdit, ETrue ); - aMenuPane->SetItemDimmed( EVCCmdDelete, ETrue ); - aMenuPane->SetItemDimmed( EVCCmdOpen, ETrue ); - } - } - } - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::PlaybackVoiceCommandL -// ---------------------------------------------------------------------------- -// -void CVCGenericView::PlaybackVoiceCommandL() - { - RUBY_DEBUG_BLOCKL( "CVCGenericView::PlaybackVoiceCommandL" ); - - CVCAppUi* appUi = static_cast ( iEikonEnv->AppUi() ); - - TInt state = appUi->CheckCallStateL(); - TBool videoCallState = appUi->IsVideoCallL(); - - if( ( state == EPSCTsyCallStateNone || state == EPSCTsyCallStateUninitialized || - state == EPSCTsyCallStateHold || state == KErrNotFound ) && !videoCallState ) - { - TInt listboxIndex = iContainer->CurrentSelection(); - TDesC* listboxItem = iContainer->GetFirstRowNameLC( listboxIndex ); - - const CVCommandUiEntry& vcommand = iModel.GetVCommandL( *listboxItem ); - CleanupStack::PopAndDestroy( listboxItem ); - - CVCPlaybackDialog* dlg = new (ELeave) CVCPlaybackDialog( - iModel.Service(), vcommand ); - dlg->PrepareLC( R_PLAYBACK_VOICE_COMMAND_DIALOG ); - dlg->RunLD(); - dlg = NULL; - } - else - { - // Display call in progress note - appUi->CallInProgressNoteL(); - } - } - -// ---------------------------------------------------------------------------- -// CVCGenericView::CannotDeleteNoteL -// ---------------------------------------------------------------------------- -// -void CVCGenericView::CannotDeleteNoteL() - { - RUBY_DEBUG_BLOCKL( "CVCGenericView::CannotDeleteNoteL" ); - - TDesC* name; - name = iContainer - ->GetSecondRowNameLC( iContainer->CurrentSelection() ); - - if( name->Length() == 0 ) - { - CleanupStack::PopAndDestroy( name ); - name = iContainer - ->GetFirstRowNameLC( iContainer->CurrentSelection() ); - } - - HBufC* stringholder = StringLoader::LoadL( R_QTN_VC_INFO_CANNOT_DEL, - *name, iEikonEnv ); - CleanupStack::PopAndDestroy( name ); - CleanupStack::PushL( stringholder ); - - CAknNoteWrapper* note = new ( ELeave ) CAknNoteWrapper(); - note->ExecuteLD( R_CANNOT_DELETE_NOTE, *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - } - -// ----------------------------------------------------------------------------- -// CVCGenericView::HandleSizeChange -// Handle screen size change. -// ----------------------------------------------------------------------------- -// -void CVCGenericView::HandleSizeChange() - { - if (iContainer) - { - TRect genericPaneRect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, genericPaneRect ); - iContainer->SetRect( genericPaneRect ); - } - } - -// ----------------------------------------------------------------------------- -// CVCGenericView::FolderTitle -// Returns the title of the view's active folder. -// ----------------------------------------------------------------------------- -// -const TDesC& CVCGenericView::FolderTitle() const - { - return *iFolderName; - } - -// ----------------------------------------------------------------------------- -// CVCGenericView::SetFolderTitleL -// ----------------------------------------------------------------------------- -// -void CVCGenericView::SetFolderTitleL( const TDesC& aNewName ) - { - delete iFolderName; - iFolderName = NULL; - iFolderName = aNewName.AllocL(); - } - -// ----------------------------------------------------------------------------- -// CVCGenericView::RefreshViewL -// ----------------------------------------------------------------------------- -// -void CVCGenericView::RefreshViewL() - { - // This is the focused view - if( iContainer ) - { - CVCommandUiEntryArray* oldCommands = iModel.VCommandArrayL(); - CleanupStack::PushL( oldCommands ); - - // Update model - iModel.LoadVCommandsL(); - - CVCommandUiEntryArray* newCommands = iModel.VCommandArrayL(); - CleanupStack::PushL( newCommands ); - - iContainer->RefreshListboxL( *oldCommands, *newCommands ); - - CleanupStack::PopAndDestroy( newCommands ); - CleanupStack::PopAndDestroy( oldCommands ); - } - } - -// End of File