diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/src/HuiControlGroup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiControlGroup.cpp Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,257 @@ +/* +* Copyright (c) 2006-2007 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: ?Description +* +*/ + + + +#include "uiacceltk/HuiControlGroup.h" // Class definition +#include "uiacceltk/HuiLayouts.h" +#include "uiacceltk/HuiControl.h" +#include "uiacceltk/HuiTransformation.h" +#include "uiacceltk/HuiStatic.h" +#include "uiacceltk/HuiProbe.h" +#include "uiacceltk/HuiUtil.h" +#include "uiacceltk/HuiPanic.h" +#include "uiacceltk/HuiDisplay.h" +#include "uiacceltk/HuiEnv.h" + +CHuiControlGroup::CHuiControlGroup(TInt aResourceId, CHuiEnv& aEnv) + : iResourceId(aResourceId), iEnv(aEnv), iAcceptInput(ETrue), iOpacity( 1.f ) + { + HUI_PROBE_ASSOCIATE_WITH_CURRENT_SESSION + HUI_PROBE_REPORT_CONSTRUCTED + } + + +void CHuiControlGroup::ConstructL() + { + } + + +void CHuiControlGroup::ConstructFromResourceL(TResourceReader& /*aReader*/) + { + /// @todo Method not yet implemented. Implement if UI creation from resource file is required. + } + + +CHuiControlGroup::~CHuiControlGroup() + { + iUnhandledEventObservers.Close(); + + // The group owns the controls, so it must destroy them. + // Destroy in reverse order so that references will be removed in + // natural order (children of a pane will be removed before the pane). + for(TInt i = iControls.Count() - 1; i >= 0; --i) + { + CHuiControl* c = iControls[i]; + iControls.Remove(i); + delete c; + } + iControls.Reset(); + + delete iTransform; + HUI_PROBE_REPORT_DESTRUCTED + } + + +EXPORT_C TInt CHuiControlGroup::ResourceId() const + { + return iResourceId; + } + + +EXPORT_C void CHuiControlGroup::AppendL(CHuiControl* aControl) + { + User::LeaveIfError( iControls.Append(aControl) ); + aControl->SetControlGroup(*this); + + // if the control group is shown in a roster, the new control + // has to be shown as well + + TRAPD( err, + { + // if there are other controls in the group, check from those + if ( iControls.Count() > 1 ) // so more than this added one + { + if ( iControls[0]->Display() ) + { + aControl->ShowL( *iControls[0]->Display() ); + } + } + else + { + // if not, go though the displays + for ( TInt d = 0; d < iEnv.DisplayCount(); d++ ) + { + CHuiDisplay* display = (iEnv.Displays())[d]; + // if this control group is in any roster, show the control in that display. + if ( display->Roster().Find( this ) != KErrNotFound ) + { + aControl->ShowL( *display ); + } + } + } + + }); // TRAPD + if ( err != KErrNone ) + { + iControls.Remove( iControls.Count()-1); + CHuiControlGroup* nullGroup = NULL; + aControl->SetControlGroup(*nullGroup); + User::Leave( err ); + } + } + + +EXPORT_C void CHuiControlGroup::AppendAndPopL(CHuiControl* aControl) + { + AppendL(aControl); + CleanupStack::Pop(aControl); + } + + +EXPORT_C TInt CHuiControlGroup::Remove(CHuiControl* aControl) + { + TInt index = iControls.Find(aControl); + if(index != KErrNotFound) + { + // If the control group is shown is a roster, the + // control has to be hidden as well. + CHuiDisplay* display = aControl->Display(); + if ( display ) // check that the control is bound to a display + { + // Check that this group is shown on the display. + if ( display->Roster().Find( this ) != KErrNotFound ) + { + // hide control + aControl->Hide( *display ); + } + } + + iControls.Remove(index); + CHuiControlGroup* nullGroup = NULL; + aControl->SetControlGroup(*nullGroup); + return KErrNone; + } + // The control was not in the group. + return KErrNotFound; + } + + +EXPORT_C TInt CHuiControlGroup::Count() const + { + return iControls.Count(); + } + + +EXPORT_C CHuiControl& CHuiControlGroup::Control(TInt aIndex) const + { + return *iControls[aIndex]; + } + + +EXPORT_C CHuiControl* CHuiControlGroup::FindControl(TInt aId) const + { + for(TInt i = 0; i < iControls.Count(); ++i) + { + if(iControls[i]->Id() == aId) + { + return iControls[i]; + } + } + return NULL; + } + + +EXPORT_C void CHuiControlGroup::EnableTransformationL(TBool aIsTransformed) + { + if(iTransform && !aIsTransformed) + { + // Disable transformation. + delete iTransform; + iTransform = NULL; + } + else if(!iTransform && aIsTransformed) + { + // Enable transformation. + iTransform = CHuiTransformation::NewL(); + } + else + { + // For PC-lint + } + } + + +EXPORT_C CHuiTransformation& CHuiControlGroup::Transformation() + { + if(!iTransform) + { + THuiPanic::Panic(THuiPanic::EControlGroupTransformNotEnabled); + } + return *iTransform; + } + + +EXPORT_C TBool CHuiControlGroup::IsTransformed() const + { + return iTransform != 0; + } + + +EXPORT_C TBool CHuiControlGroup::AcceptInput() const + { + return iAcceptInput; + } + + +EXPORT_C void CHuiControlGroup::SetAcceptInput(TBool aAcceptInput) + { + iAcceptInput = aAcceptInput; + } + + +TBool CHuiControlGroup::Changed() const + { + if(iTransform && iTransform->Changed()) + { + return ETrue; + } + + return iOpacity.Changed(); + } + + +void CHuiControlGroup::ClearChanged() + { + iOpacity.ClearChanged(); + + if(iTransform) + { + iTransform->ClearChanged(); + } + + for(TInt i = 0; i < iControls.Count(); ++i) + { + iControls[i]->ClearChanged(); + } + } + + +HUI_SESSION_OBJECT_IMPL_EXPORT(CHuiControlGroup, ETypeControlGroup) + + +