uifw/EikStd/coctlsrc/EIKBUTB.CPP
changeset 0 2f259fa3e83a
--- /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 <eikbutb.h>
+#include <coemain.h>
+#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<TCoeColorUse>& /*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,"<CEikButtonBase>");
+	_LIT(KEikLitCmdButBaseCtlEnd,"<\\CEikButtonBase>");
+	_LIT(KEikLitCmdButBaseFlags,"<iButFlags>");
+	_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;
+	}