creator/src/creator_scriptentry.cpp
branchRCL_3
changeset 20 fad26422216a
parent 0 d6fe6244b863
equal deleted inserted replaced
19:b3cee849fa46 20:fad26422216a
       
     1 /*
       
     2 * Copyright (c) 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 "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:  
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include "creator_model.h"
       
    20 #include "creator_traces.h"
       
    21 #include "creator_factory.h"
       
    22 
       
    23 #include <aknlists.h> 
       
    24 #include <AknsSkinInstance.h>
       
    25 
       
    26 
       
    27 #include <data_caging_path_literals.hrh>
       
    28 
       
    29 
       
    30 const TInt KReadBufSize = 8192;
       
    31 
       
    32 // Creator random data file filter
       
    33 _LIT(KRandomDataFileFilter, "*.creatordataxml");
       
    34 
       
    35 // ---------------------------------------------------------------------------
       
    36 
       
    37 
       
    38 CCommandParser* CCommandParser::NewL(CCreatorEngine* aEngine)
       
    39     {
       
    40     CCommandParser* self = CCommandParser::NewLC(aEngine);
       
    41     CleanupStack::Pop(self);
       
    42     return self;
       
    43     }
       
    44 
       
    45 CCommandParser* CCommandParser::NewLC(CCreatorEngine* aEngine)
       
    46     {
       
    47     CCommandParser* self = new (ELeave) CCommandParser;
       
    48     CleanupStack::PushL(self);
       
    49     self->ConstructL(aEngine);
       
    50     return self;
       
    51     }
       
    52 
       
    53 CCommandParser::CCommandParser()
       
    54 	{
       
    55 	}
       
    56 
       
    57 void CCommandParser::ConstructL(CCreatorEngine* aEngine)
       
    58 	{
       
    59     LOGSTRING("Creator: CCommandParser::ConstructL");
       
    60 
       
    61     iEngine = aEngine;
       
    62 
       
    63     iReadBuf = HBufC8::NewL(KReadBufSize);
       
    64 	}
       
    65 
       
    66 CCommandParser::~CCommandParser()
       
    67 	{
       
    68     LOGSTRING("Creator: CCommandParser::~CCommandParser");
       
    69 
       
    70     if (iSearchArray)
       
    71         delete iSearchArray;
       
    72 
       
    73     if (iReadBuf)
       
    74         delete iReadBuf;
       
    75 	}
       
    76 
       
    77 
       
    78 // ---------------------------------------------------------------------------
       
    79 //#if(!defined __SERIES60_30__ && !defined __SERIES60_31__)
       
    80 void CCommandParser::OpenScriptL() {}
       
    81 TBool CCommandParser::OpenScriptL(RFile& aScriptFile)
       
    82     {    
       
    83     LOGSTRING("Creator: CCommandParser::OpenScriptL");
       
    84     TBool ret = EFalse;
       
    85 
       
    86     // init the search array
       
    87     iSearchArray = new(ELeave) CDesCArrayFlat(500);
       
    88 
       
    89     // wait dialog
       
    90     CAknGlobalNote* waitDialog = CAknGlobalNote::NewLC();
       
    91     waitDialog->SetSoftkeys(R_AVKON_SOFTKEYS_CANCEL);
       
    92     TInt dialogId = waitDialog->ShowNoteL(EAknGlobalWaitNote, _L("Searching"));
       
    93 
       
    94 
       
    95     // search all the .creator files from the phone
       
    96     TInt err;
       
    97     TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\")));
       
    98 
       
    99     TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\system\\apps\\Creator\\")));
       
   100 
       
   101     TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\data\\")));
       
   102     TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\data\\")));
       
   103     
       
   104     TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\documents\\")));
       
   105     TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\documents\\")));
       
   106 
       
   107     TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\creator\\")));
       
   108     TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\creator\\")));
       
   109     
       
   110     TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\scripts\\")));
       
   111     TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\scripts\\")));
       
   112     
       
   113     TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\temp\\")));
       
   114     TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\temp\\")));
       
   115     
       
   116     TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\system\\temp\\")));
       
   117     TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\system\\temp\\")));
       
   118 
       
   119     TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\private\\20011383\\")));
       
   120     TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\private\\20011383\\")));
       
   121 
       
   122     TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\private\\1000484b\\")));
       
   123 
       
   124 
       
   125     // remove the wait dialog
       
   126     waitDialog->CancelNoteL(dialogId);
       
   127     CleanupStack::PopAndDestroy(); //waitDialog;
       
   128 
       
   129 
       
   130     if ( iSearchArray->MdcaCount() > 0)
       
   131         {
       
   132         // create a file name array based on the iSearchArray
       
   133         CDesCArray* fileNameArray = new(ELeave) CDesCArrayFlat(iSearchArray->MdcaCount());
       
   134         CleanupStack::PushL(fileNameArray);
       
   135         
       
   136         for (TInt i=0; i<iSearchArray->MdcaCount(); i++)
       
   137             {
       
   138             
       
   139             TParse filename; // file name parser
       
   140             filename.Set(iSearchArray->MdcaPoint(i), NULL, NULL);
       
   141 
       
   142             if ( filename.Drive()[0] == 'e' || filename.Drive()[0] == 'E')  // MMC
       
   143                 {
       
   144                 TFileName nameMMC;
       
   145                 nameMMC.Append(filename.Name());
       
   146                 nameMMC.Append(_L("\t0"));        // MMC icon
       
   147                 fileNameArray->AppendL(nameMMC);
       
   148                 }
       
   149             else
       
   150                 {
       
   151                 fileNameArray->AppendL(filename.Name());
       
   152                 }
       
   153             }
       
   154         CleanupStack::Pop(fileNameArray);
       
   155 
       
   156 
       
   157         // create a popup list
       
   158         CAknSinglePopupMenuStyleListBox* listBox = new(ELeave) CAknSinglePopupMenuStyleListBox;
       
   159         CleanupStack::PushL(listBox);
       
   160         CAknPopupList* popupList = CAknPopupList::NewL( listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL, AknPopupLayouts::EMenuWindow );
       
   161         CleanupStack::PushL(popupList);
       
   162         popupList->SetTitleL(_L("Select script"));
       
   163         listBox->ConstructL( popupList, EAknListBoxSelectionList|EAknListBoxLoopScrolling );
       
   164         listBox->CreateScrollBarFrameL( ETrue );
       
   165         listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
       
   166         listBox->Model()->SetItemTextArray( fileNameArray );
       
   167         listBox->Model()->SetOwnershipType( ELbmOwnsItemArray );  // !!!
       
   168         listBox->HandleItemAdditionL();
       
   169 
       
   170 
       
   171         // define MMC icon 
       
   172         MAknsSkinInstance* skin = AknsUtils::SkinInstance();
       
   173         _LIT( KFLDMemoryCardUiBitmapFile, "z:aknmemorycardui.mbm" );
       
   174         CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 );
       
   175         listBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );
       
   176 
       
   177         TParse* fp = new(ELeave) TParse();
       
   178         fp->Set(KFLDMemoryCardUiBitmapFile, &KDC_APP_BITMAP_DIR, NULL);
       
   179         TFileName resourceFileName( fp->FullName() );
       
   180         delete fp;
       
   181 
       
   182         CGulIcon* icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnIndiMmcAdd,
       
   183             resourceFileName,
       
   184             EMbmAknmemorycarduiQgn_indi_mmc_add,
       
   185             EMbmAknmemorycarduiQgn_indi_mmc_add_mask );
       
   186         CleanupStack::PushL( icon );
       
   187         iconArray->AppendL( icon );
       
   188         CleanupStack::Pop( icon );
       
   189 
       
   190 
       
   191         // execute dialog
       
   192         TBool result = popupList->ExecuteLD();
       
   193         CleanupStack::Pop();  // popupList
       
   194 
       
   195         if ( result ) 
       
   196             {
       
   197             // open the file for reading
       
   198             //RFile file;
       
   199             TRAPD(err, aScriptFile.Open(CEikonEnv::Static()->FsSession(), iSearchArray->MdcaPoint(listBox->CurrentItemIndex()), EFileRead));
       
   200             if( err != KErrNone)
       
   201                 {
       
   202                 aScriptFile.Close();
       
   203                 User::Leave(err);
       
   204                 }
       
   205             ret = ETrue;
       
   206             }
       
   207         CleanupStack::PopAndDestroy();  //listBox
       
   208         }
       
   209     else  // no scripts found from the search paths
       
   210         {
       
   211         CAknInformationNote* note = new (ELeave) CAknInformationNote;
       
   212         note->ExecuteLD(_L("No scripts found"));
       
   213         }
       
   214 
       
   215     delete iSearchArray;
       
   216     iSearchArray = NULL;
       
   217     return ret;
       
   218     }
       
   219 /*
       
   220 #else
       
   221 // ---------------------------------------------------------------------------
       
   222 void CCommandParser::OpenScriptL()
       
   223     {
       
   224     LOGSTRING("Creator: CCommandParser::OpenScriptL");
       
   225 
       
   226     // init the search array
       
   227     iSearchArray = new(ELeave) CDesCArrayFlat(500);
       
   228 
       
   229     // wait dialog
       
   230     CAknGlobalNote* waitDialog = CAknGlobalNote::NewLC();
       
   231     waitDialog->SetSoftkeys(R_AVKON_SOFTKEYS_CANCEL);
       
   232     TInt dialogId = waitDialog->ShowNoteL(EAknGlobalWaitNote, _L("Searching"));
       
   233 
       
   234 
       
   235     // search all the .creator files from the phone
       
   236     TInt err;
       
   237     TRAP(err, FindFiles(_L("*.creator"), _L("\\")));
       
   238 
       
   239     TRAP(err, FindFiles(_L("*.creator"), _L("\\system\\apps\\Creator\\")));
       
   240 
       
   241     TRAP(err, FindFiles(_L("*.creator"), _L("\\data\\")));
       
   242     TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\data\\")));
       
   243     
       
   244     TRAP(err, FindFiles(_L("*.creator"), _L("\\documents\\")));
       
   245     TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\documents\\")));
       
   246 
       
   247     TRAP(err, FindFiles(_L("*.creator"), _L("\\creator\\")));
       
   248     TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\creator\\")));
       
   249     
       
   250     TRAP(err, FindFiles(_L("*.creator"), _L("\\scripts\\")));
       
   251     TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\scripts\\")));
       
   252     
       
   253     TRAP(err, FindFiles(_L("*.creator"), _L("\\temp\\")));
       
   254     TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\temp\\")));
       
   255     
       
   256     TRAP(err, FindFiles(_L("*.creator"), _L("\\system\\temp\\")));
       
   257     TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\system\\temp\\")));
       
   258 
       
   259     TRAP(err, FindFiles(_L("*.creator"), _L("\\private\\101FA751\\")));
       
   260     TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\private\\101FA751\\")));
       
   261 
       
   262     TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\private\\1000484b\\")));
       
   263 
       
   264 
       
   265     // remove the wait dialog
       
   266     waitDialog->CancelNoteL(dialogId);
       
   267     CleanupStack::PopAndDestroy(); //waitDialog;
       
   268 
       
   269 
       
   270     if ( iSearchArray->MdcaCount() > 0)
       
   271         {
       
   272         // create a file name array based on the iSearchArray
       
   273         CDesCArray* fileNameArray = new(ELeave) CDesCArrayFlat(iSearchArray->MdcaCount());
       
   274         CleanupStack::PushL(fileNameArray);
       
   275         
       
   276         for (TInt i=0; i<iSearchArray->MdcaCount(); i++)
       
   277             {
       
   278             
       
   279             TParse filename; // file name parser
       
   280             filename.Set(iSearchArray->MdcaPoint(i), NULL, NULL);
       
   281 
       
   282             if ( filename.Drive()[0] == 'e' || filename.Drive()[0] == 'E')  // MMC
       
   283                 {
       
   284                 TFileName nameMMC;
       
   285                 nameMMC.Append(filename.Name());
       
   286                 nameMMC.Append(_L("\t0"));        // MMC icon
       
   287                 fileNameArray->AppendL(nameMMC);
       
   288                 }
       
   289             else
       
   290                 {
       
   291                 fileNameArray->AppendL(filename.Name());
       
   292                 }
       
   293             }
       
   294         CleanupStack::Pop(fileNameArray);
       
   295 
       
   296 
       
   297         // create a popup list
       
   298         CAknSinglePopupMenuStyleListBox* listBox = new(ELeave) CAknSinglePopupMenuStyleListBox;
       
   299         CleanupStack::PushL(listBox);
       
   300         CAknPopupList* popupList = CAknPopupList::NewL( listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL, AknPopupLayouts::EMenuWindow );
       
   301         CleanupStack::PushL(popupList);
       
   302         popupList->SetTitleL(_L("Select script"));
       
   303         listBox->ConstructL( popupList, EAknListBoxSelectionList|EAknListBoxLoopScrolling );
       
   304         listBox->CreateScrollBarFrameL( ETrue );
       
   305         listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
       
   306         listBox->Model()->SetItemTextArray( fileNameArray );
       
   307         listBox->Model()->SetOwnershipType( ELbmOwnsItemArray );  // !!!
       
   308         listBox->HandleItemAdditionL();
       
   309 
       
   310 
       
   311         // define MMC icon 
       
   312         MAknsSkinInstance* skin = AknsUtils::SkinInstance();
       
   313         _LIT( KFLDMemoryCardUiBitmapFile, "z:aknmemorycardui.mbm" );
       
   314         CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 );
       
   315         listBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );
       
   316 
       
   317         TParse* fp = new(ELeave) TParse();
       
   318         fp->Set(KFLDMemoryCardUiBitmapFile, &KDC_APP_BITMAP_DIR, NULL);
       
   319         TFileName resourceFileName( fp->FullName() );
       
   320         delete fp;
       
   321 
       
   322         CGulIcon* icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnIndiMmcAdd,
       
   323             resourceFileName,
       
   324             EMbmAknmemorycarduiQgn_indi_mmc_add,
       
   325             EMbmAknmemorycarduiQgn_indi_mmc_add_mask );
       
   326         CleanupStack::PushL( icon );
       
   327         iconArray->AppendL( icon );
       
   328         CleanupStack::Pop( icon );
       
   329 
       
   330 
       
   331         // execute dialog
       
   332         TBool result = popupList->ExecuteLD();
       
   333         CleanupStack::Pop();  // popupList
       
   334 
       
   335         if ( result ) 
       
   336             {
       
   337             // open the file for reading
       
   338             RFile file;
       
   339             User::LeaveIfError(file.Open(CEikonEnv::Static()->FsSession(), iSearchArray->MdcaPoint(listBox->CurrentItemIndex()), EFileRead));
       
   340             while (ReadLineFromFileL(file) == KErrNone)
       
   341                 {
       
   342                 iReadBuf->Des().Trim();  // delete leading and trailing white space
       
   343 
       
   344                 if (iReadBuf->Length() < 5)  // command too short, ignoring...
       
   345                     {
       
   346                     //CEikonEnv::Static()->InfoMsg(_L("Corrupted line"));
       
   347                     }
       
   348         
       
   349                 // check it's a valid line: first char is A-Z and the line ends to ';'
       
   350                 else if (iReadBuf->Des()[0] >= 'A' && iReadBuf->Des()[0] <= 'Z' && iReadBuf->Des()[iReadBuf->Length()-1] == ';')
       
   351                     {
       
   352                     // this line is valid -> parse the command
       
   353                     ParseCommandFromDescriptorL();
       
   354                     }
       
   355                 else
       
   356                     {
       
   357                     //CEikonEnv::Static()->InfoMsg(_L("Not a valid line"));
       
   358                     }
       
   359 
       
   360                 }
       
   361 
       
   362             file.Close();
       
   363 
       
   364             // show a note if there were no valid commands in the script
       
   365             if (iEngine->CommandArrayCount() == 0)
       
   366                 {
       
   367                 CAknInformationNote* note = new(ELeave) CAknInformationNote;
       
   368                 note->ExecuteLD(_L("No valid commands in this script"));
       
   369                 }
       
   370 
       
   371             }
       
   372 
       
   373         CleanupStack::PopAndDestroy();  //listBox
       
   374         }
       
   375     
       
   376     else  // no scripts found from the search paths
       
   377         {
       
   378         CAknInformationNote* note = new (ELeave) CAknInformationNote;
       
   379         note->ExecuteLD(_L("No scripts found"));
       
   380         }
       
   381 
       
   382 
       
   383     delete iSearchArray;
       
   384     iSearchArray = NULL;
       
   385 
       
   386     }
       
   387 #endif
       
   388 */
       
   389 
       
   390 TBool CCommandParser::GetRandomDataFilenameL(TDes& aFilename)
       
   391     {    
       
   392     LOGSTRING("Creator: CCommandParser::GetRandomDataFilenameL");
       
   393     TBool ret = EFalse;
       
   394 
       
   395     // init the search array
       
   396     if (iSearchArray)
       
   397     	{
       
   398     	delete iSearchArray;
       
   399     	iSearchArray = NULL;
       
   400     	}
       
   401     iSearchArray = new(ELeave) CDesCArrayFlat(500);
       
   402 
       
   403     // wait dialog
       
   404     CAknGlobalNote* waitDialog = CAknGlobalNote::NewLC();
       
   405     waitDialog->SetSoftkeys(R_AVKON_SOFTKEYS_CANCEL);
       
   406     TInt dialogId = waitDialog->ShowNoteL(EAknGlobalWaitNote, _L("Searching"));
       
   407 
       
   408 
       
   409     // search all the creator random data files from the phone
       
   410     TInt err;
       
   411     TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\")));
       
   412 
       
   413     TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\system\\apps\\Creator\\")));
       
   414 
       
   415     TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\data\\")));
       
   416     TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\data\\")));
       
   417     
       
   418     TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\documents\\")));
       
   419     TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\documents\\")));
       
   420 
       
   421     TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\creator\\")));
       
   422     TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\creator\\")));
       
   423     
       
   424     TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\scripts\\")));
       
   425     TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\scripts\\")));
       
   426     
       
   427     TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\temp\\")));
       
   428     TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\temp\\")));
       
   429     
       
   430     TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\system\\temp\\")));
       
   431     TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\system\\temp\\")));
       
   432 
       
   433     TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\private\\20011383\\")));
       
   434     TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\private\\20011383\\")));
       
   435 
       
   436     TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\private\\1000484b\\")));
       
   437 
       
   438 
       
   439     // remove the wait dialog
       
   440     waitDialog->CancelNoteL(dialogId);
       
   441     CleanupStack::PopAndDestroy(); //waitDialog;
       
   442 
       
   443 
       
   444     if (iSearchArray->MdcaCount() > 0)
       
   445         {
       
   446         // create a file name array based on the iSearchArray
       
   447         CDesCArray* fileNameArray = new(ELeave) CDesCArrayFlat(iSearchArray->MdcaCount() + 1);
       
   448         CleanupStack::PushL(fileNameArray);
       
   449 
       
   450         for (TInt i=0; i<iSearchArray->MdcaCount(); i++)
       
   451             {
       
   452             
       
   453             TParse filename; // file name parser
       
   454             filename.Set(iSearchArray->MdcaPoint(i), NULL, NULL);
       
   455 
       
   456             if ( filename.Drive()[0] == 'e' || filename.Drive()[0] == 'E')  // MMC
       
   457                 {
       
   458                 TFileName nameMMC;
       
   459                 nameMMC.Append(filename.Name());
       
   460                 nameMMC.Append(_L("\t0"));        // MMC icon
       
   461                 fileNameArray->AppendL(nameMMC);
       
   462                 }
       
   463             else
       
   464                 {
       
   465                 fileNameArray->AppendL(filename.Name());
       
   466                 }
       
   467             }
       
   468 
       
   469         // add "default" (resource file) to list
       
   470         fileNameArray->AppendL(_L("Default"));
       
   471 
       
   472         CleanupStack::Pop(fileNameArray);
       
   473 
       
   474 
       
   475         // create a popup list
       
   476         CAknSinglePopupMenuStyleListBox* listBox = new(ELeave) CAknSinglePopupMenuStyleListBox;
       
   477         CleanupStack::PushL(listBox);
       
   478         CAknPopupList* popupList = CAknPopupList::NewL( listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL, AknPopupLayouts::EMenuWindow );
       
   479         CleanupStack::PushL(popupList);
       
   480         popupList->SetTitleL(_L("Select random data file"));
       
   481         listBox->ConstructL( popupList, EAknListBoxSelectionList|EAknListBoxLoopScrolling );
       
   482         listBox->CreateScrollBarFrameL( ETrue );
       
   483         listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
       
   484         listBox->Model()->SetItemTextArray( fileNameArray );
       
   485         listBox->Model()->SetOwnershipType( ELbmOwnsItemArray );  // !!!
       
   486         listBox->HandleItemAdditionL();
       
   487 
       
   488 
       
   489         // define MMC icon 
       
   490         MAknsSkinInstance* skin = AknsUtils::SkinInstance();
       
   491         _LIT( KFLDMemoryCardUiBitmapFile, "z:aknmemorycardui.mbm" );
       
   492         CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 );
       
   493         listBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );
       
   494 
       
   495         TParse* fp = new(ELeave) TParse();
       
   496         fp->Set(KFLDMemoryCardUiBitmapFile, &KDC_APP_BITMAP_DIR, NULL);
       
   497         TFileName resourceFileName( fp->FullName() );
       
   498         delete fp;
       
   499 
       
   500         CGulIcon* icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnIndiMmcAdd,
       
   501             resourceFileName,
       
   502             EMbmAknmemorycarduiQgn_indi_mmc_add,
       
   503             EMbmAknmemorycarduiQgn_indi_mmc_add_mask );
       
   504         CleanupStack::PushL( icon );
       
   505         iconArray->AppendL( icon );
       
   506         CleanupStack::Pop( icon );
       
   507 
       
   508 
       
   509         // execute dialog
       
   510         TBool result = popupList->ExecuteLD();
       
   511         CleanupStack::Pop();  // popupList
       
   512 
       
   513         if ( result ) 
       
   514             {
       
   515             if (listBox->CurrentItemIndex() == (fileNameArray->Count() - 1))
       
   516             	{
       
   517             	// "default" (resource file) selected
       
   518             	aFilename.Copy(KNullDesC);
       
   519             	}
       
   520             else
       
   521             	{
       
   522             	// xml file selected
       
   523             	aFilename.Copy(iSearchArray->MdcaPoint(listBox->CurrentItemIndex()));
       
   524             	}
       
   525             ret = ETrue;
       
   526             }
       
   527         CleanupStack::PopAndDestroy();  //listBox
       
   528         }
       
   529     else  // no random data files found from the search paths
       
   530         {
       
   531         CAknInformationNote* note = new (ELeave) CAknInformationNote;
       
   532         note->ExecuteLD(_L("No random data files found"));
       
   533         }
       
   534 
       
   535     delete iSearchArray;
       
   536     iSearchArray = NULL;
       
   537     return ret;
       
   538     }
       
   539 
       
   540 TInt CCommandParser::FindFilesRecursiveL(const TDesC& aFileName, const TDesC& aPath)
       
   541     {
       
   542     return CreatorFileUtils::FindFilesRecursiveL(iSearchArray, aFileName, aPath);
       
   543     }
       
   544 TInt CreatorFileUtils::FindFilesRecursiveL(CDesCArrayFlat* aFileArray, const TDesC& aFileName, const TDesC& aPath)
       
   545 	{
       
   546     TInt err = KErrNone;
       
   547     CDirScan* scan = CDirScan::NewLC(CEikonEnv::Static()->FsSession());
       
   548     scan->SetScanDataL(aPath, KEntryAttDir, ESortNone);
       
   549     CDir* dirEntries = NULL;
       
   550 
       
   551     for(;;)
       
   552         {
       
   553         TRAP(err, scan->NextL(dirEntries));
       
   554         if (!dirEntries  || (err!=KErrNone))
       
   555             break;
       
   556 
       
   557         for (TInt i=0; i<dirEntries->Count(); i++) 
       
   558             {
       
   559             TFileName path(scan->FullPath());
       
   560             path.Append((*dirEntries)[i].iName);
       
   561             path.Append(_L("\\"));
       
   562             FindFiles(aFileArray, aFileName, path);
       
   563             }
       
   564         delete(dirEntries);
       
   565         }
       
   566 
       
   567     CleanupStack::PopAndDestroy(scan);
       
   568     return err;
       
   569     }
       
   570 
       
   571 TInt CreatorFileUtils::FindFiles(CDesCArrayFlat* aFileArray, const TDesC& aFileName, const TDesC& aPath)
       
   572     {
       
   573     TFindFile fileFinder(CEikonEnv::Static()->FsSession());
       
   574     CDir* fileList; 
       
   575     TInt err = fileFinder.FindWildByDir(aFileName, aPath, fileList);
       
   576 
       
   577     while (err == KErrNone)
       
   578         {
       
   579         for (TInt i=0; i<fileList->Count(); i++)
       
   580             {
       
   581             TParse fullentry;
       
   582             fullentry.Set((*fileList)[i].iName, &fileFinder.File(), NULL);
       
   583             
       
   584             TRAP(err, aFileArray->AppendL(fullentry.FullName())); 
       
   585             }
       
   586 
       
   587         delete fileList;
       
   588         err = fileFinder.FindWild(fileList);
       
   589         }
       
   590     return err;
       
   591     }
       
   592 // ---------------------------------------------------------------------------
       
   593 
       
   594 TInt CCommandParser::FindFiles(const TDesC& aFileName, const TDesC& aPath)
       
   595     {
       
   596     return CreatorFileUtils::FindFiles(iSearchArray, aFileName, aPath);
       
   597     }
       
   598 
       
   599 // ---------------------------------------------------------------------------
       
   600 
       
   601 TInt CCommandParser::ReadLineFromFileL(RFile& aInputFile)
       
   602     {
       
   603     LOGSTRING("Creator: CCommandParser::ReadLineFromFile");
       
   604 
       
   605 	_LIT8(KImcvCRLF, "\r\n");
       
   606 
       
   607     TInt err = KErrNone;
       
   608 
       
   609     //  Read into the buffer
       
   610     HBufC8* tempLine = HBufC8::NewLC(KReadBufSize);
       
   611     TPtr8 buffer = tempLine->Des();
       
   612 
       
   613     // clear the targer
       
   614     iReadBuf->Des().Copy(_L(""));
       
   615 
       
   616     //  Get the current file position
       
   617     TInt filePos = 0;
       
   618     aInputFile.Seek(ESeekCurrent, filePos);
       
   619 
       
   620     //  Read the buffer
       
   621     err = aInputFile.Read(buffer);
       
   622 
       
   623     //end of file?
       
   624     TInt s = buffer.Length();
       
   625     if  ( s == 0)
       
   626         err = KErrEof;
       
   627 
       
   628     if  (err == KErrNone)
       
   629         {
       
   630         //  Copy to the lfcr and then set the file pointer to the point after that
       
   631         TInt pos = buffer.Find(KImcvCRLF);
       
   632         if      ( pos != -1)
       
   633             {
       
   634             iReadBuf->Des().Justify(buffer, pos, ELeft, ' ');
       
   635             filePos += (pos+2);
       
   636 
       
   637             //  Set the file pointer back to after the lfcr
       
   638             aInputFile.Seek(ESeekStart, filePos);
       
   639             }
       
   640         //  Else fill the whole buffer
       
   641         else
       
   642             {
       
   643             iReadBuf->Des().Copy(buffer);
       
   644             }
       
   645         }
       
   646 
       
   647     CleanupStack::PopAndDestroy(); // tempLine
       
   648     return err;
       
   649     }
       
   650 
       
   651 // ---------------------------------------------------------------------------
       
   652 
       
   653 void CCommandParser::StrParserL(HBufC*& aDestinationBuf, TUint aToken)
       
   654     {
       
   655     // store old position
       
   656 	iParserOldPosition = iParserPosition;
       
   657 
       
   658     // make sure we are not reading outside of buffer
       
   659     if (iParserPosition >= iReadBuf->Length() - 1)
       
   660         return;
       
   661     
       
   662     // read until asked token
       
   663 	do
       
   664 	    {
       
   665 	    iParserPosition++;
       
   666 	    }
       
   667 	while (iReadBuf->Des()[iParserPosition] != aToken && iParserPosition < iReadBuf->Des().Length()-1);
       
   668 	
       
   669 	// calculate length of the destination buffer
       
   670 	TInt bufferLength = iParserPosition-iParserOldPosition-1;
       
   671 	
       
   672 	// reset the destination buffer
       
   673 	if (aDestinationBuf)
       
   674 	    {
       
   675         delete aDestinationBuf;
       
   676         aDestinationBuf = NULL;
       
   677 	    }
       
   678 
       
   679     // allocate memory for the destination buffer
       
   680 	aDestinationBuf = HBufC::NewL(bufferLength);
       
   681 
       
   682 	// copy data from the read buffer to the destination buffer
       
   683     aDestinationBuf->Des().Copy(iReadBuf->Des().Mid(iParserOldPosition+1, bufferLength));
       
   684     }
       
   685 
       
   686 // ---------------------------------------------------------------------------
       
   687 
       
   688 void CCommandParser::StrParserL(HBufC8*& aDestinationBuf, TUint aToken)
       
   689     {
       
   690     // store old position
       
   691 	iParserOldPosition = iParserPosition;
       
   692 
       
   693     // make sure we are not reading outside of buffer
       
   694     if (iParserPosition >= iReadBuf->Length() - 1)
       
   695         return;
       
   696     
       
   697     // read until asked token
       
   698 	do
       
   699 	    {
       
   700 	    iParserPosition++;
       
   701 	    }
       
   702 	while (iReadBuf->Des()[iParserPosition] != aToken && iParserPosition < iReadBuf->Des().Length()-1);
       
   703 	
       
   704 	// calculate length of the destination buffer
       
   705 	TInt bufferLength = iParserPosition-iParserOldPosition-1;
       
   706 	
       
   707 	// reset the destination buffer
       
   708 	if (aDestinationBuf)
       
   709 	    {
       
   710         delete aDestinationBuf;
       
   711         aDestinationBuf = NULL;
       
   712 	    }
       
   713 
       
   714     // allocate memory for the destination buffer
       
   715 	aDestinationBuf = HBufC8::NewL(bufferLength);
       
   716 
       
   717 	// copy data from the read buffer to the destination buffer
       
   718     aDestinationBuf->Des().Copy(iReadBuf->Des().Mid(iParserOldPosition+1, bufferLength));
       
   719     }
       
   720 
       
   721 //----------------------------------------------------------------------------
       
   722 
       
   723 void CCommandParser::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) // from MMsvSessionObserver
       
   724     {
       
   725     }
       
   726 
       
   727 //----------------------------------------------------------------------------
       
   728