diff -r 4526337fb576 -r 3eca7e70b1b8 widgetmodel/alfwidgetmodel/src/alfflowlayoutpreferencesimpl.cpp --- a/widgetmodel/alfwidgetmodel/src/alfflowlayoutpreferencesimpl.cpp Tue Feb 02 00:28:09 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,246 +0,0 @@ -/* -* 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: layoutpreferences implementation for flowlayoutmanager. -* -*/ - - -#include -#include -#include "alf/alfwidget.h" -#include -#include -#include -#include -#include - -//stl -#include //for min & max -#include "alfflowlayoutpreferencesimpl.h" - -using namespace Alf; - -namespace Alf - { -// ======== MEMBER FUNCTIONS ======== - -AlfFlowLayoutPreferencesImpl::AlfFlowLayoutPreferencesImpl( - AlfFlowLayoutManager& aFlowLayoutManager) : - mFlowLayoutManager(aFlowLayoutManager), mPreferredSize(TAlfMetric(0)) - { - } -// --------------------------------------------------------------------------- -// from IAlfLayoutPreferences -// Returns the minimum area that this layout manager can occupy by observing -// the minimum sizes of the child UI elements in the layout -// --------------------------------------------------------------------------- -// -bool AlfFlowLayoutPreferencesImpl::getMinimumSize(TAlfXYMetric& aMinSize) const - { - return calculateChildSizes(aMinSize, - flowLayoutPolicy().flowDirection(), ESizeMin); - } - -// --------------------------------------------------------------------------- -// from IAlfLayoutPreferences -// Returns the maximum area that this layout manager can occupy by observing -// the maximum sizes of the child UI elements in the layout -// --------------------------------------------------------------------------- -// -bool AlfFlowLayoutPreferencesImpl::getMaximumSize(TAlfXYMetric& aMaxSize) const - { - return calculateChildSizes(aMaxSize, - flowLayoutPolicy().flowDirection(), ESizeMax); - } - -// --------------------------------------------------------------------------- -// Combines and returns the preferred sizes of all child UI elements according -// to the layouting rules. -// --------------------------------------------------------------------------- -// -bool AlfFlowLayoutPreferencesImpl::getPreferredSize(TAlfXYMetric& aPreferredSize) const - { - bool b = false; - bool manualSet = (mPreferredSize.iX.iMagnitude > 0 && - mPreferredSize.iY.iMagnitude > 0); - - if (manualSet) - { - aPreferredSize = mPreferredSize; - b = true; - } - else - { - b = calculateChildSizes(aPreferredSize, - flowLayoutPolicy().flowDirection(), ESizePreferred); - } - return b; - } - -// --------------------------------------------------------------------------- -// from IAlfLayoutPreferences -// At the moment doesn't do anything since preferred size is being queried -// from the child UI elements added to this layout manager. -// --------------------------------------------------------------------------- -// -void AlfFlowLayoutPreferencesImpl::setPreferredSize( - const TAlfXYMetric& aPreferredSize ) - { - mPreferredSize = aPreferredSize; - mFlowLayoutManager.owner().updateParentLayout(); - } - -// --------------------------------------------------------------------------- -// From class IAlfInterfaceBase. -// Getter for interfaces provided by the element. -// --------------------------------------------------------------------------- -// -IAlfInterfaceBase* AlfFlowLayoutPreferencesImpl::makeInterface( - const IfId& aType) - { - UString param(aType.mImplementationId); - IAlfInterfaceBase* ret = 0; - if (param == IAlfLayoutPreferences::type().mImplementationId) - { - ret = static_cast(this); - } - - return ret; - } - -// --------------------------------------------------------------------------- -// calculate the min-, preferred-, or max- sizes from the children. -// --------------------------------------------------------------------------- -// -bool AlfFlowLayoutPreferencesImpl::calculateChildSizes( - TAlfXYMetric& aSize, - enum IAlfFlowLayoutPolicy::flowDirection aFlowDirection, - enum AlfFlowLayoutPreferencesImpl::sizeType aSizeType) const - { - bool ret = false; - TAlfXYMetric resultSize(TAlfMetric(0), TAlfMetric(0)); - - // Iterate through all the child controls, and get their - // preferred sizes. - int childCount = mFlowLayoutManager.count(); - for (int i = 0; i < childCount; i++) - { - CAlfWidgetControl* childWidgetControl = mFlowLayoutManager.getControl(i); - - TAlfXYMetric size; - if (getSize(childWidgetControl, size, aSizeType)) - { - TAlfRealSize pixelSize = sizeInPixels(size); - - if (aFlowDirection == IAlfFlowLayoutPolicy::EFlowVertical) - { - //total width = max preferred width of child widgets. - //total height = sum of the preferred heights of child widgets. - if(pixelSize.iWidth > resultSize.iX.iMagnitude) - { - resultSize.iX.iMagnitude = pixelSize.iWidth; - } - resultSize.iY.iMagnitude += pixelSize.iHeight; - ret = true; - } - else - { - //horizontal flow direction - //total height = max preferred height of child widgets. - //total width = sum of the preferred widths of child widgets. - if(pixelSize.iHeight > resultSize.iY.iMagnitude) - { - resultSize.iY.iMagnitude = pixelSize.iHeight; - } - resultSize.iX.iMagnitude += pixelSize.iWidth; - ret = true; - } - } - } - - aSize = resultSize; - return ret; - } - -// --------------------------------------------------------------------------- -// fetches the size from the IAlfLayoutPreferences-interface of the aControl. -// --------------------------------------------------------------------------- -// -bool AlfFlowLayoutPreferencesImpl::getSize( - CAlfWidgetControl* aControl, - TAlfXYMetric& aSize, - enum AlfFlowLayoutPreferencesImpl::sizeType aSizeType) const - { - bool ret = false; - - if (aControl) - { - const IAlfLayoutPreferences* layoutPrefs = - mFlowLayoutManager.getLayoutPreferences(aControl); - - if (layoutPrefs) - { - switch(aSizeType) - { - case AlfFlowLayoutPreferencesImpl::ESizePreferred: - ret = layoutPrefs->getPreferredSize(aSize); - break; - case AlfFlowLayoutPreferencesImpl::ESizeMin: - ret = layoutPrefs->getMinimumSize(aSize); - break; - case AlfFlowLayoutPreferencesImpl::ESizeMax: - ret = layoutPrefs->getMaximumSize(aSize); - break; - } - } - } - - return ret; - } - -// --------------------------------------------------------------------------- -// get the flowlayoutpolicy-interface. -// --------------------------------------------------------------------------- -// -const IAlfFlowLayoutPolicy& AlfFlowLayoutPreferencesImpl::flowLayoutPolicy() const - { - AlfFlowLayoutManager* man = - const_cast(&mFlowLayoutManager); - IAlfFlowLayoutPolicy* policy = - IAlfInterfaceBase::makeInterface(man); - assert(policy); - return *policy; - } -// --------------------------------------------------------------------------- -// converts size in metrics to size in pixels. -// implementation missing! -// --------------------------------------------------------------------------- -// -TAlfRealSize AlfFlowLayoutPreferencesImpl::sizeInPixels( - const TAlfXYMetric& aSize) - { - TAlfRealSize s; - - if(aSize.iX.iUnit == EAlfUnitPixel) - { - s.iWidth = aSize.iX.iMagnitude; - } - if(aSize.iY.iUnit == EAlfUnitPixel) - { - s.iHeight = aSize.iY.iMagnitude; - } - - return s; - } -} // Alf