diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/coctlsrc/EIKLBBUT.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/coctlsrc/EIKLBBUT.CPP Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,350 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include "laflbbut.h" + +/** + * 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 CEikLabeledButton::WriteInternalStateL(RWriteStream&) const + {} +#else +EXPORT_C void CEikLabeledButton::WriteInternalStateL(RWriteStream& aWriteStream) const + { + _LIT(KEikLitLbButCtlSt,""); + _LIT(KEikLitLbButCtlEnd,"<\\CEikLabeledButton>"); + _LIT(KEikLitLbButCtlHkey, ""); + _LIT(KEikLitLbButCtlHkeyEnd, "<\\iHotKeyCode>"); + _LIT(KEikLitLbButCtlFlags, ""); + _LIT(KEikLitLbButCtlFlagsEnd, "<\\iLButFlags>"); + + aWriteStream << KEikLitLbButCtlSt; + aWriteStream << KEikLitLbButCtlHkey; + aWriteStream.WriteInt32L(iHotKeyCode); + aWriteStream << KEikLitLbButCtlHkeyEnd; + aWriteStream << KEikLitLbButCtlFlags; + aWriteStream.WriteInt32L(iLButFlags); + aWriteStream << KEikLitLbButCtlFlagsEnd; + CCoeControl::WriteInternalStateL(aWriteStream); + aWriteStream << KEikLitLbButCtlEnd; + } +#endif + +EXPORT_C CEikLabeledButton::CEikLabeledButton() + { + SetComponentsToInheritVisibility(ETrue); + } + +EXPORT_C CEikLabeledButton::~CEikLabeledButton() + { + delete iButton; + delete iLabel; + } + +EXPORT_C void CEikLabeledButton::ConstructL(CEikCommandButtonBase* aButton,TInt aHotKeyCode,TInt aFlags) + { + __ASSERT_DEBUG(aButton,Panic(EEikPanicNullPointer)); + iButton=aButton; + iButton->SetObserver(this); + iHotKeyCode=aHotKeyCode; + iLButFlags=aFlags; + CreateLabelL(); + if(iLButFlags&EEikLabeledButtonIsDefault) + iButton->SetDefault(ETrue); + } + +EXPORT_C void CEikLabeledButton::ConstructFromResourceL(TResourceReader& aReader) + { + const TInt type=aReader.ReadInt16(); + switch (type) + { + case EEikCtCommandButton: + iButton=new(ELeave) CEikCommandButton; + break; + case EEikCtMenuButton: + iButton=new(ELeave) CEikMenuButton; + break; + case EEikCtTextButton: + iButton=new(ELeave) CEikTextButton; + break; + case EEikCtBitmapButton: + iButton=new(ELeave) CEikBitmapButton; + break; + default: + Panic(EEikPanicLabeledButtonInvalidButtonType); + } + iButton->SetContainerWindowL(*this); + iButton->ConstructFromResourceL(aReader); + iButton->SetObserver(this); + iHotKeyCode=aReader.ReadInt32(); + iLButFlags=aReader.ReadInt8(); + CreateLabelL(); + if(iLButFlags&EEikLabeledButtonIsDefault) + iButton->SetDefault(ETrue); + } + +EXPORT_C CEikCommandButtonBase* CEikLabeledButton::Button() const + { + return iButton; + } + +EXPORT_C CEikLabel* CEikLabeledButton::Label() const + { + return iLabel; + } + +EXPORT_C TInt CEikLabeledButton::HotKeyCode() const + { + return iHotKeyCode; + } + +EXPORT_C TBool CEikLabeledButton::ShowsHotKey() const + { + return (LafLabeledButton::ShowHotKey() ? iLButFlags&EShowHotKey: EFalse); + } + +EXPORT_C TBool CEikLabeledButton::PlainHotKey() const + { + return iLButFlags&EPlainHotKey; + } + +EXPORT_C TKeyResponse CEikLabeledButton::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + if (!IsDimmed() && aType==EEventKey) + { + TBool consumed=EFalse; + if ((aKeyEvent.iModifiers & EAllStdModifiers) == EModifierCtrl) + consumed=(aKeyEvent.iCode==(TUint)iHotKeyCode && !(aKeyEvent.iModifiers&EModifierPureKeycode)); + else + { + switch (iHotKeyCode) + { + case EEikBidCancel: + consumed=(aKeyEvent.iCode==EKeyEscape); + break; + case EEikBidOk: + consumed=(aKeyEvent.iCode==EKeyEnter); + break; +// AKNLAF start + case EEikBidSelect: + consumed=(aKeyEvent.iCode==EKeyEnter); + break; +// AKNLAF end + case EEikBidTab: + consumed=(aKeyEvent.iCode==EKeyTab); + break; + case EEikBidDelete: + consumed=(aKeyEvent.iCode==EKeyBackspace); + break; + case EEikBidSpace: + consumed=(aKeyEvent.iCode==EKeySpace); + break; + default: + { + consumed=(iLButFlags&EPlainHotKey && TCharF(aKeyEvent.iCode)==TCharF((TUint)iHotKeyCode)); + break; + } + } + } + if (consumed) + { + iButton->Animate(); + ReportEventL(MCoeControlObserver::EEventStateChanged); + return EKeyWasConsumed; + } + } + return EKeyWasNotConsumed; + } + +EXPORT_C TSize CEikLabeledButton::MinimumSize() + { + TSize size=iButton->MinimumSize(); + //size.iHeight=Max(KMinButtonHeight,size.iHeight); + size.iHeight=Max(LafLabeledButton::MinimumButtonHeight(),size.iHeight); + const TSize labelSize=(ShowsHotKey()? iLabel->MinimumSize()+TSize(LafLabeledButton::HorizontalLabelMargin(),LafLabeledButton::VerticalLabelMargin()) : TSize()); + size.iWidth=Max(size.iWidth,labelSize.iWidth); + size.iHeight+=labelSize.iHeight; + return size; + } + +EXPORT_C void CEikLabeledButton::SetContainerWindowL(const CCoeControl& aContainer) + { + CCoeControl::SetContainerWindowL(aContainer); + if (iButton) + iButton->SetContainerWindowL(aContainer); + if (iLabel) + iLabel->SetContainerWindowL(aContainer); + CopyControlContextFrom(&aContainer); + } + +EXPORT_C void CEikLabeledButton::SetDimmed(TBool aDimmed) + { + CCoeControl::SetDimmed(aDimmed); + if (iButton) + iButton->SetDimmed(aDimmed); + if (iLabel) + iLabel->SetDimmed(aDimmed); + } + +EXPORT_C TCoeInputCapabilities CEikLabeledButton::InputCapabilities() const + { + return TCoeInputCapabilities(LafLabeledButton::InputCapabilities()); + } + +EXPORT_C void CEikLabeledButton::Animate() + { + if (iButton) + iButton->Animate(); + } + +EXPORT_C void CEikLabeledButton::UpdateHotKey(TInt aKeyCode,TFlags aFlags) + { + iHotKeyCode=aKeyCode; + iLButFlags=aFlags; + TRAPD(err,UpdateHotKeyL()); + if (err) + { + TPtrC text(KNullDesC); + __ASSERT_DEBUG_NO_LEAVE(iLabel->SetTextL(text)); // won't leave as we've already called SetBufferReserveLength during construction + } + } + +TInt CEikLabeledButton::CountComponentControls() const + { + return 2; + } + +CCoeControl* CEikLabeledButton::ComponentControl(TInt aIndex) const + { + if (aIndex==0) + return iButton; + else if (aIndex==1) + return iLabel; + return NULL; + } + +void CEikLabeledButton::SizeChanged() + { + //const TSize butSize(iSize.iWidth,Max(KMinButtonHeight,iButton->MinimumSize().iHeight)); + const TSize butSize(iSize.iWidth,Max(LafLabeledButton::MinimumButtonHeight(),iButton->MinimumSize().iHeight)); + iButton->SetExtent(iPosition,butSize); + iLabel->SetExtent(TPoint(iPosition.iX,iPosition.iY+butSize.iHeight), + TSize(iSize.iWidth,iSize.iHeight-butSize.iHeight)); + } + +void CEikLabeledButton::HandleControlEventL(CCoeControl* /*aControl*/,TCoeEvent aEventType) + { + ReportEventL(aEventType); + } + +void CEikLabeledButton::CreateLabelL() + { + iLabel=new(ELeave) CEikLabel; + iLabel->SetContainerWindowL(*this); + iLabel->CopyControlContextFrom(this); + iLabel->SetBufferReserveLengthL(LafLabeledButton::MaxLabelTextLengthInChars()); + UpdateHotKeyL(); + iLabel->SetFont(iEikonEnv->AnnotationFont()); + iLabel->SetAlignment(LafLabeledButton::LabelAlignment()); + } + +void CEikLabeledButton::UpdateHotKeyL() + { + TPtrC text; + if (iHotKeyCode<=EEikBidCancel && iHotKeyCode>=EEikBidSpace) + { + if (ShowsHotKey()) + text.Set(iEikonEnv->KeyPressLabel(EEikBidCancel-iHotKeyCode)); + } + else + { + if (/*iHotKeyCode && */ShowsHotKey()) + { + if (PlainHotKey()) + { + TBuf<1> buf; + buf.Append(TChar(iHotKeyCode)); + text.Set(buf); + } + else + { + TBuf<10> defaultText = iEikonEnv->KeyPressLabel((EEikBidCancel)-(EEikBidSpace)+1); + const TInt len=defaultText.Length(); + defaultText[len-1]=(TInt8)iHotKeyCode; + text.Set(defaultText); + } + } + if (!PlainHotKey()) + { + if (iHotKeyCode>='A' && iHotKeyCode<='Z') + iHotKeyCode-='A'-1; + else + iHotKeyCode-='a'-1; + } + } + iLabel->SetTextL(text); + } + +/** + * 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 CEikLabeledButton::GetColorUseListL(CArrayFix& aColorUseList) const + { + CCoeControl::GetColorUseListL(aColorUseList); + } + +/** + * 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 CEikLabeledButton::HandleResourceChange(TInt aType) + { + CCoeControl::HandleResourceChange(aType); + } + +EXPORT_C void CEikLabeledButton::HandlePointerEventL(const TPointerEvent& aPointerEvent) + { + CAknControl::HandlePointerEventL(aPointerEvent); + } + +EXPORT_C void* CEikLabeledButton::ExtensionInterface( TUid /*aInterface*/ ) + { + return NULL; + } + +void CEikLabeledButton::Reserved_2() + {}