src/NPRStoryListBox.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	: NPRStoryListBox.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 story 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 <akniconarray.h>
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    25
#include <NPR_0xEEB0E481.rsg>
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    26
#include <list_icons.mbg>
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    27
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    28
#include "NPRStoryListBox.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    29
#include "NPRStoryListBoxView.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    30
#include "NPR.hrh"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    31
#include "NPRAppUi.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    32
#include "NPRAppEngine.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    33
#include "NPRHtmlCreator.h"
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    34
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    35
_LIT(KStringHeader, "%d\t%S\t%S" );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    36
_LIT(KTestUiFile, "\\resource\\apps\\list_icons.mbm");
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    37
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    38
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    39
 * Construct the control (first phase).
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    40
 *  Creates an instance and initializes it.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    41
 *  Instance is not left on cleanup stack.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    42
 * @param aRect bounding rectangle
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    43
 * @param aParent owning parent, or NULL
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    44
 * @param aCommandObserver command observer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    45
 * @return initialized instance of CNPRStoryListBox
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    46
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    47
CNPRStoryListBox* CNPRStoryListBox::NewL( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    48
		const TRect& aRect, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    49
		const CCoeControl* aParent, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    50
		MEikCommandObserver* aCommandObserver )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    51
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    52
	CNPRStoryListBox* self = CNPRStoryListBox::NewLC( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    53
			aRect, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    54
			aParent, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    55
			aCommandObserver );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    56
	CleanupStack::Pop( self );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    57
	return self;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    58
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    59
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    60
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    61
 * Construct the control (first phase).
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    62
 *  Creates an instance and initializes it.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    63
 *  Instance is left on cleanup stack.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    64
 * @param aRect The rectangle for this window
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    65
 * @param aParent owning parent, or NULL
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    66
 * @param aCommandObserver command observer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    67
 * @return new instance of CNPRStoryListBox
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    68
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    69
CNPRStoryListBox* CNPRStoryListBox::NewLC( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    70
		const TRect& aRect, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    71
		const CCoeControl* aParent, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    72
		MEikCommandObserver* aCommandObserver )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    73
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    74
	CNPRStoryListBox* self = new ( ELeave ) CNPRStoryListBox();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    75
	CleanupStack::PushL( self );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    76
	self->ConstructL( aRect, aParent, aCommandObserver );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    77
	return self;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    78
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    79
			
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    80
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    81
 * First phase of Symbian two-phase construction. Should not 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    82
 * contain any code that could leave.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    83
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    84
CNPRStoryListBox::CNPRStoryListBox()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    85
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    86
	iListBox = NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    87
	iStoryArray = static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->Engine().Stories();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    88
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    89
/** 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    90
 * Destroy child controls.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    91
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    92
CNPRStoryListBox::~CNPRStoryListBox()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    93
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    94
	delete iHtmlCreator;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    95
	delete iListBox;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    96
	iListBox = NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    97
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    98
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
    99
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   100
 * Construct the control (second phase).
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   101
 *  Creates a window to contain the controls and activates it.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   102
 * @param aRect bounding rectangle
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   103
 * @param aCommandObserver command observer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   104
 * @param aParent owning parent, or NULL
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   105
 */ 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   106
void CNPRStoryListBox::ConstructL( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   107
		const TRect& aRect, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   108
		const CCoeControl* aParent, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   109
		MEikCommandObserver* aCommandObserver )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   110
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   111
	if ( aParent == NULL )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   112
	    {
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   113
		CreateWindowL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   114
	    }
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   115
	else
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   116
	    {
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   117
	    SetContainerWindowL( *aParent );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   118
	    }
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   119
	iFocusControl = NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   120
	iCommandObserver = aCommandObserver;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   121
	iHtmlCreator = CNPRHtmlCreator::NewL();	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   122
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   123
	InitializeControlsL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   124
	SetRect( aRect );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   125
	ActivateL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   126
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   127
			
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   128
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   129
* Return the number of controls in the container (override)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   130
* @return count
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   131
*/
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   132
TInt CNPRStoryListBox::CountComponentControls() const
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   133
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   134
	return ( int ) ELastControl;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   135
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   136
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   137
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   138
* Get the control with the given index (override)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   139
* @param aIndex Control index [0...n) (limited by #CountComponentControls)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   140
* @return Pointer to control
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   141
*/
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   142
CCoeControl* CNPRStoryListBox::ComponentControl( TInt aIndex ) const
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   143
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   144
	switch(aIndex)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   145
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   146
	case EListBox:
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   147
		return iListBox;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   148
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   149
	return NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   150
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   151
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   152
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   153
 *	Handle resizing of the container. This implementation will lay out
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   154
 *  full-sized controls like list boxes for any screen size, and will layout
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   155
 *  labels, editors, etc. to the size they were given in the UI designer.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   156
 *  This code will need to be modified to adjust arbitrary controls to
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   157
 *  any screen size.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   158
 */				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   159
void CNPRStoryListBox::SizeChanged()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   160
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   161
	CCoeControl::SizeChanged();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   162
	LayoutControls();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   163
	}
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
 * Layout components as specified in the UI Designer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   167
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   168
void CNPRStoryListBox::LayoutControls()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   169
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   170
	iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   171
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   172
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   173
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   174
 *	Handle key events.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   175
 */				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   176
TKeyResponse CNPRStoryListBox::OfferKeyEventL( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   177
		const TKeyEvent& aKeyEvent, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   178
		TEventCode aType )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   179
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   180
	if ( aKeyEvent.iCode == EKeyLeftArrow 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   181
		|| aKeyEvent.iCode == EKeyRightArrow )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   182
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   183
		// Listbox takes all events even if it doesn't use them
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   184
		return EKeyWasNotConsumed;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   185
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   186
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   187
	if ( iFocusControl != NULL && aKeyEvent.iCode == EKeyDevice3)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   188
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   189
		ShowSelectedStoryL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   190
		return EKeyWasConsumed;
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
	if ( iFocusControl != NULL
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   194
		&& iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   195
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   196
		return EKeyWasConsumed;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   197
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   198
	return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   199
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   200
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   201
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   202
 *	Initialize each control upon creation.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   203
 */				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   204
void CNPRStoryListBox::InitializeControlsL()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   205
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   206
	iListBox = new ( ELeave ) CAknDoubleLargeStyleListBox;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   207
	iListBox->SetContainerWindowL( *this );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   208
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   209
		TResourceReader reader;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   210
		iEikonEnv->CreateResourceReaderLC( reader, R_NPRSTORY_LIST_BOX_LIST_BOX );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   211
		iListBox->ConstructFromResourceL( reader );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   212
		CleanupStack::PopAndDestroy(); // reader internal state
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   213
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   214
	// the listbox owns the items in the list and will free them
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   215
	iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   216
    iListBox->CreateScrollBarFrameL(ETrue);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   217
    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   218
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   219
	SetupListBoxIconsL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   220
	// add list items
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   221
	for(TInt i=0; i<iStoryArray->Count(); i++)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   222
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   223
		HBufC* story = HBufC::NewLC(KStringHeader().Length()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   224
				+ (*iStoryArray)[i]->Title().Length()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   225
				+ (*iStoryArray)[i]->Teaser().Length()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   226
				);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   227
		TPtr storyPtr = story->Des();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   228
		CreateListBoxItemL(storyPtr, TInt(0), (*iStoryArray)[i]->Title(), (*iStoryArray)[i]->Teaser());
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   229
		AddListBoxItemL(iListBox, storyPtr);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   230
		CleanupStack::PopAndDestroy(story);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   231
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   232
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   233
	iListBox->SetFocus( ETrue );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   234
	iFocusControl = iListBox;	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   235
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   236
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   237
/** 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   238
 * Handle global resource changes, such as scalable UI or skin events (override)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   239
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   240
void CNPRStoryListBox::HandleResourceChange( TInt aType )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   241
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   242
	CCoeControl::HandleResourceChange( aType );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   243
	SetRect( iAvkonViewAppUi->View( TUid::Uid( ENPRStoryListBoxViewId ) )->ClientRect() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   244
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   245
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   246
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   247
 *	Draw container contents.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   248
 */				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   249
void CNPRStoryListBox::Draw( const TRect& aRect ) const
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   250
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   251
	CWindowGc& gc = SystemGc();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   252
	gc.Clear( aRect );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   253
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   254
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   255
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   256
 *	Add a list box item to a list.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   257
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   258
void CNPRStoryListBox::AddListBoxItemL( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   259
		CEikTextListBox* aListBox,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   260
		const TDesC& aString )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   261
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   262
	CTextListBoxModel* model = aListBox->Model();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   263
	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   264
	itemArray->AppendL( aString );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   265
	aListBox->HandleItemAdditionL();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   266
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   267
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   268
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   269
 * Get the array of selected item indices, with respect to the list model.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   270
 * The array is sorted in ascending order.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   271
 * The array should be destroyed with two calls to CleanupStack::PopAndDestroy(),
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   272
 * the first with no argument (referring to the internal resource) and the
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   273
 * second with the array pointer.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   274
 * @return newly allocated array, which is left on the cleanup stack;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   275
 *	or NULL for empty list. 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   276
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   277
RArray< TInt >* CNPRStoryListBox::GetSelectedListBoxItemsLC( CEikTextListBox* aListBox )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   278
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   279
	CAknFilteredTextListBoxModel* model = 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   280
		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   281
	if ( model->NumberOfItems() == 0 )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   282
		return NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   283
		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   284
	// get currently selected indices
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   285
	const CListBoxView::CSelectionIndexArray* selectionIndexes =
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   286
		aListBox->SelectionIndexes();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   287
	TInt selectedIndexesCount = selectionIndexes->Count();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   288
	if ( selectedIndexesCount == 0 )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   289
		return NULL;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   290
		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   291
	// copy the indices and sort numerically
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   292
	RArray<TInt>* orderedSelectedIndices = 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   293
		new (ELeave) RArray< TInt >( selectedIndexesCount );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   294
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   295
	// push the allocated array
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   296
	CleanupStack::PushL( orderedSelectedIndices );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   297
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   298
	// dispose the array resource
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   299
	CleanupClosePushL( *orderedSelectedIndices );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   300
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   301
	// see if the search field is enabled
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   302
	CAknListBoxFilterItems* filter = model->Filter();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   303
	if ( filter != NULL )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   304
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   305
		// when filtering enabled, translate indices back to underlying model
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   306
		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   307
			{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   308
			TInt filteredItem = ( *selectionIndexes ) [ idx ];
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   309
			TInt actualItem = filter->FilteredItemIndex ( filteredItem );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   310
			orderedSelectedIndices->InsertInOrder( actualItem );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   311
			}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   312
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   313
	else
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   314
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   315
		// the selection indices refer directly to the model
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   316
		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   317
			orderedSelectedIndices->InsertInOrder( ( *selectionIndexes ) [ idx ] );
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
	return orderedSelectedIndices;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   321
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   322
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   323
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   324
 * Delete the selected item or items from the list box.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   325
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   326
void CNPRStoryListBox::DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   327
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   328
	CAknFilteredTextListBoxModel* model = 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   329
		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   330
	if ( model->NumberOfItems() == 0 )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   331
		return;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   332
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   333
	RArray< TInt >* orderedSelectedIndices = GetSelectedListBoxItemsLC( aListBox );		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   334
	if ( !orderedSelectedIndices )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   335
		return;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   336
		
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   337
	// Delete selected items from bottom up so indices don't change on us
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   338
	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   339
	TInt currentItem = 0;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   340
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   341
	for ( TInt idx = orderedSelectedIndices->Count(); idx-- > 0; ) 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   342
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   343
		currentItem = ( *orderedSelectedIndices )[ idx ];
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   344
		itemArray->Delete ( currentItem );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   345
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   346
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   347
	// dispose the array resources
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   348
	CleanupStack::PopAndDestroy();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   349
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   350
	// dispose the array pointer
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   351
	CleanupStack::PopAndDestroy( orderedSelectedIndices );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   352
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   353
	// refresh listbox's cursor now that items are deleted
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   354
	AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   355
		aListBox, currentItem, ETrue );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   356
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   357
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   358
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   359
 *	Get the listbox.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   360
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   361
CAknDoubleLargeStyleListBox* CNPRStoryListBox::ListBox()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   362
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   363
	return iListBox;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   364
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   365
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   366
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   367
 *	Create a list box item with the given column values.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   368
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   369
void CNPRStoryListBox::CreateListBoxItemL( TDes& aBuffer, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   370
		TInt aIconIndex,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   371
		const TDesC& aMainText,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   372
		const TDesC& 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
	aBuffer.Format( KStringHeader(), aIconIndex, &aMainText, &aSecondaryText);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   376
	} 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   377
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   378
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   379
 *	Add an item to the list by reading the text items from the array resource
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   380
 *	and setting a single image property (if available) from an index
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   381
 *	in the list box's icon array.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   382
 *	@param aResourceId id of an ARRAY resource containing the textual
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   383
 *	items in the columns
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   384
 *	@param aIconIndex the index in the icon array, or -1
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   385
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   386
void CNPRStoryListBox::AddListBoxResourceArrayItemL( TInt aResourceId, TInt aIconIndex )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   387
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   388
	CDesCArray* array = iCoeEnv->ReadDesCArrayResourceL( aResourceId );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   389
	CleanupStack::PushL( array );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   390
	// This is intended to be large enough, but if you get 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   391
	// a USER 11 panic, consider reducing string sizes.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   392
	TBuf<512> listString; 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   393
	CreateListBoxItemL( listString, aIconIndex, (*array) [0], (*array )[1]);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   394
	AddListBoxItemL( iListBox, listString );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   395
	CleanupStack::PopAndDestroy( array );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   396
	} 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   397
				
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   398
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   399
 *	Set up the list's icon array.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   400
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   401
void CNPRStoryListBox::SetupListBoxIconsL()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   402
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   403
	CArrayPtr< CGulIcon >* icons = new (ELeave) CAknIconArray( 1 );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   404
	CleanupStack::PushL( icons );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   405
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   406
	icons->AppendL(LoadAndScaleIconL(KTestUiFile,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   407
									 EMbmList_iconsNpr_symbian_generic,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   408
									 EMbmList_iconsNpr_symbian_generic_mask,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   409
									 NULL, EAspectRatioPreserved ));
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   410
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   411
	CleanupStack::Pop( icons );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   412
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   413
	if ( icons != NULL )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   414
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   415
		iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   416
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   417
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   418
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   419
/** 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   420
 *	Handle commands relating to markable lists.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   421
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   422
TBool CNPRStoryListBox::HandleMarkableListCommandL(TInt /*aCommand*/)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   423
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   424
	return EFalse;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   425
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   426
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   427
/**
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   428
 *	This routine loads and scales a bitmap or icon.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   429
 *
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   430
 *	@param aFileName the MBM or MIF filename
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   431
 *	@param aBitmapId the bitmap id
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   432
 *	@param aMaskId the mask id or -1 for none
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   433
 *	@param aSize the TSize for the icon, or NULL to use real size
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   434
 *	@param aScaleMode one of the EAspectRatio* enums when scaling
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   435
 *
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   436
 */
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   437
CGulIcon* CNPRStoryListBox::LoadAndScaleIconL( 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   438
		const TDesC& aFileName,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   439
		TInt aBitmapId, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   440
		TInt aMaskId, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   441
		TSize* aSize, 
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   442
		TScaleMode aScaleMode )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   443
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   444
	CFbsBitmap* bitmap;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   445
	CFbsBitmap* mask;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   446
	TRAPD(err, AknIconUtils::CreateIconL( bitmap, mask, aFileName, aBitmapId, aMaskId ));
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   447
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   448
	TSize size;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   449
	if ( aSize == NULL )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   450
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   451
		// Use size from the image header.  In case of SVG,
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   452
		// we preserve the image data for a while longer, since ordinarily
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   453
		// it is disposed at the first GetContentDimensions() or SetSize() call.
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   454
		AknIconUtils::PreserveIconData( bitmap );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   455
		AknIconUtils::GetContentDimensions( bitmap, size );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   456
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   457
	else
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   458
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   459
		size = *aSize;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   460
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   461
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   462
	AknIconUtils::SetSize( bitmap, size, aScaleMode );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   463
	AknIconUtils::SetSize( mask, size, aScaleMode );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   464
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   465
	if ( aSize == NULL )
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   466
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   467
		AknIconUtils::DestroyIconData( bitmap );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   468
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   469
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   470
	return CGulIcon::NewL( bitmap, mask );
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   471
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   472
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   473
TInt CNPRStoryListBox::CurrentItemIndex()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   474
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   475
	return iListBox->CurrentItemIndex();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   476
	}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   477
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   478
void CNPRStoryListBox::ShowSelectedStoryL()
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   479
	{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   480
//	TInt index = CurrentItemIndex();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   481
//	static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   482
//	ActivateLocalViewL(TUid::Uid(ENPRStoryViewerContainerViewId), TUid::Uid(index),KNullDesC8);//TO DO use custum message instead of custum command
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   483
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   484
	TInt currentItem = iListBox->CurrentItemIndex();
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   485
	if (currentItem==-1)
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   486
		{
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   487
		return;
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   488
		}
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   489
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   490
	CNPRStory* story=(*iStoryArray)[currentItem];
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   491
	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   492
	//TODO - Move this code into the browser container, so it is seperate from the listbox	
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   493
	iHtmlCreator->CreateHtmlFileL(story);
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   494
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   495
	static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->ActivateLocalViewL(TUid::Uid(ENPRBrowserViewId));
0049171ecffb initial release
tahirm@symbian.org
parents:
diff changeset
   496
	}