mulwidgets/alfscrollbarwidget/src/alfscrollbarwidget.cpp
branchRCL_3
changeset 26 0e9bb658ef58
parent 0 e83bab7cf002
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/alfscrollbarwidget/src/alfscrollbarwidget.cpp	Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2007, 2008 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:  Implementation for scrollbar widget.
+ *
+*/
+
+
+// Alfred Client includes
+#include <alf/alfenv.h>
+
+// Widget Model includes
+#include "alf/alfelement.h"
+#include <alf/alfexception.h>
+
+// Widget Includes
+#include <alf/ialfscrollbardefaultbaseelement.h>
+#include <alf/alfscrollbarproductids.h>
+// Internal includes
+
+#include "alfscrollbardefaultbaseelement.h"
+#include "alfscrollbarwidget.h"
+#include "alfscrollbarmodel.h"
+#include "alfscrollbarcontrol.h"
+#include <alf/alfwidgetenvextension.h>
+using namespace alfscrollbarwidget;
+
+using Alf::CommonWidgetEvent;
+namespace Alf
+    {
+
+// ---------------------------------------------------------------------------
+//  Creator Method.
+// ---------------------------------------------------------------------------
+//        
+AlfScrollBarWidget* AlfScrollBarWidget :: create(
+    CAlfEnv& aEnv, 
+    IAlfContainerWidget& aContainer,
+    const char* aWidgetId, 
+    DuiNode *aNode, 
+    const char *aFilePath, 
+    AlfCustomInitDataBase* aCustomData)
+    {
+    return (new( EMM ) AlfScrollBarWidget(aEnv, 
+        aContainer, aWidgetId, aNode, aFilePath, aCustomData));
+    }
+
+
+// ---------------------------------------------------------------------------
+//  Destructor.
+// ---------------------------------------------------------------------------
+//        
+AlfScrollBarWidget::~AlfScrollBarWidget()
+    {
+    if(mScrollModel)
+        {
+        delete mScrollModel;
+        }
+    else 
+        {
+        
+        }
+    }
+    
+    
+    
+// ---------------------------------------------------------------------------
+// From class IAlfWidget.
+// Getter for the parent container. The ownership not passed.
+// ---------------------------------------------------------------------------
+//
+IAlfContainerWidget* AlfScrollBarWidget::parent() const
+    {
+    return mWidget->parent();
+    }
+    
+    
+// From class MAlfInterfaceBase.
+
+// ---------------------------------------------------------------------------
+// Getter for interfaces provided by the scrollbar widget.
+// ---------------------------------------------------------------------------
+//
+IAlfInterfaceBase* AlfScrollBarWidget :: makeInterface(const IfId& aType)
+    {
+    UString param ( aType.mImplementationId );
+
+    if (param == IAlfScrollBarWidget::type().mImplementationId)
+        {
+        return static_cast<IAlfScrollBarWidget*>(this);
+        }
+    else if (param == IAlfWidget::type().mImplementationId)
+        {
+        return static_cast<IAlfWidget*>(this);
+        }
+    else
+        {
+        //do nothing
+        }
+
+    return mWidget->makeInterface(aType);
+    }
+    
+      
+// From class IAlfWidget.
+    
+// ---------------------------------------------------------------------------
+// Getter for the control. The ownership is not passed.
+// ---------------------------------------------------------------------------
+//
+CAlfWidgetControl* AlfScrollBarWidget :: control() const
+    {
+    return mWidget->control();
+    }
+    
+
+// ---------------------------------------------------------------------------
+// Setter for the control. The control is owned by the Alfred environment.
+// ---------------------------------------------------------------------------
+//    
+void AlfScrollBarWidget :: setControl( 
+    CAlfWidgetControl* aControl, bool /*aDeletePreviousControl*/ )
+    {
+    mScrollControl = aControl;
+    mWidget->setControl(aControl);
+    }
+
+
+// ---------------------------------------------------------------------------
+// Getter for the model. The ownership is not passed.
+// ---------------------------------------------------------------------------
+//
+IAlfModel* AlfScrollBarWidget :: model()
+    {    
+    return mScrollModel;
+    }
+    
+
+// ---------------------------------------------------------------------------
+// Setter for the model. Ownership is passed and the old model is released.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarWidget :: setModel( IAlfModel* aModel, bool /*aTakeOwnerShip*/)
+    {
+    IAlfElement* baseelement = control()->findElement ("BaseElement");
+    if(baseelement)
+    	{
+    IAlfScrollBarBaseElementInternal* elementInternal = 
+            static_cast<IAlfScrollBarBaseElementInternal*> (
+    baseelement->makeInterface(
+                    IAlfScrollBarBaseElementInternal::type()));
+            
+    if(aModel==NULL)
+        {
+        if(elementInternal)
+        	{
+        	elementInternal->destroyVisualization();
+        	}
+        delete mScrollModel;
+        mScrollModel = NULL;
+        }
+    else
+        {
+        if(mScrollModel)
+            {
+            delete mScrollModel;
+            mScrollModel = NULL;
+            
+            mScrollModel = static_cast<IAlfScrollBarModel*>( aModel->makeInterface(
+                IAlfScrollBarModel::type()));
+            AlfScrollBarModel* scrollBarModel = (AlfScrollBarModel*)mScrollModel;
+            // Store the widget pointer in model
+            scrollBarModel->storeWidget(this);
+            
+            if(mScrollModel && elementInternal)
+                {
+                elementInternal->initializeScrollModel();
+                elementInternal->updateVisualization();
+                }
+            }
+        else
+            {
+            mScrollModel =static_cast<IAlfScrollBarModel*>( aModel->makeInterface(
+                IAlfScrollBarModel::type()));
+            AlfScrollBarModel* scrollBarModel = (AlfScrollBarModel*)mScrollModel;
+            scrollBarModel->storeWidget(this);
+            
+            if(mScrollModel && elementInternal)
+                {
+                elementInternal->createVisualization();
+                }
+             }
+
+        }
+    	}
+    }
+    
+
+// ---------------------------------------------------------------------------
+// Get the name of the widget instance.
+// ---------------------------------------------------------------------------
+//
+const char* AlfScrollBarWidget :: widgetName() const
+    {
+    return mWidget->widgetName();
+    } 
+    
+    
+// ---------------------------------------------------------------------------
+// Sets/Releases the Focus from child widget of container.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarWidget :: setChildFocus(bool /*aFocus*/)
+    {
+    }
+    
+    
+//---------------------------------------------------------------------------
+// Creates the presentation for the widget from XML. Destroys any existing
+// presentation.
+//---------------------------------------------------------------------------
+//    
+void AlfScrollBarWidget :: setPresentation(const char* /*aFilePath*/)
+    {
+    } 
+
+
+            
+// ---------------------------------------------------------------------------
+//  C++ default constructor.
+// ---------------------------------------------------------------------------
+//
+AlfScrollBarWidget :: AlfScrollBarWidget(
+    CAlfEnv& aEnv, IAlfContainerWidget& aContainer,
+    const char* aWidgetId, DuiNode * /*aNode*/, 
+    const char * /*aFilePath*/,
+    AlfCustomInitDataBase* /*aCustomData*/)
+    { 
+    mScrollModel = NULL;
+    mWidget.reset(new(EMM) AlfWidget(aWidgetId,aContainer,aEnv));
+    // Default Imperative Construction
+    constructDefault(aEnv);
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// Constructs default Visualization for widget.
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarWidget :: constructDefault(CAlfEnv& aEnv)
+    {
+    const char* mBaseElementLoadId=KScrollBarDefaultBaseElement; 
+    
+    // Create Control
+    CAlfWidgetControl* ctrl = constructDefaultControl(aEnv);
+    setControl(ctrl);
+    
+    // Create Element
+    IAlfWidgetFactory& widgetFactory = AlfWidgetEnvExtension::widgetFactory(control()->Env());
+    
+    widgetFactory.createElement<IAlfElement>(mBaseElementLoadId, 
+					         	             baseElementName(),
+					         	             *control());    
+    }
+    
+// ---------------------------------------------------------------------------
+//  Construct and returns Scrollbar Control.
+// ---------------------------------------------------------------------------
+//
+CAlfWidgetControl *AlfScrollBarWidget :: constructDefaultControl(CAlfEnv& aEnv)
+    {
+    return(new(EMM) AlfScrollBarControl(aEnv) );
+    }    
+
+// ---------------------------------------------------------------------------
+//  Enables tactile feedback based on the flag state
+// ---------------------------------------------------------------------------
+//
+void AlfScrollBarWidget ::enableTactile(bool aFlag)
+	{
+	AlfScrollBarControl* scrollControl = (AlfScrollBarControl*)control();
+	scrollControl->EnableTactileFeedback(aFlag);
+	}
+
+// ---------------------------------------------------------------------------
+//  Getter for tactile feedback state
+// ---------------------------------------------------------------------------
+//               
+bool AlfScrollBarWidget ::IsTactileEnabled()
+	{
+	AlfScrollBarControl* scrollControl = (AlfScrollBarControl*)control();
+	return scrollControl->IsTactileFeedbackEnabled();
+	}  
+    
+    }//End of Alf
+