simpsyconfigurator/src/simpsyfileselectormodel.cpp
branchRCL_3
changeset 18 870918037e16
parent 0 522cd55cc3d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/simpsyconfigurator/src/simpsyfileselectormodel.cpp	Wed Sep 01 12:31:27 2010 +0100
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 2007 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:  List-box model class for Simulation PSY file selector dialog.
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <eikappui.h>
+#include <eikenv.h>
+#include <eikapp.h>
+
+// USER INCLUDES
+#include "simpsyfileselectormodel.h"
+
+// CONSTANT DEFINTION
+const TInt KSimPsyBufferSize = 128;
+const TInt KSimPsyFileIconId = 0;
+_LIT( KNmeaFilePath1,"\\system\\data\\" );
+_LIT( KNmeaFilePath2,"\\data\\SimFile\\" );
+_LIT( KSPSFileExtension, ".SPS");
+_LIT( KNMEAFileExtension, ".NME");
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CSimPsyFileSelectorModel::CSimPsyFileSelectorModel
+// ---------------------------------------------------------------------------
+//
+CSimPsyFileSelectorModel::CSimPsyFileSelectorModel()
+    {
+    // C++ Default constructor. No allocations or functions which can Leave
+    // should be called from here.
+    }
+
+// ---------------------------------------------------------------------------
+// CSimPsyFileSelectorModel::~CSimPsyFileSelectorModel
+// ---------------------------------------------------------------------------
+//
+CSimPsyFileSelectorModel::~CSimPsyFileSelectorModel()
+    {
+    // C++ Destructor. Free all resources associated with this class.
+    
+    // Delete the MdcaPoint buffer
+    delete iBuffer;
+    
+    // Reset and close the file name array
+    iFileNameArray.Reset();
+    iFileNameArray.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// void CSimPsyFileSelectorModel::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CSimPsyFileSelectorModel::ConstructL()
+    {
+    // Create the Buffer for packing the MdcaPoint
+    iBuffer = HBufC16::NewL( KSimPsyBufferSize );
+    
+    TRAP_IGNORE( AppendFileL( KNmeaFilePath2 ));    
+	TRAP_IGNORE( AppendFileL( KNmeaFilePath1 ));           
+    }
+
+// ---------------------------------------------------------------------------
+// CSimPsyFileSelectorModel* CSimPsyFileSelectorModel::NewL
+// ---------------------------------------------------------------------------
+//
+CSimPsyFileSelectorModel* CSimPsyFileSelectorModel::NewL()
+    {
+    CSimPsyFileSelectorModel* self = new ( ELeave ) CSimPsyFileSelectorModel();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// TPtrC CSimPsyFileSelectorModel::SimulationFileNameL
+// ---------------------------------------------------------------------------
+//
+TPtrC CSimPsyFileSelectorModel::SimulationFileNameL( TInt aIndex )
+	{   	
+	if ( aIndex < 0 || aIndex > ( iFileNameArray.Count() - 1 ))
+	    {
+	    User::Leave( KErrArgument );
+	    }
+	return ( iFileNameArray[ aIndex ]);
+	}
+	
+// ---------------------------------------------------------------------------
+// TInt CSimPsyFileSelectorModel::MdcaCount
+// ---------------------------------------------------------------------------
+//
+TInt CSimPsyFileSelectorModel::MdcaCount() const
+    {
+    return iFileNameArray.Count();    	
+    }
+    
+// ---------------------------------------------------------------------------
+// TPtrC16 CSimPsyFileSelectorModel::MdcaPoint
+// ---------------------------------------------------------------------------
+//
+TPtrC16 CSimPsyFileSelectorModel::MdcaPoint( TInt aIndex ) const
+    {            
+    // Pack the contents into the Buffer. We dont have to re-allocate the buffer
+    // everytime because the length of the name field is restricted in the
+    // Location Centre Registration API
+		    
+    // Tabulator Defintion
+    _LIT( KTab, "\t" );
+    
+    // Create formatted item string.
+    // list_single_large_pane:
+    // list item string format: "0\tTextLabel"
+    // where 0 is an index to icon array
+	TPtr16	buf( iBuffer->Des());
+	buf.Zero();
+	
+	// Append the Icon Index
+	buf.AppendNum( KSimPsyFileIconId );
+	
+	// Append the Tab Key
+	buf.Append( KTab );
+	
+	// Append only the file name without the full path.
+    TParsePtrC parsedEntry( iFileNameArray[ aIndex ] );
+    TPtrC fileName( parsedEntry.NameAndExt() );    	        	
+	buf.Append( fileName );
+	
+    return buf;
+    }			
+
+// ---------------------------------------------------------------------------
+// void CSimPsyFileSelectorModel::GetCorrectPathL
+// ---------------------------------------------------------------------------
+//
+void CSimPsyFileSelectorModel::GetCorrectPathL( TFileName& aFilePath )
+	{
+    CEikAppUi* appUi = 
+    		static_cast< CEikAppUi* >( CEikonEnv::Static()->AppUi());
+    TFileName* dllDrive = 
+    	new( ELeave ) TFileName( appUi->Application()->AppFullName());
+    CleanupStack::PushL( dllDrive );
+	
+	TParse parse;
+	User::LeaveIfError( parse.Set( *dllDrive, NULL, NULL ));
+    User::LeaveIfError( parse.Set( parse.Drive(), &aFilePath, NULL ));
+	aFilePath = parse.FullName();
+	CleanupStack::PopAndDestroy( dllDrive );
+	}
+
+// ---------------------------------------------------------------------------
+// void CSimPsyFileSelectorModel::AppendFileL
+// ---------------------------------------------------------------------------
+//	
+void CSimPsyFileSelectorModel::AppendFileL( const TDesC&	aDir )
+	{
+    // Open up a session to the file server
+    RFs	fs;
+    User::LeaveIfError( fs.Connect());
+    CleanupClosePushL( fs );
+        
+    // Obtain a list of entries for the system\data folder
+    TFileName folder( aDir );
+    GetCorrectPathL( folder );        
+    CDir* entryList = NULL;
+    User::LeaveIfError( fs.GetDir( folder, 
+    							   KEntryAttNormal, 
+    							   ESortNone,
+    							   entryList ));
+	// The scan was successful
+	CleanupStack::PushL( entryList );
+	TInt count = entryList->Count();
+	for ( TInt i = 0; i < count; i++ )
+		{
+		TFileName filename ((( *entryList)[i]).iName);
+		filename.UpperCase();
+		
+		// Check for the extension. The extension can be only .sps or
+		// .nme
+		TParsePtrC parsedEntry( filename );
+		TPtrC ext( parsedEntry.Ext());     	
+    	if ( !ext.Compare( KSPSFileExtension ) || 
+    		 !ext.Compare( KNMEAFileExtension ) )
+    		{
+    		// SPS or NMEA file. Append to the File name array.
+    		filename.Zero();
+    		filename.Copy( folder );
+    		filename.Append((( *entryList)[i]).iName );
+    		iFileNameArray.Append( filename );
+    		}
+		}
+	CleanupStack::PopAndDestroy( entryList );
+	
+    // Pop and destroy the file session	
+    CleanupStack::PopAndDestroy();		
+	}