--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/plugins/shortcutplugin/src/caiscutengineext.cpp Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,326 @@
+/*
+* Copyright (c) 2005-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: Shortcut plug-in engine extension
+*
+*/
+
+#include <gslauncher.h>
+#include <gulicon.h>
+#include <viewcli.h>
+#include <coemain.h>
+
+#include <aiscutextdefs.h>
+
+#include "caiscutengineext.h"
+#include "caiscutextserver.h"
+#include "taiscutparser.h"
+#include "caiscutshortcut.h"
+#include "caiscutplugin.h"
+#include "aiscutcontentmodel.h"
+#include "caiscutextdata.h"
+#include "caiscutextdatamodel.h"
+
+// ======== LOCAL DEFINITIONS ========
+
+namespace
+ {
+ // LOCAL CONSTANTS
+ /**
+ * Target id hex format
+ */
+ _LIT( KTargetIdFormat, "0x%08x" );
+
+ /**
+ * Maximum length of target id
+ */
+ const TInt KTargetIdMaxLength = 11;
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CAiScutEngineExt* CAiScutEngineExt::NewL( CAiScutPlugin& aPlugin )
+ {
+ CAiScutEngineExt* self = new( ELeave ) CAiScutEngineExt( aPlugin );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CAiScutEngineExt::~CAiScutEngineExt()
+ {
+ delete iAiScutExtServer;
+ delete iExtDataModel;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CAiScutEngineExt::CAiScutEngineExt( CAiScutPlugin& aPlugin )
+ : CAiScutEngine( aPlugin )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAiScutEngineExt::ConstructL()
+ {
+ CAiScutEngine::ConstructL();
+
+ iExtDataModel = CAiScutExtDataModel::NewL();
+ iAiScutExtServer = new( ELeave ) CAiScutExtServer( *this, Env()->WsSession() );
+ iAiScutExtServer->ConstructL();
+ TRAPD( err, iAiScutExtServer->StartL( KAiScutExtServerName ) );
+
+ if( err != KErrNone && err != KErrAlreadyExists )
+ {
+ User::Leave( err );
+ }
+
+ //Send EAiScutEventGainFocus to the leftmost shortcut in order to put
+ //its state machine in correct state
+ if( iShortcuts.Count() > 0 )
+ {
+ static_cast< CAiScutShortcutExt* >( iShortcuts[ 0 ] )->HandleAIEventL(
+ EAiScutEventGainFocus );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAiScutEngineExt::CheckAccessAndPublish( CAiScutShortcut& aShortcut )
+ {
+ TRAPD( err,
+ RAiShortcutArray shortcutArray;
+ CleanupClosePushL( shortcutArray );
+ shortcutArray.AppendL( &aShortcut );
+ aShortcut.SetToBePublished( ETrue );
+ iPlugin.PublishShortcutsL( shortcutArray );
+ CleanupStack::PopAndDestroy( &shortcutArray );
+ );
+
+ if( err != KErrNone )
+ {
+ //Delegate publishing to the original engine
+ CAiScutEngine::CheckAccessAndPublish( EScutCheckAll, ETrue );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Handles an event sent by the AI framework.
+// ---------------------------------------------------------------------------
+//
+void CAiScutEngineExt::HandleAiEventL( TInt aEvent, const TDesC& aParam )
+ {
+ CAiScutShortcutExt* shortcut = FindShortcutById( aParam );
+ if( shortcut )
+ {
+ shortcut->HandleAIEventL( aEvent );
+ }
+ CAiScutEngine::HandleAiEventL( aEvent, aParam );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAiScutEngineExt::ResumeL( TBool aPublishAll, TAiTransitionReason aReason )
+ {
+ TArray<CAiScutExtData*> extDataArray = iExtDataModel->AiScutExtDataArray();
+ const TInt count = extDataArray.Count();
+ //Iterate extension data items and populate to matching shortcuts.
+ //Remove the items that are not used in any shortcut.
+ for( TInt i = 0; i < count; i++ )
+ {
+ CAiScutExtData* extData = extDataArray[ i ];
+ const TDesC& targetDefinition = extData->TargetDefinition();
+ if( !PopulateExtData( targetDefinition, extData ) )
+ {
+ iExtDataModel->RemoveAiScutExtData( targetDefinition );
+ }
+ }
+
+ TAiTransitionReason resumeReason = iPlugin.ResumeReason();
+ const TInt shortcutCount = iShortcuts.Count();
+ for( TInt i = 0; i < shortcutCount; i++ )
+ {
+ CAiScutShortcutExt* shortcut = static_cast< CAiScutShortcutExt* >
+ ( iShortcuts[ i ] );
+ shortcut->HandleResumed( resumeReason );
+ }
+
+ iAiScutExtServer->ResumeL( aReason );
+
+ CAiScutEngine::ResumeL( aPublishAll, aReason );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAiScutEngineExt::HandleSetPopupLineArrayL( const TDesC& aDefinition,
+ CDesCArray* aLineArray )
+ {
+ CAiScutExtData* extData = iExtDataModel->SetPopupLineArrayL(
+ aDefinition, aLineArray );
+ TBool shortcutsFound = PopulateExtData(
+ aDefinition, extData );
+ if( !shortcutsFound )
+ {
+ iExtDataModel->RemoveAiScutExtData( aDefinition );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAiScutEngineExt::HandleResetPopupLineArrayL( const TDesC& aDefinition )
+ {
+ CAiScutExtData* extData = iExtDataModel->ResetPopupLineArray( aDefinition );
+ TBool shortcutsFound = PopulateExtData(
+ aDefinition, extData );
+ if( !shortcutsFound )
+ {
+ iExtDataModel->RemoveAiScutExtData( aDefinition );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAiScutEngineExt::HandleSetIconL( const TDesC& aDefinition, CGulIcon* aIcon )
+ {
+ CAiScutExtData* extData = iExtDataModel->SetIconL( aDefinition, aIcon );
+ TBool shortcutsFound = PopulateExtData(
+ aDefinition, extData );
+ if( !shortcutsFound )
+ {
+ iExtDataModel->RemoveAiScutExtData( aDefinition );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAiScutEngineExt::HandleResetIconL( const TDesC& aDefinition )
+ {
+ CAiScutExtData* extData = iExtDataModel->ResetIcon( aDefinition );
+ TBool shortcutsFound = PopulateExtData(
+ aDefinition, extData );
+ if( !shortcutsFound )
+ {
+ iExtDataModel->RemoveAiScutExtData( aDefinition );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TBool CAiScutEngineExt::HandleIsInShortcutsL( const TDesC& aDefinition ) const
+ {
+ const TInt shortcutCount = iShortcuts.Count();
+ for( TInt i = 0; i < shortcutCount; i++ )
+ {
+ CAiScutShortcutExt* shortcut = static_cast< CAiScutShortcutExt* >
+ ( iShortcuts[ i ] );
+ TPtrC activeTargetDefinition = shortcut->ActiveTargetDefinition();
+ if( activeTargetDefinition.CompareF( aDefinition ) == 0 )
+ {
+ return ETrue;
+ }
+ }
+
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAiScutEngineExt::HandleIssuePutInShortcutsL( const TDesC& /*aDefinition*/ )
+ {
+ CGSLauncher* l = CGSLauncher::NewLC();
+ l->LaunchGSViewL ( TUid::Uid( AI_UID_ECOM_IMPLEMENTATION_SETTINGS_SCUTPLUGIN ),
+ KScutActiveIdleUid,
+ KNullDesC8 );
+ CleanupStack::PopAndDestroy( l );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TBool CAiScutEngineExt::PopulateExtData( const TDesC& aDefinition,
+ const MAiScutExtData* aAiScutExtData )
+ {
+ //Iterate shortcuts and update matching ones with new extData
+ TBool shortcutsFound = EFalse;
+ const TInt shortcutCount = iShortcuts.Count();
+ for( TInt i = 0; i < shortcutCount; i++ )
+ {
+ CAiScutShortcutExt* shortcut = static_cast< CAiScutShortcutExt* >
+ ( iShortcuts[ i ] );
+ TPtrC activeTargetDefinition = shortcut->ActiveTargetDefinition();
+ if( activeTargetDefinition.CompareF( aDefinition ) == 0 )
+ {
+ shortcut->SetAiScutExtData( aAiScutExtData );
+ shortcutsFound = ETrue;
+ }
+ }
+
+ return shortcutsFound;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CAiScutShortcutExt* CAiScutEngineExt::FindShortcutById(
+ const TDesC& aId ) const
+ {
+ const TInt shortcutCount = iShortcuts.Count();
+ for( TInt i = 0; i < shortcutCount; i++ )
+ {
+ CAiScutShortcutExt* shortcut = static_cast< CAiScutShortcutExt* >
+ ( iShortcuts[ i ] );
+
+ TBuf< KTargetIdMaxLength > id;
+ id.Format( KTargetIdFormat, shortcut->Id() );
+
+ if( id.CompareF( aId ) == 0 )
+ {
+ return shortcut;
+ }
+ }
+ return NULL;
+ }
+
+// End of File.