profilesservices/FileList/Src/FLDListBoxTemplate.h
branchRCL_3
changeset 25 7e0eff37aedb
parent 0 8c5d936e5675
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/profilesservices/FileList/Src/FLDListBoxTemplate.h	Wed Sep 01 12:20:44 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Template for a listbox class which forwards listbox events
+*                to an observer.
+*
+*/
+
+
+#ifndef FLDLISTBOXTEMPLATE_H
+#define FLDLISTBOXTEMPLATE_H
+
+#include <coedef.h> // TKeyResponse
+#include <w32std.h> // TKeyEvent, TEventCode
+#include "MFLDFileListBoxObserver.h"
+#include "CFLDFileListModel.h"
+#include "CFLDPopupList.h"
+
+// CLASS DECLARATION
+
+/**
+*  Template for a listbox class which forwards listbox events to an observer.
+*
+*  @lib filelist.lib
+*  @since Series 60 2.6
+*/
+template<class T>
+class FLDListBoxTemplate : public T
+    {
+    public:     // Constructors and destructor
+
+        /**
+        * Constructor
+        */
+        FLDListBoxTemplate(
+            MFLDFileListBoxObserver& aObserver, CFLDFileListModel& aModel )
+            : iObserver( aObserver ), iModel( aModel ) {}
+
+        virtual ~FLDListBoxTemplate()
+            {
+            iObserver.HandleFileListBoxEventL(
+                MFLDFileListBoxObserver::EListBoxClosed );
+            }
+
+	public:		// New functions
+	
+		/**
+		* Sets populist
+		*/
+		void SetListBox( CFLDPopupList* aPopupList )
+			{
+			iPopupList = aPopupList;
+			}
+
+    public:     // Functions from base classes
+
+        /**
+        * Method modified to send listbox events to an observer, when
+        * focus changes from one list item to another
+        */
+        TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+            {
+            /// Current softkeystate
+			MFLDFileListBoxObserver::TFileListSoftKeyState softKeyState;
+	        iObserver.HandleSoftKeyState( softKeyState );
+	        
+            if( aType == EEventKey )
+                {
+                // Get current item index
+                TInt oldIndex( T::CurrentItemIndex() );
+                // Call OfferKeyEventL
+                TKeyResponse response( T::OfferKeyEventL( aKeyEvent, aType ) );
+                // Get new item index
+                TInt newIndex( T::CurrentItemIndex() );
+                // Get current filename
+                TFileName filename;
+            	iModel.GetFileName( filename, T::CurrentItemIndex() );
+                // Compare new and old index
+                if( oldIndex != newIndex )
+                    {
+                    // Notify focus change if focus changes
+                    iObserver.HandleFileListBoxEventL(
+                        MFLDFileListBoxObserver::EFocusChanged, filename );
+
+#ifdef RD_VIDEO_AS_RINGING_TONE	             
+					// When video is drawn over popuplist and user changes focus
+					// or interrupts the video by using other key
+					//  screen must be forced to be redrawn	                
+					if( ( iPopupList ) &&
+					 ( softKeyState == MFLDFileListBoxObserver::EPreviewSelectSoftKeyState ) )
+						{
+                        // Set the vertical scroll bar and listbox to not dimmed.
+                        if ( iPopupList )
+                            {
+                            iPopupList->ListBox()->SetDimmed( EFalse );
+                            iPopupList->ListBox()->ScrollBarFrame()->
+                                VerticalScrollBar()->SetDimmed( EFalse );                            
+                            }
+
+						iPopupList->DrawNow( CEikonEnv::Static()->EikAppUi()->ApplicationRect() );
+						}	
+#endif                        
+                    }
+                else
+                    {
+#ifdef RD_VIDEO_AS_RINGING_TONE	                    
+	                if( ( iModel.MediaFileType( filename ) == ECLFMediaTypeVideo ) &&
+	                    ( aKeyEvent.iScanCode == EStdKeyDevice3 ) )
+    	            	{
+    	                // Do not notify observer
+    	                // when joystick key is pressed
+    	                // and current file is a video file
+	                    }
+	                else
+	                	{
+   	                	iObserver.HandleFileListBoxEventL(
+	   	                	MFLDFileListBoxObserver::EOtherKeyEvent );
+	   	                	
+ 						// When video is drawn over popuplist and user changes focus
+						// or interrupts the video by using other key
+						//  screen must be forced to be redrawn	                
+						if( ( iPopupList ) &&
+					 	 ( softKeyState == MFLDFileListBoxObserver::EPreviewSelectSoftKeyState ) )
+							{
+                            // Set the vertical scroll bar and listbox to not dimmed.
+                            if ( iPopupList )
+                                {
+                                iPopupList->ListBox()->SetDimmed( EFalse );
+                                iPopupList->ListBox()->ScrollBarFrame()->
+                                    VerticalScrollBar()->SetDimmed( EFalse );                            
+                                }
+
+							iPopupList->DrawNow( CEikonEnv::Static()->EikAppUi()->ApplicationRect() );
+							}		                	
+	                	}
+            
+#else
+					iObserver.HandleFileListBoxEventL(
+	   	                	MFLDFileListBoxObserver::EOtherKeyEvent );
+#endif	                	
+	                }
+                return response;
+                }
+            return T::OfferKeyEventL( aKeyEvent, aType );
+            }
+
+    private:    // Data
+
+        /// Ref: The list box observer, which gets notified about list item focus changes
+        MFLDFileListBoxObserver& iObserver;
+
+        /// Ref: File list model
+        CFLDFileListModel& iModel;
+        
+        /// Ref: File list popuplist
+        CFLDPopupList* iPopupList;
+
+    };
+
+#endif // FLDLISTBOXTEMPLATE_H
+
+// End of File