--- a/uifw/AvKon/src/aknmessagequerycontrol.cpp Thu Aug 19 10:11:06 2010 +0300
+++ b/uifw/AvKon/src/aknmessagequerycontrol.cpp Tue Aug 31 15:28:30 2010 +0300
@@ -102,6 +102,10 @@
AKNTASHOOK_REMOVE();
AknsUtils::DeregisterControlPosition( iEdwin );
delete iEdwin;
+ if ( !AknLayoutUtils::PenEnabled() )
+ {
+ delete iSBFrame;
+ }
iLinkTextLocationArray.Close();
iLinkTextArray.Close();
delete iFullMessage;
@@ -110,12 +114,14 @@
EXPORT_C void CAknMessageQueryControl::ConstructFromResourceL( TResourceReader& aReader )
{
- CEikDialog* dlg;
- MopGetObject( dlg );
-
- if ( dlg )
+ if( CAknEnv::Static()->TransparencyEnabled() )
{
- dlg->Extension()->iPublicFlags.Set( CEikDialogExtension::EClipChildControlRect );
+ CEikDialog* dlg;
+ MopGetObject( dlg );
+ if ( dlg )
+ {
+ dlg->Extension()->iPublicFlags.Set( CEikDialogExtension::EClipChildControlRect );
+ }
}
TPtrC messageLabel = aReader.ReadTPtrC();
@@ -135,7 +141,7 @@
TPtr message( msgBuf->Des() );
if( iListQLayout )
{
- TruncateTextForListQLayoutL( message );
+ TruncateTextForListQLayout( message );
iEdwin->SetTextL( &message );
LayoutEditorL();
}
@@ -165,7 +171,11 @@
{
delete iEdwin;
iEdwin = NULL;
- iSBFrame = NULL;
+ if ( !AknLayoutUtils::PenEnabled() )
+ {
+ delete iSBFrame;
+ iSBFrame = NULL;
+ }
iEdwin = new ( ELeave ) CEikRichTextEditor( TGulBorder::ENone );
iEdwin->SetContainerWindowL( *this );
@@ -179,7 +189,6 @@
iEdwin->SetAvkonWrap( ETrue );
iEdwin->SetFocus( EFalse );
iEdwin->SetNonFocusing();
- iEdwin->EnableKineticScrollingL(ETrue);
}
void CAknMessageQueryControl::LayoutEditorL()
@@ -419,26 +428,112 @@
}
void CAknMessageQueryControl::UpdateScrollIndicatorL()
- {
+ {
if ( iNumberOfLines <= iLinesPerPage )
{
return;
}
-
if ( !iSBFrame )
{
- // edwin will make scrollbar and also observe it
- iSBFrame = iEdwin->CreateScrollBarFrameL();
+ if ( AknLayoutUtils::PenEnabled())
+ {
+ // Edwin will make scrollbar and also observe it
+ iSBFrame= iEdwin->CreateScrollBarFrameL();
+ }
+ else
+ {
+ iSBFrame=new( ELeave ) CEikScrollBarFrame( this, NULL, ETrue );
+ }
// Check which type of scrollbar is to be shown
- iSBFrame->CreateDoubleSpanScrollBarsL(EFalse, EFalse, ETrue, EFalse );
- iSBFrame->SetTypeOfVScrollBar( CEikScrollBarFrame::EDoubleSpan );
- iSBFrame->DrawBackground( EFalse, EFalse );
- iSBFrame->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
- CEikScrollBarFrame::EAuto );
+ CAknAppUiBase* appUi = iAvkonAppUi;
+ if ( AknLayoutUtils::DefaultScrollBarType( appUi ) == CEikScrollBarFrame::EDoubleSpan )
+ {
+ iSBFrame->CreateDoubleSpanScrollBarsL(EFalse, EFalse, ETrue, EFalse ); // non-window owning scrollbar
+ iSBFrame->SetTypeOfVScrollBar( CEikScrollBarFrame::EDoubleSpan );
+ if( CAknEnv::Static()->TransparencyEnabled() )
+ {
+ iSBFrame->DrawBackground( EFalse, EFalse );
+ }
+ }
+ else
+ {
+ // For EArrowHead type scrollbar
+ iSBFrame->SetTypeOfVScrollBar( CEikScrollBarFrame::EArrowHead );
+ }
+ iSBFrame->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto );
+ }
+ if ( !iSBFrame )
+ {
+ return;
}
-
- iEdwin->UpdateScrollBarsL();
+
+ if ( !AknLayoutUtils::PenEnabled() )
+ {
+ TEikScrollBarModel hSbarModel;
+ TEikScrollBarModel vSbarModel;
+ vSbarModel.iThumbPosition = iTopLine;
+ vSbarModel.iScrollSpan = iNumberOfLines;
+ vSbarModel.iThumbSpan = iLinesPerPage;
+
+ TEikScrollBarFrameLayout layout;
+ TRect rect( Rect() );
+
+ if ( iSBFrame->TypeOfVScrollBar() == CEikScrollBarFrame::EDoubleSpan )
+ {
+ // For EDoubleSpan type scrollbar
+ TAknDoubleSpanScrollBarModel hDsSbarModel( hSbarModel );
+ TAknDoubleSpanScrollBarModel vDsSbarModel( vSbarModel );
+ layout.iTilingMode = TEikScrollBarFrameLayout::EInclusiveRectConstant;
+
+ TAknLayoutRect listScrollPopupInfoPane;
+ listScrollPopupInfoPane.LayoutRect( LayoutRect(), AknLayoutScalable_Avkon::listscroll_popup_info_pane() );
+ TRect listScrollPopupInfoPaneRect( listScrollPopupInfoPane.Rect() );
+ CAknPopupHeadingPane* heading = NULL;
+ if( iListQLayout )
+ {
+ CAknListQueryDialog* dlg;
+ MopGetObject( dlg );
+ if( dlg )
+ {
+ heading = dlg->QueryHeading();
+ }
+ }
+ else
+ {
+ CEikDialog* dlg;
+ MopGetObject( dlg );
+ if( dlg )
+ {
+ heading = (CAknPopupHeadingPane*)dlg->ControlOrNull(EAknMessageQueryHeaderId);
+ }
+ }
+
+ if( heading && heading->PromptText() == KNullDesC )
+ {
+ TAknLayoutRect headingPaneLayout;
+ headingPaneLayout.LayoutRect( LayoutRect(), AknLayoutScalable_Avkon::heading_pane_cp5() );
+ listScrollPopupInfoPaneRect.Move( 0, -1 * headingPaneLayout.Rect().Height() );
+ }
+ AknLayoutUtils::LayoutVerticalScrollBar( iSBFrame, listScrollPopupInfoPaneRect, AknLayoutScalable_Avkon::scroll_pane_cp7().LayoutLine() );
+
+ TRect inclusiveRect( Rect() );
+ TRect clientRect( Rect() );
+
+ iSBFrame->TileL( &hDsSbarModel,&vDsSbarModel,clientRect,inclusiveRect,layout );
+ iSBFrame->SetVFocusPosToThumbPos( vDsSbarModel.FocusPosition() );
+ }
+ else
+ {
+ // For EArrowHead type scrollbar
+ iSBFrame->TileL( &hSbarModel,&vSbarModel,rect,rect,layout );
+ iSBFrame->SetVFocusPosToThumbPos( vSbarModel.iThumbPosition );
+ }
+ }
+ else
+ {
+ iEdwin->UpdateScrollBarsL();
+ }
}
EXPORT_C void CAknMessageQueryControl::Draw( const TRect& /*aRect*/ ) const
@@ -450,24 +545,28 @@
CWindowGc& gc=SystemGc();
TRect messageQueryControlRect( Rect() );
- TRect popupRect(LayoutRect());
+ TRect popupRect = TRect(LayoutRect());
- TRect backgroundRect(messageQueryControlRect.iTl, popupRect.iBr);
+ TRect backgroundRect = TRect(messageQueryControlRect.iTl, popupRect.iBr);
MAknsSkinInstance* skin = AknsUtils::SkinInstance();
MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
- TRegionFix<4> clipReg;
- clipReg.AddRect( backgroundRect );
-
- if ( iEdwin )
+ if( CAknEnv::Static()->TransparencyEnabled() )
{
- clipReg.SubRect( iEdwin->Rect() );
+ TRegionFix<4> clipReg;
+ clipReg.AddRect(backgroundRect);
+ if (iEdwin)
+ {
+ clipReg.SubRect(iEdwin->Rect());
+ }
+ gc.SetClippingRegion(clipReg);
+ AknsDrawUtils::Background( skin, cc, this, gc, backgroundRect, KAknsDrawParamNoClearUnderImage );
+ gc.CancelClippingRegion();
}
-
- gc.SetClippingRegion( clipReg );
- AknsDrawUtils::Background( skin, cc, this, gc, backgroundRect,
- KAknsDrawParamNoClearUnderImage );
- gc.CancelClippingRegion();
+ else
+ {
+ AknsDrawUtils::Background( skin, cc, this, gc, backgroundRect );
+ }
}
TInt CAknMessageQueryControl::CurrentLink() const
@@ -682,7 +781,7 @@
/**
* CAknMessageQueryControl::HandlePointerEventL()
*
- * Transfers pointerevent to editor control.
+ * Transfers pointerevent to editor control and updates it's scroll bar.
* Checks for the object destruction after the pointer event handling.
*/
void CAknMessageQueryControl::HandlePointerEventL( const TPointerEvent& aPointerEvent )
@@ -692,21 +791,21 @@
* The local @c destroyed variable keeps track of the object destroyed state.
*/
TBool destroyed = EFalse;
-
- iExtension->iDestroyedPtr = &destroyed;
-
- // Call default implementation of HandlePointerEventL to transfer event to correct control.
- CAknControl::HandlePointerEventL( aPointerEvent );
-
- if ( !destroyed )
+ if (AknLayoutUtils::PenEnabled() )
{
- iExtension->iDestroyedPtr = NULL;
+ iExtension->iDestroyedPtr = &destroyed;
+ // Call default implementation of HandlePointerEventL to transfer event to correct control.
+ CAknControl::HandlePointerEventL( aPointerEvent );
+ if ( !destroyed )
+ {
+ iExtension->iDestroyedPtr = NULL;
+ iEdwin->UpdateScrollBarsL();
+ }
+ else
+ {
+ return;
+ }
}
- else
- {
- return;
- }
-
TBool highlightAfter = LinkHighLighted();
if( aPointerEvent.iType == TPointerEvent::EButton1Down &&
highlightBefore == highlightAfter && highlightAfter )
@@ -798,7 +897,7 @@
return grabbing;
}
-void CAknMessageQueryControl::TruncateTextForListQLayoutL( TDes& aMessage )
+void CAknMessageQueryControl::TruncateTextForListQLayout( TDes& aMessage )
{
if( !iListQLayout )
return;
@@ -829,7 +928,7 @@
TPtr message( msgBuf->Des() );
iEdwin->SetTextL( &message );
LayoutEditorL();
- TruncateTextForListQLayoutL( message );
+ TruncateTextForListQLayout( message );
iEdwin->SetTextL( &message );
CleanupStack::PopAndDestroy( msgBuf ); // After all usages of message
iNumberOfLines = iEdwin->TextLayout()->NumFormattedLines();
@@ -898,8 +997,7 @@
TAknMultiLineTextLayout multilineLayout = TAknTextComponentLayout::Multiline(textComponentLayoutArray);
AknLayoutUtils::LayoutEdwin( iEdwin, listPopupInfoPane.Rect(),
multilineLayout, EAknsCIQsnTextColorsCG19 );
- // Use list_popup_info_pane as editor's rect
- iEdwin->SetRect( listPopupInfoPane.Rect() );
+ //iEdwin->SetRect( listPopupInfoPane.Rect() );
textComponentLayoutArray.Close();
iEdwin->SetBorder( TGulBorder::ENone );