diff -r 6727c5d0afc7 -r 458d8c8d9580 homescreenapp/hsdomainmodel/inc/hswidgetpositioningonwidgetadd.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsdomainmodel/inc/hswidgetpositioningonwidgetadd.h Mon Oct 04 00:07:25 2010 +0300 @@ -0,0 +1,111 @@ +/* +* Copyright (c) 2010 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: +* +*/ + +#ifndef HSWIDGETPOSITIONINGONWIDGETADD_H +#define HSWIDGETPOSITIONINGONWIDGETADD_H + +#include +#include +#include + +#include "hsconfiguration.h" +#include "hstest_global.h" +#include "hsdomainmodel_global.h" + +HOMESCREEN_TEST_CLASS(TestHsDomainModel) + +class HsWidgetHost; + +class HSDOMAINMODEL_EXPORT HsWidgetPositioningOnWidgetAdd +{ +public: + virtual ~HsWidgetPositioningOnWidgetAdd() {} + + virtual QList convert(const QRectF &contentArea, + const QList &existingRects, + const QList &newRects, + const QPointF &startPoint) = 0; + + static void setInstance(HsWidgetPositioningOnWidgetAdd *instance); + static HsWidgetPositioningOnWidgetAdd *instance(); + +private: + static HsWidgetPositioningOnWidgetAdd *mInstance; +}; + +class HSDOMAINMODEL_EXPORT HsAnchorPointInBottomRight : public HsWidgetPositioningOnWidgetAdd +{ +public: + QList convert(const QRectF &contentArea, + const QList &existingRects, + const QList &newRects, + const QPointF &startPoint); + +}; + +class HSDOMAINMODEL_EXPORT HsAnchorPointInCenter : public HsWidgetPositioningOnWidgetAdd +{ +public: + QList convert(const QRectF &contentArea, + const QList &existingRects, + const QList &newRects, + const QPointF &startPoint); + }; + +class HSDOMAINMODEL_EXPORT HsWidgetOrganizer : public HsWidgetPositioningOnWidgetAdd +{ +public: + HsWidgetOrganizer(int anchorDistance, HsConfiguration::WidgetOrganizerSearchSequence sequence); + ~HsWidgetOrganizer(); + +public: + QList convert(const QRectF &contentArea, + const QList &existingRects, + const QList &newRects, + const QPointF &startPoint); + +private: + enum SortMode {SortByHeight, SortByWidth, SortByArea}; + enum SearchMode {SearchColumn, SearchRow}; + +private: + void initAnchors(); + bool checkExistingRects(const QList &existingRects); + int convertToAnchors(int length); + bool markAnchors(const QRectF &rect); + int getAnchorListIndex(const QPointF &position); + QPointF getPosition(const QSizeF &size); + QPointF searchPositionRowByRow(QPointF startPoint, int width, int height); + QPointF searchPositionColumnByColumn(QPointF startPoint, int width, int height); + QPointF searchSpace(SearchMode mode, QPointF startPoint, int contentLength); + QPointF getAnchorCoordinates(int index); + QList sortRects(SortMode mode, const QMap &rects); + +private: + int mAnchorDistance; + HsConfiguration::WidgetOrganizerSearchSequence mSequence; + QList mAnchors; + QRectF mContentArea; + int mAnchorColumns; + int mAnchorRows; + HsAnchorPointInCenter *mCenterAlgorithm; + + HOMESCREEN_TEST_FRIEND_CLASS(TestHsDomainModel) +}; + + +#endif // HSWIDGETPOSITIONINGONWIDGETADD_H