browserui/browser/FeedsSrc/FeedsFolderView.cpp
branchRCL_3
changeset 48 8e6fa1719340
equal deleted inserted replaced
47:6385c4c93049 48:8e6fa1719340
       
     1 /*
       
     2 * Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  A view to browse a user's list of feeds.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include <avkon.rsg>
       
    21 
       
    22 #include <aknviewappui.h>
       
    23 #include <aknutils.h>
       
    24 #include <AknToolbar.h>
       
    25 #include <eikmenup.h>
       
    26 #include <hlplch.h>
       
    27 #include <s32mem.h>
       
    28 
       
    29 #include "Browser.hrh"
       
    30 #include <BrowserNG.rsg>
       
    31 
       
    32 #include "BrowserAppUi.h"
       
    33 #include "CommonConstants.h"
       
    34 #include <feedattributes.h>
       
    35 #include <folderattributes.h>
       
    36 #include "FeedsFolderContainer.h"
       
    37 #include "FeedsFolderView.h"
       
    38 #include "Display.h"
       
    39 
       
    40 
       
    41 // -----------------------------------------------------------------------------
       
    42 // CFeedsFolderView::NewL
       
    43 //
       
    44 // Two-phased constructor.
       
    45 // -----------------------------------------------------------------------------
       
    46 //
       
    47 CFeedsFolderView* CFeedsFolderView::NewL( MApiProvider& aApiProvider, TRect& aRect )
       
    48 	{
       
    49     CFeedsFolderView* self = new (ELeave) CFeedsFolderView(aApiProvider);
       
    50     
       
    51     CleanupStack::PushL(self);
       
    52     self->ConstructL(aRect);
       
    53     CleanupStack::Pop();
       
    54 
       
    55     return self;
       
    56 	}
       
    57 
       
    58 
       
    59 // -----------------------------------------------------------------------------
       
    60 // CFeedsFolderView::CFeedsFolderView
       
    61 //
       
    62 // C++ default constructor.
       
    63 // -----------------------------------------------------------------------------
       
    64 //
       
    65 CFeedsFolderView::CFeedsFolderView(MApiProvider& aApiProvider):
       
    66 CBrowserViewBase( aApiProvider ),iPenEnabled(EFalse)
       
    67 	{
       
    68     iPenEnabled = AknLayoutUtils::PenEnabled(); 
       
    69 	}
       
    70 
       
    71 
       
    72 // -----------------------------------------------------------------------------
       
    73 // CFeedsFolderView::ConstructL
       
    74 //
       
    75 // Symbian 2nd phase constructor can leave.
       
    76 // -----------------------------------------------------------------------------
       
    77 //
       
    78 void CFeedsFolderView::ConstructL(TRect& aRect)
       
    79     {
       
    80     BaseConstructL(R_FEEDS_FOLDER_VIEW);
       
    81     
       
    82 #ifndef BRDO_SINGLE_CLICK_ENABLED_FF	
       
    83     iContainer = CFeedsFolderContainer::NewL( this, ApiProvider(), aRect );
       
    84     iContainer->MakeVisible(EFalse);
       
    85 #endif	
       
    86     
       
    87     if(iPenEnabled)
       
    88         {
       
    89         Toolbar()->SetToolbarObserver(this);        
       
    90         }
       
    91     }
       
    92 
       
    93 
       
    94 // -----------------------------------------------------------------------------
       
    95 // CFeedsFolderView::~CFeedsFolderView
       
    96 //
       
    97 // Deconstructor.
       
    98 // -----------------------------------------------------------------------------
       
    99 //
       
   100 CFeedsFolderView::~CFeedsFolderView()
       
   101     {
       
   102     DoDeactivate();
       
   103 
       
   104     delete iContainer;
       
   105     }
       
   106 
       
   107 // -----------------------------------------------------------------------------
       
   108 // CFeedsFolderView::Id
       
   109 //
       
   110 // Returns the id of the view.
       
   111 // -----------------------------------------------------------------------------
       
   112 //
       
   113 TUid CFeedsFolderView::Id() const
       
   114     {
       
   115     return KUidBrowserFeedsFolderViewId;
       
   116     }
       
   117 
       
   118 // -----------------------------------------------------------------------------
       
   119 // CFeedsFolderView::HandleCommandL
       
   120 //
       
   121 // Processes commands.
       
   122 // -----------------------------------------------------------------------------
       
   123 //
       
   124 void CFeedsFolderView::HandleCommandL(TInt aCommand)
       
   125     {   
       
   126     TBool  handled = EFalse;
       
   127     
       
   128     // Handle softkeys and some standard commands first.
       
   129     switch (aCommand)
       
   130         {
       
   131 		case EAknSoftkeyBack:
       
   132             if (!iContainer->HandleShowParentFolderL())
       
   133             	{
       
   134             	// If we are in embedded mode (perhaps someone imported a feed from the messaging app)
       
   135             	// then we want to close the browser vs. returning to the bookmark view
       
   136             	if (iApiProvider.IsEmbeddedModeOn())
       
   137             		{
       
   138 					AppUi()->HandleCommandL( EWmlCmdCloseBrowser );
       
   139             		}
       
   140               	// Go back to content view only if we came from there. Note that ContentView can be 
       
   141                	// on the history if another application launched a URL.                 
       
   142                 else if(((ApiProvider().GetPreviousViewFromViewHistory() == KUidBrowserContentViewId) 
       
   143                 	&& (ApiProvider().FeedsClientUtilities().CalledFromView() == KUidBrowserContentViewId))
       
   144                 	||(ApiProvider().GetPreviousViewFromViewHistory() == KUidBrowserFeedsTopicViewId)
       
   145                 	&& (ApiProvider().FeedsClientUtilities().CalledFromView() != KUidBrowserBookmarksViewId))
       
   146                 	{
       
   147                 	 	iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId );	
       
   148                 	}
       
   149             	else
       
   150             		{
       
   151                   	iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserBookmarksViewId );
       
   152             		}
       
   153                 }
       
   154             handled = ETrue;
       
   155             break;
       
   156         case EAknSoftkeyOk:
       
   157             iContainer->HandleOkL();
       
   158             handled = ETrue;
       
   159             break;
       
   160 
       
   161         case EAknSoftkeyCancel:
       
   162             iContainer->HandleCancelL();
       
   163             handled = ETrue;
       
   164             break;
       
   165 
       
   166 		case EAknCmdMark:    	        
       
   167 		case EAknCmdUnmark:    	        
       
   168 		case EAknMarkAll:    	        
       
   169 		case EAknUnmarkAll:
       
   170             iContainer->HandleMarkL(aCommand);
       
   171             handled = ETrue;
       
   172           	iContainer->UpdateCbaL();
       
   173             iContainer->UpdateToolbarButtonsState();
       
   174             break;
       
   175             
       
   176 #ifdef __SERIES60_HELP
       
   177         case EAknCmdHelp:
       
   178             {
       
   179             iApiProvider.SetLastActiveViewId(Id());
       
   180             HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), 
       
   181                     AppUi()->AppHelpContextL());
       
   182             handled = ETrue;
       
   183             break;
       
   184             }
       
   185 #endif //__SERIES60_HELP 
       
   186 
       
   187 
       
   188         case EEikCmdExit:
       
   189         case EAknSoftkeyExit:
       
   190             AppUi()->HandleCommandL(aCommand);
       
   191             handled = ETrue;
       
   192             break;
       
   193         }
       
   194         
       
   195     if (handled)
       
   196         {
       
   197         return;
       
   198         }
       
   199         
       
   200     // Handle menu commands.
       
   201     switch (aCommand)
       
   202         {
       
   203         case EFeedsOpen:
       
   204         case EFeedsActivate:
       
   205             iContainer->HandleSelectionL();
       
   206             break;
       
   207 
       
   208 		case EFeedsUpdate:    
       
   209 		    iContainer->HandleUpdateFeedL();
       
   210             break;
       
   211 
       
   212 		case EFeedsUpdateAll:
       
   213 		    iContainer->HandleUpdateFeedL(ETrue);
       
   214             break;
       
   215 
       
   216 		case EFeedsNewFeed: 	        
       
   217             iContainer->HandleNewFeedL();
       
   218             iContainer->UpdateToolbarButtonsState();
       
   219             break;
       
   220 		
       
   221 		case EFeedsNewFolder:    	        
       
   222             iContainer->HandleNewFolderL();
       
   223             iContainer->UpdateToolbarButtonsState();
       
   224             break;
       
   225 
       
   226 		case EFeedsEdit:
       
   227 		case EFeedsRename:
       
   228             iContainer->HandleEditL();
       
   229             iContainer->UpdateToolbarButtonsState();
       
   230             break;
       
   231 
       
   232 		case EFeedsDelete:
       
   233             iContainer->HandleDeleteL();
       
   234             break;
       
   235 
       
   236 		case EFeedsMove:    	        
       
   237             iContainer->HandleMoveL();
       
   238             break;
       
   239 
       
   240 		case EFeedsMoveToFolder:    	        
       
   241             iContainer->HandleMoveToFolderL();
       
   242             break;
       
   243 
       
   244 		case EFeedsExport:
       
   245 			iContainer->HandleExportL();
       
   246 			break;
       
   247 			
       
   248         case EWmlCmdDownloads:            
       
   249             ApiProvider().BrCtlInterface().HandleCommandL(
       
   250                 							(TInt)TBrCtlDefs::ECommandShowDownloads +
       
   251                 							(TInt)TBrCtlDefs::ECommandIdBase );
       
   252             break;
       
   253 
       
   254         default:
       
   255             iApiProvider.FeedsClientUtilities().HandleCommandL(Id(),aCommand);
       
   256             break;
       
   257         }        
       
   258     }
       
   259 
       
   260 
       
   261 // -----------------------------------------------------------------------------
       
   262 // CFeedsFolderView::DoActivateL
       
   263 //
       
   264 // Called when the view is activated.
       
   265 // -----------------------------------------------------------------------------
       
   266 //
       
   267 void CFeedsFolderView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, 
       
   268         TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
       
   269     {
       
   270    	StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL );
       
   271   	StatusPane()->MakeVisible( ETrue );
       
   272 	ApiProvider().Display().ClearMessageInfo();
       
   273 
       
   274     if (!iContainer)
       
   275         {
       
   276 		iContainer = CFeedsFolderContainer::NewL( this, ApiProvider(), ClientRect() );
       
   277 
       
   278         // Set the root folder.
       
   279         if (iRootFolder != NULL)
       
   280             {
       
   281             iContainer->RootFolderChangedL(*iRootFolder);
       
   282             }
       
   283         }
       
   284 
       
   285     if (!iContainerOnStack)
       
   286         {
       
   287         AppUi()->AddToViewStackL(*this, iContainer);
       
   288         iContainer->SetRect(ClientRect());
       
   289         iContainer->MakeVisible(ETrue);
       
   290         iContainerOnStack = ETrue;
       
   291         // resize screen after calling SetRect.  This way looks better
       
   292         iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
       
   293         }
       
   294 
       
   295 	iApiProvider.SetLastActiveViewId(Id());
       
   296     iContainer->UpdateTitleL();
       
   297     iContainer->UpdateNavigationPaneL();
       
   298     iContainer->UpdateListBoxL(iInitialItem);
       
   299 
       
   300 	iContainer->UpdateCbaL();	
       
   301 
       
   302     }
       
   303 
       
   304 
       
   305 // -----------------------------------------------------------------------------
       
   306 // CFeedsFolderView::DoDeactivate
       
   307 //
       
   308 // Called when the view is deactivated.
       
   309 // -----------------------------------------------------------------------------
       
   310 //
       
   311 void CFeedsFolderView::DoDeactivate()
       
   312     {
       
   313     if (iContainerOnStack)
       
   314         {
       
   315         AppUi()->RemoveFromViewStack(*this, iContainer);
       
   316         iContainer->MakeVisible(EFalse);
       
   317         iContainer->ClearNavigationPane();
       
   318         iContainerOnStack = EFalse;
       
   319         
       
   320         iInitialItem = iContainer->CurrentItemIndex();
       
   321         }
       
   322 	}
       
   323 
       
   324 
       
   325 // -----------------------------------------------------------------------------
       
   326 // CFeedsFolderView::DynInitMenuPaneL
       
   327 //
       
   328 // Disables unrelated menu options.
       
   329 // -----------------------------------------------------------------------------
       
   330 //
       
   331 void CFeedsFolderView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
       
   332     {
       
   333     const CFeedsEntity*      item = NULL;
       
   334     
       
   335     // Get the current item.
       
   336     item = iContainer->CurrentItem();
       
   337 
       
   338     // Handle the main menu.
       
   339     if (aResourceId == R_FEEDS_FOLDER_VIEW_MENU)
       
   340         {
       
   341         // Dynamically build the menu.
       
   342         		
       
   343         // Downloads (only if download menu not empty (ie, ongoing downloads)
       
   344         if (ApiProvider().BrCtlInterface().BrowserSettingL( TBrCtlDefs::ESettingsNumOfDownloads ))
       
   345             {
       
   346             iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EWmlCmdDownloads, R_FEEDS_OPTIONS_GO_DOWNLOADS);
       
   347             }
       
   348 
       
   349         iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsGoto,
       
   350             R_FEEDS_OPTIONS_GOTO, R_FEEDS_OPTIONS_GOTO_SUBMENU);
       
   351 
       
   352 #ifndef BRDO_SINGLE_CLICK_ENABLED_FF
       
   353         iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsFeedsActions,
       
   354             R_FEEDS_OPTIONS_FEEDSACTIONS, R_FEEDS_OPTIONS_FEEDSACTIONS_SUBMENU);
       
   355 
       
   356         iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsEdit,
       
   357             R_FEEDS_OPTIONS_EDIT, R_FEEDS_OPTIONS_EDIT_SUBMENU);
       
   358       
       
   359         // these items only visible for non-empty folder
       
   360         if (item != NULL)
       
   361             {            
       
   362             // Mark/Unmark submenu - only for non-empty folder
       
   363             iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsMarkUnmark,
       
   364                 R_FEEDS_OPTIONS_MARKUNMARK, R_FEEDS_OPTIONS_MARKUNMARK_SUBMENU);
       
   365             }
       
   366 #else
       
   367         // ie, privacy submenu
       
   368         //iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsClear,
       
   369         //    R_FEEDS_OPTIONS_CLEAR, R_FEEDS_OPTIONS_CLEAR_SUBMENU);
       
   370         
       
   371         iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EFeedsUpdateAll, R_FEEDS_UPDATE_ALL);
       
   372         iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EFeedsNewFeed, R_FEEDS_NEW_FEED);
       
   373         if(iContainer->iCurrentFolder && ( iContainer->iCurrentFolder == iRootFolder) )
       
   374         iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EFeedsNewFolder, R_OPTIONS_ORG_NEW_FOLDER);
       
   375         iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EFeedsImport, R_OPTIONS_IMPORT_FEEDS);
       
   376         if( item && iContainer->iCurrentFolder && !iContainer->isMoveActive() )
       
   377             {
       
   378             if ( (item->GetType() == EFolder) )
       
   379                 {
       
   380                 iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsRename, R_FLDR_RENAME);
       
   381                 aMenuPane->SetItemSpecific(EFeedsRename,ETrue);
       
   382                 iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsMove, R_OPTIONS_ORG_MOVE);
       
   383                 aMenuPane->SetItemSpecific(EFeedsMove,ETrue);
       
   384                 iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsDelete, R_FEEDS_DELETE);
       
   385                 aMenuPane->SetItemSpecific(EFeedsDelete,ETrue);
       
   386                 }
       
   387         else
       
   388             {
       
   389             // Update (only if feed has focus)
       
   390             iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsUpdate, R_FEEDS_UPDATE);
       
   391             aMenuPane->SetItemSpecific(EFeedsUpdate,ETrue);
       
   392             iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsExport, R_OPTIONS_EXPORT_FEEDS);
       
   393             aMenuPane->SetItemSpecific(EFeedsExport,ETrue);
       
   394             iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsEdit, R_FEEDS_EDIT);
       
   395             aMenuPane->SetItemSpecific(EFeedsEdit,ETrue);
       
   396             iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsDelete, R_FEEDS_DELETE);
       
   397             aMenuPane->SetItemSpecific(EFeedsDelete,ETrue);
       
   398             
       
   399             if ( iContainer &&
       
   400                              iContainer->iCurrentFolder &&
       
   401                          iContainer->iCurrentFolder->GetChildren().Count() >= 2 )
       
   402                             {
       
   403                             iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsMove, R_OPTIONS_ORG_MOVE);
       
   404                             aMenuPane->SetItemSpecific(EFeedsMove,ETrue);
       
   405                             }
       
   406             if (!(item->GetType() == EFolder))
       
   407                {            
       
   408                TInt folderCount = 0;
       
   409                iContainer->CountFolderFolders(iContainer->iRootFolder, folderCount);
       
   410                if(iContainer && (folderCount> 0) && !iContainer->IsMarkedItemFolder())
       
   411                    {   
       
   412                    iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsMoveToFolder, R_OPTIONS_ORG_MOVE_TO_FOLDER);
       
   413                    aMenuPane->SetItemSpecific(EFeedsMoveToFolder,ETrue); 
       
   414                    }            
       
   415                }
       
   416             }
       
   417        }
       
   418 #endif	   
       
   419                         
       
   420         iApiProvider.FeedsClientUtilities().AddCascadeL(*aMenuPane,EFeedsOptionsClear,
       
   421             R_FEEDS_OPTIONS_CLEAR, R_CLEAR_SUBMENU);
       
   422         }
       
   423      else if(aResourceId == R_FEEDS_OPTIONS_GOTO_SUBMENU)
       
   424         {     
       
   425         // Back to Page (if page loaded)
       
   426         if ( iApiProvider.IsPageLoaded() )
       
   427             {
       
   428             iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EWmlCmdBackToPage, R_BROWSER_MENU_ITEM_BACK_TO_PAGE );
       
   429             }
       
   430         
       
   431         // Bookmarks view (if browser wasn't launched directly into feeds)
       
   432         if ( !iApiProvider.BrowserWasLaunchedIntoFeeds() )
       
   433 		    {
       
   434     	    iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EWmlCmdFavourites, R_BROWSER_MENU_ITEM_FAVOURITES );
       
   435 		    } 
       
   436         }
       
   437      else if(aResourceId == R_FEEDS_OPTIONS_FEEDSACTIONS_SUBMENU)
       
   438         {
       
   439         if(iContainer &&
       
   440            iContainer->iCurrentFolder &&
       
   441            iContainer->iCurrentFolder->GetChildren().Count() > 0)
       
   442             {        
       
   443             if (!(item->GetType() == EFolder) && !iContainer->IsMarkedItemFolder())
       
   444                 {
       
   445                 // Update (only if feed has focus)
       
   446                 iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsUpdate, R_FEEDS_UPDATE);
       
   447                 }
       
   448         
       
   449             // Update All (only for non-empty views/folders)
       
   450             if(iContainer->SearchForFeedL(iRootFolder))
       
   451                 {
       
   452                 iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsUpdateAll, R_FEEDS_UPDATE_ALL);    
       
   453                 }
       
   454   
       
   455         
       
   456             // Send (only for non-empty views/folders)
       
   457 	    	iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsExport, R_OPTIONS_EXPORT_FEEDS);
       
   458             }
       
   459         
       
   460         // Import Feeds
       
   461 		iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsImport, R_OPTIONS_IMPORT_FEEDS);
       
   462 
       
   463         // Create Feed
       
   464         iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsNewFeed, R_FEEDS_NEW_FEED);        
       
   465         }
       
   466     else if(aResourceId == R_FEEDS_OPTIONS_EDIT_SUBMENU)
       
   467         {        
       
   468         if (item != NULL)
       
   469         	{
       
   470         	TInt markedcount = (iContainer && iContainer->MarkedItems()) ? iContainer->MarkedItems()->Count() : 0;
       
   471 
       
   472 	        // "Edit Feed" or "Rename Folder" depending upon which has focus
       
   473 	        if (markedcount < 1)// don't allow edit/rename if feed(s)/folder(s) are marked
       
   474                 {
       
   475                 if (item->GetType() == EFolder)
       
   476     	            {
       
   477     	            iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsRename, R_FLDR_RENAME);
       
   478     	            }
       
   479     	        else
       
   480     	            {
       
   481     	            iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsEdit, R_FEEDS_EDIT);
       
   482     	            }
       
   483                 }
       
   484 	            
       
   485 	        // Delete (only if editable item has focus)
       
   486 	        iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsDelete, R_FEEDS_DELETE);
       
   487 	            
       
   488 	        // move
       
   489 	        if ( iContainer &&
       
   490 	             iContainer->iCurrentFolder &&
       
   491              iContainer->iCurrentFolder->GetChildren().Count() >= 2 )
       
   492 	            {
       
   493 	            iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsMove, R_OPTIONS_ORG_MOVE);
       
   494 	            }
       
   495 	        
       
   496 	        // move to folder only if a feed has focus and there are folders available
       
   497         if (!(item->GetType() == EFolder))
       
   498 	            {            
       
   499                 TInt folderCount = 0;
       
   500                 iContainer->CountFolderFolders(iContainer->iRootFolder, folderCount);
       
   501                 
       
   502                 if(iContainer && (folderCount> 0) && !iContainer->IsMarkedItemFolder())
       
   503 	                {   
       
   504 	                iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsMoveToFolder, R_OPTIONS_ORG_MOVE_TO_FOLDER);
       
   505 	                }            
       
   506 	            }
       
   507         	}
       
   508                 
       
   509         // Create Folder
       
   510         iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EFeedsNewFolder, R_OPTIONS_ORG_NEW_FOLDER);
       
   511         }
       
   512     else if( (aResourceId == R_FEEDS_OPTIONS_MARKUNMARK_SUBMENU) || (aResourceId == R_FEEDS_FOLDER_VIEW_MARK_UNMARK_MENU ) )
       
   513         {
       
   514         // Mark (or unmark)
       
   515         if(IsCurrentItemMarked())
       
   516             {
       
   517             iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EAknCmdUnmark, R_OPTIONS_LIST_UNMARK_ONE);            
       
   518             }
       
   519         else
       
   520             {
       
   521             iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EAknCmdMark, R_OPTIONS_LIST_MARK_ONE);  
       
   522             }
       
   523         
       
   524         // Mark All
       
   525         if (  iContainer && iContainer->iCurrentFolder &&
       
   526                         iContainer->iCurrentFolder->GetChildren().Count() != iContainer->MarkedItems()->Count() )
       
   527             {
       
   528             iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EAknMarkAll, R_OPTIONS_LIST_MARK_ALL);
       
   529             }
       
   530         
       
   531         // Unmark ALL
       
   532         if (AnyMarkedItems())
       
   533             {
       
   534             iApiProvider.FeedsClientUtilities().AddItemL(*aMenuPane, EAknUnmarkAll, R_OPTIONS_LIST_UNMARK_ALL);            
       
   535             }
       
   536         }
       
   537     else if(aResourceId == R_FEEDS_OPTIONS_CLEAR_SUBMENU)
       
   538         {
       
   539         
       
   540         
       
   541         }
       
   542     else if(aResourceId == R_FEEDS_FOLDER_MENU_PANE_CONTEXT_MENU) 
       
   543             {
       
   544             // move
       
   545             if ( iContainer &&
       
   546                     iContainer->iCurrentFolder &&
       
   547                        iContainer->iCurrentFolder->GetChildren().Count() < 2 )
       
   548                  {
       
   549                     aMenuPane->SetItemDimmed(EFeedsMove,ETrue);
       
   550                  }
       
   551             aMenuPane->SetItemDimmed(EFeedsMoveToFolder,ETrue);
       
   552 
       
   553             if (!(item->GetType() == EFolder))
       
   554                 {            
       
   555                 TInt folderCount = 0;
       
   556                 iContainer->CountFolderFolders(iContainer->iRootFolder, folderCount);
       
   557                 
       
   558                 if(iContainer && (folderCount> 0) && !iContainer->IsMarkedItemFolder())
       
   559                     {   
       
   560                     aMenuPane->SetItemDimmed(EFeedsMoveToFolder,EFalse);
       
   561                     }            
       
   562                 }
       
   563             else
       
   564             	{
       
   565             	aMenuPane->SetItemDimmed(EFeedsUpdate, ETrue);
       
   566             	}
       
   567             }
       
   568     iApiProvider.FeedsClientUtilities().DynInitMenuPaneL(aResourceId, aMenuPane );
       
   569     }
       
   570 
       
   571 
       
   572 // -----------------------------------------------------------------------------
       
   573 // CFeedsFolderView::UpdateCbaL
       
   574 //
       
   575 // Updates the options softkey to reflect the command set.
       
   576 // -----------------------------------------------------------------------------
       
   577 //
       
   578 void CFeedsFolderView::UpdateCbaL(TInt aCommandSet)
       
   579     {
       
   580     if (Cba())
       
   581         {
       
   582         Cba()->SetCommandSetL(aCommandSet);
       
   583         Cba()->DrawDeferred();
       
   584         }
       
   585     }
       
   586 
       
   587 // -----------------------------------------------------------------------------
       
   588 // CFeedsFolderView::RootFolderChangedL
       
   589 //
       
   590 // Called to notify the view the that root folder has changed.
       
   591 // -----------------------------------------------------------------------------
       
   592 //
       
   593 void CFeedsFolderView::RootFolderChangedL(const CFeedsEntity& aRootFolder)
       
   594     {
       
   595     iRootFolder = &aRootFolder;
       
   596     
       
   597     if (iContainer != NULL)
       
   598         {        
       
   599         iContainer->RootFolderChangedL(aRootFolder);
       
   600         iContainer->UpdateToolbarButtonsState();        
       
   601         }
       
   602     }
       
   603 
       
   604 
       
   605 // -----------------------------------------------------------------------------
       
   606 // CFeedsFolderView::SetCurrentFolder
       
   607 //
       
   608 // Changes the current folder.
       
   609 // -----------------------------------------------------------------------------
       
   610 //
       
   611 void CFeedsFolderView::SetCurrentFolder(const CFeedsEntity& aFolder, TBool aResetSelection)
       
   612     {
       
   613     if (iContainer != NULL)
       
   614         {        
       
   615         iContainer->SetCurrentFolder(&aFolder, aResetSelection);
       
   616         }
       
   617         
       
   618     if (aResetSelection)
       
   619         {
       
   620         iInitialItem = 0;
       
   621         }
       
   622     }
       
   623     
       
   624 // ---------------------------------------------------------------------------
       
   625 // CFeedsFolderView::CommandSetResourceIdL
       
   626 // ---------------------------------------------------------------------------
       
   627 TInt CFeedsFolderView::CommandSetResourceIdL()
       
   628     {
       
   629     // It is never called, but this function have to be implemented
       
   630     return KWmlEmptyResourceId;
       
   631     }
       
   632     
       
   633 // ---------------------------------------------------------
       
   634 // CFeedsFolderView::HandleClientRectChange
       
   635 // ---------------------------------------------------------
       
   636 //
       
   637 void CFeedsFolderView::HandleClientRectChange()
       
   638 	{
       
   639 	if( iContainer )
       
   640 	    {
       
   641         iContainer->SetRect( ClientRect() );
       
   642         }
       
   643 	}
       
   644 
       
   645 // -----------------------------------------------------------------------------
       
   646 // CFeedsFolderView::UnreadCountChangedL
       
   647 //
       
   648 // Calculate the unread count based on delta, return the calculated value.
       
   649 // -----------------------------------------------------------------------------
       
   650 //
       
   651 TInt CFeedsFolderView::UnreadCountChangedL( TInt aUnreadCountDelta )
       
   652 {
       
   653     TInt unreadCount = 0;
       
   654 
       
   655     if (iContainer != NULL)
       
   656         {        
       
   657         unreadCount = iContainer->UnreadCountChangedL( aUnreadCountDelta );
       
   658         }
       
   659         
       
   660     return unreadCount;
       
   661 }
       
   662 
       
   663 // -----------------------------------------------------------------------------
       
   664 // CFeedsFolderView::SetUnreadCount
       
   665 //
       
   666 // Set the unread count.
       
   667 // -----------------------------------------------------------------------------
       
   668 //
       
   669 void CFeedsFolderView::SetUnreadCountL( TInt aUnreadCount )
       
   670 {
       
   671     if (iContainer != NULL)
       
   672         {        
       
   673         iContainer->SetUnreadCountL( aUnreadCount );
       
   674         }
       
   675 }
       
   676 
       
   677 
       
   678 // -----------------------------------------------------------------------------
       
   679 // CFeedsFolderView::AnyFoldersMarked
       
   680 //
       
   681 // returns ETrue if any Feeds folders are marked otherwise returns EFalse
       
   682 // -----------------------------------------------------------------------------
       
   683 //
       
   684 TBool CFeedsFolderView::AnyFoldersMarked()
       
   685 {
       
   686     const CArrayFix<TInt>*  markedIndexes = iContainer->MarkedItems();
       
   687     const CFeedsEntity*      markedItem = NULL;
       
   688     TInt i;
       
   689 
       
   690     for ( i = 0; i < markedIndexes->Count(); i++ )
       
   691         {
       
   692         // Get the item.
       
   693         markedItem = iContainer->iCurrentFolder->GetChildren()[(*markedIndexes)[i]];
       
   694         if ( markedItem != NULL && markedItem->GetType() == EFolder )
       
   695             {  
       
   696             return ETrue;
       
   697             }
       
   698         }
       
   699         
       
   700     return EFalse;        
       
   701 }
       
   702 
       
   703 
       
   704 // -----------------------------------------------------------------------------
       
   705 // CFeedsFolderView::AnyMarkedItems
       
   706 //
       
   707 // returns ETrue anything is marked otherwise returns EFalse
       
   708 // -----------------------------------------------------------------------------
       
   709 //
       
   710 TBool CFeedsFolderView::AnyMarkedItems()
       
   711 {
       
   712     const CArrayFix<TInt>*  markedIndexes = iContainer->MarkedItems();
       
   713 
       
   714     if (markedIndexes->Count() > 0 )
       
   715         {
       
   716         return ETrue;
       
   717         }
       
   718     else
       
   719         {
       
   720         return EFalse; 
       
   721         }
       
   722 }
       
   723 
       
   724 // -----------------------------------------------------------------------------
       
   725 // CFeedsFolderView::IsItemMarked
       
   726 //
       
   727 // returns ETrue if item is marked, otherwise returns EFalse
       
   728 // -----------------------------------------------------------------------------
       
   729 //
       
   730 
       
   731 TBool CFeedsFolderView::IsCurrentItemMarked()
       
   732 {
       
   733     // Get the current item's index
       
   734     TInt currIndex = iContainer->CurrentItemIndex();
       
   735     const CArrayFix<TInt>*  markedIndexes = iContainer->MarkedItems();
       
   736 
       
   737     if (markedIndexes->Count() > 0)
       
   738         {
       
   739         TKeyArrayFix key(0, ECmpTInt);
       
   740         TInt pos = 0;
       
   741         TInt retVal = markedIndexes->Find(currIndex,key,pos);
       
   742         if( retVal == KErrNone)
       
   743             {
       
   744             return ETrue;
       
   745             }
       
   746         }
       
   747     return EFalse;
       
   748 }