homescreenapp/hsdomainmodel/inc/hswidgetpositioningonwidgetadd.h
changeset 96 458d8c8d9580
child 95 32e56106abf2
--- /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 <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