--- a/memana/analyzetoolclient/configurationappgui/src/atconfigurationappguiprocessview.cpp Thu Feb 11 15:52:57 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,601 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-*
-*/
-
-#include <aknviewappui.h>
-#include <eikmenub.h>
-#include <avkon.hrh>
-#include <barsread.h>
-#include <stringloader.h>
-#include <aknlists.h>
-#include <eikenv.h>
-#include <akniconarray.h>
-#include <eikclbd.h>
-#include <akncontext.h>
-#include <akntitle.h>
-#include <aknnavide.h>
-#include <aknnavi.h>
-#include <eikbtgpc.h>
-#include <aknlistquerydialog.h>
-#include <atconfigurationappgui.rsg>
-
-#include "atconfigurationappgui.hrh"
-#include "atconfigurationappguiprocessview.h"
-#include "atconfigurationappguiprocesscontainer.hrh"
-#include "atconfigurationappguilistbox.hrh"
-#include "atconfigurationappguiprocesscontainer.h"
-#include "atconfigurationappguiappui.h"
-#include "atlog.h"
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::CATConfigurationAppGuiProcessView()
-// First phase of Symbian two-phase construction.
-// -----------------------------------------------------------------------------
-//
-CATConfigurationAppGuiProcessView::CATConfigurationAppGuiProcessView() :
- iLogOption( EATUseDefault )
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CATConfigurationAppGuiProcessView()" );
-
- iNaviDecorator_ = NULL;
- iProcessContainer = NULL;
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::~CATConfigurationAppGuiProcessView()
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CATConfigurationAppGuiProcessView::~CATConfigurationAppGuiProcessView()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::~CATConfigurationAppGuiProcessView()" );
-
- if ( iNaviDecorator_ != NULL )
- {
- delete iNaviDecorator_;
- iNaviDecorator_ = NULL;
- }
- delete iProcessContainer;
- iProcessContainer = NULL;
-
- // Closes the array and frees all memory allocated to the array.
- iLibraries.Close();
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::NewL()
-// Symbian two-phase constructor.
-// -----------------------------------------------------------------------------
-//
-CATConfigurationAppGuiProcessView* CATConfigurationAppGuiProcessView::NewL()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::NewL()" );
-
- CATConfigurationAppGuiProcessView* self = CATConfigurationAppGuiProcessView::NewLC();
- CleanupStack::Pop( self );
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::NewLC()
-// Symbian two-phase constructor.
-// -----------------------------------------------------------------------------
-//
-CATConfigurationAppGuiProcessView* CATConfigurationAppGuiProcessView::NewLC()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::NewLC()" );
-
- CATConfigurationAppGuiProcessView* self = new ( ELeave ) CATConfigurationAppGuiProcessView();
- CleanupStack::PushL( self );
- self->ConstructL();
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::ConstructL()
-// Second-phase constructor for view.
-// -----------------------------------------------------------------------------
-//
-void CATConfigurationAppGuiProcessView::ConstructL()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::ConstructL()" );
-
- BaseConstructL( R_ATCONFIGURATION_APP_GUI_PROCESSCONTAINER_VIEW );
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::Id()
-// Returns the UID for this view.
-// -----------------------------------------------------------------------------
-//
-TUid CATConfigurationAppGuiProcessView::Id() const
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::Id()" );
-
- return TUid::Uid( EATConfigurationAppGuiProcessViewId );
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::HandleCommandL()
-// Handle a command for this view.
-// -----------------------------------------------------------------------------
-//
-void CATConfigurationAppGuiProcessView::HandleCommandL( TInt aCommand )
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::HandleCommandL()" );
-
- // [[[ begin generated region: do not modify [Generated Code]
- TBool commandHandled = EFalse;
- switch ( aCommand )
- { // Code to dispatch to the AknView's menu and CBA commands is generated here
- case EATConfigurationAppGuiProcessView_librariesMenuItemCommand:
- RunListQueryL();
- commandHandled = ETrue;
- break;
- case EAknSoftkeyBack:
- {
- AppUi()->ActivateLocalViewL( TUid::Uid( EATConfigurationAppGuiListBoxViewId ) );
- commandHandled = ETrue;
- break;
- }
- case EATConfigurationAppGuiProcessViewSettingsMenuItemCommand:
- {
- AppUi()->ActivateLocalViewL( TUid::Uid( EATConfigurationAppGuiSettingItemListViewId ),
- TUid::Uid( EATConfigurationAppGuiProcessViewId ), KNullDesC8 );
- commandHandled = ETrue;
- break;
- }
- case EATConfigurationAppGuiProcessViewEXTILogOption:
- {
- iLogOption = EATLogToXti;
- commandHandled = ETrue;
- break;
- }
- case EATConfigurationAppGuiProcessViewES60LogOption:
- {
- iLogOption = EATLogToFile;
- commandHandled = ETrue;
- break;
- }
- case EATConfigurationAppGuiProcessViewENoneLogOption:
- {
- iLogOption = EATLoggingOff;
- commandHandled = ETrue;
- break;
- }
- case EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand:
- {
- CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi();
- appUi->SetProcessSubTestStartL( iProcessId );
- SetupStatusPaneL();
- if ( iProcessContainer )
- {
- iProcessContainer->UpdateViewL();
- }
- break;
- }
- case EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand:
- {
- CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi();
- appUi->SetProcessSubTestStopL( iProcessId );
- SetupStatusPaneL();
- if ( iProcessContainer )
- {
- iProcessContainer->UpdateViewL();
- }
- break;
- }
- default:
- break;
- }
-
- if ( !commandHandled )
- {
-
- if ( aCommand == EAknSoftkeyBack ||
- aCommand == EATConfigurationAppGuiProcessViewExitMenuItemCommand )
- {
- AppUi()->HandleCommandL( EEikCmdExit );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::DynInitMenuPaneL()
-// Handles dynamically dimming the menu items.
-// -----------------------------------------------------------------------------
-//
-void CATConfigurationAppGuiProcessView::DynInitMenuPaneL( TInt aResourceId,
- CEikMenuPane* aMenuPane )
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::DynInitMenuPaneL()" );
-
- if ( aResourceId == R_ATCONFIGURATION_APP_GUI_PROCESS_MENU_PANE )
- {
- if( iProcessContainer->GetCurrentItemIndex() < 0 )
- {
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand, ETrue );
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand, ETrue );
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessView_librariesMenuItemCommand, ETrue );
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewSet_logging_modeMenuItemCommand, ETrue );
- }
- else {
- CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi();
- TInt subTest = appUi->IsSubTestRunning( iProcessId );
- if ( subTest > KErrNotFound )
- {
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand, ETrue );
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand, EFalse );
- }
- else
- {
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand, EFalse );
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand, ETrue );
- }
-
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessView_librariesMenuItemCommand, EFalse );
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewSet_logging_modeMenuItemCommand, ETrue );
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewHelpMenuItemCommand, ETrue );
- aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewSettingsMenuItemCommand, ETrue );
- }
- }
-
- if ( aResourceId == R_ATCONFIGURATION_APP_GUI_RADIOBUTTON_MENUPANE )
- {
- if ( iLogOption == EATUseDefault )
- aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewEXTILogOption,
- EEikMenuItemSymbolOn );
- else if ( iLogOption == EATLogToFile )
- aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewES60LogOption,
- EEikMenuItemSymbolOn );
- else if ( iLogOption == EATLogToXti )
- aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewEXTILogOption,
- EEikMenuItemSymbolOn );
- else if ( iLogOption == EATLoggingOff )
- aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewENoneLogOption,
- EEikMenuItemSymbolOn );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::DoActivateL()
-// Handles user actions during activation of the view.
-// -----------------------------------------------------------------------------
-//
-void CATConfigurationAppGuiProcessView::DoActivateL(
- const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/,
- const TDesC8& /*aCustomMessage*/ )
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::DoActivateL()" );
-
- CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )AppUi();
- iProcessId = appUi->GetCurrentProcessId();
- iProcessStartTime = appUi->GetCurrentProcessStartTime();
-
- SetupStatusPaneL();
-
- if ( iProcessContainer == NULL )
- {
- iProcessContainer = CreateContainerL();
- iProcessContainer->SetMopParent( this );
- AppUi()->AddToStackL( *this, iProcessContainer );
- // For supporting MSK context menu
- MenuBar()->SetContextMenuTitleResourceId( R_ATCONFIGURATION_PROCESS_OPTIONS_MENU );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::DoDeactivate()
-// Handles user actions during deactivation of the view.
-// -----------------------------------------------------------------------------
-//
-void CATConfigurationAppGuiProcessView::DoDeactivate()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::DoDeactivate()" );
-
- TRAP_IGNORE( CleanupStatusPaneL() );
-
- if ( iProcessContainer != NULL )
- {
- AppUi()->RemoveFromViewStack( *this, iProcessContainer );
- delete iProcessContainer;
- iProcessContainer = NULL;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::HandleStatusPaneSizeChange()
-// Handle status pane size change for this view.
-// -----------------------------------------------------------------------------
-//
-void CATConfigurationAppGuiProcessView::HandleStatusPaneSizeChange()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::HandleStatusPaneSizeChange()" );
-
- CAknView::HandleStatusPaneSizeChange();
-
- // This may fail, but we're not able to propagate exceptions here
- TInt result;
- TRAP( result, SetupStatusPaneL() );
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::SetupStatusPaneL()
-// -----------------------------------------------------------------------------
-//
-void CATConfigurationAppGuiProcessView::SetupStatusPaneL()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::SetupStatusPaneL()" );
-
- // Reset the context pane
- TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
- CEikStatusPaneBase::TPaneCapabilities subPaneContext =
- StatusPane()->PaneCapabilities( contextPaneUid );
- if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
- {
- CAknContextPane* context = static_cast< CAknContextPane* > (
- StatusPane()->ControlL( contextPaneUid ) );
- context->SetPictureToDefaultL();
- }
-
- // Setup the title pane
- TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
- CEikStatusPaneBase::TPaneCapabilities subPaneTitle =
- StatusPane()->PaneCapabilities( titlePaneUid );
- if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
- {
- CAknTitlePane* title = static_cast< CAknTitlePane* >(
- StatusPane()->ControlL( titlePaneUid ) );
- //TResourceReader reader;
- //iEikonEnv->CreateResourceReaderLC( reader, R_ATCONFIGURATION_APP_GUI_TITLE_RESOURCE );
- //title->SetFromResourceL( reader );
- //CleanupStack::PopAndDestroy(); // reader internal state
-
- // Get process's name
- RArray<TATProcessInfo> processes;
- CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi();
- appUi->StorageServer().GetProcessesL( processes );
-
- for ( TInt find = 0 ; find < processes.Count() ; find++ )
- {
- TATProcessInfo processInfo = processes[ find ];
- if ( processInfo.iProcessId == iProcessId )
- {
- HBufC* name = HBufC::NewLC( processInfo.iProcessName.Length() );
- name->Des().Copy( processInfo.iProcessName );
- title->SetTextL( name->Des(), ETrue );
- CleanupStack::PopAndDestroy( name );
- break;
- }
- }
- // Closes the array and frees all memory allocated to the array.
- processes.Close();
- }
-
- // Set the navi pane content
- TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi );
- CEikStatusPaneBase::TPaneCapabilities subPaneNavi =
- StatusPane()->PaneCapabilities( naviPaneUid );
- if ( subPaneNavi.IsPresent() && subPaneNavi.IsAppOwned() )
- {
- CAknNavigationControlContainer* naviPane =
- static_cast< CAknNavigationControlContainer* >(
- StatusPane()->ControlL( naviPaneUid ) );
- if ( iNaviDecorator_ != NULL )
- {
- delete iNaviDecorator_;
- iNaviDecorator_ = NULL;
- }
- // Check if subtest is running
- CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi();
- TInt subTest = appUi->IsSubTestRunning( iProcessId );
- if ( subTest > KErrNotFound )
- {
- HBufC* labelText = StringLoader::LoadLC( R_ATCONFIGURATION_APP_GUI_NAVI_TEXT1 );
- iNaviDecorator_ = naviPane->CreateNavigationLabelL( labelText->Des() );
- CleanupStack::PopAndDestroy( labelText );
- }
- else
- {
- iNaviDecorator_ = naviPane->CreateNavigationLabelL( KNullDesC );
- }
- naviPane->PushL( *iNaviDecorator_ );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::CleanupStatusPaneL()
-// -----------------------------------------------------------------------------
-//
-void CATConfigurationAppGuiProcessView::CleanupStatusPaneL()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CleanupStatusPaneL()" );
-
- // Reset the navi pane
- TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi );
- CEikStatusPaneBase::TPaneCapabilities subPaneNavi =
- StatusPane()->PaneCapabilities( naviPaneUid );
- if ( subPaneNavi.IsPresent() && subPaneNavi.IsAppOwned() )
- {
- CAknNavigationControlContainer* naviPane =
- static_cast< CAknNavigationControlContainer* >(
- StatusPane()->ControlL( naviPaneUid ) );
- if ( iNaviDecorator_ != NULL )
- {
- naviPane->Pop( iNaviDecorator_ );
- delete iNaviDecorator_;
- iNaviDecorator_ = NULL;
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::CreateContainerL()
-// Creates the top-level container for the view.
-// -----------------------------------------------------------------------------
-//
-CATConfigurationAppGuiProcessContainer* CATConfigurationAppGuiProcessView::CreateContainerL()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CreateContainerL()" );
-
- return CATConfigurationAppGuiProcessContainer::NewL(
- ClientRect(), this, this, iProcessId, iProcessStartTime );
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::CreateListQuery1ItemL()
-// Create a list box item with the given column values.
-// -----------------------------------------------------------------------------
-//
-void CATConfigurationAppGuiProcessView::CreateListQuery1ItemL(
- TDes& aBuffer, const TDesC& aMainText )
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CreateListQuery1ItemL()" );
-
- _LIT ( KStringHeader, "%S" );
-
- aBuffer.Format( KStringHeader(), &aMainText );
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::CreateListQuery1ResourceArrayItemL()
-// Add an item to the list by reading the text items from resource.
-// -----------------------------------------------------------------------------
-//
-void CATConfigurationAppGuiProcessView::CreateListQuery1ResourceArrayItemL(
- TDes& aBuffer,
- TInt aResourceId )
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CreateListQuery1ResourceArrayItemL()" );
-
- CDesCArray* array = CCoeEnv::Static()->ReadDesCArrayResourceL( aResourceId );
- CleanupStack::PushL( array );
- CreateListQuery1ItemL( aBuffer, ( *array ) [ 0 ] );
- CleanupStack::PopAndDestroy( array );
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::InitializeListQuery1LC()
-// Initialize contents of the popup item list.
-// -----------------------------------------------------------------------------
-//
-CDesCArray* CATConfigurationAppGuiProcessView::InitializeListQuery1LC()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::InitializeListQuery1LC()" );
-
- ( ( CATConfigurationAppGuiAppUi* )AppUi() )->StorageServer().GetLoadedDllsL( iProcessId, iLibraries );
- const int KNumItems = iLibraries.Count();
- CDesCArray* itemArray = new ( ELeave ) CDesCArrayFlat( KNumItems ? KNumItems : 1 );
- CleanupStack::PushL( itemArray );
- // This is intended to be large enough, but if you get
- // a USER 11 panic, consider reducing string sizes.
-
- for ( TInt count = 0 ; count < KNumItems ; count++ )
- {
- TBuf<512> des;
- TBuf<KMaxLibraryName> library;
- library.Copy( iLibraries[ count ] );
- CreateListQuery1ItemL( des, library );
- itemArray->AppendL( des );
- }
-
- // Empties the array, so that it is ready to be reused.
- iLibraries.Reset();
- return itemArray;
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::SetupListQuery1IconsLC()
-// Set up the list query's icon array.
-// -----------------------------------------------------------------------------
-//
-CArrayPtr< CGulIcon >* CATConfigurationAppGuiProcessView::SetupListQuery1IconsLC()
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::SetupListQuery1IconsLC()" );
-
- CArrayPtr< CGulIcon >* icons = NULL;
- return icons;
- }
-
-// -----------------------------------------------------------------------------
-// CATConfigurationAppGuiProcessView::RunListQueryL()
-// Show the popup list query dialog for listQuery.
-// -----------------------------------------------------------------------------
-//
-TInt CATConfigurationAppGuiProcessView::RunListQueryL(
- const TDesC* aOverrideText, CDesCArray* aOverrideItemArray,
- CArrayPtr< CGulIcon >* aOverrideIconArray )
- {
- LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::RunListQueryL()" );
-
- TInt index = 0;
- CAknListQueryDialog* queryDialog = NULL;
- queryDialog = new ( ELeave ) CAknListQueryDialog( &index );
- CleanupStack::PushL( queryDialog );
-
- queryDialog->PrepareLC( R_ATCONFIGURATION_APP_GUI_LIST_QUERY1 );
- if ( aOverrideText != NULL )
- {
- queryDialog->SetHeaderTextL( *aOverrideText );
- }
-
- // Initialize list items
- CDesCArray* itemArray = NULL;
-
- if ( aOverrideItemArray != NULL )
- {
- CleanupStack::PushL( aOverrideItemArray );
- itemArray = aOverrideItemArray;
- }
- else
- {
- itemArray = InitializeListQuery1LC();
- }
-
- queryDialog->SetItemTextArray( itemArray );
- queryDialog->SetOwnershipType( ELbmOwnsItemArray );
- CleanupStack::Pop( itemArray );
-
- // Initialize list icons
- CArrayPtr< CGulIcon >* iconArray = NULL;
-
- if ( aOverrideIconArray != NULL )
- {
- CleanupStack::PushL( aOverrideIconArray );
- iconArray = aOverrideIconArray;
- }
- else
- {
- iconArray = SetupListQuery1IconsLC();
- }
-
- if ( iconArray != NULL )
- {
- queryDialog->SetIconArrayL( iconArray ); // Passes ownership
- CleanupStack::Pop( iconArray );
- }
- // Enable text scrolling
- queryDialog->ListControl()->Listbox()->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
- // Run dialog
- TInt result = queryDialog->RunLD();
-
- // Clean up
- CleanupStack::Pop( queryDialog );
-
- return result == 0 ? -1 : index;
- }
-
-// End of File