--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vtuis/videotelui/src/VtUiLayout.cpp Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,700 @@
+/*
+* Copyright (c) 2004, 2005 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: Implementation of the VtUiLayout class.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "VtUiLayout.h"
+#include "VtUiPanic.h"
+#include <fbs.h>
+#include <avkon.mbg>
+#include <videotelui.mbg>
+#include <aknsconstants.h>
+#include <aknconsts.h>
+#include <akniconutils.h>
+#include <aknutils.h>
+
+#include <aknlayout.cdl.h>
+#include <applayout.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <layoutmetadata.cdl.h>
+
+
+// DATA TYPES
+
+// Enumerates files in which there can be bitmaps.
+enum TVtUiBitmapFiles
+ {
+ // Video Telephone bitmap file.
+ EVtUiVideoBitmapFile,
+ // AVKON bitmap file.
+ EVtUiAvkonBitmapFile
+ };
+
+// Video Telephone application bitmaps
+_LIT( KVtUiVideoBitmapFileName,
+ "z:\\resource\\apps\\videotelui.mbm" );
+// Minimum step for zoom.
+const TInt KVtUiZoomMinStep = 1;
+
+// Maximum step for zoom.
+const TInt KVtUiZoomMaxStep = 11;
+
+// ============================ LOCAL FUNCTIONS ===============================
+
+inline TAknWindowComponentLayout DoCompose( TAknWindowComponentLayout aLine1,
+ TAknWindowComponentLayout aLine2 )
+ {
+ return TAknWindowComponentLayout::Compose( aLine1, aLine2 );
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetApplicationParentRect
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetApplicationParentRect(
+ TRect& aRect )
+ {
+ // Calculate screen rectangle.
+ TSize screenSize = CCoeEnv::Static()->ScreenDevice()->SizeInPixels();
+ TRect screenRect( screenSize );
+
+ // Calculate application window.
+ TAknLayoutRect appRect;
+ appRect.LayoutRect(
+ screenRect,
+ AknLayout::application_window( screenRect ) );
+ aRect = appRect.Rect();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetMainPaneLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetMainPaneLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ TRect parent;
+ GetApplicationParentRect( parent );
+ // Calculate main pane layout.
+ // First 1 = normal status pane, second 1 = control pane.
+ aLayout = AknLayout::main_pane( parent, 0, 1, 1 );
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetFirstWindowBackgroundLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetFirstWindowBackgroundLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ //aLayout = AppLayout::Uplink_video_image__large__Line_1();
+ TInt main_pane_variety( 0 );
+ TInt vid_upl_variety( 14 );
+ if ( Layout_Meta_Data::IsLandscapeOrientation() )
+ {
+ main_pane_variety = 4;
+ vid_upl_variety = 0;
+ }
+
+ TAknWindowComponentLayout layout1 =
+ AknLayoutScalable_Apps::main_pane( main_pane_variety );
+ TAknWindowComponentLayout layout2 =
+ AknLayoutScalable_Apps::main_video_tele_pane();
+ TAknWindowComponentLayout layout3 =
+ AknLayoutScalable_Apps::
+ call_video_uplink_pane_cp1( vid_upl_variety );
+ TAknWindowComponentLayout layout4 =
+ AknLayoutScalable_Apps::call_video_uplink_pane_g1();
+ aLayout =
+ DoCompose(
+ DoCompose( layout1, layout2 ),
+ DoCompose( layout3, layout4 ) ).LayoutLine();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetFirstWindowStreamLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetFirstWindowStreamLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ TInt main_pane_variety( 0 );
+ TInt vid_upl_variety( 14 );
+ if ( Layout_Meta_Data::IsLandscapeOrientation() )
+ {
+ main_pane_variety = 4;
+ vid_upl_variety = 0;
+ }
+
+ TAknWindowComponentLayout layout1 =
+ AknLayoutScalable_Apps::main_pane( main_pane_variety );
+ TAknWindowComponentLayout layout2 =
+ AknLayoutScalable_Apps::main_video_tele_pane();
+ TAknWindowComponentLayout layout3 =
+ AknLayoutScalable_Apps::
+ call_video_uplink_pane_cp1( vid_upl_variety );
+ TAknWindowComponentLayout layout4 =
+ AknLayoutScalable_Apps::video_uplink_pane();
+ aLayout =
+ DoCompose(
+ DoCompose( layout1, layout2 ),
+ DoCompose( layout3, layout4 ) ).LayoutLine();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetFirstWindowStreamDisabledIconLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetFirstWindowStreamDisabledIconLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ //aLayout = AppLayout::Uplink_video_image__large__Line_3();
+ TInt main_pane_variety( 0 );
+ TInt vid_upl_variety( 14 );
+ if ( Layout_Meta_Data::IsLandscapeOrientation() )
+ {
+ main_pane_variety = 4;
+ vid_upl_variety = 0;
+ }
+
+ TAknWindowComponentLayout layout1 =
+ AknLayoutScalable_Apps::main_pane( main_pane_variety );
+ TAknWindowComponentLayout layout2 =
+ AknLayoutScalable_Apps::main_video_tele_pane();
+ TAknWindowComponentLayout layout3 =
+ AknLayoutScalable_Apps::
+ call_video_uplink_pane_cp1( vid_upl_variety );
+ TAknWindowComponentLayout layout4 =
+ AknLayoutScalable_Apps::call_video_uplink_pane_g2();
+ aLayout =
+ DoCompose(
+ DoCompose( layout1, layout2 ),
+ DoCompose( layout3, layout4 ) ).LayoutLine();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetSecondWindowBackgroundLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetSecondWindowBackgroundLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ aLayout = AppLayout::Downlink_video_image_Line_1();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetSecondWindowStreamLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetSecondWindowStreamLayout(
+ TAknWindowLineLayout& aLayout, TBool aIsToolbar, TBool aIsSubQCIF )
+ {
+ if( aIsSubQCIF )
+ {
+ aLayout = AppLayout::video_down_subqcif_pane();
+ }
+ else
+ {
+ if ( aIsToolbar )
+ {
+ // non touch
+ TInt varietyPr = 8; // portrait
+ TInt varietyLs = 10; // landscape
+ if ( AknLayoutUtils::PenEnabled() )
+ {
+ varietyPr = 11; // portrait
+ varietyLs = 12; // landscape
+ }
+
+ TInt varietyIndex = Layout_Meta_Data::IsLandscapeOrientation()
+ ? varietyLs : varietyPr ;
+ TAknWindowComponentLayout layout1 = AknLayoutScalable_Apps::
+ main_video_tele_pane();
+ TAknWindowComponentLayout layout2 = AknLayoutScalable_Apps::
+ video_down_crop_pane( varietyIndex );
+ aLayout = TAknWindowComponentLayout::Compose( layout1, layout2 ).
+ LayoutLine();
+
+ }
+ else
+ {
+ aLayout = AppLayout::downlink_stream();
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetSecondWindowStreamWholeLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetSecondWindowStreamWholeLayout(
+ TAknWindowLineLayout& aLayout, TBool aIsToolbar, TBool aIsSubQCIF )
+ {
+ if( aIsSubQCIF )
+ {
+ aLayout = AppLayout::video_down_subqcif_pane();
+ }
+ else
+ {
+ if ( aIsToolbar )
+ {
+ // non touch
+ TInt varietyPr = 5; // portrait
+ TInt varietyLs = 7; // landscape
+ if ( AknLayoutUtils::PenEnabled() )
+ {
+ varietyPr = 8; // portrait
+ varietyLs = 1; // landscape
+ }
+
+ TInt varietyIndex = Layout_Meta_Data::IsLandscapeOrientation()
+ ? varietyLs : varietyPr;
+ TAknWindowComponentLayout layout1 = AknLayoutScalable_Apps::
+ main_video_tele_pane();
+ TAknWindowComponentLayout layout2 = AknLayoutScalable_Apps::
+ video_down_pane( varietyIndex );
+ aLayout = TAknWindowComponentLayout::Compose( layout1, layout2 )
+ .LayoutLine();
+ }
+ else
+ {
+ aLayout = AppLayout::downlink_stream_area();
+ }
+ }
+ }
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetSecondWindowDisabledIconLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetSecondWindowDisabledIconLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ aLayout = AppLayout::Downlink_video_image_Line_3();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetSecondWindowWaitingTextLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetSecondWindowWaitingTextLayout(
+ TAknTextLineLayout& aLayout,
+ const TBool aFirstLine )
+ {
+ TBool layoutFound = EFalse;
+ if ( Layout_Meta_Data::IsLandscapeOrientation() )
+ {
+ layoutFound = ETrue;
+
+ TAknWindowComponentLayout layout1 =
+ AknLayoutScalable_Apps::main_video_tele_pane();
+
+ TAknTextComponentLayout layout2 =
+ aFirstLine ?
+ AknLayoutScalable_Apps::call_video_pane_t1() :
+ AknLayoutScalable_Apps::call_video_pane_t2();
+
+ aLayout =
+ TAknWindowComponentLayout::ComposeText(
+ layout1, layout2 ).LayoutLine();
+ }
+
+ if ( !layoutFound )
+ {
+ const TInt line( ( aFirstLine ) ? 0 : 1 );
+ TAknWindowComponentLayout l1 = AknLayoutScalable_Apps::
+ main_video_tele_pane();
+ TAknTextComponentLayout l2;
+ if ( !line )
+ {
+ l2 = AknLayoutScalable_Apps::call_video_pane_t1( 1 );
+ }
+ else
+ {
+ l2 = AknLayoutScalable_Apps::call_video_pane_t2( 1 );
+ }
+ aLayout = TAknWindowComponentLayout::ComposeText( l1, l2 );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetNumberEntryAreaLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetNumberEntryAreaLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 2 : 0;
+
+ TAknWindowComponentLayout layout1 =
+ AknLayoutScalable_Apps::main_call_pane();
+ TAknWindowComponentLayout layout2 =
+ AknLayoutScalable_Apps::popup_number_entry_window( variety );
+
+ aLayout =
+ TAknWindowComponentLayout::Compose( layout1, layout2 ).LayoutLine();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetAudioRoutingIconLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetAudioRoutingIconLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ aLayout = AppLayout::Navipane_elements_and_descendant_panes_Line_1();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetCallDurationTextLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetCallDurationTextLayout(
+ TAknTextLineLayout& aLayout )
+ {
+ aLayout = AppLayout::Navipanetexts_Line_1();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetMutedTextLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetMutedTextLayout(
+ TAknTextLineLayout& aLayout )
+ {
+ aLayout = AppLayout::Navipanetexts_Line_2();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetZoomPaneLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetZoomPaneLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ aLayout = AppLayout::zooming_pane();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetZoomDirLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetZoomDirLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ aLayout = AppLayout::Zooming_pane_elements_Line_1();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetZoomAreaLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetZoomAreaLayout(
+ TAknWindowLineLayout& aLayout )
+ {
+ aLayout = AppLayout::Zooming_pane_elements_Line_2();
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::GetZoomStepLayout
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::GetZoomStepLayout(
+ TAknWindowLineLayout& aLayout,
+ TInt aZoomStep )
+ {
+ aZoomStep = Max( Min( aZoomStep, KVtUiZoomMaxStep ), KVtUiZoomMinStep );
+ aZoomStep--; // 1 .. 11 is mapped to 0 .. 10.
+
+ // Function pointer table would be more efficient, but AppLayout methods
+ // are inline.
+
+ switch ( aZoomStep )
+ {
+ case 0:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_1();
+ break;
+
+ case 1:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_2();
+ break;
+
+ case 2:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_3();
+ break;
+
+ case 3:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_4();
+ break;
+
+ case 4:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_5();
+ break;
+
+ case 5:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_6();
+ break;
+
+ case 6:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_7();
+ break;
+
+ case 7:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_8();
+ break;
+
+ case 8:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_9();
+ break;
+
+ case 9:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_10();
+ break;
+
+ case 10:
+ default:
+ aLayout = AppLayout::Zooming_steps_sizes_Line_11();
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::MapBitmapToSkinId
+// -----------------------------------------------------------------------------
+//
+TAknsItemID VtUiLayout::MapBitmapToSkinId( TVtUiBitmapId aId )
+ {
+ TAknsItemID skinId = KAknsIIDNone;
+
+ switch ( aId )
+ {
+ case EVtUiBitmap_qgn_graf_call_video_out_bg:
+ skinId = KAknsIIDQgnGrafCallVideoOutBg;
+ break;
+
+ case EVtUiBitmap_qgn_indi_call_video_blind_in:
+ skinId = KAknsIIDQgnIndiCallVideoBlindIn;
+ break;
+
+ case EVtUiBitmap_qgn_indi_call_video_blind_out:
+ skinId = KAknsIIDQgnIndiCallVideoBlindOut;
+ break;
+
+ case EVtUiBitmap_qgn_indi_call_video_blind_in_mask_icon:
+ skinId = KAknsIIDQgnIndiCallVideoBlindInMaskIcon;
+ break;
+
+ case EVtUiBitmap_qgn_indi_call_video_blind_out_mask_icon:
+ skinId = KAknsIIDQgnIndiCallVideoBlindOutMaskIcon;
+ break;
+
+ case EVtUiBitmap_qgn_indi_earpiece:
+ skinId = KAknsIIDQgnIndiEarpiece;
+ break;
+
+ case EVtUiBitmap_qgn_indi_speaker:
+ skinId = KAknsIIDQgnIndiSpeaker;
+ break;
+
+ case EVtUiBitmap_qgn_indi_zoom_dir:
+ skinId = KAknsIIDQgnIndiZoomDir;
+ break;
+
+ case EVtUiBitmap_qgn_graf_zoom_area:
+ skinId = KAknsIIDQgnGrafZoomArea;
+ break;
+
+ case EVtUiBitmap_qgn_indi_zoom_min:
+ skinId = KAknsIIDQgnIndiZoomMin;
+ break;
+
+ case EVtUiBitmap_qgn_indi_zoom_max:
+ skinId = KAknsIIDQgnIndiZoomMax;
+ break;
+
+ case EVtUiBitmap_qgn_prop_sub_current:
+ case EVtUiBitmap_qgn_prop_sub_current_mask:
+ skinId = KAknsIIDQgnPropSubCurrent;
+ break;
+
+ default:
+ // Default value is OK.
+ break;
+ }
+
+ return skinId;
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::MapBitmapToColorId
+// -----------------------------------------------------------------------------
+//
+TBool VtUiLayout::MapBitmapToColorId(
+ TVtUiBitmapId aId,
+ TAknsItemID& aColorId,
+ TInt& aColorIndex )
+ {
+ TBool result = EFalse;
+
+ aColorId = KAknsIIDNone;
+ aColorIndex = KErrNotFound;
+
+ switch ( aId )
+ {
+ case EVtUiBitmap_qgn_indi_earpiece:
+ case EVtUiBitmap_qgn_indi_earpiece_mask:
+ case EVtUiBitmap_qgn_indi_speaker:
+ case EVtUiBitmap_qgn_indi_speaker_mask:
+ case EVtUiBitmap_qgn_indi_zoom_dir:
+ case EVtUiBitmap_qgn_indi_zoom_dir_mask:
+ result = ETrue;
+ aColorId = KAknsIIDQsnIconColors;
+ aColorIndex = EAknsCIQsnIconColorsCG7;
+ break;
+
+ default:
+ // Default value is OK.
+ break;
+ }
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::Resolve
+// -----------------------------------------------------------------------------
+//
+void VtUiLayout::Resolve(
+ TVtUiBitmapId aId,
+ TFileName& aFileName,
+ TInt& aIndex )
+ {
+ TInt index = KErrNotFound;
+ TVtUiBitmapFiles file = EVtUiVideoBitmapFile;
+
+ switch ( aId )
+ {
+ case EVtUiBitmap_qgn_graf_call_video_out_bg:
+ index = EMbmVideoteluiQgn_graf_call_video_out_bg;
+ break;
+
+ case EVtUiBitmap_qgn_graf_call_video_out_bg_mask:
+ index = EMbmVideoteluiQgn_graf_call_video_out_bg_mask;
+ break;
+
+ case EVtUiBitmap_qgn_indi_call_video_blind_in:
+ index = EMbmVideoteluiQgn_indi_call_video_blind_in;
+ break;
+
+ case EVtUiBitmap_qgn_indi_call_video_blind_out:
+ index = EMbmVideoteluiQgn_indi_call_video_blind_out;
+ break;
+
+ case EVtUiBitmap_qgn_indi_earpiece:
+ file = EVtUiAvkonBitmapFile;
+ index = EMbmAvkonQgn_indi_earpiece;
+ break;
+
+ case EVtUiBitmap_qgn_indi_earpiece_mask:
+ file = EVtUiAvkonBitmapFile;
+ index = EMbmAvkonQgn_indi_earpiece_mask;
+ break;
+
+ case EVtUiBitmap_qgn_indi_speaker:
+ file = EVtUiAvkonBitmapFile;
+ index = EMbmAvkonQgn_indi_speaker;
+ break;
+
+ case EVtUiBitmap_qgn_indi_speaker_mask:
+ file = EVtUiAvkonBitmapFile;
+ index = EMbmAvkonQgn_indi_speaker_mask;
+ break;
+
+ case EVtUiBitmap_qgn_graf_zoom_area:
+ index = EMbmVideoteluiQgn_graf_zoom_area;
+ break;
+
+ case EVtUiBitmap_qgn_indi_zoom_dir:
+ index = EMbmVideoteluiQgn_indi_zoom_dir;
+ break;
+
+ case EVtUiBitmap_qgn_indi_zoom_dir_mask:
+ index = EMbmVideoteluiQgn_indi_zoom_dir_mask;
+ break;
+
+ case EVtUiBitmap_qgn_indi_zoom_min:
+ index = EMbmVideoteluiQgn_indi_zoom_min;
+ break;
+
+ case EVtUiBitmap_qgn_indi_zoom_max:
+ index = EMbmVideoteluiQgn_indi_zoom_max;
+ break;
+
+ case EVtUiBitmap_qgn_indi_call_video_blind_in_mask_icon:
+ index = EMbmVideoteluiQgn_indi_call_video_blind_in_mask_icon;
+ break;
+
+ case EVtUiBitmap_qgn_indi_call_video_blind_out_mask_icon:
+ index = EMbmVideoteluiQgn_indi_call_video_blind_out_mask_icon;
+ break;
+
+ case EVtUiBitmap_qgn_prop_sub_current:
+ file = EVtUiAvkonBitmapFile;
+ index = EMbmAvkonQgn_prop_sub_current;
+ break;
+
+ case EVtUiBitmap_qgn_prop_sub_current_mask:
+ file = EVtUiAvkonBitmapFile;
+ index = EMbmAvkonQgn_prop_sub_current_mask;
+ break;
+
+ default:
+ VtUiPanic::Panic( EVtUiPanicInvalidBitmapId );
+ break;
+ }
+
+ aIndex = index;
+ switch ( file )
+ {
+ case EVtUiVideoBitmapFile:
+ aFileName = KVtUiVideoBitmapFileName;
+ break;
+
+ case EVtUiAvkonBitmapFile:
+ aFileName = AknIconUtils::AvkonIconFileName();
+ break;
+
+ default:
+ VtUiPanic::Panic( EVtUiPanicInvalidBitmapFile );
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// VtUiLayout::IsLandscapeOrientation
+// -----------------------------------------------------------------------------
+//
+TBool VtUiLayout::IsLandscapeOrientation()
+ {
+ return Layout_Meta_Data::IsLandscapeOrientation();
+ }
+
+// End of File