Rework addition of Symbian splash screen to reduce the source impact (uses SVG from Bug 2414)
Notes: by using the OPTION SOURCEDIR parameter in the mifconv extension instructions, I can
arrange to use the same source file name in sfimage, without having to export over the original
Nokia file. This means that the name inside splashscreen.mbg is the same, which removes the need
for the conditional compilation in SplashScreen.cpp, and gets rid of sf_splashscreen.mmp.
/*
* 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: Container for the sensor settings
*
*/
// INCLUDE FILES
#include "gssensorplugincontainer.h"
#include "gssensormskobserver.h"
#include "gssensorpluginmodel.h"
#include "gssensorplugin.hrh"
#include "gssensorplugin_debug.h"
#include <aknlists.h>
#include <csxhelp/cp.hlp.hrh>
#include <gsfwviewuids.h> // for KUidGS
#include <gssensorpluginrsc.rsg>
#include <gslistbox.h>
#include <gsplugininterface.h>
// ========================== MEMBER FUNCTIONS ================================
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::ConstructL
// This constructL is not used
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::ConstructL( const TRect& /*aRect*/ )
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::ConstructL() - deprecated" );
User::Leave( KErrArgument );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::ConstructL
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::ConstructL(
const TRect& aRect,
CAknViewAppUi* aAppUi,
CArrayPtrFlat<CGSPluginInterface>* aPluginArray )
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::ConstructL()" );
iAppUi = aAppUi;
iPluginArray = aPluginArray;
// Create list box and parent container
iListBox = new ( ELeave ) CAknSettingStyleListBox;
BaseConstructL( aRect, R_GS_SEN_VIEW_TITLE, R_GS_SEN_DOUBLE_LBX );
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::ConstructL() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::~CGSSensorPluginContainer
// ---------------------------------------------------------------------------
//
CGSSensorPluginContainer::~CGSSensorPluginContainer()
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::~CGSSensorPluginContainer()" );
if ( iListboxItemArray )
{
delete iListboxItemArray;
}
if ( iListBoxTextArray )
{
iListBoxTextArray->Reset();
delete iListBoxTextArray;
}
if ( iSensorStatusText )
{
iSensorStatusText->Reset();
delete iSensorStatusText;
}
if ( iListItems )
{
iListItems->Reset();
delete iListItems;
}
iModel = NULL;
iAppUi = NULL;
iPluginArray = NULL;
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::~CGSSensorPluginContainer() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::CGSSensorPluginContainer
// ---------------------------------------------------------------------------
//
CGSSensorPluginContainer::CGSSensorPluginContainer(
CGSSensorPluginModel* aModel,
MGSSensorMskObserver& aMskObserver )
: iModel ( aModel ),
iMskObserver( aMskObserver )
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::CGSSensorPluginContainer()" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::ConstructListBoxL
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::ConstructListBoxL( TInt aResLbxId )
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::ConstructListBoxL()" );
iListBox->ConstructL( this, EAknListBoxSelectionList );
iListboxItemArray = CGSListBoxItemTextArray::NewL( aResLbxId, *iListBox, *iCoeEnv );
iListBoxTextArray = static_cast<CDesCArray*>( iListBox->Model()->ItemTextArray() );
iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
// Get sensors activation status and set text 'On' or 'Off' to list view below
// Sensors list item
iSensorStatusText = iCoeEnv->ReadDesC16ArrayResourceL( R_GS_SENSOR_ACTIVE_STATUS );
iListItems = iCoeEnv->ReadDesC16ArrayResourceL( R_GS_SEN_DOUBLE_LBX_TEXT );
// Create and make visible list box items
CreateListBoxItemsL();
iListBox->HandleItemAdditionL();
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::ConstructListBoxL() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::CreateListBoxItemsL
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::CreateListBoxItemsL()
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::CreateListBoxItemsL()" );
iGeneralItemCount = 0;
const TUint32 tapVariation = iModel->VariationListL( EGSSenTapping );
const TUint32 turnVariation = iModel->VariationListL( EGSSenTurning );
if ( tapVariation ||turnVariation )
{
// Make Sensors active status visible if there is at least one enabled use case
MakeSensorsItemL();
iGeneralItemCount++;
if ( !tapVariation )
{
iListboxItemArray->SetItemVisibilityL( EGSTapCtrlListItemId,
CGSListBoxItemTextArray::EInvisible );
}
else
{
MakeTapCtrlItemL();
iGeneralItemCount++;
}
if ( !turnVariation )
{
iListboxItemArray->SetItemVisibilityL( EGSTurnCtrlListItemId,
CGSListBoxItemTextArray::EInvisible );
}
else
{
MakeTurnCtrlItemL();
iGeneralItemCount++;
}
}
if ( iPluginArray )
{
MakeExtendedPluginsItemL();
}
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::CreateListBoxItemsL() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::UpdateListBoxL
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::UpdateListBoxL( TInt aFeatureId )
{
TRACE_1( "[GSSensorPlugin] CGSSensorPluginContainer::UpdateListBoxL() - feature: %i",
aFeatureId );
switch ( aFeatureId )
{
case EGSSensorsListItemId:
{
// Delete current text and then create new
iListBoxTextArray->Delete( EGSSensorsListItemId );
MakeSensorsItemL();
break;
}
case EGSExtPluginsListItemId:
MakeExtendedPluginsItemL();
break;
case EGSTapCtrlListItemId:
case EGSTurnCtrlListItemId:
case EGSOrientationListItemId:
default:
break;
}
// Draw listbox again
iListBox->HandleItemAdditionL();
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::UpdateListBoxL() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::MakeSensorsItemL
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::MakeSensorsItemL()
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::MakeSensorsItemL()" );
const TInt sensorsStatus = iModel->SensorActiveStatusL();
SetSensorStatusTextL( sensorsStatus );
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::MakeSensorsItemL() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::MakeTapCtrlItemL
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::MakeTapCtrlItemL()
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::MakeTapCtrlItemL()" );
AppendListItemL( EGSTapCtrlListItemId,
iListItems->operator[]( EGSTapCtrlListItemId ),
KNullDesC16 );
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::MakeTapCtrlItemL() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::MakeTurnCntrItemL
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::MakeTurnCtrlItemL()
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::MakeTurnCtrlItemL()" );
AppendListItemL( EGSTurnCtrlListItemId,
iListItems->operator[]( EGSTurnCtrlListItemId ),
KNullDesC16 );
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::MakeTurnCtrlItemL() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::MakeOrientationItemL
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::MakeOrientationItemL()
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::MakeOrientationItemL()" );
User::Leave( KErrNotSupported );
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::MakeOrientationItemL() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::MakeExtendedPluginsItemL
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::MakeExtendedPluginsItemL()
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::MakeExtendedPluginsItemL()" );
// Create list item for all child plug-ins
const TInt pluginCount( iPluginArray->Count() );
CGSPluginInterface* plugin = NULL;
const TUint32 tapVariation = iModel->VariationListL( EGSSenTapping );
const TUint32 turnVariation = iModel->VariationListL( EGSSenTurning );
if ( ( pluginCount == 1 ) && ( !tapVariation && !turnVariation ) )
{
ActivateExtendedPluginL();
}
else
{
// 1) Read item descriptor from plugin:
TBuf<KGSBufSize128> caption;
for ( TInt i = 0; i < pluginCount; i++ )
{
plugin = iPluginArray->operator[]( i );
plugin->GetCaptionL( caption );
// Append text to list
AppendListItemL( KErrNotFound, caption, KNullDesC16 );
}
}
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::MakeExtendedPluginsItemL() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::ActivateExtendedPluginL
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::ActivateExtendedPluginL()
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::ActivateExtendedPluginL()" );
// Not local view, try plugins
if ( iPluginArray->Count() == 1)
{
CGSPluginInterface* selectedPlugin = iPluginArray->operator[]( 0 );
switch( selectedPlugin->ItemType() )
{
// In these cases the plugin is a view:
case EGSItemTypeSingleLarge:
case EGSItemTypeSetting:
case EGSItemTypeSettingIcon:
{
CleanupStack::PushL( selectedPlugin );
iAppUi->ActivateLocalViewL( selectedPlugin->Id() );
CleanupStack::Pop( selectedPlugin );
break;
}
// In these cases the plugin is a dialog:
case EGSItemTypeSettingDialog:
case EGSItemTypeSingleLargeDialog:
selectedPlugin->HandleSelection( EGSSelectionByMenu );
break;
default:
break;
}
}
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::ActivateExtendedPluginL() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::AppendListItem
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::AppendListItemL(
const TInt aPos,
const TDesC16& aFirstLabel,
const TDesC16& aSecondLabel )
{
TBuf<KGSBufSize128> itemText;
_LIT( KSpaceAndTab, " \t" );
_LIT( KTab, "\t" );
// The format is: " \tFirstLabel\tSecondLabel\t0\t0"
// First, append space and tab
itemText.Append( KSpaceAndTab );
itemText.Append( aFirstLabel );
itemText.Append( KTab );
itemText.Append( KTab );
// Currently this is used only to show sensors active status (on/off)
itemText.Append( aSecondLabel );
// No need to add last tabs
if ( ( KErrNotFound != aPos ) && ( aPos <= iListBoxTextArray->Count() ) )
{
iListBoxTextArray->InsertL( aPos, itemText );
}
else
{
iListBoxTextArray->AppendL( itemText );
}
}
// -----------------------------------------------------------------------------
// CGSSensorPluginContainer::SelectedPlugin
// Returns pointer to selected plugin
// -----------------------------------------------------------------------------
//
CGSPluginInterface* CGSSensorPluginContainer::SelectedPluginL()
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::SelectedPlugin()" );
CGSPluginInterface* plugin = NULL;
// 1) Decrease index with the count
TInt index = iListBox->CurrentItemIndex() - iGeneralItemCount;
// 2) Check that new index is in range of plugins
if ( index >= 0 && index < iPluginArray->Count() )
{
// 3) Get correct plugin
plugin = iPluginArray->operator[]( index );
}
// Leave if not found
if ( !plugin )
{
User::Leave( KErrNotFound );
}
TRACE_1( "[GSSensorPlugin] CGSSensorPluginContainer::SelectedPlugin() - return: 0x%x", plugin );
return plugin;
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::CurrentFeatureId
// ---------------------------------------------------------------------------
//
TInt CGSSensorPluginContainer::CurrentFeatureId() const
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::CurrentFeatureId()" );
return iListboxItemArray->CurrentFeature();
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::OfferKeyEventL
// ---------------------------------------------------------------------------
//
TKeyResponse CGSSensorPluginContainer::OfferKeyEventL(
const TKeyEvent& aKeyEvent, TEventCode aType )
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::OfferKeyEventL()" );
TKeyResponse returnValue( EKeyWasNotConsumed );
switch ( aKeyEvent.iCode )
{
case EKeyUpArrow:
case EKeyDownArrow:
{
// Send key event to Listbox
returnValue = iListBox->OfferKeyEventL( aKeyEvent, aType );
// Change MSK label if needs to changed
iMskObserver.CheckMiddleSoftkeyLabelL();
break;
}
case EKeyLeftArrow:
case EKeyRightArrow:
{
// Listbox takes all events even if it doesn't use them.
// Stick with the default return value
break;
}
default:
{
// Forward key event to listbox
returnValue = iListBox->OfferKeyEventL( aKeyEvent, aType );
break;
}
}
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::OfferKeyEventL() - return" );
return returnValue;
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::GetHelpContext
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::GetHelpContext( TCoeHelpContext& aContext ) const
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::GetHelpContext()" );
aContext.iMajor = KUidGS;
aContext.iContext = KSSET_HLP_MAIN_VIEW;
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::GetHelpContext() - return" );
}
// ---------------------------------------------------------------------------
// CGSSensorPluginContainer::SetSensorStatusTextL
// Setting Sensors status Text based on the value sent,
// '0' meams "Off" & '1' Means 'On'
// ---------------------------------------------------------------------------
//
void CGSSensorPluginContainer::SetSensorStatusTextL( TInt aValue )
{
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::SetSensorStatusTextL()" );
AppendListItemL(
EGSSensorsListItemId,
iListItems->operator[]( EGSSensorsListItemId ),
( *iSensorStatusText )[aValue] );
TRACE_( "[GSSensorPlugin] CGSSensorPluginContainer::SetSensorStatusTextL() - return" );
}