ncdengine/debuglogger/src/catalogsloggerappview.cpp
changeset 4 32704c33136d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/debuglogger/src/catalogsloggerappview.cpp	Tue Jan 26 12:06:03 2010 +0200
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2006 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 <coemain.h>
+#include <aknlists.h> 
+#include <barsread.h> 
+#include <e32property.h>
+#include <aknutils.h>
+#include <catalogslogger.rsg>
+
+#include "catalogsloggerappview.h"
+#include "catalogsdebugdefs.h"
+
+CAknSettingItem* CCatalogsLoggerSettingList::CreateSettingItemL( TInt aIdentifier )
+    {
+
+    // Set/clear the setting value based on the corresponding bit
+    // on the setting property
+
+    TInt settingValue;
+//    RProperty::Get( KCatalogsDebugPropertyCat, 
+//                    ECatalogsLoggerSettingsProperty, 
+//                    settingValue );
+    settingValue = 0;
+    
+    iFlags[aIdentifier] = settingValue & ( 1 << aIdentifier );
+    
+    // Create the setting item
+    CAknSettingItem* settingItem = NULL;
+    settingItem = new (ELeave) 
+                    CAknBinaryPopupSettingItem( aIdentifier, iFlags[aIdentifier] );
+        
+    return settingItem;
+    }
+
+void CCatalogsLoggerSettingList::EditItemL( TInt aIndex, TBool aCalledFromMenu )
+    {
+    // Store the value
+    CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
+    ( *SettingItemArray() )[aIndex]->StoreL();
+
+    // Read the current settings values from the property
+    TInt settingBits;
+//    RProperty::Get( KCatalogsDebugPropertyCat, 
+//                    ECatalogsLoggerSettingsProperty, 
+//                    settingBits );
+    settingBits = 0;
+    
+    // Set/clear the bit corresoponding this setting value
+    TInt settingId = ( *SettingItemArray())[aIndex]->Identifier();
+    if( iFlags[settingId] )
+        {
+        settingBits |= ( 1 << settingId );
+        }
+    else
+        {
+        settingBits &= ~( 1 << settingId );
+        }
+
+    /*
+    TInt err = RProperty::Set( KCatalogsDebugPropertyCat, 
+                               ECatalogsLoggerSettingsProperty, 
+                               settingBits );
+    User::LeaveIfError( err );
+    */
+}
+
+CCatalogsLoggerAppView* CCatalogsLoggerAppView::NewL(const TRect& aRect)
+    {
+    CCatalogsLoggerAppView* self = CCatalogsLoggerAppView::NewLC(aRect);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CCatalogsLoggerAppView* CCatalogsLoggerAppView::NewLC(const TRect& aRect)
+    {
+    CCatalogsLoggerAppView* self = new (ELeave) CCatalogsLoggerAppView;
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+    return self;
+    }
+
+CCatalogsLoggerAppView::CCatalogsLoggerAppView()
+    : iSettingsView( NULL )
+    {
+    }
+
+CCatalogsLoggerAppView::~CCatalogsLoggerAppView()
+    {
+    delete iSettingsView;
+    iSettingsView = NULL;
+    delete iData;
+    }
+
+void CCatalogsLoggerAppView::ConstructL(const TRect& aRect)
+    {
+    CreateWindowL();
+    SetRect(aRect);
+
+    // Create settings view
+//     iSettingsView = new( ELeave ) CCatalogsLoggerSettingList();
+//     iSettingsView->SetContainerWindowL( *this );
+//     iSettingsView->ConstructFromResourceL( R_CATALOGS_LOGGER_SETTING_ITEM_LIST );
+//     iSettingsView->ActivateL();
+    
+    ActivateL();
+    }
+
+void CCatalogsLoggerAppView::Draw(const TRect& /*aRect*/) const
+    {
+    // Clear the screen, the list will draw itself after this
+    CWindowGc& gc = SystemGc();
+
+    // Gets the control's extent
+    TRect drawRect( Rect());
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    gc.SetBrushColor( KRgbWhite );
+    gc.SetPenColor( KRgbBlack );
+
+    gc.Clear( drawRect );
+
+    // Print some info
+
+    const CFont* font = LatinBold19();
+    gc.UseFont( font );
+
+    TInt yOffset = Rect().iTl.iY + font->HeightInPixels();
+
+    if( iLoggerStatus )
+        {
+        gc.DrawText( _L("Logging on"), TPoint( Rect().iTl.iX+2, yOffset ) );
+        }
+    else
+        {
+        gc.DrawText( _L("Logging off"), TPoint( Rect().iTl.iX+2, yOffset ) );
+        }
+    yOffset += font->HeightInPixels();
+    TBuf<100> line;
+    line.Copy(_L("Chunks: "));
+    line.AppendNum( iLoggerNumber );
+    line.Append(_L("  Offset: "));
+    line.AppendNum( iLoggerOffset>>10 );
+    gc.DrawText( line, TPoint( Rect().iTl.iX+2, yOffset ) );    yOffset += font->HeightInPixels();
+
+    line.Copy(_L("Log drive: "));
+    line.Append( iLoggerDrive == EDriveC ? 'C' : 'E' );
+
+    TVolumeInfo info;
+    iEikonEnv->FsSession().Volume( info, iLoggerDrive );
+    line.Append(_L("   Free space: ")); 
+    line.AppendNum( info.iFree/1024/1024 ); // megabytes
+
+    gc.DrawText( line, TPoint( Rect().iTl.iX+2, yOffset ) );    yOffset += font->HeightInPixels();
+
+    // Print some l0gzor
+
+    font = LatinPlain12();
+    gc.UseFont( font );
+
+//     TLex18 lex;
+//     if( iData && *iData != KNullDesC8 )
+//         {
+//         lex.Assign( *iData );
+//         }
+//     else
+//         {
+//         _LIT8(KHorror,"*not set*\n*not set*\n*not set*\n");
+//         lex.Assign(KHorror);
+//         }
+
+    if( iData )
+        {
+        CArrayFixFlat<TPtrC>* lines = new(ELeave) CArrayFixFlat<TPtrC>( 32 );
+        CleanupStack::PushL( lines );
+        AknTextUtils::WrapToArrayL( iData->Des(), Rect().Width() - 6, *font, *lines );
+    
+        for( TInt i = 0; i < lines->Count(); i++ )
+            {
+            gc.DrawText( lines->At( i ), TPoint( Rect().iTl.iX+2, yOffset ) );
+            yOffset += font->HeightInPixels();
+            if( yOffset >= Rect().iBr.iY )
+                {
+                break;
+                }
+            }
+        CleanupStack::PopAndDestroy( lines );
+        }
+
+//     lex.Mark();
+//     while( 1 )
+//         {
+//         if( lex.Peek() == '\n' || lex.Eos() )
+//             {
+//             TPtrC8 marked = lex.MarkedToken();
+//             HBufC* buffer = HBufC::NewLC( marked.Length() );
+//             buffer->Des().Copy( marked );
+
+//             CArrayFixFlat<TPtrC>* lines = new(ELeave) CArrayFixFlat<TPtrC>( 8 );
+//             CleanupStack::PushL( lines );
+//             AknTextUtils::WrapToArrayL( 
+//                 buffer->Des(),
+//                 Rect().Width() - 6,
+//                 *font,
+//                 *lines
+//                 );
+
+//             for( TInt i = 0; i < lines->Count(); i++ )
+//                 {
+//                 gc.DrawText( lines->At( i ), TPoint( Rect().iTl.iX+2, yOffset ) );
+//                 yOffset += font->HeightInPixels();
+//                 if( yOffset >= Rect().iBr.iY )
+//                     {
+//                     return;
+//                     }
+//                 }
+
+//             CleanupStack::PopAndDestroy( lines );
+//             CleanupStack::PopAndDestroy( buffer );
+//             if( ! lex.Eos() )
+//                 {
+//                 lex.SkipAndMark(1);
+//                 }
+//             else
+//                 {
+//                 break;
+//                 }
+//             }
+//         else
+//             {
+//             lex.Inc();
+//             }
+//         }
+    }
+
+TInt CCatalogsLoggerAppView::CountComponentControls() const
+    {
+    if( iSettingsView != NULL )
+        {
+        return 1;
+        }
+    else
+        {
+        return 0;
+        }
+    }
+
+CCoeControl* CCatalogsLoggerAppView::ComponentControl( TInt aIndex ) const
+    {
+    switch ( aIndex )
+        {
+        case 0:
+            return iSettingsView;
+        default:
+            return NULL;
+        }
+    }
+
+void CCatalogsLoggerAppView::SizeChanged()
+    {         
+    if ( iSettingsView )
+        {
+        iSettingsView->SetRect( Rect() );
+        }
+    }
+
+TKeyResponse CCatalogsLoggerAppView::OfferKeyEventL( const TKeyEvent &aKeyEvent, TEventCode aType )
+{
+    if ( iSettingsView )
+        {
+        TKeyResponse response = iSettingsView->OfferKeyEventL( aKeyEvent, aType );
+
+        DrawNow();
+        return response;
+        }
+    return EKeyWasNotConsumed;
+}
+
+void CCatalogsLoggerAppView::SetLoggerStatus( TBool aStatus )
+    {
+    iLoggerStatus = aStatus;
+    DrawDeferred();
+    }
+void CCatalogsLoggerAppView::SetLoggerNumber( TInt aNumber, TInt aOffset )
+    {
+    iLoggerNumber = aNumber;
+    iLoggerOffset = aOffset;
+    DrawDeferred();
+    }
+
+void CCatalogsLoggerAppView::SetLoggerDrive( TInt aDrive )
+    {
+    iLoggerDrive = aDrive;
+    DrawDeferred();
+    }
+
+static void ReplaceChar( TPtr aDes, TChar aOldChar, TChar aNewChar )
+    {
+    for( TInt i = 0; i < aDes.Length(); ++i )
+        {
+        if ( aDes[ i ] == aOldChar )
+            {
+            aDes[ i ] = aNewChar;
+            }
+        }
+    }
+
+void CCatalogsLoggerAppView::SetData( TPtrC8 aData )
+    {
+    delete iData;
+    iData = 0;
+    iData = HBufC::NewL( aData.Length() );
+    iData->Des().Copy( aData );
+    ReplaceChar( iData->Des(), TChar('\t'), TChar(' ') );
+    DrawDeferred();
+    }
+