homescreenapp/hsutils/inc/hswidgetpositioningonwidgetadd.h
changeset 69 87476091b3f5
parent 36 cdae8c6c3876
--- a/homescreenapp/hsutils/inc/hswidgetpositioningonwidgetadd.h	Wed Jul 14 15:53:30 2010 +0300
+++ b/homescreenapp/hsutils/inc/hswidgetpositioningonwidgetadd.h	Fri Jul 23 13:47:57 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* 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"
@@ -20,15 +20,19 @@
 
 #include <QList>
 #include <QRectF>
+#include <QPointF>
 #include "hsutils_global.h"
 
+class HsWidgetHost;
+
 class HSUTILS_EXPORT HsWidgetPositioningOnWidgetAdd
 {
 public:
     virtual ~HsWidgetPositioningOnWidgetAdd() {}
     
     virtual QList<QRectF> convert(const QRectF &contentArea,
-                                  const QList<QRectF> &rects, 
+                                  const QList<QRectF> &existingRects,
+                                  const QList<QRectF> &newRects,
                                   const QPointF &startPoint) = 0;
    
     static void setInstance(HsWidgetPositioningOnWidgetAdd *instance);
@@ -42,7 +46,8 @@
 {
 public:
     QList<QRectF> convert(const QRectF &contentArea,
-                          const QList<QRectF> &rects,
+                          const QList<QRectF> &existingRects,
+                          const QList<QRectF> &newRects,
                           const QPointF &startPoint);
  
 };
@@ -51,9 +56,40 @@
 {
 public:
     QList<QRectF> convert(const QRectF &contentArea,
-                          const QList<QRectF> &rects,
+                          const QList<QRectF> &existingRects,
+                          const QList<QRectF> &newRects,
                           const QPointF &startPoint);
  };
 
+class HSUTILS_EXPORT HsWidgetOrganizer : public HsWidgetPositioningOnWidgetAdd
+{
+public:
+    QList<QRectF> convert(const QRectF &contentArea,
+                          const QList<QRectF> &existingRects,
+                          const QList<QRectF> &newRects,
+                          const QPointF &startPoint);
+
+private:
+    bool initAnchors(const QSizeF &areaSize);
+    bool getAnchorPoint(const QSizeF &contentSize);
+    bool searchWidthSpace(const QSizeF &contentSize);
+    bool searchHeightSpace(int contentHeight);
+    bool markReservedAnchors();
+    QPointF getAnchorCoordinates(int index);
+    int getIndexForCoordinate(QPointF position);
+    int lenghtInAnchorPoints(QVariant length);
+
+private:
+    int mAnchorColumns;
+    int mAnchorRows;
+    int mAnchorDistance;
+    QPointF mStartWidthAnchorPoint;
+    QPointF mEndWidthAnchorPoint;
+    QPointF mEndHeightAnchorPoint;
+    // TODO: is there better way to store anchor points, perhaps with pointers?
+    QList<bool> mAnchors;
+
+};
+
 
 #endif // HSWIDGETPOSITIONINGONWIDGETADD_H