src/NPRStationListBox.cpp
author tahirm@symbian.org
Fri, 24 Jul 2009 08:46:02 +0100
changeset 0 0049171ecffb
permissions -rw-r--r--
initial release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     1
/*
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     2
 ============================================================================
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     3
 Name	: NPRStationListBox.cpp
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     4
 Author	: Symsource
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     5
 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     6
 Copyright (c) 2009 Symbian Foundation Ltd
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     7
 This component and the accompanying materials are made available
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     8
 under the terms of the License "Eclipse Public License v1.0"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
     9
 which accompanies this distribution, and is available
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    10
 at the URL "http://www.eclipse.org/legal/epl-v10.html".
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    11
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    12
 Initial Contributors:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    13
 - Symsource
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    14
 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    15
 Contributors:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    16
 - Symsource
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    17
 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    18
 Description : Container for Series60 double style list box to show the NPR's station list
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    19
 ============================================================================
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    20
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    21
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    22
#include <barsread.h>
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    23
#include <aknlists.h>
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    24
#include <NPR_0xEEB0E481.rsg>
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    25
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    26
#include "NPRStationListBox.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    27
#include "NPRStationListBoxView.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    28
#include "NPR.hrh"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    29
#include "NPRStation.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    30
#include "NPRAppUi.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    31
#include "NPRAppEngine.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    32
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    33
const TInt KFrequencyTab = 20;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    34
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    35
 * First phase of Symbian two-phase construction. Should not 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    36
 * contain any code that could leave.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    37
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    38
CNPRStationListBox::CNPRStationListBox()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    39
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    40
	iListBox = NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    41
	iStationArray = static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->Engine().Stations();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    42
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    43
/** 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    44
 * Destroy child controls.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    45
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    46
CNPRStationListBox::~CNPRStationListBox()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    47
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    48
	delete iListBox;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    49
	iListBox = NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    50
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    51
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    52
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    53
 * Construct the control (first phase).
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    54
 *  Creates an instance and initializes it.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    55
 *  Instance is not left on cleanup stack.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    56
 * @param aRect bounding rectangle
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    57
 * @param aParent owning parent, or NULL
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    58
 * @param aCommandObserver command observer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    59
 * @return initialized instance of CNPRStationListBox
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    60
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    61
CNPRStationListBox* CNPRStationListBox::NewL( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    62
		const TRect& aRect, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    63
		const CCoeControl* aParent, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    64
		MEikCommandObserver* aCommandObserver )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    65
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    66
	CNPRStationListBox* self = CNPRStationListBox::NewLC( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    67
			aRect, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    68
			aParent, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    69
			aCommandObserver );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    70
	CleanupStack::Pop( self );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    71
	return self;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    72
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    73
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    74
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    75
 * Construct the control (first phase).
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    76
 *  Creates an instance and initializes it.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    77
 *  Instance is left on cleanup stack.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    78
 * @param aRect The rectangle for this window
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    79
 * @param aParent owning parent, or NULL
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    80
 * @param aCommandObserver command observer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    81
 * @return new instance of CNPRStationListBox
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    82
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    83
CNPRStationListBox* CNPRStationListBox::NewLC( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    84
		const TRect& aRect, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    85
		const CCoeControl* aParent, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    86
		MEikCommandObserver* aCommandObserver )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    87
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    88
	CNPRStationListBox* self = new ( ELeave ) CNPRStationListBox();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    89
	CleanupStack::PushL( self );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    90
	self->ConstructL( aRect, aParent, aCommandObserver );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    91
	return self;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    92
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    93
			
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    94
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    95
 * Construct the control (second phase).
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    96
 *  Creates a window to contain the controls and activates it.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    97
 * @param aRect bounding rectangle
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    98
 * @param aCommandObserver command observer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    99
 * @param aParent owning parent, or NULL
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   100
 */ 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   101
void CNPRStationListBox::ConstructL( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   102
		const TRect& aRect, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   103
		const CCoeControl* aParent, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   104
		MEikCommandObserver* aCommandObserver )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   105
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   106
	if ( aParent == NULL )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   107
	    {
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   108
		CreateWindowL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   109
	    }
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   110
	else
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   111
	    {
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   112
	    SetContainerWindowL( *aParent );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   113
	    }
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   114
	iFocusControl = NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   115
	iCommandObserver = aCommandObserver;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   116
	InitializeControlsL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   117
	SetRect( aRect );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   118
	ActivateL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   119
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   120
			
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   121
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   122
* Return the number of controls in the container (override)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   123
* @return count
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   124
*/
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   125
TInt CNPRStationListBox::CountComponentControls() const
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   126
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   127
	return ( int ) ELastControl;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   128
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   129
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   130
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   131
* Get the control with the given index (override)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   132
* @param aIndex Control index [0...n) (limited by #CountComponentControls)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   133
* @return Pointer to control
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   134
*/
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   135
CCoeControl* CNPRStationListBox::ComponentControl( TInt aIndex ) const
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   136
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   137
	switch ( aIndex )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   138
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   139
	case EListBox:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   140
		return iListBox;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   141
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   142
	return NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   143
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   144
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   145
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   146
 *	Handle resizing of the container. This implementation will lay out
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   147
 *  full-sized controls like list boxes for any screen size, and will layout
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   148
 *  labels, editors, etc. to the size they were given in the UI designer.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   149
 *  This code will need to be modified to adjust arbitrary controls to
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   150
 *  any screen size.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   151
 */				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   152
void CNPRStationListBox::SizeChanged()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   153
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   154
	CCoeControl::SizeChanged();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   155
	LayoutControls();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   156
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   157
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   158
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   159
 * Layout components as specified in the UI Designer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   160
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   161
void CNPRStationListBox::LayoutControls()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   162
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   163
	iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   164
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   165
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   166
void CNPRStationListBox::Listen()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   167
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   168
	static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->Engine().SendNPRCommandL(EPlayStationStream, KNullDesC());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   169
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   170
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   171
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   172
 *	Handle key events.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   173
 */				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   174
TKeyResponse CNPRStationListBox::OfferKeyEventL( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   175
		const TKeyEvent& aKeyEvent, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   176
		TEventCode aType )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   177
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   178
	if ( aKeyEvent.iCode == EKeyLeftArrow 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   179
		|| aKeyEvent.iCode == EKeyRightArrow )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   180
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   181
		// Listbox takes all events even if it doesn't use them
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   182
		return EKeyWasNotConsumed;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   183
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   184
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   185
	if ( iFocusControl != NULL
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   186
		&& iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   187
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   188
		return EKeyWasConsumed;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   189
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   190
	return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   191
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   192
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   193
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   194
 *	Initialize each control upon creation.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   195
 */				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   196
void CNPRStationListBox::InitializeControlsL()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   197
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   198
	iListBox = new ( ELeave ) CAknDoubleStyle2ListBox;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   199
	iListBox->SetContainerWindowL( *this );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   200
	TResourceReader reader;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   201
	iEikonEnv->CreateResourceReaderLC( reader, R_NPRSTATION_LIST_BOX_LIST_BOX);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   202
	iListBox->ConstructFromResourceL( reader );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   203
	CleanupStack::PopAndDestroy(); // reader internal state
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   204
	// the listbox owns the items in the list and will free them
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   205
	iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   206
    iListBox->CreateScrollBarFrameL(ETrue);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   207
    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   208
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   209
	// setup the icon array so graphics-style boxes work
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   210
	SetupListBoxIconsL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   211
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   212
	// add list items
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   213
	for(TInt i=0; i<iStationArray->Count(); i++)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   214
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   215
		TInt nameLength = (*iStationArray)[i]->Name().Length();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   216
		TBuf<64> namePlusFrequency((*iStationArray)[i]->Name());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   217
		if((*iStationArray)[i]->Frequency().Length()!=0)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   218
			{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   219
			for(TInt j=0; j<KFrequencyTab-nameLength;j++)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   220
				{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   221
				namePlusFrequency.Append(_L(" "));				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   222
				}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   223
			namePlusFrequency.Append((*iStationArray)[i]->Frequency());		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   224
			}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   225
	    TBuf<128> listString;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   226
		CreateListBoxItemL(listString, namePlusFrequency, (*iStationArray)[i]->MarketCity());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   227
		AddListBoxItemL(iListBox, listString);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   228
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   229
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   230
	iListBox->SetFocus( ETrue );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   231
	iFocusControl = iListBox;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   232
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   233
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   234
/** 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   235
 * Handle global resource changes, such as scalable UI or skin events (override)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   236
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   237
void CNPRStationListBox::HandleResourceChange( TInt aType )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   238
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   239
	CCoeControl::HandleResourceChange( aType );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   240
	SetRect( iAvkonViewAppUi->View( TUid::Uid( ENPRStationListBoxViewId ) )->ClientRect() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   241
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   242
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   243
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   244
 *	Draw container contents.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   245
 */				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   246
void CNPRStationListBox::Draw( const TRect& aRect ) const
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   247
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   248
	CWindowGc& gc = SystemGc();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   249
	gc.Clear( aRect );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   250
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   251
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   252
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   253
 *	Add a list box item to a list.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   254
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   255
void CNPRStationListBox::AddListBoxItemL( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   256
		CEikTextListBox* aListBox,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   257
		const TDesC& aString )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   258
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   259
	CTextListBoxModel* model = aListBox->Model();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   260
	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   261
	itemArray->AppendL( aString );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   262
	aListBox->HandleItemAdditionL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   263
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   264
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   265
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   266
 * Get the array of selected item indices, with respect to the list model.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   267
 * The array is sorted in ascending order.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   268
 * The array should be destroyed with two calls to CleanupStack::PopAndDestroy(),
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   269
 * the first with no argument (referring to the internal resource) and the
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   270
 * second with the array pointer.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   271
 * @return newly allocated array, which is left on the cleanup stack;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   272
 *	or NULL for empty list. 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   273
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   274
RArray< TInt >* CNPRStationListBox::GetSelectedListBoxItemsLC( CEikTextListBox* aListBox )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   275
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   276
	CAknFilteredTextListBoxModel* model = 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   277
		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   278
	if ( model->NumberOfItems() == 0 )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   279
		return NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   280
		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   281
	// get currently selected indices
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   282
	const CListBoxView::CSelectionIndexArray* selectionIndexes =
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   283
		aListBox->SelectionIndexes();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   284
	TInt selectedIndexesCount = selectionIndexes->Count();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   285
	if ( selectedIndexesCount == 0 )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   286
		return NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   287
		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   288
	// copy the indices and sort numerically
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   289
	RArray<TInt>* orderedSelectedIndices = 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   290
		new (ELeave) RArray< TInt >( selectedIndexesCount );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   291
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   292
	// push the allocated array
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   293
	CleanupStack::PushL( orderedSelectedIndices );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   294
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   295
	// dispose the array resource
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   296
	CleanupClosePushL( *orderedSelectedIndices );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   297
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   298
	// see if the search field is enabled
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   299
	CAknListBoxFilterItems* filter = model->Filter();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   300
	if ( filter != NULL )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   301
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   302
		// when filtering enabled, translate indices back to underlying model
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   303
		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   304
			{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   305
			TInt filteredItem = ( *selectionIndexes ) [ idx ];
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   306
			TInt actualItem = filter->FilteredItemIndex ( filteredItem );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   307
			orderedSelectedIndices->InsertInOrder( actualItem );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   308
			}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   309
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   310
	else
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   311
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   312
		// the selection indices refer directly to the model
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   313
		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   314
			orderedSelectedIndices->InsertInOrder( ( *selectionIndexes ) [ idx ] );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   315
		}	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   316
		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   317
	return orderedSelectedIndices;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   318
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   319
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   320
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   321
 * Delete the selected item or items from the list box.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   322
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   323
void CNPRStationListBox::DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   324
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   325
	CAknFilteredTextListBoxModel* model = 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   326
		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   327
	if ( model->NumberOfItems() == 0 )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   328
		return;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   329
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   330
	RArray< TInt >* orderedSelectedIndices = GetSelectedListBoxItemsLC( aListBox );		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   331
	if ( !orderedSelectedIndices )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   332
		return;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   333
		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   334
	// Delete selected items from bottom up so indices don't change on us
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   335
	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   336
	TInt currentItem = 0;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   337
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   338
	for ( TInt idx = orderedSelectedIndices->Count(); idx-- > 0; ) 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   339
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   340
		currentItem = ( *orderedSelectedIndices )[ idx ];
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   341
		itemArray->Delete ( currentItem );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   342
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   343
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   344
	// dispose the array resources
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   345
	CleanupStack::PopAndDestroy();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   346
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   347
	// dispose the array pointer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   348
	CleanupStack::PopAndDestroy( orderedSelectedIndices );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   349
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   350
	// refresh listbox's cursor now that items are deleted
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   351
	AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   352
		aListBox, currentItem, ETrue );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   353
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   354
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   355
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   356
 *	Get the listbox.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   357
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   358
CAknDoubleStyle2ListBox* CNPRStationListBox::ListBox()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   359
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   360
	return iListBox;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   361
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   362
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   363
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   364
 *	Create a list box item with the given column values.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   365
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   366
void CNPRStationListBox::CreateListBoxItemL( TDes& aBuffer, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   367
		const TDesC& aMainText,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   368
		const TDesC& aSecondaryText )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   369
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   370
	_LIT ( KStringHeader, "\t%S\t%S" );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   371
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   372
	aBuffer.Format( KStringHeader(), &aMainText, &aSecondaryText );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   373
	} 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   374
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   375
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   376
 *	Add an item to the list by reading the text items from the array resource
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   377
 *	and setting a single image property (if available) from an index
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   378
 *	in the list box's icon array.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   379
 *	@param aResourceId id of an ARRAY resource containing the textual
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   380
 *	items in the columns
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   381
 *	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   382
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   383
void CNPRStationListBox::AddListBoxResourceArrayItemL( TInt aResourceId )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   384
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   385
	CDesCArray* array = iCoeEnv->ReadDesCArrayResourceL( aResourceId );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   386
	CleanupStack::PushL( array );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   387
	// This is intended to be large enough, but if you get 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   388
	// a USER 11 panic, consider reducing string sizes.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   389
	TBuf<512> listString; 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   390
	CreateListBoxItemL( listString, ( *array ) [ 0 ], ( *array ) [ 1 ] );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   391
	AddListBoxItemL( iListBox, listString );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   392
	CleanupStack::PopAndDestroy( array );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   393
	} 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   394
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   395
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   396
 *	Set up the list's icon array.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   397
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   398
void CNPRStationListBox::SetupListBoxIconsL()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   399
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   400
	CArrayPtr< CGulIcon >* icons = NULL;		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   401
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   402
	if(icons != NULL)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   403
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   404
		iListBox->ItemDrawer()->ColumnData()->SetIconArray(icons);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   405
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   406
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   407
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   408
/** 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   409
 *	Handle commands relating to markable lists.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   410
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   411
TBool CNPRStationListBox::HandleMarkableListCommandL(TInt /*aCommand*/)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   412
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   413
	TBool result = EFalse;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   414
	return result;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   415
	}