--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/hsdomainmodel/inc/hswidgetpositioningonwidgetadd.h Mon Sep 20 10:19:07 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 <QList>
+#include <QRectF>
+#include <QPointF>
+
+#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<QRectF> convert(const QRectF &contentArea,
+ const QList<QRectF> &existingRects,
+ const QList<QRectF> &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<QRectF> convert(const QRectF &contentArea,
+ const QList<QRectF> &existingRects,
+ const QList<QRectF> &newRects,
+ const QPointF &startPoint);
+
+};
+
+class HSDOMAINMODEL_EXPORT HsAnchorPointInCenter : public HsWidgetPositioningOnWidgetAdd
+{
+public:
+ QList<QRectF> convert(const QRectF &contentArea,
+ const QList<QRectF> &existingRects,
+ const QList<QRectF> &newRects,
+ const QPointF &startPoint);
+ };
+
+class HSDOMAINMODEL_EXPORT HsWidgetOrganizer : public HsWidgetPositioningOnWidgetAdd
+{
+public:
+ HsWidgetOrganizer(int anchorDistance, HsConfiguration::WidgetOrganizerSearchSequence sequence);
+ ~HsWidgetOrganizer();
+
+public:
+ QList<QRectF> convert(const QRectF &contentArea,
+ const QList<QRectF> &existingRects,
+ const QList<QRectF> &newRects,
+ const QPointF &startPoint);
+
+private:
+ enum SortMode {SortByHeight, SortByWidth, SortByArea};
+ enum SearchMode {SearchColumn, SearchRow};
+
+private:
+ void initAnchors();
+ bool checkExistingRects(const QList<QRectF> &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<int> sortRects(SortMode mode, const QMap<int, QRectF> &rects);
+
+private:
+ int mAnchorDistance;
+ HsConfiguration::WidgetOrganizerSearchSequence mSequence;
+ QList<bool> mAnchors;
+ QRectF mContentArea;
+ int mAnchorColumns;
+ int mAnchorRows;
+ HsAnchorPointInCenter *mCenterAlgorithm;
+
+ HOMESCREEN_TEST_FRIEND_CLASS(TestHsDomainModel)
+};
+
+
+#endif // HSWIDGETPOSITIONINGONWIDGETADD_H