textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistonerowwithouticon.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistonerowwithouticon.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,284 @@
+/*
+* Copyright (c) 2002-2005 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:  One rows list with icon for drop-down list objects
+*
+*/
+
+
+// Include 
+#include "peninputlistonerowwithouticon.h"
+#include "peninputcandidate.h"
+
+#include <peninputdropdownlistcontext.h>
+#include <peninputdropdownlist.h>
+
+// ======== MEMBER FUNCTIONS ========
+
+// Implementation of Class CListOneRowWithoutIcon 
+
+// -----------------------------------------------------------------------------
+// CListOneRowWithoutIcon::CListOneRowWithoutIcon
+// C++ default constructor can NOT contain any code, that
+// might leave
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CListOneRowWithoutIcon::CListOneRowWithoutIcon(CListManager* aManager, 
+                                               MFepCtrlDropdownListContext* aOwner)
+:CList(aManager, aOwner)
+    {
+    iIsMultiRows = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CListOneRowWithoutIcon::NewL
+// factory function
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CListOneRowWithoutIcon* CListOneRowWithoutIcon::NewL(CListManager* aManager,
+                                                     MFepCtrlDropdownListContext* aOwner)
+    {
+    CListOneRowWithoutIcon* self = new (ELeave) CListOneRowWithoutIcon(aManager, aOwner);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CListOneRowWithoutIcon::~CListOneRowWithoutIcon
+// desstrutor function
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CListOneRowWithoutIcon::~CListOneRowWithoutIcon()
+    {   
+    }
+
+// -----------------------------------------------------------------------------
+// CListOneRowWithoutIcon::HandlePointerDownL
+// handle pointer down 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CListOneRowWithoutIcon::HandlePointerDownL(const TPoint& aPoint)
+    {    
+    // Pass the event first to the base     
+    CList::HandlePointerDownL(aPoint);
+    }
+
+// -----------------------------------------------------------------------------
+// CListOneRowWithoutIcon::HandlePointerDragL
+// handle pointer drag function
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CListOneRowWithoutIcon::HandlePointerDragL(const TPoint& aPoint)
+    { 
+    // Pass the event first to the base
+    CList::HandlePointerDragL(aPoint);
+    
+    // If the mouse have click in the area of DDL
+    if ( iIndicateButtonClicked )  
+        {
+        TInt index = -1;
+        
+        CCandidate* candidate = FindCandidate(aPoint, index);
+        iMoveLatestRect = KEmptyRect;
+        
+        if ( candidate )
+            {
+            iMoveLatestRect.SetRect(candidate->GetRect().iTl, candidate->GetRect().Size());
+            }          
+        
+        // Compare the two rect, then decide draw it or not
+        CompareRect(iMoveLatestRect, iClickedRect);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CListOneRowWithoutIcon::HandlePointerUpL
+// handle pointer up function
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CListOneRowWithoutIcon::HandlePointerUpL(const TPoint& aPoint)
+    {
+    if ( !iClickedRect.IsEmpty() )
+        {
+        // Find out which rectangle was clicked and save it for 
+        // later usage (HandlePointerUpL)
+        if ( iContentRect.Contains( aPoint ) )
+            {
+            if ( iClickedRect.Contains( aPoint ) )
+                {
+                if ( iClickedCandidateIndex != KErrNotFound )
+                    {
+                    // Redraw the selection rect  
+                    DrawSelection( iClickedRect, EFalse );
+                    
+                    // We have selected a candidate
+                    // Send message to plugin         
+                    CCandidate* candidate = iOwner->GetCandidate(iClickedCandidateIndex);
+                    if ( candidate )
+                        {
+                        iOwner->ReportCandidateSelectEventL(candidate->GetCandidate(),
+                                                           iClickedCandidateIndex); 
+                        }
+                           
+                    }                
+               }
+                
+            iIndicateButtonClicked = EFalse;
+            }
+            
+        iClickedRect = KEmptyRect;               
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CListOneRowWithoutIcon::Draw
+// draw the list
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CListOneRowWithoutIcon::Draw()
+    {
+    CList::Draw();
+    
+    // Draw all visible candidates
+    DrawCandidates();
+    DrawSelection(iClickedRect, ETrue);
+    }
+
+// -----------------------------------------------------------------------------
+// CListOneRowWithoutIcon::CalculateAreas
+// Calculate all kinds of rectangles
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CListOneRowWithoutIcon::CalculateAreas()
+    {
+    // Calculate the rect of the list
+    iRect.iTl = iOwner->GetTopLeftPoint();
+    TInt width = iOwner->GetCellWidth() * iOwner->GetColNum() + iOwner->GetNaviWidth() + 
+                 (iOwner->GetColNum() + 2) * iOwner->GetCellHorizontalMargin();
+    TInt height = iOwner->GetCellHeight() + 2 * iOwner->GetCellVerticalMargin();                 
+    
+    iRect.SetSize(TSize(width,height));
+
+    // Calculate the rect of the content
+    iContentRect.iTl = TPoint(iRect.iTl.iX + iOwner->GetCellHorizontalMargin(),
+                              iRect.iTl.iY + iOwner->GetCellVerticalMargin());
+    iContentRect.SetSize(TSize(width - 2 * iOwner->GetCellHorizontalMargin(),
+                               iOwner->GetCellHeight()));
+
+    // Calculate the rect of the navigation area
+    iNavigationRect = TRect(0,0,0,0);
+
+    // Calculate the rect of the down button
+    iNavigationNextRect = TRect(0,0,0,0);
+
+    // Calculate the rect of the up button
+    iNavigationPreviousRect = TRect(0,0,0,0);
+    }
+
+// -----------------------------------------------------------------------------
+// CListOneRowWithoutIcon::CalculatePositionsL
+// calculate the position of all visible cells in the list
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CListOneRowWithoutIcon::CalculatePositionsL()
+    {
+    TInt t = 0;
+    TPoint setpoints;
+
+    const TInt count = iOwner->CandidateCount();
+    
+    // First store the last index
+    iOwner->SetFirstCandidateIndex ( iOwner->GetLastCandidateIndex() );        
+    
+    if ( count > 0 )
+        {
+        // Initial the position to iContentRect
+        /*
+        setpoints.iX = iContentRect.iTl.iX;
+        setpoints.iY = iContentRect.iTl.iY;
+        */
+        TBool candHLToR = (iOwner->CandHDirection() == CFepCtrlDropdownList::ECandFromLToR);
+        candHLToR ? setpoints.SetXY(iContentRect.iTl.iX, iContentRect.iTl.iY) :
+                    setpoints.SetXY(iContentRect.iBr.iX, iContentRect.iTl.iY);
+
+        TInt cellNumberInOneRow = iOwner->GetColNum() + 1;
+        TInt lastUsedCellCount = 0;
+        TInt currentCellIndex = 0;
+        TInt newCount = 0;
+        
+        newCount = Min(count,iOwner->GetLastCandidateIndex() + cellNumberInOneRow);   
+                
+        for( t = iOwner->GetLastCandidateIndex(); t < newCount ; t++ )
+            {
+            // setting a position for this candidate 
+            CCandidate* candidate = iOwner->GetCandidate(t);
+
+            if ( !candidate )
+                {
+                continue;
+                }
+                
+            lastUsedCellCount = candidate->SetPositionL(setpoints,
+                                                        iOwner->GetCellWidth(),
+                                                        iOwner->GetCellHeight(),
+                                                        iOwner->GetFont(),
+                                                        iOwner->GetCellHorizontalMargin()); 
+            currentCellIndex += lastUsedCellCount;
+            
+            if ( currentCellIndex > ( iOwner->GetColNum() + 1 ) )
+                {
+                // If no space to contain other cells 
+                break;
+                }
+
+            // Recalcuate the x position
+            candHLToR? (setpoints.iX += (iOwner->GetCellWidth() + iOwner->GetCellHorizontalMargin()) * lastUsedCellCount) : 
+                       (setpoints.iX -= (iOwner->GetCellWidth() + iOwner->GetCellHorizontalMargin()) * lastUsedCellCount);
+            } // for-loop
+        } // if candidate exist 
+    
+    return t; // as lastCandidateIndex
+    }
+
+// -----------------------------------------------------------------------------
+// CListOneRowWithoutIcon::UpdateList
+// update the list
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CListOneRowWithoutIcon::UpdateListL(TBool aDrawFlag, TBool aRecalculate)
+    {
+    if ( aRecalculate )
+        {
+        // Recalculate the position of all candidates
+        iOwner->SetLastCandidateIndex(CalculatePositionsL());    
+        }
+    if(aDrawFlag)    
+        {
+        Draw();
+        iOwner->Invalidate(iRect);
+        }
+    }
+
+// End Of File