uifw/EikStd/coctlsrc/EIKLBX.CPP
branchRCL_3
changeset 18 0aa5fbdfbc30
parent 16 71dd06cfe933
child 23 3d340a0166ff
--- a/uifw/EikStd/coctlsrc/EIKLBX.CPP	Wed Apr 14 16:14:00 2010 +0300
+++ b/uifw/EikStd/coctlsrc/EIKLBX.CPP	Tue Apr 27 16:55:05 2010 +0300
@@ -2887,7 +2887,7 @@
         TEikScrollBarFrameLayout layout;
         CreateScrollBarFrameLayout(layout);
         TBool sizeChanged=iSBFrame->TileL(&hSbarModel, &vSbarModel, clientRect, inclusiveRect, layout);
-        if (iListBoxExt->UpdateScrollBarsColors())
+        if ( iListBoxExt && iListBoxExt->UpdateScrollBarsColors() )
             UpdateScrollBarsColors();
         if (!sizeChanged)
             return;
@@ -3014,11 +3014,7 @@
         _AKNTRACE_FUNC_EXIT;
         return;
         }
-    if( !iListBoxExt )
-        {
-        _AKNTRACE_FUNC_EXIT;
-        return;
-        }
+    
     CEikButtonGroupContainer *bgc;
     CCoeControl* MSK( NULL );
     CEikCba* cba( NULL );
@@ -3056,16 +3052,22 @@
         // marking still works even MSK isn't changed
         if ( err )
             {
-            iListBoxExt->iSelectionModeEnabled = EFalse;
+            if ( iListBoxExt )
+                {
+                iListBoxExt->iSelectionModeEnabled = EFalse;
+                }
             _AKNTRACE_FUNC_EXIT;
             return;
             }
         cba->DrawNow();
-        iListBoxExt->iSelectionModeEnabled = ETrue;
+        if ( iListBoxExt )
+            {
+            iListBoxExt->iSelectionModeEnabled = ETrue;
+            }
         }
 
     // remove stacked MSK
-    if( !aEnable && iListBoxExt->iSelectionModeEnabled )
+    if( !aEnable && iListBoxExt && iListBoxExt->iSelectionModeEnabled )
         {
         if( ( MSK && cba->ControlId( MSK ) == EAknSoftkeyMark ) ||
             ( MSK && cba->ControlId( MSK ) == EAknSoftkeyUnmark ) )
@@ -3074,11 +3076,13 @@
             }
         iListBoxExt->iSelectionModeEnabled = EFalse; // just in case
         }
-        
-    TInt count = iListBoxExt->iSelectionObservers.Count();
-    for ( int i=0; i < count; i++ )
-        {
-        iListBoxExt->iSelectionObservers[i]->SelectionModeChanged( this, aEnable );
+    if ( iListBoxExt )
+        {
+        TInt count = iListBoxExt->iSelectionObservers.Count();
+        for ( int i=0; i < count; i++ )
+            {
+            iListBoxExt->iSelectionObservers[i]->SelectionModeChanged( this, aEnable );
+            }
         }
     _AKNTRACE_FUNC_EXIT;
     }
@@ -3098,7 +3102,7 @@
     iView->ClearFlags(CListBoxView::EItemCountModified);
 
 
-    if ( iListBoxExt->iLongTappedItem != KErrNotFound )
+    if ( iListBoxExt && iListBoxExt->iLongTappedItem != KErrNotFound )
         {
         iListBoxExt->EnableHighlight( EFalse );
         }
@@ -3394,7 +3398,8 @@
             {
             selectionMode = CListBoxView::ENoSelection;
             UpdateMarkUnmarkMSKL();
-            if (IsSelectionMarkKeys(code, aKeyEvent.iScanCode, iListBoxExt->iWesternVariant)) 
+            if ( iListBoxExt 
+                 && IsSelectionMarkKeys( code, aKeyEvent.iScanCode, iListBoxExt->iWesternVariant ) ) 
                 {
                 __KeyDebug(ETrue, "SelectionMarkKey")
                 View()->ClearSelectionAnchorAndActiveIndex();
@@ -3405,7 +3410,7 @@
 
     // CAknGrid marking is implemeted in avkon.dll. But we still need to disable short
     // hash mark in here.
-    if ( iListBoxFlags & EMultipleSelection && 
+    if ( iListBoxExt && iListBoxFlags & EMultipleSelection && 
          iListBoxFlags & EShiftEnterMarks && aType == EEventKeyUp )
         {
         if ( aKeyEvent.iScanCode == EStdKeyLeftArrow ||
@@ -3617,7 +3622,8 @@
                     }
                 }
 		
-            if ( ScrollingDisabled() || ( !iListBoxExt->MovePhysicsCursorL( moveto, selectionMode ) ) )
+            if ( ScrollingDisabled() 
+                || ( iListBoxExt && !iListBoxExt->MovePhysicsCursorL( moveto, selectionMode ) ) )
                 {
                 iView->MoveCursorL(moveto, selectionMode);
                 }
@@ -3666,7 +3672,8 @@
                     }
                 }
 
-            if ( ScrollingDisabled() || ( !iListBoxExt->MovePhysicsCursorL( moveto, selectionMode ) ) )
+            if ( ScrollingDisabled() 
+                || ( iListBoxExt && !iListBoxExt->MovePhysicsCursorL( moveto, selectionMode ) ) )
                 {
                 iView->MoveCursorL(moveto, selectionMode);
                 }
@@ -3751,7 +3758,7 @@
     //
     if(switchMSK)
         {
-        if( selectionMode == CListBoxView::EDisjointMarkSelection )
+        if( iListBoxExt && selectionMode == CListBoxView::EDisjointMarkSelection )
             {
              // if hash and either up or down pressed -> no short marking
             iListBoxExt->iShortHashMark = EFalse;
@@ -3810,7 +3817,7 @@
     // only if a markable list is active, otherwise the simulated event might open 
     // the selected item, which we don't want.    
     if((iListBoxFlags & EMultipleSelection) && (iListBoxFlags & EShiftEnterMarks) &&
-        iListBoxExt->iWesternVariant &&
+        iListBoxExt && iListBoxExt->iWesternVariant &&
         iListBoxExt->iAknFepHashKeySelection && 
         iListBoxExt->iQwertyMode == EFalse && 
         aType == EEventKeyUp && aKeyEvent.iScanCode == EStdKeyHash &&
@@ -3912,10 +3919,17 @@
         case MEikListBoxObserver::EEventPanningStarted:
             {
             iItemDrawer->SetFlags( CListItemDrawer::EDisableMarquee );
-            if ( aEvent == MEikListBoxObserver::EEventFlickStarted )
-                iListBoxExt->SetFlickOngoing( ETrue );
-            else            
-                iListBoxExt->SetPanningOngoing( ETrue );
+            if ( iListBoxExt )
+                { 
+                if ( aEvent == MEikListBoxObserver::EEventFlickStarted )
+                    {
+                    iListBoxExt->SetFlickOngoing( ETrue );
+                    }
+                else 
+                    {
+                    iListBoxExt->SetPanningOngoing( ETrue );
+                    }
+                }
             break;
             }
             
@@ -3923,15 +3937,17 @@
         case MEikListBoxObserver::EEventPanningStopped:
             {
             iItemDrawer->ClearFlags( CListItemDrawer::EDisableMarquee );
-            if ( aEvent == MEikListBoxObserver::EEventFlickStopped )
-                {
-                iListBoxExt->SetFlickOngoing( EFalse );
-                }
-            else 
-                {
-                iListBoxExt->SetPanningOngoing( EFalse );
-                }
-            
+            if ( iListBoxExt )
+                { 
+                if ( aEvent == MEikListBoxObserver::EEventFlickStopped )
+                    {   
+                    iListBoxExt->SetFlickOngoing( EFalse );                    
+                    }
+                else 
+                    {
+                    iListBoxExt->SetPanningOngoing( EFalse );
+                    }
+                }            
             break;
             }
         }
@@ -3980,7 +3996,7 @@
 EXPORT_C void CEikListBox::HandlePhysicsScrollEventL( TInt aDeltaPixels )
     {    
     _AKNTRACE_FUNC_ENTER;
-    if ( iListBoxExt->iPhysics )
+    if ( iListBoxExt && iListBoxExt->iPhysics )
         {
         iListBoxExt->InitPhysicsL();
         
@@ -3995,7 +4011,7 @@
 EXPORT_C void CEikListBox::HandleScrollEventL(CEikScrollBar* aScrollBar,TEikScrollEvent aEventType)
     {
     _AKNTRACE_FUNC_ENTER;
-    if ( iListBoxExt->iSingleClickEnabled )
+    if ( iListBoxExt && iListBoxExt->iSingleClickEnabled )
         {
         iListBoxExt->EnableHighlight( EFalse );
         iView->DrawItem( iView->CurrentItemIndex() );
@@ -4138,17 +4154,17 @@
                 }
 #endif
             
-        if ( iListBoxExt->iPhysics )
+        if ( iListBoxExt && iListBoxExt->iPhysics )
             {
             iListBoxExt->InitPhysicsL();
             TInt deltaPixels = newThumbPos;
     
 #ifdef _DEBUG
-            RDebug::Print( _L( "CListBox::HandleScrollEventL, deltaPixels = %d" ), deltaPixels );
+                RDebug::Print( _L( "CListBox::HandleScrollEventL, deltaPixels = %d" ), deltaPixels );
 #endif // _DEBUG
             
             TPoint newPosition( iListBoxExt->iViewPosition.iX, deltaPixels + iView->ViewRect().Height() / 2 );
-            iListBoxExt->ViewPositionChanged( newPosition );
+            iListBoxExt->ViewPositionChanged( newPosition );            
             }
         else
             {
@@ -4170,7 +4186,9 @@
         // If the event has changed thumb position, then update scroll bar
         // unless physics is used. In that case thumb is updated via 
         // CEikListBox::ScrollView.
-        if ( AknLayoutUtils::PenEnabled() && newThumbPos != newThumbPosBeforeCorrecting && !iListBoxExt->iPhysics )
+        if ( AknLayoutUtils::PenEnabled() 
+             && newThumbPos != newThumbPosBeforeCorrecting 
+             && iListBoxExt && !iListBoxExt->iPhysics )
             {
             UpdateScrollBarThumbs();
             }
@@ -4189,7 +4207,6 @@
         return;
         }
     
-    CheckCreateExtensionL();
     if (!(iListBoxFlags & ELeftDownInViewRect))
         {
         _AKNTRACE_FUNC_EXIT;
@@ -5364,7 +5381,7 @@
         // switch off selection (marking) mode when we lose focus
         // this also corrects situation, where FEP-menu is launched
         // and thus listbox doesn't receive shift up event
-        if (NULL != iListBoxExt)
+        if ( iListBoxExt )
             {
             if ((iListBoxFlags & EMultipleSelection) && (iListBoxFlags & EShiftEnterMarks))
                 {
@@ -5384,9 +5401,9 @@
         iView->SetEmphasized(EFalse);
         iView->HideMatcherCursor();
         
-        if (iItemEditor && 
-            (iListBoxFlags & EPaintedSelection) && 
-            (NULL != iListBoxExt && iListBoxExt->ReasonForFocusLost() == EFocusLostToExternalControl))
+        if ( iItemEditor && 
+            ( iListBoxFlags & EPaintedSelection ) && 
+            ( iListBoxExt && iListBoxExt->ReasonForFocusLost() == EFocusLostToExternalControl ) )
             {
             iView->DeselectItem(CurrentItemIndex());
             }
@@ -5738,7 +5755,7 @@
         
         if ( iView )
             {
-            iView->SetItemOffsetInPixels( 0 );
+            iView->SetItemOffsetInPixels( 0 );            
             }
         
         // make sure that highlight is removed and long tap is canceled 
@@ -5985,9 +6002,15 @@
             {
             rect.iTl.iX += iItemDrawer->MarkColumn() + iItemDrawer->MarkGutter();
             }
-        iListBoxExt->SetReasonForFocusLost(EFocusLostToInternalEditor);
+        if ( iListBoxExt )
+            {
+            iListBoxExt->SetReasonForFocusLost(EFocusLostToInternalEditor);
+            }
         itemEditor->StartEditingL(*this,rect,index,aMaxLength);
-        iListBoxExt->SetReasonForFocusLost(EFocusLostToExternalControl);
+        if ( iListBoxExt )
+            {
+            iListBoxExt->SetReasonForFocusLost(EFocusLostToExternalControl);
+            }
         ReportListBoxEventL( MEikListBoxObserver::EEventEditingStarted );
         }
     _AKNTRACE_FUNC_EXIT;
@@ -6115,18 +6138,21 @@
 EXPORT_C void CEikListBox::DisableScrolling( TBool aDisabled )
     {
     _AKNTRACE_FUNC_ENTER;
-    iListBoxExt->iScrollingDisabled = aDisabled;
-    iView->iExtension->iScrollingDisabled = aDisabled;
-    
-    if ( aDisabled && iListBoxExt->iPhysics )
-        {
-        delete iListBoxExt->iPhysics;
-        iListBoxExt->iPhysics = NULL;
-        iView->SetItemOffsetInPixels( 0 );
-        }
-    else if ( !aDisabled && !iListBoxExt->iPhysics && CAknPhysics::FeatureEnabled() )
-        {
-        iListBoxExt->iPhysics = CAknPhysics::NewL( *iListBoxExt, this);      
+    if ( iListBoxExt )
+        {
+        iListBoxExt->iScrollingDisabled = aDisabled;
+        iView->iExtension->iScrollingDisabled = aDisabled;
+        
+        if ( aDisabled && iListBoxExt->iPhysics )
+            {
+            delete iListBoxExt->iPhysics;
+            iListBoxExt->iPhysics = NULL;
+            iView->SetItemOffsetInPixels( 0 );
+            }
+        else if ( !aDisabled && !iListBoxExt->iPhysics && CAknPhysics::FeatureEnabled() )
+            {
+            iListBoxExt->iPhysics = CAknPhysics::NewL( *iListBoxExt, this);      
+            }
         }
     _AKNTRACE_FUNC_EXIT;
     }
@@ -6138,19 +6164,29 @@
 //
 EXPORT_C TBool CEikListBox::ScrollingDisabled()
     {
-    return !iListBoxExt->iPhysics || iListBoxExt->iScrollingDisabled;
+    if ( iListBoxExt )
+        {
+        return !iListBoxExt->iPhysics || iListBoxExt->iScrollingDisabled;
+        }
+    else
+        {
+        return ETrue;
+        }
     }
 
 
 EXPORT_C void CEikListBox::SetPointerEventFilterDisabledL( const CArrayFix<TInt>& aItemIndexes )
     {
     _AKNTRACE_FUNC_ENTER;
-    iListBoxExt->iMutiTappingItems.Reset();
-
-    for(TInt i=0; i<aItemIndexes.Count(); i++ )
-        {
-        iListBoxExt->iMutiTappingItems.InsertInOrderL( aItemIndexes.At(i) ); 
-        }   
+    if ( iListBoxExt )
+        {
+        iListBoxExt->iMutiTappingItems.Reset();
+    
+        for(TInt i=0; i<aItemIndexes.Count(); i++ )
+            {
+            iListBoxExt->iMutiTappingItems.InsertInOrderL( aItemIndexes.At(i) ); 
+            } 
+        }
     _AKNTRACE_FUNC_EXIT;
     }
 
@@ -6206,8 +6242,8 @@
 //
 EXPORT_C void CEikListBox::DisableSingleClick( TBool aDisabled )
     {
-    _AKNTRACE_FUNC_ENTER;
-    if ( aDisabled && iListBoxExt->iSingleClickEnabled )
+    _AKNTRACE_FUNC_ENTER;    
+    if ( aDisabled && iListBoxExt && iListBoxExt->iSingleClickEnabled )
         {
         iListBoxExt->DisableSingleClick(); 
         }
@@ -6235,11 +6271,11 @@
 //
 EXPORT_C TBool CEikListBox::IsHighlightEnabled()
     {
-    _AKNTRACE_FUNC_ENTER;
+    _AKNTRACE_FUNC_ENTER;	
     TBool enabled( EFalse ); 
     if ( !( iItemDrawer->Flags() & CListItemDrawer::EDisableHighlight ) )
         {
-        if ( iListBoxExt->iSingleClickEnabled )
+        if ( iListBoxExt && iListBoxExt->iSingleClickEnabled )
             {
             enabled = !( iItemDrawer->Flags()
                 & CListItemDrawer::ESingleClickDisabledHighlight ); 
@@ -6258,9 +6294,9 @@
 	_AKNTRACE_FUNC_ENTER;
 #ifdef _DEBUG
 	RDebug::Print( _L( "CEikListBox::ScrollView, aOffset = %d, aDrawNow = %d" ), aOffset, aDrawNow );
-#endif // _DEBUG
-
-	if ( aOffset != 0 )
+#endif // _DEBUG	
+	
+	if ( iListBoxExt && aOffset != 0 )
 	    {
         TInt itemHeight = iView->ItemHeight();
         TInt viewHeight = iView->ViewRect().Size().iHeight;
@@ -6334,7 +6370,10 @@
         TRect rect(Rect());
         
         // list position changed
-        iListBoxExt->iBackgroundDrawingSuppressed = ETrue;
+        if ( iListBoxExt )
+            {
+            iListBoxExt->iBackgroundDrawingSuppressed = ETrue;
+            }
         UpdateScrollBarThumbs();
         DrawNow();
         if (iSBFrame && iSBFrame->VerticalScrollBar() && !iSBFrame->VerticalScrollBar()->OwnsWindow())
@@ -6345,7 +6384,10 @@
                 iSBFrame->DrawScrollBarsNow();                
                 }
             }
-        iListBoxExt->iBackgroundDrawingSuppressed = EFalse;
+        if ( iListBoxExt )
+            {
+            iListBoxExt->iBackgroundDrawingSuppressed = EFalse;
+            }
         }        
     _AKNTRACE_FUNC_EXIT;
 	}
@@ -6617,7 +6659,8 @@
     _AKNTRACE_FUNC_ENTER;
     TInt oldCurrentItemIndex = iView->CurrentItemIndex();
 
-    if ( iListBoxExt->iReportDelayedPenDown && !iListBoxExt->iScrolling )
+    if ( iListBoxExt && iListBoxExt->iReportDelayedPenDown 
+        && !iListBoxExt->iScrolling )
         {
 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
         if ( aItemIndex != oldCurrentItemIndex )
@@ -6640,14 +6683,14 @@
             iListBoxExt->iDelayedPointerDownEvent );
         }
 
-    if ( iListBoxExt->iDelayedMultiselection )
+    if ( iListBoxExt && iListBoxExt->iDelayedMultiselection )
         {
         iItemDrawer->SetFlags( CListItemDrawer::EPressedDownState );
         }
     
     iView->SetItemIndex( aItemIndex );
 
-    if ( iListBoxExt->iMarkableListMarking )
+    if ( iListBoxExt && iListBoxExt->iMarkableListMarking )
         {
         if ( iListBoxExt->iMarkableListShiftKeyPressed )
            {
@@ -6677,7 +6720,7 @@
     iView->DrawItem( oldCurrentItemIndex );
     iView->DrawItem( aItemIndex );
     
-    if ( iListBoxExt->iDelayedMultiselection )
+    if ( iListBoxExt && iListBoxExt->iDelayedMultiselection )
         {
         iListBoxFlags |= EStateChanged;
         Buffer()->iPressedIndex = aItemIndex;