--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfwidgetimpl.cpp Thu Dec 17 08:56:02 2009 +0200
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 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: The private implementation of CAlfWidget.
+*
+*/
+
+
+#include "alfwidgetimpl.h"
+#include <alf/alfwidgetcontrol.h>
+#include <alf/alfmodel.h>
+#include <alf/alfcontrolgroup.h>
+#include "alf/alfwidget.h"
+#include "alf/alfattribute.h"
+#include "alf/alfattributevaluetype.h"
+#include <alf/alfexceptions.h>
+#include <libc/string.h>
+#include <alf/ialfelement.h>
+
+#include "alfwidgetattributeownerimpl.h"
+
+
+namespace Alf
+ {
+
+AlfWidgetImpl::AlfWidgetImpl()
+ {
+ mControl = NULL;
+ mModel = NULL;
+ mAttributeList.setAutoDelete(true);
+ mWidgets.setAutoDelete(false);
+ mTakesModelOwnership=false;
+ }
+
+AlfWidgetImpl::~AlfWidgetImpl()
+ {
+ setControl( NULL, true );
+
+ if (mTakesModelOwnership)
+ {
+ delete mModel;
+ mModel = NULL;
+ }
+ mAttributeList.clear();
+ mWidgets.clear();
+ }
+
+void AlfWidgetImpl::setWidgetName( const UString& aWidgetName )
+ {
+ mWidgetName = aWidgetName;
+ }
+
+const UString& AlfWidgetImpl::widgetName() const
+ {
+ return mWidgetName;
+ }
+
+
+CAlfWidgetControl* AlfWidgetImpl::control()
+ {
+ return mControl;
+ }
+
+void AlfWidgetImpl::setControl( CAlfWidgetControl* aControl,bool aDeletePreviousControl)
+ {
+ if ( mControl != aControl )
+ {
+ if( mControl )
+ {
+ if( mModel )
+ {
+ // Remove model change observer from control
+ mModel->removeModelChangeObserver( *mControl );
+ }
+ if( aDeletePreviousControl )
+ {
+ // Delete control from possible control group to avoid double deletion
+ if(mControl->ControlGroup())
+ {
+ mControl->ControlGroup()->Remove(mControl);
+ }
+ // Delete the control
+ delete mControl;
+ mControl = NULL;
+ }
+ }
+
+ // Set the new control.
+ mControl = aControl;
+
+ // Add the new control as an observer for model changes.
+ if( mControl )
+ {
+ if( mModel )
+ {
+ mModel->addModelChangeObserver( *mControl );
+ }
+ mAttributeOwnerImpl.reset(new (EMM) AlfWidgetAttributeOwnerImpl(mControl));
+ }
+ }
+ }
+
+IAlfModel* AlfWidgetImpl::model()
+ {
+ return mModel;
+ }
+
+void AlfWidgetImpl::setModel( IAlfModel* aModel,bool aTakeOwnerShip )
+ {
+ if ( mModel != aModel )
+ {
+ // Release the old model.
+ if (mTakesModelOwnership)
+ {
+ delete mModel;
+ }
+
+ else if (mModel&&mControl)
+ {
+ mModel->removeModelChangeObserver(*mControl);
+ }
+
+ // Set the new model.
+ mModel = aModel;
+ mTakesModelOwnership=aTakeOwnerShip;
+ // Add the control as an observer for model changes.
+ if ( mModel && mControl )
+ {
+ mModel->addModelChangeObserver( *mControl );
+ }
+ }
+ else // just copy the ownership flag
+ {
+ if (mModel != NULL)
+ {
+ mTakesModelOwnership=aTakeOwnerShip;
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void AlfWidgetImpl::addWidget(AlfWidget *aWidget)
+ {
+ for (int i=0 ; i< mWidgets.count(); i++ )
+ {
+ if (mWidgets.findRef(aWidget) >=0)
+ {
+ //widget already there.
+ return;
+ }
+ }
+ mWidgets.resize(mWidgets.count()+1);
+ mWidgets.insert(mWidgets.count(),aWidget);
+ }
+
+int AlfWidgetImpl::widgetCount()
+ {
+ return mWidgets.count();
+ }
+
+AlfWidget* AlfWidgetImpl::getWidget(int aIndex)
+ {
+ if (aIndex>=0 && aIndex < mWidgets.count())
+ return mWidgets[aIndex];
+ return 0;
+ }
+
+int AlfWidgetImpl::findWidget(AlfWidget* aWidget)
+ {
+ return mWidgets.findRef(aWidget);
+ }
+
+void AlfWidgetImpl::removeWidget(int aIndex)
+ {
+ if (aIndex >=0 and aIndex < mWidgets.count())
+ mWidgets.remove(aIndex);
+ }
+
+// ---------------------------------------------------------------------------
+// Returns attribute owner interface.
+// ---------------------------------------------------------------------------
+//
+AlfWidgetAttributeOwnerImpl* AlfWidgetImpl::getAttributeOwner()
+ {
+ return mAttributeOwnerImpl.get();
+ }
+
+ } //namespace alf
+
+
+