--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imstutils/imconversationview/imcvuiapp/src/cimcvapptextviewcontrol.cpp Wed Sep 01 12:33:36 2010 +0100
@@ -0,0 +1,866 @@
+/*
+* 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:
+* Export help related files.
+*
+*/
+
+
+// INCLUDE FILES
+#include "cimcvapptextviewcontrol.h"
+
+#include "cimcvappcustomdraw.h"
+#include <frmtview.h> // CTextView
+#include <AknUtils.h>
+#include <avkon.mbg>
+#include <aknappui.h>
+#include "mimcvapptextview.h"
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknsBasicBackgroundControlContext.h>
+#include <AknsDrawUtils.h>
+#include "imcvlogger.h"
+#include "imcvuiapputils.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::CIMCVAppTextViewControl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CIMCVAppTextViewControl::CIMCVAppTextViewControl()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::ConstructL( const TRect& aRect,
+ const CCoeControl& aParent,
+ MLayDoc* aTextLayout )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::ConstructL() start") );
+ CreateWindowL( &aParent );
+
+ // get the drawing device
+ CWindowGc& gc = SystemGc();
+ CBitmapDevice* device = static_cast<CBitmapDevice*>( gc.Device() );
+
+ // create text layout and text view
+
+ iViewRect = aRect;
+ iClipping = new ( ELeave ) RRegion( aRect );
+
+ iLayout = CTextLayout::NewL( aTextLayout, iViewRect.Width() );
+ iTextView = CTextView::NewL( iLayout, iViewRect,
+ device, device, &Window(), NULL, &iCoeEnv->WsSession() );
+
+ iTextView->EnableFlickerFreeRedraw();
+ iTextView->SetOpaque( ETrue );
+
+ // create our background drawer
+ iCustomDraw = new( ELeave )CIMCVAppCustomDraw( iViewRect );
+ iLayout->SetCustomDraw( iCustomDraw );
+
+ // and scrollbar
+ if( IMCVUiAppUtils::PenEnabled() )
+ {
+ // Observer
+ iScrollBar = new( ELeave )CEikScrollBarFrame( this, this );
+ }
+ else
+ {
+ // No observer
+ iScrollBar = new( ELeave )CEikScrollBarFrame( this, NULL );
+ }
+
+
+ if (AknLayoutUtils::DefaultScrollBarType(iAvkonAppUi) == CEikScrollBarFrame::EDoubleSpan)
+ {
+
+ // For EDoubleSpan type scrollbar
+ // If pen is supported, SB needs to own a window
+ iScrollBar->CreateDoubleSpanScrollBarsL( IMCVUiAppUtils::PenEnabled(),
+ EFalse, ETrue, EFalse );
+ iScrollBar->SetTypeOfVScrollBar(CEikScrollBarFrame::EDoubleSpan);
+
+ }
+ else
+ {
+ // For EArrowHead type scrollbar
+ iScrollBar->SetTypeOfVScrollBar(CEikScrollBarFrame::EArrowHead);
+ }
+ iScrollBar->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EOn );
+ TEikScrollBarModel vSbarModel;
+ vSbarModel.iThumbPosition = 0; // current position
+ vSbarModel.iScrollSpan = 0; // how many items
+ vSbarModel.iThumbSpan = 0; // ignored
+
+ iScrollBar->Tile( &vSbarModel );
+ iScrollBar->SetVFocusPosToThumbPos( vSbarModel.iThumbPosition );
+
+ iBgContext = CAknsBasicBackgroundControlContext::NewL(
+ KAknsIIDQsnBgAreaMain, Rect(), ETrue );
+ iCustomDraw->SetBackgroundContext( iBgContext, this );
+
+ // set extensions
+ ActivateL();
+
+ // we're ready
+ static_cast<CCoeAppUi*>( iEikonEnv->AppUi() )->AddToStackL( this );
+ iAddedToStack = ETrue;
+
+ // Enable draging
+ if ( DrawableWindow() && IMCVUiAppUtils::PenEnabled() )
+ {
+ EnableDragEvents();
+ Window().SetPointerGrab( ETrue );
+ }
+
+ // Enable draging
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::ConstructL() end") );
+ }
+
+
+// Destructor
+CIMCVAppTextViewControl::~CIMCVAppTextViewControl()
+ {
+ if( iAddedToStack )
+ {
+ static_cast<CCoeAppUi*>( iEikonEnv->AppUi() )->RemoveFromStack( this );
+ }
+
+ delete iScrollBar;
+ delete iCustomDraw;
+ delete iTextView;
+ delete iLayout;
+
+ delete iBgContext;
+ if( iClipping )
+ {
+ iClipping->Destroy();
+ iClipping = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::UpdateScrollBarsL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::UpdateScrollBarsL( TBool aScrollDraw /*ETrue*/ )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::UpdateScrollBarsL() start") );
+ TInt height = iLayout->FormattedHeightInPixels();
+ TInt span = iViewRect.Height();
+ TInt pos = iLayout->PixelsAboveBand();
+
+ if( span < 0 )
+ {
+ span = 0;
+ }
+
+ if( pos < 0 )
+ {
+ pos = 0;
+ }
+
+ TEikScrollBarModel vSbarModel;
+ vSbarModel.iThumbPosition = pos; // current position
+ vSbarModel.iScrollSpan = height; // total length
+ vSbarModel.iThumbSpan = span; // bar length
+
+ // Double span
+ if( iScrollBar )
+ {
+ if ( iScrollBar->TypeOfVScrollBar() == CEikScrollBarFrame::EDoubleSpan )
+ {
+ TAknDoubleSpanScrollBarModel vDsModel( vSbarModel );
+ iScrollBar->Tile( &vDsModel );
+ iScrollBar->SetVFocusPosToThumbPos( vDsModel.FocusPosition());
+ }
+ // ArrowHead
+ else
+ {
+ iScrollBar->Tile( &vSbarModel );
+ iScrollBar->SetVFocusPosToThumbPos( vSbarModel.iThumbPosition );
+ }
+ if( aScrollDraw )
+ {
+ iScrollBar->DrawScrollBarsNow();
+ }
+ }
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::UpdateScrollBarsL() end") );
+ }
+
+void CIMCVAppTextViewControl::UpdateChatViewL ()
+{
+ UpdateViewL ();
+}
+
+
+void CIMCVAppTextViewControl:: SmileyDialogLaunched (TBool aLaunched)
+{
+ iSmileyDialogLaunched = aLaunched;
+}
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::UpdateViewL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::UpdateViewL()
+ {
+ // do not refresh if smiley dialog is launched.
+ if (iSmileyDialogLaunched)
+ return;
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::UpdateViewL() start") );
+ iTextView->FormatTextL();
+ iTextView->SetSelectionVisibilityL( EFalse );
+ TCursorSelection sel;
+ // Don't scroll if some item is highlighted
+ if ( !iIsHighlighted )
+ {
+ sel = TCursorSelection( iLayout->DocumentLength(), 0 );
+ ScrollVisibleL( sel, ETrue );
+ }
+ else
+ {
+ sel = iTextView->Selection();
+ ScrollVisibleL( sel, ETrue );
+ }
+
+ DrawDeferred();
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::UpdateViewL() end") );
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::SetHighlighted
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::SetHighlighted( TBool aIsHighlighted )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::SetHighlighted() start") );
+ iIsHighlighted = aIsHighlighted;
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::SetHighlighted() end") );
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::ScrollBarFrame
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const CEikScrollBarFrame* CIMCVAppTextViewControl::ScrollBarFrame()
+ {
+ return iScrollBar;
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::ScrollBarFrame
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMCVAppTextViewControl::FindDocPos( TPoint aPoint )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::FindDocPos() start") );
+ TTmPosInfo2 posInfo;
+ TBool found = EFalse;
+
+ TRAPD( err, found = iTextView->FindXyPosL( aPoint, posInfo ) );
+ if ( err )
+ {
+ CActiveScheduler::Current()->Error( err );
+ // Return not found
+ return KErrNotFound;
+ }
+
+ if ( found )
+ {
+
+ return posInfo.iDocPos.iPos;
+ }
+ // not found
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::FindDocPos() end") );
+ return KErrNotFound;
+ }
+
+// ---------------------------------------------------------
+// CIMCVAppTextViewControl::MopSupplyObject
+//
+// ---------------------------------------------------------
+//
+TTypeUid::Ptr CIMCVAppTextViewControl::MopSupplyObject( TTypeUid aId )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::MopSupplyObject() start") );
+ if ( aId.iUid == MAknsControlContext::ETypeId )
+ {
+ return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+ }
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::MopSupplyObject() end") );
+ return CCoeControl::MopSupplyObject( aId );
+ }
+
+// ---------------------------------------------------------
+// CIMCVAppTextViewControl::HandleScrollEventL
+//
+// ---------------------------------------------------------
+//
+void CIMCVAppTextViewControl::HandleScrollEventL( CEikScrollBar* /*aScrollBar*/,
+ TEikScrollEvent aEventType )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::HandleScrollEventL() start") );
+ switch( aEventType )
+ {
+ case EEikScrollUp:
+ {
+ ScrollLinesL( 1 );
+ break;
+ }
+ case EEikScrollDown:
+ {
+ ScrollLinesL( -1 );
+ break;
+ }
+ case EEikScrollPageUp:
+ {
+ iTextView->ScrollDisplayL( TCursorPosition::EFPageUp );
+ UpdateScrollBarsL();
+ DrawDeferred();
+ break;
+ }
+ case EEikScrollPageDown:
+ {
+ iTextView->ScrollDisplayL( TCursorPosition::EFPageDown );
+ UpdateScrollBarsL();
+ DrawDeferred();
+ break;
+ }
+ case EEikScrollThumbDragVert:
+ {
+ // Get position values from scrollbar
+ const TEikScrollBarModel* model =
+ iScrollBar->VerticalScrollBar()->Model();
+ TInt thumb = model->iThumbPosition;
+ if( CEikScrollBarFrame::EDoubleSpan ==
+ iScrollBar->TypeOfVScrollBar() )
+ {
+ const TAknDoubleSpanScrollBarModel* dsModel =
+ static_cast <const TAknDoubleSpanScrollBarModel*>( model );
+ thumb = dsModel->FocusPosition();
+ }
+
+ // Scroll the textview according to scrollbar
+ TViewYPosQualifier yPosQua;
+ yPosQua.SetHotSpot( TViewYPosQualifier::EFViewTopOfLine );
+ TInt topPos = -thumb;
+ iTextView->SetViewL( 0, topPos, yPosQua );
+ break;
+ }
+ case EEikScrollThumbReleaseVert:
+ {
+ // Nothing to do here because EEikScrollThumbDragVert gets
+ // the scrollbar in correct state
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::HandleScrollEventL() end") );
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::OfferKeyEventL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CIMCVAppTextViewControl::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::OfferKeyEventL() start") );
+ // Commented because it generates so much log
+ // CHAT_DP( D_CHAT_LIT("CIMCVAppTextViewControl::OfferKeyEventL %d, type %d"),
+ // aKeyEvent, aType )
+
+ if( aType != EEventKey )
+ {
+ return EKeyWasNotConsumed;
+ }
+
+ switch( aKeyEvent.iCode )
+ {
+ case EKeyDownArrow:
+ {
+ //scroll lines one line down
+ ScrollLinesL( -1 );
+ return EKeyWasConsumed;
+
+ }
+ case EKeyUpArrow:
+ {
+ //scroll lines one line up
+ ScrollLinesL( 1 );
+ return EKeyWasConsumed;
+
+ }
+ default:
+ {
+ // No handling for other events
+ break;
+ }
+ }
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::OfferKeyEventL() end") );
+ return EKeyWasNotConsumed;
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::HandlePointerEventL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::HandlePointerEventL(
+ const TPointerEvent& aPointerEvent )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::HandlePointerEventL() start") );
+
+ if( !IMCVUiAppUtils::PenEnabled() )
+ {
+ return;
+ }
+
+ switch( iPenType )
+ {
+ case EPenForwardToChild:
+ {
+ // normal (CCoeControl) behaviour
+ CCoeControl::HandlePointerEventL( aPointerEvent );
+ break;
+ }
+ case EPenForwardToParent:
+ {
+ // forward all to parent
+ if( Parent() )
+ {
+ Parent()->HandlePointerEventL( aPointerEvent );
+ }
+ break;
+ }
+ // Process event ourself
+ case EPenProcessEvent:
+ {
+ ProcessStylusEventL( aPointerEvent );
+ break;
+ }
+ case EPenIgnoreEvent:
+ {
+ // Ignore all
+ break;
+ }
+ default:
+ {
+ // Can't be
+ break;
+ }
+ }
+
+
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::HandlePointerEventL() end") );
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::Draw
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::Draw( const TRect& aRect ) const
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::Draw() start") );
+ CWindowGc& gc = SystemGc();
+
+ // Clip text control and scrollbar to prevent flickering
+ gc.SetClippingRegion( *iClipping );
+
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ if (iBgContext)
+ {
+ // Draw the skin background
+ AknsDrawUtils::Background(
+ skin, iBgContext, this, gc, aRect);
+ }
+ else
+ {
+ // clear the area
+ gc.SetBrushColor( iEikonEnv->ControlColor( EColorWindowBackground, *this ) );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+ gc.Clear( aRect );
+ }
+
+ TRAP_IGNORE( iTextView->DrawL( aRect ) );
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::Draw() end") );
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::SizeChanged
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::SizeChanged()
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::SizeChanged() start") );
+ TAknWindowLineLayout rpLayout( AknLayoutScalable_Apps::list_im_pane( 3 ) );
+ TAknLayoutRect rpLayoutRect;
+ rpLayoutRect.LayoutRect( Rect(), rpLayout );
+
+ // update rects
+ iViewRect = rpLayoutRect.Rect();
+
+ iCustomDraw->SetRect( iViewRect );
+ iTextView->SetViewRect( iViewRect );
+ iLayout->SetWrapWidth( iViewRect.Width() );
+
+ if (AknLayoutUtils::DefaultScrollBarType(iAvkonAppUi) == CEikScrollBarFrame::EDoubleSpan)
+ {
+ // For EDoubleSpan type scrollbar
+ TAknWindowLineLayout sbLayout( AknLayoutScalable_Apps::scroll_pane_cp07( 3 ) );
+ AknLayoutUtils::LayoutVerticalScrollBar( iScrollBar, Rect(), sbLayout );
+ TAknLayoutRect sbLayoutRect;
+ sbLayoutRect.LayoutRect( Rect(), sbLayout );
+ }
+ if ( iBgContext )
+ {
+ iBgContext->SetRect( Parent()->Rect() );
+ iBgContext->SetParentPos( Parent()->PositionRelativeToScreen() );
+ }
+
+ // Setup clipping region
+ iClipping->Clear();
+ iClipping->AddRect( Rect() );
+
+ // clip text control
+ iClipping->SubRect( iTextView->ViewRect() );
+
+ // clip scrollbar
+ if ( iScrollBar->TypeOfVScrollBar() == CEikScrollBarFrame::EDoubleSpan)
+ {
+ //fix for the tsw bug id:EKYT-7B68G9 //start.
+ TAknWindowLineLayout sbLayout( AknLayoutScalable_Apps::scroll_pane_cp07( 3 ) );
+ AknLayoutUtils::LayoutVerticalScrollBar( iScrollBar, Rect(), sbLayout );
+ TAknLayoutRect sbLayoutRect;
+ sbLayoutRect.LayoutRect( Rect(), sbLayout );
+ iClipping->SubRect( sbLayoutRect.Rect() );
+ //fix for the tsw bug id:EKYT-7B68G9 //end.
+ }
+
+ // and update view
+ TRAPD( err, ScrollLinesL( 0 );
+ UpdateViewL() );
+ if( err != KErrNone )
+ {
+ CActiveScheduler::Current()->Error( err );
+ }
+
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::SizeChanged() end") );
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::HandleFormatChangedL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::HandleFormatChangedL( TCursorSelection& aChanged,
+ TBool aPreserveFocus /* = EFalse */ )
+ {
+ if (iSmileyDialogLaunched)
+ return;
+
+ // rich text has changed, inform viewer
+ iTextView->SetSelectionVisibilityL( EFalse );
+
+ if( aPreserveFocus )
+ {
+ // Preserve focus
+ TCursorSelection sel = iTextView->Selection();
+ // This seems to be the only method which doesn't change focus.
+ // --> so it's possible to preserve focus without flicker
+ iTextView->HandleGlobalChangeNoRedrawL();
+ ScrollVisibleL( sel, EFalse );
+ DrawDeferred();
+
+ }
+ else
+ {
+ // Move focus along with changes
+ iTextView->HandleRangeFormatChangeL( aChanged, ETrue );
+ //ScrollVisibleL( aChanged, ETrue );
+ UpdateViewL ();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::HandleInsertDeleteL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::HandleInsertDeleteL( TCursorSelection& aChanged,
+ TInt aDeletedChars )
+ {
+ if (iSmileyDialogLaunched)
+ return;
+
+ // inform about insertion or deletion
+ iTextView->SetSelectionVisibilityL( EFalse );
+ iTextView->HandleInsertDeleteL( aChanged, aDeletedChars );
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::HandleAdditionL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::HandleAdditionL( TBool aFirst,
+ TCursorSelection& aSelection,
+ TBool aTop )
+ {
+ // inform about addition
+ if( aFirst )
+ {
+ iTextView->FormatTextL();
+ }
+ else
+ {
+ iTextView->HandleAdditionalCharactersAtEndL();
+ }
+
+ // if smiley dialog is launched, then dont draw.
+ if (iSmileyDialogLaunched)
+ return;
+
+ ScrollVisibleL( aSelection, aTop );
+ DrawDeferred();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::ScrollVisibleL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::ScrollVisibleL( TCursorSelection& aSelection, TBool aTop )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::ScrollVisibleL() start") );
+ // if smiley dialog is launched, then dont draw.
+ if (iSmileyDialogLaunched)
+ return;
+
+
+ TCursorSelection sel( aSelection );
+ if( !ParagraphFits( sel.LowerPos() ) )
+ {
+ // selection doesn't fit to screen
+ TInt pos( aTop ? aSelection.LowerPos() : aSelection.HigherPos() );
+ sel.SetSelection( pos, pos );
+ }
+
+ // scroll selection to screen
+ iTextView->SetSelectionVisibilityL( EFalse );
+ iTextView->SetSelectionL( sel );
+
+ // and update scroll bars
+ UpdateScrollBarsL();
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::ScrollVisibleL() end") );
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::ScrollSelectionL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TCursorSelection CIMCVAppTextViewControl::ScrollSelection()
+ {
+ return iTextView->Selection();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::ScrollLinesL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::ScrollLinesL( TInt aAmount )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::ScrollLinesL() start"));
+ iLayout->ScrollLinesL( aAmount );
+ UpdateScrollBarsL();
+ DrawDeferred();
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::ScrollLinesL() end") );
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::IsVisible
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CIMCVAppTextViewControl::IsVisible( TInt aPos )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::IsVisible() start") );
+ TTmDocPos pos( aPos, ETrue );
+ TTmLineInfo lineInfo;
+
+ if( !iLayout->PosInBand( pos, &lineInfo ) )
+ {
+ // current position outside
+ return EFalse;
+ }
+
+ if( !ParagraphFits( aPos ) )
+ {
+ // paragraph doesn't fit to screen
+ // extend scrolling one line up and down
+
+ // iLineNumber starts from 0 and FirstCharOnLine assumes first line to be 1
+ TInt lineNo( lineInfo.iLineNumber + 1 );
+
+ // check previous line (if it exists)
+ if( lineNo > 1 )
+ {
+ pos.iPos = iLayout->FirstCharOnLine( lineNo - 1 );
+
+ if( !iLayout->PosInBand( pos ) )
+ {
+ // previous line outside
+ return EFalse;
+ }
+ }
+
+ // check next line
+ pos.iPos = iLayout->FirstCharOnLine( lineNo + 1 );
+
+ return iLayout->PosInBand( pos );
+ }
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::IsVisible() end") );
+ return ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::ParagraphFits
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CIMCVAppTextViewControl::ParagraphFits( TInt aPos )
+ {
+ return iLayout->ParagraphHeight( aPos ) <= iViewRect.Height();
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::RedrawL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::Redraw()
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::Redraw() start" ));
+ DrawDeferred();
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::Redraw() end" ));
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::CountComponentControls
+// -----------------------------------------------------------------------------
+//
+TInt CIMCVAppTextViewControl::CountComponentControls() const
+ {
+ if (iScrollBar && iScrollBar->TypeOfVScrollBar() == CEikScrollBarFrame::EDoubleSpan)
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::ComponentControl
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CIMCVAppTextViewControl::ComponentControl(TInt aIndex) const
+ {
+ if (aIndex == 0 && iScrollBar &&
+ iScrollBar->TypeOfVScrollBar() == CEikScrollBarFrame::EDoubleSpan)
+ {
+ return iScrollBar->VerticalScrollBar();
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::SetPenBehaviour
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::SetPenBehaviour( TPenBehaviour aPen )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::SetPenBehaviour() start" ));
+ iPenType = aPen;
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::SetPenBehaviour() end" ));
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::PenBehaviour
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+MIMCVAppTextView::TPenBehaviour CIMCVAppTextViewControl::PenBehaviour()
+ {
+ return iPenType;
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::ProcessStylusEventL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::ProcessStylusEventL(
+ const TPointerEvent& /*aPointerEvent*/ )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::ProcessStylusEventL() start" ));
+ // nothing to do. Let derived classes to handle text selection.
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::ProcessStylusEventL() end" ));
+ }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppTextViewControl::HandleGlobalChangeNoRedrawL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppTextViewControl::HandleGlobalChangeNoRedrawL(
+ TViewYPosQualifier aYPosQualifier /*= TViewYPosQualifier()*/ )
+ {
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::HandleGlobalChangeNoRedrawL() start" ));
+ iTextView->HandleGlobalChangeNoRedrawL( aYPosQualifier );
+ IM_CV_LOGS(TXT("CIMCVAppTextViewControl::HandleGlobalChangeNoRedrawL() end" ));
+ }
+
+
+// End of File