diff -r 000000000000 -r eb1f2e154e89 textinput/peninputcommonctrlsjp/src/peninputjapanesecandidatelistbox.cpp --- /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 +#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(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