--- /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 <barsread.h>
+#include <eiklbbut.h>
+#include <eikcmbut.h>
+#include <eikmnbut.h>
+#include <eiklabel.h>
+#include <eikenv.h>
+#include <eikpanic.h>
+#include <uikon.hrh>
+#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,"<CEikLabeledButton>");
+ _LIT(KEikLitLbButCtlEnd,"<\\CEikLabeledButton>");
+ _LIT(KEikLitLbButCtlHkey, "<iHotKeyCode>");
+ _LIT(KEikLitLbButCtlHkeyEnd, "<\\iHotKeyCode>");
+ _LIT(KEikLitLbButCtlFlags, "<iLButFlags>");
+ _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<TCoeColorUse>& 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()
+ {}