textinput/peninputcommonctrlsjp/src/peninputjapanesecandidatelistbox.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrlsjp/src/peninputjapanesecandidatelistbox.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,224 @@
+/*
+* 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:  Candidate List ListBox
+*
+*/
+
+#include <aknlayoutscalable_avkon.cdl.h>
+#include "peninputeventjp.h"
+#include "peninputjapanesecandidatelistbox.h"
+#include "peninputjapanesecandidatecelllistboxdata.h"
+
+// const TInt KLayoutTempValue_2 = 2;   // temporary
+
+
+// -----------------------------------------------------------------------------
+// CPeninputJapaneseCandidateListbox::SetMaximumColumns
+// Set maximum columns in listbox
+// -----------------------------------------------------------------------------
+void CPeninputJapaneseCandidateListBox::SetMaximumColumns(
+        const TInt aMaximumColumns)
+    {
+    iMaximumColumns = aMaximumColumns;
+    }
+
+// -----------------------------------------------------------------------------
+// CPeninputJapaneseCandidateListBox::SetMaximumRows
+// Set maximum visible rows in listbox
+// -----------------------------------------------------------------------------
+void CPeninputJapaneseCandidateListBox::SetMaximumRows(
+        const TInt aMaximumRows)
+    {
+    iMaximumRows = aMaximumRows;
+    }
+
+// -----------------------------------------------------------------------------
+// CPeninputJapaneseCandidateListBox::HandlePointerEventL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPeninputJapaneseCandidateListBox::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+    {
+    const TInt old = CurrentItemIndex();
+    CAknSinglePopupMenuStyleListBox::HandlePointerEventL(aPointerEvent);
+    switch (aPointerEvent.iType)
+        {
+        case TPointerEvent::EButton1Up:
+            break;
+        case TPointerEvent::EButton1Down:
+            {
+            if (CurrentItemIndex() != old)
+                {
+                ReportListBoxEventL(MEikListBoxObserver::EEventItemDraggingActioned);// need draw.(not leave)
+                }
+            }
+            break;
+        default:
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPeninputJapaneseCandidateListbox::MinimumSize
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+// temporary
+TSize CPeninputJapaneseCandidateListBox::MinimumSize()
+    {
+    TAknTextLineLayout textLineLayout =
+        AknLayoutScalable_Avkon::fep_vkb_top_text_pane_t1().LayoutLine();
+    const CFont* font = AknLayoutUtils::FontFromId(textLineLayout.iFont, NULL);
+    TInt width = CEikListBox::CalcWidthBasedOnRequiredItemWidth(iMaximumColumns * font->AscentInPixels()+KPENINPUT_LAYOUT_VALUE_6);
+    return TSize(width, CEikListBox::CalcHeightBasedOnNumOfItems(iMaximumRows));
+    }
+
+// -----------------------------------------------------------------------------
+// CPeninputJapaneseCandidateListbox::SizeChanged
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CPeninputJapaneseCandidateListBox::SizeChanged()
+    {
+    CEikFormattedCellListBox& listBox = *this;
+    CFormattedCellListBoxItemDrawer* itemDrawer = listBox.ItemDrawer();
+
+    TAknWindowLineLayout textWindowLayout =
+        AknLayoutScalable_Avkon::list_single_choice_list_pane(0).LayoutLine();
+
+    TAknTextLineLayout textLineLayout =
+        AknLayoutScalable_Avkon::fep_vkb_top_text_pane_t1().LayoutLine();
+    const CFont* font = AknLayoutUtils::FontFromId(textLineLayout.iFont, NULL);
+   textWindowLayout.iH = font->AscentInPixels()+KPENINPUT_LAYOUT_VALUE_2;  // control itemheight
+
+
+    AknListBoxLayouts::SetupStandardListBox(listBox);  // SetBorder(TGulBorder::ENone)
+    AknListBoxLayouts::SetupStandardFormListbox(itemDrawer); // Set Standard Colors
+
+    // Scroll bar : before AknListBoxLayouts::SetupListboxPos()
+    TAknWindowLineLayout scrollLineLayout = AknLayoutScalable_Avkon::scroll_pane_cp30().LayoutLine();
+    scrollLineLayout.il = ELayoutEmpty;
+    if (Model()->NumberOfItems() <= iMaximumRows)
+        {
+        scrollLineLayout.iW = 0;
+        }
+    TRect scrollBarParent = TRect(TPoint(listBox.Rect().iTl),
+                                  TSize(listBox.Rect().Width() + scrollLineLayout.iW + scrollLineLayout.ir,
+                                        listBox.Rect().Height()));
+    AknLayoutUtils::LayoutVerticalScrollBar(iSBFrame, scrollBarParent, scrollLineLayout);
+
+    AknListBoxLayouts::SetupListboxPos(listBox, textWindowLayout);  // ItemDrawer()->SetItemCellSize()
+                                                                    // Draw Scrollbar
+
+    {
+    TRgb color( KRgbBlack );
+    // this does not modify color unless it gets a correct one
+    // no real need to check errors
+    AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
+                              color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG10 );
+    itemDrawer->SetHighlightedTextColor( color );
+    AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
+                               color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG7 );
+    iItemDrawer->SetTextColor( color );
+    }
+
+    TSize itemSize = View()->ItemSize();
+
+    // setting text box size in listbox
+    TInt baseline = itemSize.iHeight/2 + font->AscentInPixels() / 2;
+    textLineLayout.iB = ELayoutP - baseline;  // control itemheight
+    AknListBoxLayouts::SetupFormAntiFlickerTextCell(
+            listBox, itemDrawer, 0, textLineLayout,
+            TPoint(0, 0),
+            TPoint(itemSize.iWidth, itemSize.iHeight)); // CheckColor.
+
+    CEikFormattedCellListBox::SizeChanged();
+    UpdateScrollBarThumbs();
+    }
+
+// -----------------------------------------------------------------------------
+// CPeninputJapaneseCandidateListBox::CreateItemDrawerL
+// Create ItemDrawer
+// -----------------------------------------------------------------------------
+//
+void CPeninputJapaneseCandidateListBox::CreateItemDrawerL()
+    {
+    CPeninputJapaneseCandidateCellListBoxData* cellData =
+        CPeninputJapaneseCandidateCellListBoxData::NewL();
+    CleanupStack::PushL(cellData);
+
+    iItemDrawer =
+        new(ELeave) CFormattedCellListBoxItemDrawer(Model(), NULL, cellData);
+    CleanupStack::Pop(cellData);
+    }
+
+void CPeninputJapaneseCandidateListBox::HandleScrollEventL(CEikScrollBar* aScrollBar,TEikScrollEvent aEventType)
+    {
+    TInt oldThumbPos = (aEventType & KEikScrollEventBarMask) ? iView->HScrollOffset() : iView->TopItemIndex();
+    TInt newThumbPos = aScrollBar->ThumbPosition();
+    TInt maxThumbPos = static_cast<CTextListBoxModel*>(Model())->NumberOfItems() - iMaximumRows;
+    TBool update = ETrue; // for the case EEikScrollThumbRelease so that after it there is now update.
+    TInt newThumbPosBeforeCorrecting = newThumbPos;
+
+    switch (aEventType & KEikScrollEventBarMask)
+        {
+    case KEikScrollEventFromVBar:
+        switch (aEventType)
+            {
+        case EEikScrollUp:
+            if ( oldThumbPos == 0  && (iListBoxFlags & ELoopScrolling))
+                {
+                newThumbPos = maxThumbPos;              
+                }
+            break;
+        case EEikScrollDown:
+            if ( oldThumbPos == maxThumbPos && (iListBoxFlags & ELoopScrolling) )
+                {
+                newThumbPos = 0;                
+                }
+            break;
+        case EEikScrollPageUp:
+        case EEikScrollPageDown:
+        case EEikScrollThumbDragVert:
+            break;
+        case EEikScrollThumbReleaseVert:
+            // in the case of drag events, the scrollbar automatically updates its thumb pos...
+            if(AknLayoutUtils::PenEnabled())
+                {
+                update = EFalse;
+                }
+            break;
+
+        default:
+            break;
+            }
+
+        if ( (!AknLayoutUtils::PenEnabled()) || update )
+            {
+            iView->VScrollTo(newThumbPos);
+            if (aEventType != EEikScrollThumbDragVert)
+                {
+                aScrollBar->SetModelThumbPosition(iView->TopItemIndex());
+                }
+            }
+
+        // if event has changed thumb position, then update scroll bar
+        if ( AknLayoutUtils::PenEnabled() && newThumbPos != newThumbPosBeforeCorrecting )
+            {
+            UpdateScrollBarThumbs();
+            }
+        break;
+    default:
+        break;
+        }
+    }
+// End Of File