diff -r 4ea6f81c838a -r 0e9bb658ef58 mulwidgets/mulsliderwidget/src/mulslidermodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mulwidgets/mulsliderwidget/src/mulslidermodel.cpp Wed Sep 01 12:23:18 2010 +0100 @@ -0,0 +1,683 @@ +/* +* 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 of slider model interface + * +*/ + +//Class headers +#include "mulslidermodel.h" + +// Alf headers + +#include +#include +#include + +// Osn Headers +#include //for new(EMM) +#include +#include +#include +#include + +// For Common strings + +#include "mulslidervertical.h" +#include "mulsliderwidget.h" + +const int KMaxrange = 100; +const int KTick = 1; +const int KSize = 50; +namespace Alf +{ + +struct SliderModelDataImpl + { + int mSldMaxRange;// Slider Maximum Value + int mSldMinRange;// Slider Maximum Value + int mSldTick;// Size of single click movement + int mSldPrimaryTick;// Current Handle Position + int mSldSecondaryTick;// Secondary progress position + char* mSldLeftText;// Left text + char* mSldRightText;// Right text + char* mSldPercentText;// Percentage text for zoom slider + MulSliderWidget* mSliderWidget; + IMulSliderBaseElementInternal * mSliderElement;// Element pointer + sliderTemplate mTemplateId; // template ID + std::auto_ptr mItem; + SliderModelDataImpl() + { + mItem = ( new (EMM) MulVisualItem() ); + mSldMaxRange = KMaxrange; + mSldMinRange = 0; + mSldTick = KTick; + mSldPrimaryTick = 0; + mSldSecondaryTick = 0; + mSldLeftText = NULL; + mSldRightText =NULL; + mSldPercentText = NULL; + mSliderWidget = NULL; + mSliderElement = NULL; + mTemplateId = ESliderTemplateNone; + } + }; + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +MulSliderModel::MulSliderModel(): +mModel ( NULL ) + { + mSldrModelData = new(EMM)SliderModelDataImpl(); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +MulSliderModel::~MulSliderModel() + { + if(mSldrModelData) + { + delete mSldrModelData; + } + else + { + + } + } + +// --------------------------------------------------------------------------- +// SetData +// --------------------------------------------------------------------------- +// +void MulSliderModel::SetData(const MulVisualItem& aSliderItem) + { + + UString str; + + + if(aSliderItem.Attribute(mulvisualitem::KMulMaxRange)) + { + SetMaxRange( + aSliderItem.AttributeAsInt(mulvisualitem::KMulMaxRange)); + } + if(aSliderItem.Attribute(mulvisualitem::KMulMinRange)) + { + SetMinRange( + aSliderItem.AttributeAsInt(mulvisualitem::KMulMinRange)); + } + if(aSliderItem.Attribute(mulvisualitem::KMulTick)) + { + SetTick(aSliderItem. + AttributeAsInt(mulvisualitem::KMulTick)); + } + if(aSliderItem.Attribute(mulvisualitem::KMulPrimaryTick)) + { + SetPrimaryValue(aSliderItem. + AttributeAsInt(mulvisualitem::KMulPrimaryTick)); + } + if(aSliderItem.Attribute(mulvisualitem::KMulSecondaryTick)) + { + SetSecondaryValue(aSliderItem. + AttributeAsInt(mulvisualitem::KMulSecondaryTick)); + } + + if(aSliderItem.Attribute(mulvisualitem::KMulPercent1)) + { + + int percentValue = aSliderItem. + AttributeAsInt(mulvisualitem::KMulPercent1); + + _LIT8(KPercent,""); + TBuf8 PercentText(KPercent); + PercentText.AppendNum (percentValue); + PercentText.Append(_L("%")); + mSldrModelData->mSldPercentText = (char*)PercentText.PtrZ(); + + } + + UpdateElement(); + } + + +// --------------------------------------------------------------------------- +// Return MulVisual Item +// --------------------------------------------------------------------------- +// +const MulVisualItem& MulSliderModel::Data() const + { + mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulMaxRange, + (int)mSldrModelData->mSldMaxRange); + mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulMinRange, + (int)mSldrModelData->mSldMinRange); + mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulTick, + (int)mSldrModelData->mSldTick); + mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulPrimaryTick, + (int)mSldrModelData->mSldPrimaryTick); + mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulSecondaryTick, + (int)mSldrModelData->mSldSecondaryTick); + mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulCounter1, + (int)mSldrModelData->mSldLeftText ); + mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulCounter2, + (int)mSldrModelData->mSldRightText ); + mSldrModelData->mItem->SetAttribute ( mulvisualitem::KMulPercent1, + (int)mSldrModelData->mSldPercentText ); + return *(mSldrModelData->mItem); + } + +// --------------------------------------------------------------------------- +// SetValue +// --------------------------------------------------------------------------- +// +void MulSliderModel::SetPrimaryValue(int aValue) + { + int maxRange = mSldrModelData->mSldMaxRange; + int minRange = mSldrModelData->mSldMinRange; + // Validate aValue + if(aValue != mSldrModelData->mSldPrimaryTick) + { + if( (aValue >= minRange) && (aValue <= maxRange)) + { + mSldrModelData->mSldPrimaryTick = aValue; + } + else if(aValue <= minRange) + { + mSldrModelData->mSldPrimaryTick = minRange; + } + else if(aValue >= maxRange) + { + mSldrModelData->mSldPrimaryTick = maxRange; + } + // Update the visualization + if(GetElement()) + { + GetElement()->updateVisualization(); + } + } + } + +// --------------------------------------------------------------------------- +// Gets the Slider Element +// --------------------------------------------------------------------------- +// +IMulSliderBaseElementInternal* MulSliderModel::GetElement() + { + if(mSldrModelData->mSliderWidget) + { + return mSldrModelData->mSliderWidget->GetSliderElement(); + } + else + { + + } + return NULL; + } + + + // --------------------------------------------------------------------------- +// update element visualization +// --------------------------------------------------------------------------- +// +void MulSliderModel::UpdateElement() + { + if(mSldrModelData->mSliderWidget) + { + if(mSldrModelData->mSliderWidget->GetSliderElement()) + { + mSldrModelData->mSliderWidget->GetSliderElement()->updateVisualization(); + } + } + } + +// --------------------------------------------------------------------------- +// Value +// --------------------------------------------------------------------------- +// +int MulSliderModel::PrimaryValue() const + { + return mSldrModelData->mSldPrimaryTick; + } + +// --------------------------------------------------------------------------- +// SetValue +// --------------------------------------------------------------------------- +// +void MulSliderModel::SetSecondaryValue(int aValue) + { + int maxRange = mSldrModelData->mSldMaxRange; + int minRange = mSldrModelData->mSldMinRange; + if(mSldrModelData->mSldSecondaryTick != aValue) + { + // Validate aValue + if( (aValue >= minRange) && (aValue <= maxRange)) + { + mSldrModelData->mSldSecondaryTick = aValue; + } + + UpdateElement(); + } + } + +// --------------------------------------------------------------------------- +// Value +// --------------------------------------------------------------------------- +// +int MulSliderModel::SecondaryValue() const + { + return mSldrModelData->mSldSecondaryTick; + } + + +// --------------------------------------------------------------------------- +// TotalTicks +// --------------------------------------------------------------------------- +// +int MulSliderModel::TotalTicks() const + { + //MUL_LOG_INFO("CMulSliderModel::TotalTicks"); + + int maxRange = mSldrModelData->mSldMaxRange; + int minRange = mSldrModelData->mSldMinRange; + int tick = mSldrModelData->mSldTick; + if(tick == 0) + { + tick = 1; + } + return ((maxRange-minRange)/tick); + } + +// --------------------------------------------------------------------------- +// SetTemplate +// --------------------------------------------------------------------------- +// +void MulSliderModel::SetTemplate( sliderTemplate aTemplateId) + { + if(mSldrModelData->mTemplateId != aTemplateId) + { + mSldrModelData->mTemplateId = aTemplateId; + if(mSldrModelData->mSliderWidget) + { + // Change the tempate + mSldrModelData->mSliderWidget->changeTemplate(aTemplateId); + } + else + { + //do nothing + } + } + } + +// --------------------------------------------------------------------------- +// makeInterface +// --------------------------------------------------------------------------- +// +IAlfInterfaceBase* MulSliderModel::makeInterface( const IfId& aType) + { + //MUL_LOG_INFO("CMulSliderModel::makeInterface"); + IAlfInterfaceBase* ret(0); + UString param(aType.mImplementationId); + if ( param == IMulSliderModel::type().mImplementationId ) + { + ret = static_cast(this); + } + else if(param == IAlfModel::type().mImplementationId) + { + ret = static_cast(this); + } + return ret; + + } + +// --------------------------------------------------------------------------- +// SetMinRange +// --------------------------------------------------------------------------- +// + +void MulSliderModel::SetMinRange(int aMinRange) + { + // Validate aMinRange + if(aMinRange != mSldrModelData->mSldMinRange) + { + mSldrModelData->mSldMinRange = aMinRange; + + if(aMinRange > mSldrModelData->mSldMaxRange) + { + mSldrModelData->mSldMaxRange = aMinRange; + mSldrModelData->mSldTick = 0; + } + else + { + if(mSldrModelData->mSldTick > mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange || mSldrModelData->mSldTick == 0) + { + mSldrModelData->mSldTick = mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange; + } + } + + mSldrModelData->mSldPrimaryTick = aMinRange; + UpdateElement(); + } + + } + +// --------------------------------------------------------------------------- +// SetMaxRange +// --------------------------------------------------------------------------- +// + +void MulSliderModel::SetMaxRange(int aMaxRange) + { + if(aMaxRange != mSldrModelData->mSldMaxRange) + { + mSldrModelData->mSldMaxRange = aMaxRange; + + if(aMaxRange < mSldrModelData->mSldMinRange) + { + mSldrModelData->mSldMinRange = aMaxRange; + mSldrModelData->mSldTick = 0; + } + else + { + if(mSldrModelData->mSldTick > mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange || mSldrModelData->mSldTick == 0 ) + { + mSldrModelData->mSldTick = mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange; + } + } + + mSldrModelData->mSldPrimaryTick = mSldrModelData->mSldMinRange; + UpdateElement(); + } + } + +// --------------------------------------------------------------------------- +// MinRange +// --------------------------------------------------------------------------- +// + +int MulSliderModel::MinRange() const + { + //MUL_LOG_INFO("CMulSliderModel::makeInterface"); + return mSldrModelData->mSldMinRange; + } + +// --------------------------------------------------------------------------- +// MaxRange +// --------------------------------------------------------------------------- +// + +int MulSliderModel::MaxRange() const + { + //MUL_LOG_INFO("CMulSliderModel::makeInterface"); + return mSldrModelData->mSldMaxRange; + } +// --------------------------------------------------------------------------- +// SetTick +// --------------------------------------------------------------------------- +// + +void MulSliderModel::SetTick(int aTick) + { + //MUL_LOG_INFO("CMulSliderModel::makeInterface"); + if(aTick != mSldrModelData->mSldTick && aTick > 0) + { + if(aTick > mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange) + { + mSldrModelData->mSldTick = mSldrModelData->mSldMaxRange - mSldrModelData->mSldMinRange; + } + else + { + mSldrModelData->mSldTick = aTick; + } + mSldrModelData->mSldPrimaryTick = mSldrModelData->mSldMinRange; + if(GetElement()) + { + GetElement()->updateVisualization(); + } + } + } + +// --------------------------------------------------------------------------- +// Tick +// --------------------------------------------------------------------------- +// + +int MulSliderModel::Tick() const + { + //MUL_LOG_INFO("CMulSliderModel::makeInterface"); + return mSldrModelData->mSldTick; + } + + +// --------------------------------------------------------------------------- +// SetRightText +// --------------------------------------------------------------------------- +// + +void MulSliderModel::SetRightText(char* aRightText) + { + if(aRightText) + { + mSldrModelData->mSldRightText = aRightText; + UpdateElement(); + } + + } + +// --------------------------------------------------------------------------- +// SetLeftText +// --------------------------------------------------------------------------- +// + +void MulSliderModel::SetLeftText(char* aLeftText) + { + if(aLeftText) + { + mSldrModelData->mSldLeftText = aLeftText; + UpdateElement(); + } + } + +// --------------------------------------------------------------------------- +// SetPercentText +// --------------------------------------------------------------------------- +// + +void MulSliderModel::SetPercentText(char* aPercText) + { + if(aPercText) + { + mSldrModelData->mSldPercentText = aPercText; + if(GetElement()) + { + GetElement()->updateTextVisualization(); + } + } + + } + +// --------------------------------------------------------------------------- +// GetRightText +// --------------------------------------------------------------------------- +// + +const char* MulSliderModel::GetRightText() + { + //MUL_LOG_INFO("CMulSliderModel::makeInterface"); + return mSldrModelData->mSldRightText; + } + +// --------------------------------------------------------------------------- +// GetLeftText +// --------------------------------------------------------------------------- +// + +const char* MulSliderModel::GetLeftText() + { + //MUL_LOG_INFO("CMulSliderModel::makeInterface"); + return mSldrModelData->mSldLeftText; + } + +// --------------------------------------------------------------------------- +// GetPercentText +// --------------------------------------------------------------------------- +// + +const char* MulSliderModel::GetPercentText() + { + //MUL_LOG_INFO("CMulSliderModel::makeInterface"); + return mSldrModelData->mSldPercentText; + } + + +// --------------------------------------------------------------------------- +// addModelChangeObserver +// --------------------------------------------------------------------------- +// +void MulSliderModel::addModelChangeObserver( IAlfModelChangeObserver& /*aObserver*/ ) + { + //MUL_LOG_INFO("CMulSliderModel::addModelChangeObserver"); + } + +// --------------------------------------------------------------------------- +// removeModelChangeObserver +// --------------------------------------------------------------------------- +// +void MulSliderModel::removeModelChangeObserver( IAlfModelChangeObserver& /*aObserver*/ ) + { + //MUL_LOG_INFO("CMulSliderModel::removeModelChangeObserver"); + } + +// --------------------------------------------------------------------------- +// setData +// --------------------------------------------------------------------------- +// +void MulSliderModel::setData( IAlfVariantType* /*aData*/ ) + { + //MUL_LOG_INFO("CMulSliderModel::setData"); + } + +// --------------------------------------------------------------------------- +// updateData +// --------------------------------------------------------------------------- +// +void MulSliderModel::updateData(int /*aNumContainerIndices*/,int* /*aContainerIndices*/, + IAlfVariantType* /*aData*/ ) + { + //MUL_LOG_INFO("CMulSliderModel::updateData"); + } + +// --------------------------------------------------------------------------- +// addData +// --------------------------------------------------------------------------- +// +void MulSliderModel::addData(int /*aNumContainerIndices*/,int* /*aContainerIndices*/, + IAlfVariantType* /*aData*/ ) + { + //MUL_LOG_INFO("CMulSliderModel::addData"); + } + +// --------------------------------------------------------------------------- +// removeData +// --------------------------------------------------------------------------- +// +void MulSliderModel::removeData(int /*aNumContainerIndices*/,int* /*aContainerIndices*/ ) + { + //MUL_LOG_INFO("CMulSliderModel::removeData"); + } + +// --------------------------------------------------------------------------- +// executeOperations +// --------------------------------------------------------------------------- +// +void MulSliderModel::executeOperations(AlfPtrVector& /*aOperationsArray*/) + { + //MUL_LOG_INFO("CMulSliderModel::executeOperations"); + + + } + +// --------------------------------------------------------------------------- +// executeOperation +// --------------------------------------------------------------------------- +// +void MulSliderModel::executeOperation(AlfModelOperation* /*aOperation*/) + { + //MUL_LOG_INFO("CMulSliderModel::executeOperation"); + } + +// --------------------------------------------------------------------------- +// clearModel +// --------------------------------------------------------------------------- +// +void MulSliderModel::clearModel() + { + //MUL_LOG_INFO("CMulSliderModel::clearModel"); + } + +// --------------------------------------------------------------------------- +// data +// --------------------------------------------------------------------------- +// +IAlfVariantType* MulSliderModel::data() const + { + //MUL_LOG_INFO("CMulSliderModel::data"); + return NULL; + } + +// --------------------------------------------------------------------------- +// StoreWidget +// --------------------------------------------------------------------------- +// +void MulSliderModel::storeWidget(MulSliderWidget* aWidget) + { + mSldrModelData->mSliderWidget = aWidget; + } +// --------------------------------------------------------------------------- +// GetTemplate +// --------------------------------------------------------------------------- +// +sliderTemplate MulSliderModel::GetTemplate() + { + return mSldrModelData->mTemplateId ; + } + +// --------------------------------------------------------------------------- +// IsLandscape +// +// --------------------------------------------------------------------------- +// + bool MulSliderModel::IsLandscape() + { + + bool landscape = false; + if(mSldrModelData->mSliderWidget) + { + TSize size = AlfUtil::ScreenSize(); + if(size.iHeight < size.iWidth) + { + landscape = true; + } + else if(size.iWidth < size.iHeight) + { + landscape = false; + } + } + return landscape; + } + + } // Namespace Alf + +//End of file