diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/coctlsrc/EIKTBAR.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/coctlsrc/EIKTBAR.CPP Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,545 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include "LAFTBAR.H" + + +EXPORT_C CEikToolBar::~CEikToolBar() + { + delete iBrushAndPenContext; + delete iControlTypes; + } + +EXPORT_C CEikToolBar::CEikToolBar() + { + __DECLARE_NAME(_S("CEikToolBar")); + LafToolBar::GetDefaultBorder(iBorder); + } + +void CEikToolBar::BaseConstructL() + { + CreateWindowL(); + Window().SetBackgroundColor(iEikonEnv->ControlColor(EColorToolbarBackground,*this)); + RDrawableWindow* window=DrawableWindow(); + window->SetPointerGrab(ETrue); + window->SetShadowDisabled(ETrue); + EnableDragEvents(); + iBrushAndPenContext=CCoeBrushAndPenContext::NewL(); + iBrushAndPenContext->SetBrushStyle(CGraphicsContext::ESolidBrush); + iBrushAndPenContext->SetBrushColor(iEikonEnv->ControlColor(EColorToolbarBackground,*this)); + iBrushAndPenContext->SetPenColor(iEikonEnv->ControlColor(EColorToolbarText,*this)); + SetControlContext(iBrushAndPenContext); + } + +EXPORT_C void CEikToolBar::ConstructFromResourceL(TResourceReader& aReader) + { + if (!iControlTypes) + iControlTypes=new(ELeave) CArrayFixFlat(4); + const TInt length=aReader.ReadInt16(); + const TInt breadth=aReader.ReadInt16(); + const TInt lines=aReader.ReadInt8(); + iToolBarFlags=aReader.ReadInt32(); + if (iToolBarFlags&EEikToolBarHorizontal) + CEikControlGroup::ConstructL(CEikControlGroup::EFromTopLeft,CEikControlGroup::ELayHorizontally); + else + CEikControlGroup::ConstructL(CEikControlGroup::EFromTopRight,CEikControlGroup::ELayVertically); + if (length) + SetLengthInPixels(length); + if (breadth) + SetBreadthInPixels(breadth); + SetNumberOfLines(lines,iToolBarFlags&EEikToolBarDistributeControlsEvenlyBetweenLines); + if (iToolBarFlags&EEikToolBarAllControlsSameSize) + SetControlsAllSameSize(); + + const TInt count=aReader.ReadInt16(); + for (TInt ii=0;iiCreateCustomCommandControlL(ctrlType); + __ASSERT_DEBUG(ctrl, Panic(EEikPanicToolBarNullControl)); + ctrl->SetNonFocusing(); + CleanupStack::PushL(ctrl); + const TInt id=aReader.ReadInt16(); + const TInt flags=aReader.ReadInt16(); + TEikGroupControl groupCtrl(ctrl,id,aReader.ReadInt16(),flags); + AddControlL(groupCtrl); // ownership now taken by array + CleanupStack::Pop(); // ctrl + AddControlTypeL(ctrlType); + ctrl->ConstructFromResourceL(aReader); + } + + aReader.ReadInt32(); // extension link + } + +EXPORT_C void CEikToolBar::SetDimmed(TBool aDimmed) + { + const TInt count=iControlArray->Count(); + for (TInt ii=0;iiSetDimmed(aDimmed); + } + +EXPORT_C void CEikToolBar::ReduceRect(TRect& aBoundingRect) const + { + if (!IsVisible()) + return; + if (iToolBarFlags&EEikToolBarHorizontal) + aBoundingRect.iTl.iY+=iSize.iHeight; + else + aBoundingRect.iBr.iX-=iSize.iWidth; + } + +EXPORT_C void CEikToolBar::SetBoundingRect(const TRect& aRect) + { + TSize size=aRect.Size(); + SetLengthInPixels(iToolBarFlags&EEikToolBarHorizontal? size.iWidth: size.iHeight); + TSize thisSize=MinimumSize(); + TPoint thisPos=aRect.iTl; + if (iToolBarFlags&EEikToolBarHorizontal) + iSize.iHeight=thisSize.iHeight; + else + { + thisPos.iX=aRect.iBr.iX-thisSize.iWidth; + iSize.iWidth=thisSize.iWidth; + } + CCoeControl::SetExtent(thisPos,iSize); + } + +EXPORT_C void CEikToolBar::StaticConstructL(MEikCommandObserver* aCommandObserver,TInt aResourceId) + { + BaseConstructL(); + iCommandObserver=aCommandObserver; + if (aResourceId) + { + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC(reader,aResourceId); + ConstructFromResourceL(reader); + CleanupStack::PopAndDestroy(); + } + } + +EXPORT_C void CEikToolBar::ConstructL(MEikCommandObserver* aCommandObserver,TInt aResourceId,const TRect& aBoundingRect) + { + if (!iControlTypes) + iControlTypes=new(ELeave) CArrayFixFlat(4); + StaticConstructL(aCommandObserver,aResourceId); + SetBoundingRect(aBoundingRect); + if (!(iToolBarFlags&EEikToolBarDelayActivation)) + ActivateL(); + } + +EXPORT_C void CEikToolBar::SetCommandObserver(MEikCommandObserver* aCommandObserver) + { + iCommandObserver=aCommandObserver; + } + +EXPORT_C void CEikToolBar::HandleControlEventL(CCoeControl* aControl,TCoeEvent aEvent) + { + __ASSERT_DEBUG(iCommandObserver, Panic(EEikPanicToolBarHasNoObserver)); + if (aEvent==EEventStateChanged) + { + TInt aCommand=ControlId(aControl); + iCommandObserver->ProcessCommandL(aCommand); + } + } + +EXPORT_C void CEikToolBar::AddControlL(CCoeControl* aControl,TInt aId) + { + CEikControlGroup::AddControlL(aControl,aId); + aControl->SetObserver(this); + } + +EXPORT_C void CEikToolBar::AddControlL(TEikGroupControl& aGroupControl) + { + CEikControlGroup::AddControlL(aGroupControl); + aGroupControl.iControl->SetObserver(this); + } + +EXPORT_C void CEikToolBar::CoordinateButtons(TInt aId,TInt aCount,TEikButtonCoordinator* aCoordinator) + { + TInt index=IndexById(aId); + while (aCount--) + ((CEikButtonBase*)Control(index++))->SetCoordinator(aCoordinator); + } + +EXPORT_C TBool CEikToolBar::DelayActivation() const + { + return (iToolBarFlags&EEikToolBarDelayActivation); + } + +EXPORT_C void CEikToolBar::SetButtonStateOn(TInt aId,TBool aState) + { + CEikButtonBase* button=(CEikButtonBase*)ControlById(aId); + CEikButtonBase::TState bState=aState? CEikButtonBase::ESet: CEikButtonBase::EClear; + if (button->State()==bState) + return; + button->SetState(bState); + button->DrawDeferred(); + } + +/** + * 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 CEikToolBar::WriteInternalStateL(RWriteStream&) const + {} +#else +EXPORT_C void CEikToolBar::WriteInternalStateL(RWriteStream& aWriteStream) const + { + _LIT(KLitEikTBarCtlStart, ""); + _LIT(KLitEikTBarCtlEnd, "<\\CEikToolBar>"); + _LIT(KLitEikTBarFlgs,""); + _LIT(KLitEikTBarFlgsEnd,"<\\iToolBarFlags>"); + _LIT(KLitEikTBarCntxt,""); + _LIT(KLitEikTBarCntxtEnd,"<\\iBrushAndPenContext>"); + _LIT(KLitEikTBarCtlTypes,""); + _LIT(KLitEikTBarCtlTypesEnd,"<\\iControlTypes>"); + + aWriteStream << KLitEikTBarCtlStart; + aWriteStream << KLitEikTBarFlgs; + aWriteStream.WriteInt32L(iToolBarFlags); + aWriteStream << KLitEikTBarFlgsEnd; + aWriteStream << KLitEikTBarCntxt; + aWriteStream.WriteInt32L(iBrushAndPenContext->BrushStyle()); + aWriteStream << iBrushAndPenContext->BrushColor(); + if(&(iBrushAndPenContext->BrushBitmap())) + aWriteStream << iBrushAndPenContext->BrushBitmap(); + aWriteStream << iBrushAndPenContext->PenColor(); + aWriteStream << KLitEikTBarCntxtEnd; + aWriteStream << KLitEikTBarCtlTypes; + const TInt count=iControlTypes->Count(); + for(TInt ii=0;iiCount(); + } + +/** + * 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 CEikToolBar::GetColorUseListL(CArrayFix& aColorUseList) const + { + CEikControlGroup::GetColorUseListL(aColorUseList); + LafToolBar::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 CEikToolBar::HandleResourceChange(TInt aType) + { + CEikControlGroup::HandleResourceChange(aType); + + if(aType==KEikMessageColorSchemeChange) + { + iBrushAndPenContext->SetBrushStyle(CGraphicsContext::ESolidBrush); + iBrushAndPenContext->SetBrushColor(iEikonEnv->ControlColor(EColorToolbarBackground,*this)); + iBrushAndPenContext->SetPenColor(iEikonEnv->ControlColor(EColorToolbarText,*this)); + Window().SetBackgroundColor(iEikonEnv->ControlColor(EColorToolbarBackground,*this)); + } + } + +void CEikToolBar::AddControlTypeL(TInt aType) + { + iControlTypes->AppendL(aType); + } + +void CEikToolBar::RemoveControlType(TInt aIndex) + { + iControlTypes->Delete(aIndex); + } + +TBool CEikToolBar::ControlIsButton(TInt aIndex) const + { + if (ControlCount()!=iControlTypes->Count()) + return EFalse; + const TInt type=(*iControlTypes)[aIndex]; + switch (type) + { + case EEikCtCommandButton: + case EEikCtLabeledButton: + case EEikCtTextButton: + case EEikCtMenuButton: + case EEikCtBitmapButton: + return ETrue; + default: + break; + } + return EFalse; + } + +void CEikToolBar::SetCommandL(TInt aPosition,TInt aCommandId,const TDesC* aText,const CFbsBitmap* aBitmap,const CFbsBitmap* aMask) + { + ButtonByIndex(aPosition)->SetCommandL(aCommandId,aText,aBitmap,aMask); + SetCurrentId(aPosition,aCommandId); + } + +void CEikToolBar::SetCommandL(TInt /*aPosition*/,TInt /*aResourceId*/) + { + + } + +void CEikToolBar::SetCommandSetL(TInt /*aResourceId*/) + { + + } + +void CEikToolBar::AddCommandL(TInt /*aPosition*/,TInt /*aCommandId*/,const TDesC* /*aText*/,const CFbsBitmap* /*aBitmap*/,const CFbsBitmap* /*aMask*/) + { + User::Leave(KErrNotSupported); + } + +void CEikToolBar::AddCommandToStackL(TInt aPosition,TInt aCommandId,const TDesC* aText,const CFbsBitmap* aBitmap,const CFbsBitmap* aMask) + { + ButtonByIndex(aPosition)->AddCommandToStackL(CurrentId(aPosition),aText,aBitmap,aMask); + SetCurrentId(aPosition,aCommandId); + } + +void CEikToolBar::AddCommandToStackL(TInt /*aPosition*/,TInt /*aResourceId*/) + { + + } + +void CEikToolBar::AddCommandSetToStackL(TInt /*aResourceId*/) + { + + } + +void CEikToolBar::SetDefaultCommand(TInt /*aCommandId*/) + { + } + +TSize CEikToolBar::CalcMinimumSizeL(TInt /*aResourceId*/) + { + return MinimumSize(); + } + +void CEikToolBar::SetMSKCommandObserver(MEikCommandObserver* /*aCommandObserver*/) + { + } + +void CEikToolBar::DimCommandByPosition(TInt /*aPosition*/,TBool /*aDimmed*/) + { + } + +TBool CEikToolBar::IsCommandDimmedByPosition(TInt /*aPosition*/) const + { + return EFalse; + } + +void CEikToolBar::MakeCommandVisibleByPosition(TInt /*aPosition*/,TBool /*aVisible*/) + { + } + +TBool CEikToolBar::IsCommandVisibleByPosition(TInt /*aPosition*/) const + { + return EFalse; + } + +void CEikToolBar::AnimateCommandByPosition(TInt /*aPosition*/) + { + } + +void CEikToolBar::RemoveCommandFromStack(TInt aPosition,TInt aCommandId) + { + if (aCommandId==CurrentId(aPosition)) + { + SetCurrentId(aPosition,ButtonByIndex(aPosition)->PopCommandFromStack()); + } + else + { + ButtonByIndex(aPosition)->RemoveCommandFromStack(aCommandId); + } + } + +TInt CEikToolBar::CurrentId(TInt aPosition) const + { + return CONST_CAST(CEikToolBar*,this)->GroupControlByIndex(IndexFromPosition(aPosition)).iId; + } + +void CEikToolBar::SetCurrentId(TInt aPosition,TInt aId) + { + GroupControlByIndex(IndexFromPosition(aPosition)).iId=aId; + } + +TInt CEikToolBar::IndexFromPosition(TInt aPos) const + { + const TInt count=iControlArray->Count(); + for (TInt ii=0;iiSetDimmed(aDimmed); + } + +TBool CEikToolBar::IsCommandDimmed(TInt aCommandId) const + { + CCoeControl* ctrl=ControlById(aCommandId); + // __ASSERT_ALWAYS(ctrl,Panic(........ + return ctrl->IsDimmed(); + } + +CCoeControl* CEikToolBar::AsControl() + { + return this; + } + +const CCoeControl* CEikToolBar::AsControl() const + { + return this; + } + +void CEikToolBar::MakeCommandVisible(TInt aCommandId,TBool aVisible) + { + CCoeControl* ctrl=ControlById(aCommandId); + // __ASSERT_ALWAYS(ctrl,Panic(........ + ctrl->MakeVisible(aVisible); + } + +TBool CEikToolBar::IsCommandVisible(TInt aCommandId) const + { + CCoeControl* ctrl=ControlById(aCommandId); + // __ASSERT_ALWAYS(ctrl,Panic(........ + return ctrl->IsVisible(); + } + +CCoeControl* CEikToolBar::GroupControlById(TInt aCommandId) const + { + return ControlById(aCommandId); + } + +CEikCommandButton* CEikToolBar::GroupControlAsButton(TInt aCommandId) const + { + CEikCommandButton* ret=NULL; + const TInt index=IndexById(aCommandId); + if (index!=KErrNotFound && ControlIsButton(index)) + ret=STATIC_CAST(CEikCommandButton*,ControlById(aCommandId)); + return ret; + } + +TInt CEikToolBar::CommandId(TInt aCommandPos) const + { + return CurrentId(aCommandPos); + } + +TInt CEikToolBar::ButtonCount() const + { + TInt numButtons=0; + const TInt ctrlCount=iControlArray->Count(); + for (TInt ii=0;ii