taskswitcher/taskswitcherui/taskswitcherapp/src/tsfastswapgrid.cpp
branchRCL_3
changeset 18 d05a55b217df
parent 17 b8fae6b8a148
equal deleted inserted replaced
17:b8fae6b8a148 18:d05a55b217df
    40 //
    40 //
    41 CTsFastSwapGrid::CTsFastSwapGrid()
    41 CTsFastSwapGrid::CTsFastSwapGrid()
    42 : CAknGrid(),
    42 : CAknGrid(),
    43   iCloseIconHitIdx( KErrNotFound ),
    43   iCloseIconHitIdx( KErrNotFound ),
    44   iBehaviour( ETouchOnly ),
    44   iBehaviour( ETouchOnly ),
    45   iHighlightVisible( EFalse )
    45   iHighlightVisible( EFalse ),
       
    46   iAknEventHandlingEnabled(ETrue)
    46     {
    47     {
    47     }
    48     }
    48 
    49 
    49 
    50 
    50 // -----------------------------------------------------------------------------
    51 // -----------------------------------------------------------------------------
   110                 static_cast<CTsGridItemDrawer*>( ItemDrawer() );
   111                 static_cast<CTsGridItemDrawer*>( ItemDrawer() );
   111             TRect closeIconRect = itemDrawer->GetCloseButtonRect( itemRect );
   112             TRect closeIconRect = itemDrawer->GetCloseButtonRect( itemRect );
   112             if ( closeIconRect.Contains( aPointerEvent.iParentPosition ) )
   113             if ( closeIconRect.Contains( aPointerEvent.iParentPosition ) )
   113                 {
   114                 {
   114                 // Close icon hit
   115                 // Close icon hit
       
   116                 TInt hitDataIdx(hitItem);
       
   117                 if ( AknLayoutUtils::LayoutMirrored() )
       
   118                     {
       
   119                     // Calculate logical item index
       
   120                     hitDataIdx = Model()->ItemTextArray()->MdcaCount() - 1 - hitItem;
       
   121                     }
       
   122                 iCloseIconHitIdx = hitDataIdx;
       
   123                 eventHandled = ETrue;
       
   124                 
   115                 if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
   125                 if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
   116                     {
   126                     {
   117                     // pointer down - finish processing but do not forward to grid
   127                     // Update current item and redraw grid
   118                     eventHandled = ETrue;
   128                     SetCurrentItemIndex( hitItem );
       
   129                     DrawNow();
       
   130                     
       
   131                     iCloseIconRedrawTimer->Cancel();
       
   132                     iCloseIconRedrawTimer->After(KCloseIconRedrawTime);
   119                     }
   133                     }
   120                 else
   134                 else
   121                     {
   135                     {
   122                     // Pointer up
   136                     // Pointer up
   123                     TInt hitDataIdx(hitItem);
       
   124                     if ( AknLayoutUtils::LayoutMirrored() )
       
   125                         {
       
   126                         // Calculate logical item index
       
   127                         hitDataIdx = Model()->ItemTextArray()->MdcaCount() - 1 - hitItem;
       
   128                         }
       
   129                     iCloseIconHitIdx = hitDataIdx;
       
   130                     eventHandled = ETrue;
       
   131                     // Hide highlight to mark close icon
       
   132                     HideHighlight();
       
   133                     // Update current item and redraw grid
       
   134                     SetCurrentItemIndex( hitItem );
       
   135                     DrawNow();
       
   136                     if ( iFastSwapGridObserver )
   137                     if ( iFastSwapGridObserver )
   137                         {
   138                         {
   138                         MTouchFeedback* feedback = MTouchFeedback::Instance();
   139                         MTouchFeedback* feedback = MTouchFeedback::Instance();
   139                         feedback->InstantFeedback(this,
   140                         feedback->InstantFeedback(this,
   140                                                   ETouchFeedbackBasicButton, 
   141                                                   ETouchFeedbackBasicButton, 
   141                                                   ETouchFeedbackVibra, 
   142                                                   ETouchFeedbackVibra, 
   142                                                   aPointerEvent);
   143                                                   aPointerEvent);
   143                         iCloseIconRedrawTimer->Cancel();
       
   144                         iCloseIconRedrawTimer->After(KCloseIconRedrawTime);
       
   145                         }
   144                         }
   146                     if ( GridBehaviour() == EHybrid )
   145                     if ( GridBehaviour() == EHybrid )
   147                         {
   146                         {
   148                         ShowHighlight();
   147                         ShowHighlight();
   149                         }
   148                         }
   150                     else
   149                     else
   151                         {
   150                         {
   152                         Redraw();
   151                         Redraw();
   153                         }
   152                         }
       
   153                     iFastSwapGridObserver->HandleCloseEventL( hitDataIdx );
       
   154                     ResetCloseHit();
   154                     }
   155                     }
   155                 }
   156                 }
   156             }
   157             }
   157         }
   158         }
   158     
   159     
   166             }
   167             }
   167         else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
   168         else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
   168             {
   169             {
   169             itemDrawer->SetRedrawBackground( EFalse );
   170             itemDrawer->SetRedrawBackground( EFalse );
   170             }
   171             }
   171         CAknGrid::HandlePointerEventL( aPointerEvent );
   172         if ( iAknEventHandlingEnabled )
       
   173             {
       
   174             CAknGrid::HandlePointerEventL( aPointerEvent );
       
   175             }
   172         Redraw();
   176         Redraw();
   173         }
   177         }
   174     
   178     
   175     TSLOG_OUT();
   179     TSLOG_OUT();
   176     }
   180     }
   252 //
   256 //
   253 void CTsFastSwapGrid::CreateItemDrawerL()
   257 void CTsFastSwapGrid::CreateItemDrawerL()
   254     {
   258     {
   255     TSLOG_CONTEXT( CTsFastSwapGrid::CreateItemDrawerL, TSLOG_LOCAL );
   259     TSLOG_CONTEXT( CTsFastSwapGrid::CreateItemDrawerL, TSLOG_LOCAL );
   256     TSLOG_IN();
   260     TSLOG_IN();
       
   261     
       
   262     CFormattedCellGridData* data = CFormattedCellGridData::NewL();
       
   263     CleanupStack::PushL( data );
       
   264     CTsGridItemDrawer* itemDrawer =
       
   265         new ( ELeave ) CTsGridItemDrawer( this, data );
       
   266     iItemDrawer = itemDrawer;
       
   267     CleanupStack::Pop( data );
       
   268     
       
   269     TSLOG_OUT();
       
   270     }
       
   271 
       
   272 
       
   273 // -----------------------------------------------------------------------------
       
   274 // CTsFastSwapGrid::UpdateItemDrawerLayoutDataL
       
   275 // -----------------------------------------------------------------------------
       
   276 //
       
   277 void CTsFastSwapGrid::UpdateItemDrawerLayoutDataL()
       
   278     {
       
   279     CTsGridItemDrawer* itemDrawer =
       
   280         static_cast<CTsGridItemDrawer*>( ItemDrawer() );
   257     
   281     
   258     TPixelsAndRotation screenSize;
   282     TPixelsAndRotation screenSize;
   259     iEikonEnv->ScreenDevice()->GetDefaultScreenSizeAndRotation(screenSize);
   283     iEikonEnv->ScreenDevice()->GetDefaultScreenSizeAndRotation(screenSize);
   260     TRect availableRect = TRect( TPoint(0,0), screenSize.iPixelSize );
   284     TRect availableRect = TRect( TPoint(0,0), screenSize.iPixelSize );
       
   285     itemDrawer->SetScreenRect(availableRect);
       
   286     
   261     TAknLayoutRect fastSwapAreaPane;
   287     TAknLayoutRect fastSwapAreaPane;
   262     TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
   288     TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
   263     fastSwapAreaPane.LayoutRect( availableRect,
   289     fastSwapAreaPane.LayoutRect( availableRect,
   264             AknLayoutScalable_Apps::tport_appsw_pane( variety ) );
   290             AknLayoutScalable_Apps::tport_appsw_pane( variety ) );
   265     const TInt leftOffset = iParent->Rect().iTl.iX;
   291     const TInt leftOffset = iParent->Rect().iTl.iX;
   266     const TInt rightOffset = availableRect.Width() - iParent->Rect().iBr.iX;
   292     const TInt rightOffset = availableRect.Width() - iParent->Rect().iBr.iX;
   267     SetVisibleViewRect(fastSwapAreaPane.Rect());
   293     SetVisibleViewRect(fastSwapAreaPane.Rect());
   268     
       
   269     CFormattedCellGridData* data = CFormattedCellGridData::NewL();
       
   270     CleanupStack::PushL( data );
       
   271     CTsGridItemDrawer* itemDrawer =
       
   272         new ( ELeave ) CTsGridItemDrawer( this, data, availableRect );
       
   273     CleanupStack::PushL( itemDrawer );
       
   274     itemDrawer->SetEdgeOffset( leftOffset, rightOffset );
   294     itemDrawer->SetEdgeOffset( leftOffset, rightOffset );
   275     iItemDrawer = itemDrawer;
   295     
   276     CleanupStack::Pop( itemDrawer );
       
   277     CleanupStack::Pop( data );
       
   278     LoadCloseIconAndStrokeParams();
   296     LoadCloseIconAndStrokeParams();
   279     
   297     }
   280     TSLOG_OUT();
   298 
       
   299 
       
   300 // -----------------------------------------------------------------------------
       
   301 // CTsFastSwapGrid::EnableAknEventHandling
       
   302 // -----------------------------------------------------------------------------
       
   303 //
       
   304 void CTsFastSwapGrid::EnableAknEventHandling( TBool aEnable )
       
   305     {
       
   306     iAknEventHandlingEnabled = aEnable;
   281     }
   307     }
   282 
   308 
   283 // -----------------------------------------------------------------------------
   309 // -----------------------------------------------------------------------------
   284 // CTsFastSwapGrid::TimerCompletedL
   310 // CTsFastSwapGrid::TimerCompletedL
   285 // -----------------------------------------------------------------------------
   311 // -----------------------------------------------------------------------------
   286 //
   312 //
   287 void CTsFastSwapGrid::TimerCompletedL( CTsFastSwapTimer* aSource )
   313 void CTsFastSwapGrid::TimerCompletedL( CTsFastSwapTimer* aSource )
   288     {
   314     {
   289     if ( aSource == iCloseIconRedrawTimer )
   315     if ( aSource == iCloseIconRedrawTimer )
   290         {
   316         {
   291         TInt itemToClose = iCloseIconHitIdx;
       
   292         ResetCloseHit();
   317         ResetCloseHit();
   293         iFastSwapGridObserver->HandleCloseEventL( itemToClose );
       
   294         }
   318         }
   295     }
   319     }
   296 
   320 
   297 // -----------------------------------------------------------------------------
   321 // -----------------------------------------------------------------------------
   298 // CTsFastSwapGrid::SetCloseItemsL
   322 // CTsFastSwapGrid::SetCloseItemsL
   567 // CTsGridItemDrawer::CTsGridItemDrawer
   591 // CTsGridItemDrawer::CTsGridItemDrawer
   568 // -----------------------------------------------------------------------------
   592 // -----------------------------------------------------------------------------
   569 //
   593 //
   570 CTsGridItemDrawer::CTsGridItemDrawer(
   594 CTsGridItemDrawer::CTsGridItemDrawer(
   571         CTsFastSwapGrid* aGrid,
   595         CTsFastSwapGrid* aGrid,
   572         CFormattedCellListBoxData* aData,
   596         CFormattedCellListBoxData* aData )
   573         TRect aScreenRect )
       
   574 : CFormattedCellListBoxItemDrawer( aGrid->Model(),
   597 : CFormattedCellListBoxItemDrawer( aGrid->Model(),
   575         NULL,
   598         NULL,
   576         aData ),
   599         aData ),
   577   iGrid( aGrid ),
   600   iGrid( aGrid ),
   578   iScreenRect( aScreenRect ),
       
   579   iStrokeColor( KRgbBlack ),
   601   iStrokeColor( KRgbBlack ),
   580   iHighlightStrokeColor( KRgbBlack )
   602   iHighlightStrokeColor( KRgbBlack )
   581     {
   603     {
   582     }
   604     }
   583 
   605 
   691 // -----------------------------------------------------------------------------
   713 // -----------------------------------------------------------------------------
   692 //
   714 //
   693 void CTsGridItemDrawer::SetStrokeOffset( TPoint aStrokeOffset, TSize aStrokeSize )
   715 void CTsGridItemDrawer::SetStrokeOffset( TPoint aStrokeOffset, TSize aStrokeSize )
   694     {
   716     {
   695     iStrokeRect = TRect( aStrokeOffset, aStrokeSize );
   717     iStrokeRect = TRect( aStrokeOffset, aStrokeSize );
       
   718     }
       
   719 
       
   720 
       
   721 // -----------------------------------------------------------------------------
       
   722 // CTsGridItemDrawer::SetScreenRect
       
   723 // -----------------------------------------------------------------------------
       
   724 //
       
   725 void CTsGridItemDrawer::SetScreenRect( TRect aRect )
       
   726     {
       
   727     iScreenRect = aRect;
   696     }
   728     }
   697 
   729 
   698 
   730 
   699 // -----------------------------------------------------------------------------
   731 // -----------------------------------------------------------------------------
   700 // CTsGridItemDrawer::DrawActualItem
   732 // CTsGridItemDrawer::DrawActualItem