diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/tsrc/thelpviewctrls.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/tsrc/thelpviewctrls.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,273 @@ +// Copyright (c) 2003-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: +// THelpViewCtrls module +// +// + +#include "thelpviewctrls.h" + +// System includes +#include +#include +// +#include "hlpmodel.h" + +// Constants +const TInt KTimeOutPeriod = 10000000; // Ten seconds + +// Literal constants +_LIT(KDoneCaption, "Done"); + + +// +// ----> CHlpSearchPrompt (header) +// + +CHlpSearchPrompt::CHlpSearchPrompt() + { + } + +CHlpSearchPrompt::~CHlpSearchPrompt() + { + iHideTimer->Cancel(); + delete iHideTimer; + delete iEdwin; + } + +void CHlpSearchPrompt::ConstructL(CCoeControl& aParent) + { + CreateWindowL(&aParent); + + iHideTimer = CPeriodic::NewL(CActive::EPriorityIdle); + + iEdwin = new(ELeave) CEikEdwin(); + iEdwin->SetContainerWindowL(*this); + iEdwin->ConstructL(0, 25, 140, 1); + iEdwin->CreateTextViewL(); + iEdwin->SetObserver(this); + } + +// +// +// + +void CHlpSearchPrompt::ResetSearchL() + { + iEdwin->Text()->Reset(); + iEdwin->NotifyNewDocumentL(); + iEdwin->DrawNow(); + } + +HBufC* CHlpSearchPrompt::SearchTextLC() + { + HBufC* buf = iEdwin->GetTextInHBufL(); + CleanupStack::PushL(buf); + return buf; + } + +// +// +// + +void CHlpSearchPrompt::MakeVisible(TBool aVisible) + { + CCoeControl::MakeVisible(aVisible); + if (!aVisible) + { + iHideTimer->Cancel(); + ResetSearchL(); // Leaves if not visible + } + } + +void CHlpSearchPrompt::SizeChanged() + { + iEdwin->SetRect(Rect()); + } + +TInt CHlpSearchPrompt::CountComponentControls() const + { + return 1; + } + +CCoeControl* CHlpSearchPrompt::ComponentControl(TInt/* aIndex*/) const + { + return iEdwin; + } + +TKeyResponse CHlpSearchPrompt::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType) + { + if (aKeyEvent.iCode == EKeyEnter && aType == EEventKey) + { + ReportEventL(EEventStateChanged); + return EKeyWasConsumed; + } + else if (aKeyEvent.iCode == EKeyEscape && aType == EEventKey) + { + MakeVisible(EFalse); + return EKeyWasConsumed; + } + else + { + iHideTimer->Cancel(); + iHideTimer->Start(KTimeOutPeriod, KTimeOutPeriod, TCallBack(HandleTimerExpiredL, this)); + return iEdwin->OfferKeyEventL(aKeyEvent, aType); + } + } + +// +// +// + +void CHlpSearchPrompt::HandleControlEventL(CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/) + { + } + +// +// +// + +TInt CHlpSearchPrompt::HandleTimerExpiredL(TAny* aSelf) + { + CHlpSearchPrompt* self = STATIC_CAST(CHlpSearchPrompt*, aSelf); + self->MakeVisible(EFalse); + return EFalse; // one shot + } + + + + + + + + + +// +// ----> CHlpListBox (source) +// + +CHlpListBox::CHlpListBox() + { + } + +CHlpListBox::~CHlpListBox() + { + delete iContent; + delete iButton; + delete iListBox; + } + +void CHlpListBox::ConstructL(CCoeControl& aParent) + { + SetContainerWindowL(aParent); + + iButton = new(ELeave) CEikCommandButton(); + iButton->SetContainerWindowL(*this); + iButton->SetTextL(KDoneCaption); + iButton->SetObserver(this); + + iListBox = new(ELeave) CEikTextListBox(); + iListBox->ConstructL(this, CEikListBox::ENoExtendedSelection); + iListBox->CreateScrollBarFrameL()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); + iListBox->SetObserver(this); + } + +// +// FROM CCoeControl +// + +void CHlpListBox::SizeChanged() + { + TRect rect(Rect()); + TSize size(rect.Size()); + const TInt KButtonHeight = iButton->MinimumSize().iHeight; + iButton->SetExtent(rect.iTl, TSize(size.iWidth, KButtonHeight)); + rect.iTl.iY += KButtonHeight; + iListBox->SetRect(rect); + } + +TInt CHlpListBox::CountComponentControls() const + { + return 2; + } + +CCoeControl* CHlpListBox::ComponentControl(TInt aIndex) const + { + if (!aIndex) + return iListBox; + return iButton; + } + +TKeyResponse CHlpListBox::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType) + { + return iListBox->OfferKeyEventL(aKeyEvent, aType); + } + +TSize CHlpListBox::MinimumSize() + { + return iButton->MinimumSize(); + } + +// +// NEW +// + +const CHlpItem& CHlpListBox::HelpItemL() const + { + TInt index = iListBox->CurrentItemIndex(); + if (!iContent || index >= iContent->MdcaCount()) + User::Leave(KErrNotFound); + + // Return the topic id of the topic that the user is interested in + return *iContent->Item(index); + } + +void CHlpListBox::PopulateListBoxL(CHlpList* aContent) + { + SetContent(aContent); + + CDesCArray* itemArray = STATIC_CAST(CDesCArray*, iListBox->Model()->ItemTextArray()); + itemArray->Reset(); + + const TInt count = iContent->MdcaCount(); + for(TInt i=0; iAppendL(iContent->MdcaPoint(i)); + } + + iListBox->HandleItemAdditionL(); + iListBox->SetCurrentItemIndex(0); // first item + } + +// +// FROM MCoeControlObserver +// + +void CHlpListBox::HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType) + { + if (aControl == iButton) + ReportEventL(EEventRequestExit); + else if (aControl == iListBox) + ReportEventL(aEventType); + } + + +// +// INTERNAL +// + +void CHlpListBox::SetContent(CHlpList* aContent) + { + delete iContent; + iContent = aContent; + }