diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/coctlsrc/eikbtgps.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/coctlsrc/eikbtgps.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,130 @@ +/* +* Copyright (c) 1998 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 + +const TUid KEikButtonGroupStackUid={0x10006015}; + +// +// class TBtGrpStackIter +// + +class TBtGrpStackIter : public TDblQueIter + { +public: + TBtGrpStackIter(TDblQue& aList); + }; + +TBtGrpStackIter::TBtGrpStackIter(TDblQue& aList) + : TDblQueIter(aList) + { + SetToFirst(); + } + +// +// class CEikButtonGroupStack +// + +CEikButtonGroupContainer* CEikButtonGroupStack::Current() + { // static + CEikButtonGroupContainer* ret=NULL; + CEikButtonGroupStack* self=CEikButtonGroupStack::Self(); + if (self) + { + TBtGrpStackIter iter(self->iBtStack); + CEikButtonGroupContainer* obj=NULL; + TInt ordinalPos=KMinTInt; + while ((obj=iter++)!=NULL) + { + if (obj->IsVisible()) + { + const TInt winPos=obj->DrawableWindow()->OrdinalPosition(); + if (winPos>=0 && (winPosiBtStack); + CEikButtonGroupContainer* obj=NULL; + while ((obj=iter++)!=NULL) + { + if (obj->IsVisible()) + { + const TSize size=obj->Size(); + ret.iHeight=Max(ret.iHeight,size.iHeight); + ret.iWidth=Max(ret.iWidth,size.iWidth); + } + } + } + return ret; + } + +void CEikButtonGroupStack::AddL(CEikButtonGroupContainer& aGroup) + { // static + CEikButtonGroupStack* self=CEikButtonGroupStack::Self(); + if (!self) + { + self=new(ELeave) CEikButtonGroupStack(); // CCoeEnv takes ownership immediately + self->iBtStack.AddFirst(aGroup); + } + else + self->iBtStack.AddLast(aGroup); + } + +void CEikButtonGroupStack::Remove(CEikButtonGroupContainer& aGroup) + { // static + CEikButtonGroupStack* self=CEikButtonGroupStack::Self(); + if (self) + { + TBtGrpStackIter iter(self->iBtStack); + CEikButtonGroupContainer* obj=NULL; + while ((obj=iter++)!=NULL) + { + if ((TInt)obj==(TInt)&aGroup) + { + obj->iBtLink.Deque(); + break; + } + } + } + } + +inline CEikButtonGroupStack::CEikButtonGroupStack() + : CCoeStatic(KEikButtonGroupStackUid), + iBtStack(_FOFF(CEikButtonGroupContainer,iBtLink)) + {} + +inline CEikButtonGroupStack* CEikButtonGroupStack::Self() + {return STATIC_CAST(CEikButtonGroupStack*,CCoeEnv::Static(KEikButtonGroupStackUid));}