application/src/PodcastListView.cpp
branchsymbian1
changeset 336 3d6c1417e8bd
parent 160 6477d22a5dca
child 347 b8d687bb7ca1
equal deleted inserted replaced
296:80f1da5ac28b 336:3d6c1417e8bd
    28 #include <akntabgrp.h>
    28 #include <akntabgrp.h>
    29 #include <akntoolbarextension.h>
    29 #include <akntoolbarextension.h>
    30 #include <aknquerydialog.h>
    30 #include <aknquerydialog.h>
    31 #include <barsread.h>
    31 #include <barsread.h>
    32 #include <akntitle.h>
    32 #include <akntitle.h>
       
    33 #include <akniconarray.h>
       
    34 #include <EIKCLBD.H>
    33 
    35 
    34 #include "buildno.h"
    36 #include "buildno.h"
    35 
    37 
    36 const TInt KDefaultGran = 5;
    38 const TInt KDefaultGran = 5;
    37 
    39 
    38 CPodcastListContainer::CPodcastListContainer()
    40 CPodcastListContainer::CPodcastListContainer()
    39 {
    41 {
    40 }
    42 }
    41 
    43 
    42 void CPodcastListContainer::SetKeyEventListener(MKeyEventListener *aKeyEventListener)
    44 void CPodcastListContainer::SetContainerListener(MContainerListener *aContainerListener)
    43 	{
    45 	{
    44 	iKeyEventListener = aKeyEventListener;
    46 	iContainerListener = aContainerListener;
    45 	}
    47 	}
    46 
    48 
    47 TKeyResponse CPodcastListContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
    49 TKeyResponse CPodcastListContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
    48 {
    50 {
    49 	TKeyResponse response = iListbox->OfferKeyEventL(aKeyEvent, aType);
    51 	TKeyResponse response = iListbox->OfferKeyEventL(aKeyEvent, aType);
    50 	if (iKeyEventListener)
    52 	if (iContainerListener)
    51 		iKeyEventListener->OfferKeyEventL(aKeyEvent, aType);
    53 		iContainerListener->OfferKeyEventL(aKeyEvent, aType);
    52 	
    54 	
    53 	return response;
    55 	return response;
    54 }
    56 }
    55 
    57 
    56 void CPodcastListContainer::ConstructL( const TRect& aRect, TInt aListboxFlags )
    58 void CPodcastListContainer::ConstructL( const TRect& aRect, TInt aListboxFlags )
    57 {
    59 {
       
    60 	DP("CPodcastListContainer::ConstructL BEGIN");
    58 	CreateWindowL();
    61 	CreateWindowL();
    59 
    62 
    60 	iBgContext = 
    63 	iBgContext = 
    61 		    CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, 
    64 		    CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, 
    62 		                                              aRect, 
    65 		                                              aRect, 
    63 		                                              ETrue );
    66 		                                              ETrue );
    64 		
    67 	
       
    68 	iListboxLandscape = new (ELeave) CAknSingleLargeStyleListBox;
       
    69 	iListboxLandscape->ConstructL(this, aListboxFlags);
       
    70 	iListboxLandscape->SetMopParent( this );
       
    71 	iListboxLandscape->SetContainerWindowL(*this);
       
    72 	iListboxLandscape->CreateScrollBarFrameL(ETrue);
       
    73 	iListboxLandscape->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto );
       
    74 	iListboxLandscape->SetSize(aRect.Size());
       
    75 	iListboxLandscape->MakeVisible(EFalse);
       
    76 
       
    77 	iListboxPortrait = new (ELeave) CAknDoubleLargeStyleListBox;
       
    78 	iListboxPortrait->ConstructL(this, aListboxFlags);
       
    79 	iListboxPortrait->SetMopParent( this );
       
    80 	iListboxPortrait->SetContainerWindowL(*this);
       
    81 	iListboxPortrait->CreateScrollBarFrameL(ETrue);
       
    82 	iListboxPortrait->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto );
       
    83 	iListboxPortrait->SetSize(aRect.Size());
       
    84 	iListboxPortrait->MakeVisible(EFalse);
       
    85 	
       
    86 	if (aRect.Width() > aRect.Height())
       
    87 		{
       
    88 		iLandscape = ETrue;
       
    89 		iListbox = iListboxLandscape;
       
    90 		iListboxLandscape->MakeVisible(ETrue);
       
    91 		}
       
    92 	else 
       
    93 		{
       
    94 		iLandscape = EFalse;
       
    95 		iListboxPortrait->MakeVisible(ETrue);
       
    96 		iListbox = (CEikColumnListBox*) iListboxPortrait;
       
    97 		}
       
    98  	
       
    99     MakeVisible(EFalse);
       
   100 
    65 	 // Set the windows size
   101 	 // Set the windows size
    66     SetRect( aRect );    
   102     SetRect( aRect ); 
    67     iListbox =static_cast<CEikFormattedCellListBox*>( new (ELeave) CAknDoubleLargeStyleListBox);
   103 
    68     iListbox->ConstructL(this, aListboxFlags);
       
    69     iListbox->SetMopParent( this );
       
    70 	iListbox->SetContainerWindowL(*this);
       
    71 	iListbox->CreateScrollBarFrameL(ETrue);
       
    72 	iListbox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto );
       
    73 	
       
    74 	iListbox->ItemDrawer()->FormattedCellData()->EnableMarqueeL( ETrue );
       
    75 
       
    76 	iListbox->SetSize(aRect.Size());
       
    77 	iListbox->MakeVisible(ETrue);
       
    78     MakeVisible(EFalse);
       
    79     
       
    80 	// Activate the window, which makes it ready to be drawn
   104 	// Activate the window, which makes it ready to be drawn
    81     ActivateL();   
   105     ActivateL();   
       
   106     DP("CPodcastListContainer::ConstructL END");
    82 }
   107 }
    83 
   108 
    84 TInt CPodcastListContainer::CountComponentControls() const
   109 TInt CPodcastListContainer::CountComponentControls() const
    85     {
   110     {
    86     return 1; // return number of controls inside this container
   111     return 1; // return number of controls inside this container
    89 CCoeControl* CPodcastListContainer::ComponentControl(TInt aIndex) const
   114 CCoeControl* CPodcastListContainer::ComponentControl(TInt aIndex) const
    90     {
   115     {
    91     switch ( aIndex )
   116     switch ( aIndex )
    92         {
   117         {
    93         case 0:
   118         case 0:
    94             return iListbox;
   119         	if (iLandscape)
       
   120         		return iListboxLandscape;
       
   121         	else
       
   122         		return iListboxPortrait;
    95         default:
   123         default:
    96             return NULL;
   124             return NULL;
    97         }
   125         }
    98     }
   126     }
    99 
   127 
   126 		iListbox->ScrollToMakeItemVisible(iListbox->CurrentItemIndex());
   154 		iListbox->ScrollToMakeItemVisible(iListbox->CurrentItemIndex());
   127 	}
   155 	}
   128 }
   156 }
   129 void CPodcastListContainer::SizeChanged()
   157 void CPodcastListContainer::SizeChanged()
   130 {
   158 {
   131 	DP2("CPodcastListContainer::SizeChanged(), width=%d, height=%d",Size().iWidth, Size().iHeight);
   159 	DP2("CPodcastListContainer::SizeChanged() BEGIN, width=%d, height=%d",Size().iWidth, Size().iHeight);
   132 	if(iListbox != NULL)
   160 
   133 	{
   161 	iLandscape = Size().iWidth > Size().iHeight;
   134 		iListbox->SetSize(Size());
   162 
   135 	}
   163 	if (iContainerListener)
   136 }
   164 		iContainerListener->SizeChanged();
   137 
   165 	
   138 CEikFormattedCellListBox* CPodcastListContainer::Listbox()
   166 	if (iLandscape)
       
   167 		{
       
   168 		iListboxPortrait->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff );
       
   169 		iListboxPortrait->UpdateScrollBarsL();
       
   170 		iListboxPortrait->MakeVisible(EFalse);
       
   171 
       
   172 		iListboxLandscape->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto );
       
   173 		iListboxLandscape->MakeVisible(ETrue);
       
   174 		iListboxLandscape->SetFocus(ETrue, EDrawNow);
       
   175 		iListbox = iListboxLandscape;
       
   176 		}
       
   177 	else
       
   178 		{
       
   179 		iListboxLandscape->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff );
       
   180 		iListboxLandscape->UpdateScrollBarsL();
       
   181 		iListboxLandscape->MakeVisible(EFalse);	
       
   182 		
       
   183 		iListboxPortrait->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto );
       
   184 		iListboxPortrait->MakeVisible(ETrue);
       
   185 		iListboxPortrait->SetFocus(ETrue, EDrawNow);
       
   186 		iListbox = (CEikColumnListBox*) iListboxPortrait;
       
   187 		}
       
   188 
       
   189 	iListbox->SetSize(Size());
       
   190     ActivateL();  		
       
   191 	DrawNow();
       
   192 	DP("CPodcastListContainer::SizeChanged END");
       
   193 }
       
   194 
       
   195 CEikColumnListBox* CPodcastListContainer::Listbox()
   139 {
   196 {
   140 	return iListbox;
   197 	return iListbox;
   141 }
   198 }
   142 
   199 
       
   200 void CPodcastListContainer::SetListboxObserver(MEikListBoxObserver *aObserver)
       
   201 	{
       
   202 	iListboxLandscape->SetListBoxObserver(aObserver);
       
   203 	iListboxPortrait->SetListBoxObserver(aObserver);
       
   204 	}
       
   205 		
       
   206 void CPodcastListContainer::SetListboxIcons(CArrayPtr< CGulIcon >* aIcons)
       
   207 {
       
   208 	iListboxLandscape->ItemDrawer()->ColumnData()->SetIconArray(aIcons);
       
   209 	iListboxPortrait->ItemDrawer()->FormattedCellData()->SetIconArrayL(aIcons);
       
   210 }
       
   211 
       
   212 CArrayPtr<CGulIcon>* CPodcastListContainer::ListboxIcons()
       
   213 	{
       
   214 	if (iListboxLandscape == iListbox)
       
   215 		return iListboxLandscape->ItemDrawer()->ColumnData()->IconArray();
       
   216 	else
       
   217 		return iListboxPortrait->ItemDrawer()->FormattedCellData()->IconArray();
       
   218 	}
       
   219 
       
   220 void CPodcastListContainer::SetListboxTextArrays(CDesCArray* aPortraitArray, CDesCArray* aLandscapeArray)
       
   221 	{
       
   222 	iListboxLandscape->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
       
   223 	iListboxLandscape->Model()->SetItemTextArray(aLandscapeArray);
       
   224 	iListboxPortrait->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
       
   225 	iListboxPortrait->Model()->SetItemTextArray(aPortraitArray);
       
   226 	}
   143 
   227 
   144 CPodcastListContainer::~CPodcastListContainer()
   228 CPodcastListContainer::~CPodcastListContainer()
   145 {
   229 {
   146 	delete iListbox;
   230 	iListboxLandscape->ItemDrawer()->ColumnData()->SetIconArray(NULL);
       
   231 	delete iListboxPortrait;
       
   232 	delete iListboxLandscape;
   147 	delete iBgContext;
   233 	delete iBgContext;
   148 }
   234 }
   149 
   235 
       
   236 void CPodcastListContainer::SetEmptyText(const TDesC &aText)
       
   237 	{
       
   238 	iListboxPortrait->View()->SetListEmptyTextL(aText);
       
   239 	iListboxLandscape->View()->SetListEmptyTextL(aText);
       
   240 	}
   150 
   241 
   151 void CPodcastListContainer::Draw(const TRect& aRect) const
   242 void CPodcastListContainer::Draw(const TRect& aRect) const
   152 	{
   243 	{
   153 	CWindowGc& gc = SystemGc();
   244 	CWindowGc& gc = SystemGc();
   154 	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
   245 	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
   167     return CCoeControl::MopSupplyObject(aId);
   258     return CCoeControl::MopSupplyObject(aId);
   168     }
   259     }
   169 
   260 
   170 void CPodcastListContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent)
   261 void CPodcastListContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent)
   171 	{
   262 	{
   172 	if (iPointerListener)
   263 	if (iContainerListener)
   173 		iPointerListener->PointerEventL(aPointerEvent);
   264 		iContainerListener->PointerEventL(aPointerEvent);
   174 
   265 
   175 	// Call base class HandlePointerEventL() if not a long tap
   266 	// Call base class HandlePointerEventL() if not a long tap
   176 	if (!iLongTapDetected)
   267 	if (!iLongTapDetected)
   177 		{
   268 		{
   178 		CCoeControl::HandlePointerEventL(aPointerEvent);
   269 		CCoeControl::HandlePointerEventL(aPointerEvent);
   179 		}
   270 		}
   180 	}
   271 	}
   181 
   272 
   182 
       
   183 void CPodcastListContainer::SetPointerListener(MPointerListener *aPointerListener)
       
   184 	{
       
   185 	iPointerListener = aPointerListener;
       
   186 	}
       
   187 
       
   188 
       
   189 CPodcastListView::CPodcastListView()
   273 CPodcastListView::CPodcastListView()
   190 {
   274 {
   191 }
   275 }
   192 
   276 
   193 void CPodcastListView::ConstructL()
   277 void CPodcastListView::ConstructL()
   194 {
   278 {
   195 	DP("CPodcastListView::ConstructL BEGIN");
   279 	DP("CPodcastListView::ConstructL BEGIN");
       
   280 
   196 	iListContainer = new (ELeave) CPodcastListContainer;
   281 	iListContainer = new (ELeave) CPodcastListContainer;
   197 	iListContainer->ConstructL(ClientRect(), iListboxFlags);
   282 	TRect rect = ClientRect();
       
   283 	
       
   284 	iListContainer->ConstructL(rect, iListboxFlags);
   198 	iListContainer->SetMopParent(this);
   285 	iListContainer->SetMopParent(this);
   199 	iListContainer->ActivateL();
   286 	iListContainer->ActivateL();
       
   287 	
   200 	iItemArray = new (ELeave)CDesCArrayFlat(KDefaultGran);
   288 	iItemArray = new (ELeave)CDesCArrayFlat(KDefaultGran);
   201 	iListContainer->Listbox()->Model()->SetItemTextArray(iItemArray);
   289 	iItemArrayShort = new (ELeave)CDesCArrayFlat(KDefaultGran);
   202 	iListContainer->Listbox()->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
   290 		
   203 
   291 	iListContainer->SetListboxTextArrays(iItemArray, iItemArrayShort);
       
   292 	iListContainer->SetContainerListener(this);
       
   293 	iListContainer->SetListboxObserver(this);
       
   294 	
   204 	if (Toolbar()) {
   295 	if (Toolbar()) {
   205 		iToolbar = Toolbar();
   296 		iToolbar = Toolbar();
   206 		iToolbar->SetToolbarObserver(this);
   297 		iToolbar->SetToolbarObserver(this);
   207 	}
   298 	}
   208 	
   299 	
   209 	iLongTapDetector = CAknLongTapDetector::NewL(this);
   300 	iLongTapDetector = CAknLongTapDetector::NewL(this);
   210 	iListContainer->SetPointerListener(this);
       
   211 	iListContainer->SetKeyEventListener(this);
       
   212         
   301         
   213 	DP("CPodcastListView::ConstructL END");
   302 	DP("CPodcastListView::ConstructL END");
   214 }
   303 }
   215 
   304 
   216 void CPodcastListView::HandleViewRectChange()
   305 void CPodcastListView::HandleViewRectChange()
   217 {
   306 {    
   218     if ( iListContainer )
   307 	TBool wasVisible = iListContainer->IsVisible();
       
   308 
       
   309 	if ( iListContainer )
   219 	{
   310 	{
   220         iListContainer->SetRect( ClientRect() );
   311         iListContainer->SetRect( ClientRect() );
   221 	}
   312 	}
   222 }
   313 }
   223 
   314 
   224 void CPodcastListView::HandleStatusPaneSizeChange()
   315 void CPodcastListView::HandleStatusPaneSizeChange()
   225 {
   316 {
   226 	DP2("CPodcastListView::HandleStatusPaneSizeChange(), width=%d, height=%d", ClientRect().Width(), ClientRect().Height());
   317 	DP2("CPodcastListView::HandleStatusPaneSizeChange(), width=%d, height=%d", ClientRect().Width(), ClientRect().Height());
   227 
   318 
   228 	if ( iListContainer )
   319 	HandleViewRectChange();
   229 	{
       
   230         iListContainer->SetRect( ClientRect() );
       
   231 	}
       
   232 	
       
   233 }
   320 }
   234 
   321 
   235     
   322     
   236 CPodcastListView::~CPodcastListView()
   323 CPodcastListView::~CPodcastListView()
   237     {
   324     {
   240     	AppUi()->RemoveFromStack(iListContainer);
   327     	AppUi()->RemoveFromStack(iListContainer);
   241     	delete iListContainer;
   328     	delete iListContainer;
   242     	}
   329     	}
   243          
   330          
   244     delete iItemArray;
   331     delete iItemArray;
       
   332     delete iItemArrayShort;
   245     delete iLongTapDetector;
   333     delete iLongTapDetector;
   246     iItemIdArray.Close();
   334     iItemIdArray.Close();
   247     }
   335     }
   248 
   336 
   249 	
   337 	
   289 void CPodcastListView::HandleCommandL(TInt aCommand)
   377 void CPodcastListView::HandleCommandL(TInt aCommand)
   290 {
   378 {
   291 	DP1("CPodcastListView::HandleCommandL=%d", aCommand);
   379 	DP1("CPodcastListView::HandleCommandL=%d", aCommand);
   292 	switch(aCommand)
   380 	switch(aCommand)
   293 	{
   381 	{
   294 	case EAknSoftkeyExit:
   382 	case EPodcastHide:
   295 	case EEikCmdExit:
   383 		AppUi()->HandleCommandL(EEikCmdExit);
   296 		{
   384 		break;
   297             AppUi()->Exit();
       
   298             break;
       
   299 		}
       
   300 	case EAknSoftkeyBack:
   385 	case EAknSoftkeyBack:
   301 		{
   386 		{
   302 		AppUi()->ActivateViewL(iPreviousView);
   387 		AppUi()->ActivateViewL(iPreviousView);
   303 		((CPodcastAppUi*)AppUi())->SetActiveTab(KTabIdFeeds);
   388 		((CPodcastAppUi*)AppUi())->SetActiveTab(KTabIdFeeds);
   304 		}
   389 		}
   331 }
   416 }
   332 
   417 
   333 void CPodcastListView::SetEmptyTextL(TInt aResourceId)
   418 void CPodcastListView::SetEmptyTextL(TInt aResourceId)
   334 	{
   419 	{
   335 	HBufC* emptyText =  iEikonEnv->AllocReadResourceLC(aResourceId);
   420 	HBufC* emptyText =  iEikonEnv->AllocReadResourceLC(aResourceId);
   336 	iListContainer->Listbox()->View()->SetListEmptyTextL(*emptyText);
   421 	iListContainer->SetEmptyText(*emptyText);
   337 	CleanupStack::PopAndDestroy(emptyText);	
   422 	CleanupStack::PopAndDestroy(emptyText);	
   338 	}
   423 	}
   339 
   424 
   340 void CPodcastListView::ShowOkMessageL(TDesC &aText)
   425 void CPodcastListView::ShowOkMessageL(TDesC &aText)
   341 	{
   426 	{