application/src/PodcastListView.cpp
branchtwolistboxes
changeset 313 0f30a75610de
parent 307 baf7ea4347f9
child 314 e7776f6a2198
equal deleted inserted replaced
312:2faae209e72b 313:0f30a75610de
    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 	if (iListbox)
       
    69 		delete iListbox;
       
    70 	
       
    71 	if (aRect.Width() > aRect.Height())
       
    72 		{
       
    73 		DP("Landscape mode");
       
    74 		iLandscape = ETrue;
       
    75 		iListboxLandscape = new (ELeave) CAknSingleLargeStyleListBox;
       
    76 		iListboxLandscape->ConstructL(this, aListboxFlags);
       
    77 		iListboxLandscape->SetMopParent( this );
       
    78 		iListboxLandscape->SetContainerWindowL(*this);
       
    79 		iListboxLandscape->CreateScrollBarFrameL(ETrue);
       
    80 		iListboxLandscape->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto );
       
    81 		iListboxLandscape->SetSize(aRect.Size());
       
    82 		iListboxLandscape->MakeVisible(ETrue);
       
    83 		iListbox = iListboxLandscape;
       
    84 		}
       
    85 	else 
       
    86 		{
       
    87 		DP("Portrait mode");
       
    88 		iLandscape = EFalse;
       
    89 		iListboxPortrait = new (ELeave) CAknDoubleLargeStyleListBox;
       
    90 		iListboxPortrait->ConstructL(this, aListboxFlags);
       
    91 		iListboxPortrait->SetMopParent( this );
       
    92 		iListboxPortrait->SetContainerWindowL(*this);
       
    93 		iListboxPortrait->CreateScrollBarFrameL(ETrue);
       
    94 		iListboxPortrait->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto );
       
    95 		iListboxPortrait->SetSize(aRect.Size());
       
    96 		iListboxPortrait->MakeVisible(ETrue);
       
    97 		iListbox = (CEikColumnListBox*) iListboxPortrait;
       
    98 		}
       
    99  	
       
   100     MakeVisible(EFalse);
       
   101 
    65 	 // Set the windows size
   102 	 // Set the windows size
    66     SetRect( aRect );    
   103     SetRect( aRect ); 
    67     iListbox =static_cast<CEikFormattedCellListBox*>( new (ELeave) CAknDoubleLargeStyleListBox);
   104 
    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
   105 	// Activate the window, which makes it ready to be drawn
    81     ActivateL();   
   106     ActivateL();   
       
   107     DP("CPodcastListContainer::ConstructL END");
    82 }
   108 }
    83 
   109 
    84 TInt CPodcastListContainer::CountComponentControls() const
   110 TInt CPodcastListContainer::CountComponentControls() const
    85     {
   111     {
    86     return 1; // return number of controls inside this container
   112     return 1; // return number of controls inside this container
   110 void CPodcastListContainer::ScrollToVisible() {
   136 void CPodcastListContainer::ScrollToVisible() {
   111 	if (iListbox != NULL) {
   137 	if (iListbox != NULL) {
   112 		iListbox->ScrollToMakeItemVisible(iListbox->CurrentItemIndex());
   138 		iListbox->ScrollToMakeItemVisible(iListbox->CurrentItemIndex());
   113 	}
   139 	}
   114 }
   140 }
       
   141 
       
   142 TBool CPodcastListContainer::IsLandscape()
       
   143 	{
       
   144 	return iLandscape;
       
   145 	}
       
   146 
   115 void CPodcastListContainer::SizeChanged()
   147 void CPodcastListContainer::SizeChanged()
   116 {
   148 {
   117 	DP2("CPodcastListContainer::SizeChanged(), width=%d, height=%d",Size().iWidth, Size().iHeight);
   149 	DP2("CPodcastListContainer::SizeChanged() BEGIN, width=%d, height=%d",Size().iWidth, Size().iHeight);
   118 	if(iListbox != NULL)
   150 	
   119 	{
   151 	if (iListbox == NULL)
   120 		iListbox->SetSize(Size());
   152 		return;
   121 	}
   153 
   122 }
   154 	iListbox->SetSize(Size());
   123 
   155 	
   124 CEikFormattedCellListBox* CPodcastListContainer::Listbox()
   156 	if (iContainerListener)
       
   157 		iContainerListener->SizeChanged();
       
   158 	
       
   159 	DP("CPodcastListContainer::SizeChanged END");
       
   160 }
       
   161 
       
   162 CEikColumnListBox* CPodcastListContainer::Listbox()
   125 {
   163 {
   126 	return iListbox;
   164 	return iListbox;
   127 }
   165 }
   128 
   166 
       
   167 
       
   168 void CPodcastListContainer::SetListboxIcons(CArrayPtr< CGulIcon >* aIcons)
       
   169 {
       
   170 	if (iListboxLandscape == iListbox)
       
   171 		iListboxLandscape->ItemDrawer()->ColumnData()->SetIconArray(aIcons);
       
   172 	else
       
   173 		iListboxPortrait->ItemDrawer()->FormattedCellData()->SetIconArrayL(aIcons);
       
   174 }
       
   175 
       
   176 CArrayPtr<CGulIcon>* CPodcastListContainer::ListboxIcons()
       
   177 	{
       
   178 	if (iListboxLandscape == iListbox)
       
   179 		return iListboxLandscape->ItemDrawer()->ColumnData()->IconArray();
       
   180 	else
       
   181 		return iListboxPortrait->ItemDrawer()->FormattedCellData()->IconArray();
       
   182 	}
       
   183 
       
   184 void CPodcastListContainer::SetTextArray(CDesCArray* aArray)
       
   185 	{
       
   186 	iListbox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
       
   187 	iListbox->Model()->SetItemTextArray(aArray);
       
   188 	}
   129 
   189 
   130 CPodcastListContainer::~CPodcastListContainer()
   190 CPodcastListContainer::~CPodcastListContainer()
   131 {
   191 {
   132 	delete iListbox;
   192 	delete iListbox;
   133 	delete iBgContext;
   193 	delete iBgContext;
   134 }
   194 }
   135 
   195 
       
   196 void CPodcastListView::SwitchListbox()
       
   197 	{
       
   198 	HandleViewRectChange();
       
   199 	}
   136 
   200 
   137 void CPodcastListContainer::Draw(const TRect& aRect) const
   201 void CPodcastListContainer::Draw(const TRect& aRect) const
   138 	{
   202 	{
   139 	CWindowGc& gc = SystemGc();
   203 	CWindowGc& gc = SystemGc();
   140 	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
   204 	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
   158 }
   222 }
   159 
   223 
   160 void CPodcastListView::ConstructL()
   224 void CPodcastListView::ConstructL()
   161 {
   225 {
   162 	DP("CPodcastListView::ConstructL BEGIN");
   226 	DP("CPodcastListView::ConstructL BEGIN");
       
   227 
       
   228 	ResetContainer();
       
   229 	
       
   230 	if (Toolbar()) {
       
   231 		iToolbar = Toolbar();
       
   232 		iToolbar->SetToolbarObserver(this);
       
   233 	}
       
   234 	
       
   235         
       
   236 	DP("CPodcastListView::ConstructL END");
       
   237 }
       
   238 
       
   239 void CPodcastListView::ResetContainer()
       
   240 	{
       
   241 	DP("CPodcastListView::ResetContainer BEGIN");
       
   242 	
       
   243     if(iListContainer)
       
   244     	{
       
   245     	AppUi()->RemoveFromStack(iListContainer);
       
   246     	delete iListContainer;
       
   247     	}
       
   248 
   163 	iListContainer = new (ELeave) CPodcastListContainer;
   249 	iListContainer = new (ELeave) CPodcastListContainer;
   164 	iListContainer->ConstructL(ClientRect(), iListboxFlags);
   250 	TRect rect = ClientRect();
       
   251 	
       
   252 //	flipFlop = !flipFlop;
       
   253 //	
       
   254 //	if (!flipFlop)
       
   255 //		{
       
   256 //		TUint w = rect.Width();
       
   257 //		rect.SetWidth(rect.Height());
       
   258 //		rect.SetHeight(w);
       
   259 //		}
       
   260 	
       
   261 	iListContainer->ConstructL(rect, iListboxFlags);
   165 	iListContainer->SetMopParent(this);
   262 	iListContainer->SetMopParent(this);
   166 	iListContainer->ActivateL();
   263 	iListContainer->ActivateL();
   167 	iItemArray = new (ELeave)CDesCArrayFlat(KDefaultGran);
   264 	iItemArray = new (ELeave)CDesCArrayFlat(KDefaultGran);
   168 	iListContainer->Listbox()->Model()->SetItemTextArray(iItemArray);
   265 	iListContainer->SetTextArray(iItemArray);
   169 	iListContainer->Listbox()->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
   266 	iListContainer->SetContainerListener(this);
   170 
   267 	
   171 	if (Toolbar()) {
   268 	DP("CPodcastListView::ResetContainer END");
   172 		iToolbar = Toolbar();
   269 	}
   173 		iToolbar->SetToolbarObserver(this);
       
   174 	}
       
   175 	
       
   176 	iListContainer->SetKeyEventListener(this);
       
   177         
       
   178 	DP("CPodcastListView::ConstructL END");
       
   179 }
       
   180 
   270 
   181 void CPodcastListView::HandleViewRectChange()
   271 void CPodcastListView::HandleViewRectChange()
   182 {
   272 {    
   183     if ( iListContainer )
   273 	TBool wasVisible = iListContainer->IsVisible();
       
   274 
       
   275 	if (wasVisible)
       
   276 		{
       
   277 		AppUi()->ActivateLocalViewL(KUidPodcastSearchViewID,  TUid::Uid(0), KNullDesC8);
       
   278 		
       
   279 		DoDeactivate();
       
   280 		}
       
   281 	
       
   282 	ResetContainer();
       
   283 
       
   284 	if (wasVisible)
       
   285 		{
       
   286 		AppUi()->ActivateLocalViewL(ViewId().iViewUid,  TUid::Uid(0), KNullDesC8);
       
   287 		}
       
   288     
       
   289 	if ( iListContainer )
   184 	{
   290 	{
   185         iListContainer->SetRect( ClientRect() );
   291         iListContainer->SetRect( ClientRect() );
   186 	}
   292 	}
   187 }
   293 }
   188 
   294 
   189 void CPodcastListView::HandleStatusPaneSizeChange()
   295 void CPodcastListView::HandleStatusPaneSizeChange()
   190 {
   296 {
   191 	DP2("CPodcastListView::HandleStatusPaneSizeChange(), width=%d, height=%d", ClientRect().Width(), ClientRect().Height());
   297 	DP2("CPodcastListView::HandleStatusPaneSizeChange(), width=%d, height=%d", ClientRect().Width(), ClientRect().Height());
   192 
   298 
   193 	if ( iListContainer )
   299 	HandleViewRectChange();
   194 	{
       
   195         iListContainer->SetRect( ClientRect() );
       
   196 	}
       
   197 	
       
   198 }
   300 }
   199 
   301 
   200     
   302     
   201 CPodcastListView::~CPodcastListView()
   303 CPodcastListView::~CPodcastListView()
   202     {
   304     {