diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/coctlsrc/EIKBUTB.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/coctlsrc/EIKBUTB.CPP Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,253 @@ +/* +* Copyright (c) 1997-1999 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: +* +*/ + + +#include +#include +#include "LAFBUTB.H" + +const TInt KButtonStateMask =0x000f; +const TInt KButtonPressedMask =0x0010; +const TInt KButtonDrawStateMask =0x001f; +const TInt KButtonReportOnPointerDown =0x0020; +const TInt KButtonTristate =0x0040; +const TInt KButtonAllowTristate =0x0080; +const TInt KButtonBehaviorMask =0x0f00; + +const TInt KAnimationDelayInMicroSeconds=50000; + +/** + * Gets the list of logical colors employed in the drawing of the control, + * paired with an explanation of how they are used. Appends the list to aColorUseList. + * + * @since ER5U + */ +EXPORT_C void CEikButtonBase::GetColorUseListL(CArrayFix& /*aColorUseList*/) const + { + } + +/** + * Handles a change to the control's resources of type aType + * which are shared across the environment, e.g. colors or fonts. + * + * @since ER5U + */ +EXPORT_C void CEikButtonBase::HandleResourceChange(TInt aType) + { + CCoeControl::HandleResourceChange(aType); + } + +EXPORT_C CEikButtonBase::~CEikButtonBase() + { + } + +EXPORT_C CEikButtonBase::CEikButtonBase() + { + __DECLARE_NAME(_S("CEikButtonBase")); + } + +EXPORT_C void CEikButtonBase::SetCoordinator(TEikButtonCoordinator* aButCoord) + { + iButCoord=aButCoord; + } + +EXPORT_C CEikButtonBase::TState CEikButtonBase::State() const + { + return((TState)(iButFlags&KButtonStateMask)); + } + +EXPORT_C void CEikButtonBase::SetState(TState aState) + { + iButFlags&=(~KButtonStateMask); + iButFlags|=aState; + if (aState==EIndeterminate && iButFlags&KButtonAllowTristate) + iButFlags|=KButtonTristate; + if (aState==ESet && iButCoord) + iButCoord->SetChosenButton(this); + StateChanged(); + } + +EXPORT_C void CEikButtonBase::StateChanged() + { + } + +EXPORT_C TBool CEikButtonBase::IsPressed() const + { + return(iButFlags&KButtonPressedMask); + } + +EXPORT_C CEikButtonBase::TDrawState CEikButtonBase::DrawState() const + { + return((TDrawState)(iButFlags&KButtonDrawStateMask)); + } + +EXPORT_C void CEikButtonBase::CopyDrawStateTo(CEikButtonBase* aTargetButton) const + { // intended to be called from inside the StateChanged() function of a container button + aTargetButton->iButFlags&=(~KButtonDrawStateMask); + aTargetButton->iButFlags|=DrawState(); + } + +EXPORT_C void CEikButtonBase::SetReportOnPointerDown() + { + iButFlags|=KButtonReportOnPointerDown; + } + +EXPORT_C void CEikButtonBase::SetBehavior(TButtonBehavior aType) + { + if (aType&EEikButtonReportsOnPointerDown) + SetReportOnPointerDown(); + iButFlags&=(~KButtonBehaviorMask); + iButFlags|=(aType&(~EEikButtonReportsOnPointerDown)); + } + +EXPORT_C TKeyResponse CEikButtonBase::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + const TInt code=aKeyEvent.iCode; + if (code==EKeyDownArrow || code ==EKeyUpArrow) + return(EKeyWasNotConsumed); + if (aType!=EEventKey) + return(EKeyWasConsumed); + CEikButtonBase::TState oldState=State(); + switch (code) + { + case EKeyLeftArrow: + case EKeyTab: + case EKeyRightArrow: + Animate(); + default: + ; + } + TKeyResponse ret=EKeyWasNotConsumed; + if (State()!=oldState) + { + ReportEventL(MCoeControlObserver::EEventStateChanged); + ret=EKeyWasConsumed; + } + return ret; + } + +EXPORT_C void CEikButtonBase::HandlePointerEventL(const TPointerEvent& /*aPointerEvent*/) + { + } + +EXPORT_C void* CEikButtonBase::ExtensionInterface( TUid /*aInterface*/ ) + { + return NULL; + } + +EXPORT_C TCoeInputCapabilities CEikButtonBase::InputCapabilities() const + { + return LafButtonBase::InputCapabilities(); + } + +TBool CEikButtonBase::ClickCompleted() + { + TButtonBehavior behav=(TButtonBehavior)(iButFlags&KButtonBehaviorMask); + switch (State()) + { + case EClear: + if (behav==EEikButtonStaysClear) + return(EFalse); + SetState(iButFlags&KButtonTristate? EIndeterminate: ESet); + break; + case ESet: + if (iButCoord || behav==EEikButtonStaysSet) + return(EFalse); + SetState(EClear); + break; + case EIndeterminate: + SetState(ESet); + break; + } + return(ETrue); // means SetState() was called + } + +EXPORT_C void CEikButtonBase::Animate() + { + iButFlags|=KButtonPressedMask; + StateChanged(); + DrawNow(); + iCoeEnv->Flush(KAnimationDelayInMicroSeconds); + iButFlags&=(~KButtonPressedMask); + if (!ClickCompleted()) + StateChanged(); + DrawNow(); + iCoeEnv->WsSession().Flush(); + } + +EXPORT_C void CEikButtonBase::SetAllowTristate() + { + iButFlags|=KButtonAllowTristate; + } + +EXPORT_C void CEikButtonBase::SetIgnoreNextPointerUp() + { + iButFlags|=EIgnoreNextPointerUp; + } + +/** + * Writes the internal state of the control and its components to aStream. + * Does nothing in release mode. + * Designed to be overidden and base called by subclasses. + * + * @internal + * @since App-Framework_6.1 + */ +#ifndef _DEBUG +EXPORT_C void CEikButtonBase::WriteInternalStateL(RWriteStream&) const + {} +#else +EXPORT_C void CEikButtonBase::WriteInternalStateL(RWriteStream& aWriteStream) const + { + _LIT(KEikLitCmdButBaseCtlStart,""); + _LIT(KEikLitCmdButBaseCtlEnd,"<\\CEikButtonBase>"); + _LIT(KEikLitCmdButBaseFlags,""); + _LIT(KEikLitCmdButBaseFlagsEnd,"<\\iButFlags>"); + + aWriteStream << KEikLitCmdButBaseCtlStart; + aWriteStream << KEikLitCmdButBaseFlags; + aWriteStream.WriteInt32L(iButFlags); + aWriteStream << KEikLitCmdButBaseFlagsEnd; + CEikBorderedControl::WriteInternalStateL(aWriteStream); + aWriteStream << KEikLitCmdButBaseCtlEnd; + } +#endif + +EXPORT_C void CEikButtonBase::Reserved_2() + {} +EXPORT_C void CEikButtonBase::Reserved_3() + {} + +// +// class TEikButtonCoordinator +// + +EXPORT_C TEikButtonCoordinator::TEikButtonCoordinator() + : iChosenButton(NULL) + {} + +EXPORT_C void TEikButtonCoordinator::SetChosenButton(CEikButtonBase* aChosenButton) + { + if (iChosenButton==aChosenButton) + return; + if (iChosenButton) + { + iChosenButton->SetState(CEikButtonBase::EClear); + iChosenButton->DrawNow(); + } + iChosenButton=aChosenButton; + }