calendarui/views/src/calenmonthcelllistboxdata.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/src/calenmonthcelllistboxdata.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2002 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:   Drawing Cell of MonthView of Calendar application.
+ *
+*/
+
+
+
+//debug
+#include "calendarui_debug.h"
+
+
+// INCLUDE FILES
+#include "calenmonthcelllistboxdata.h"
+
+#include "calendar.hrh"
+
+#include <AknsEffectAnim.h>
+#include <AknUtils.h>
+#include <gulicon.h>
+
+#include <aknlayoutscalable_apps.cdl.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+
+// CONSTANTS
+const TInt KMonthCells(2);
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Two-phased constructor.
+CCalenMonthCellListBoxData* CCalenMonthCellListBoxData::NewL()
+    {
+    TRACE_ENTRY_POINT;
+    
+    CCalenMonthCellListBoxData* self = new (ELeave) CCalenMonthCellListBoxData();
+    // Construct grid animation by default
+    self->ConstructLD( KAknsIIDQsnAnimGrid );
+    
+    TRACE_EXIT_POINT;
+    return self;
+    }
+
+// Destructor
+CCalenMonthCellListBoxData::~CCalenMonthCellListBoxData()
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    }
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CCalenMonthCellListBoxData::CCalenMonthCellListBoxData()
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------
+// CCalenMonthCellListBoxData::DrawFormatted
+// Draw date and bitmap of Month Grid
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalenMonthCellListBoxData::DrawFormatted( TListItemProperties aProperties, 
+                                                CWindowGc& aGc,
+                                                const TDesC* aText,
+                                                const TRect& aItemRect,
+                                                TBool /*aHighlight*/,
+                                                const TColors& aColors) const
+    {
+    TRACE_ENTRY_POINT;
+    
+    // This is minimized version of draw formatted needed to draw month view subcells.
+    // In principle, there shouldn't be any month view specific functionality in here,
+    // and we could use Avkon's DrawFormatted. However, Avkon DrawFormatted contains
+    // lot of extra stuff, which seems unnecessary for month view.
+
+    aGc.SetPenStyle(CGraphicsContext::ESolidPen);
+    aGc.SetBrushStyle(CGraphicsContext::ENullBrush);
+    aGc.SetPenColor(aColors.iText);
+    aGc.SetBrushColor(aColors.iBack);
+
+    TInt lastSubCell(LastSubCell());
+
+    TPtrC text;
+
+    // Draw subcells (there are only two of them
+    for (TInt subcell(0); subcell < lastSubCell; ++subcell)
+        {
+        TextUtils::ColumnText( text, subcell, aText );
+        TMargins m( SubCellMargins( subcell ) );
+        TRect rect( aItemRect.iTl + SubCellPosition( subcell ) + TSize( m.iLeft, m.iTop ),
+                    SubCellSize( subcell ) - TSize( m.iRight + m.iLeft, m.iBottom + m.iTop ) );
+
+        // SKIP subcell if either there's NO DATA, or area is 0
+        if (text.Length() || rect.iTl.iX != rect.iBr.iX || rect.iTl.iY != rect.iBr.iY)
+            {
+            CGraphicsContext::TTextAlign align( CGraphicsContext::ECenter );
+
+            if( !SubCellIsGraphics( subcell ) )
+                { // draw text
+                const CFont* usedFont = Font( aProperties, subcell );
+                if( usedFont == NULL )
+                    {
+                    usedFont = CEikonEnv::Static()->NormalFont();
+                    }
+                aGc.UseFont( usedFont );
+
+                // baseline calc needed for each cell.
+                TBuf<ECalenCharsInLine> clipbuf( text );
+                AknTextUtils::DisplayTextLanguageSpecificNumberConversion( clipbuf );
+                TInt baseLineOffset( SubCellBaselinePos(subcell) );
+                baseLineOffset -= m.iTop;
+                aGc.DrawText( clipbuf, rect, baseLineOffset, align );
+                }
+            else
+                {  // drawing bitmap
+                TLex lex(text);
+                TInt index(0);
+                lex.Val(index);
+                if (index >= 0)
+                    { 
+                    CGulIcon* icon = (*IconArray())[index];
+                    TPoint bmpPos = rect.iTl;
+
+                    CFbsBitmap* colorBitmap = icon->Bitmap();
+                    const TRect bmpRect( colorBitmap->SizeInPixels() );
+                    aGc.BitBltMasked( bmpPos, colorBitmap, bmpRect, icon->Mask(), ETrue );
+                    }
+                }
+            }
+        }
+    
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------
+// CCalenMonthCellListBoxData::LastSubCell
+// an ordinal number of last subcell of cell
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCalenMonthCellListBoxData::LastSubCell() const
+    {
+    TRACE_ENTRY_POINT;
+    
+    TRACE_EXIT_POINT;
+    return KMonthCells;
+    }
+
+// ---------------------------------------------------------
+// CCalenMonthCellListBoxData::Draw
+// Draw a cell of Month Grid
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalenMonthCellListBoxData::Draw(TListItemProperties aProperties, CWindowGc& aGc, const TDesC* aText, const TRect& aRect, TBool aHighlight, const TColors& aColors) const
+    {
+    TRACE_ENTRY_POINT;
+
+    TRect aItemRect(aRect);
+
+    // draw skinned highlight
+    TBool highlightDrawn = EFalse;
+
+    if(aHighlight)
+        {
+        MAknsSkinInstance *skin = AknsUtils::SkinInstance();
+        MAknsControlContext *cc = AknsDrawUtils::ControlContext( Control() );
+
+        if(!cc) cc = SkinBackgroundContext();
+
+        if(cc)
+            {
+            aGc.SetPenStyle( CGraphicsContext::ENullPen );
+
+            if( HighlightAnim() )
+                {
+                AboutToDrawHighlightAnim();
+                if( HighlightAnim() )
+                    highlightDrawn = HighlightAnim()->Render( aGc, aItemRect );
+                }
+
+            // Either animation does not exist or drawing it failed
+            if( !highlightDrawn )
+                {
+                TAknLayoutRect grid_highlight_pane_cp08;
+                grid_highlight_pane_cp08.LayoutRect( aItemRect /*P:cell_cale_month_pane*/, AknLayoutScalable_Apps::grid_highlight_pane_cp08().LayoutLine() );
+
+                TAknLayoutRect cell_highlight_pane_g1;
+                cell_highlight_pane_g1.LayoutRect(
+                    grid_highlight_pane_cp08.Rect(),
+                    AknLayoutScalable_Avkon::cell_highlight_pane_g1().LayoutLine() );
+
+                highlightDrawn = AknsDrawUtils::DrawFrame( skin, aGc,
+                                                           grid_highlight_pane_cp08.Rect(), 
+                                                           cell_highlight_pane_g1.Rect(), 
+                                                           KAknsIIDQsnFrGrid, KAknsIIDQsnFrGridCenter );
+                }
+            }
+        }
+
+    // draw the actual items.
+    DrawFormatted(aProperties, aGc, aText, aItemRect, EFalse, aColors);
+
+    aGc.Reset();
+    
+    TRACE_EXIT_POINT;
+    }
+
+// End of File