diff -r 30f14686fb04 -r 2b1b11a301d2 homescreenapp/hsdomainmodel/src/hspagenewwidgetlayout.cpp --- a/homescreenapp/hsdomainmodel/src/hspagenewwidgetlayout.cpp Wed Jun 23 18:03:36 2010 +0300 +++ b/homescreenapp/hsdomainmodel/src/hspagenewwidgetlayout.cpp Tue Jul 06 14:06:53 2010 +0300 @@ -15,12 +15,7 @@ * */ -#include -#include -#include #include -#include -#include #include "hsdomainmodeldatastructures.h" #include "hspagenewwidgetlayout.h" @@ -45,8 +40,10 @@ \a parent Owner. */ -HsPageNewWidgetLayout::HsPageNewWidgetLayout(QGraphicsLayoutItem *parent) : - QGraphicsLayout(parent) +HsPageNewWidgetLayout::HsPageNewWidgetLayout(const QPointF &touchPoint, + QGraphicsLayoutItem *parent) + : QGraphicsLayout(parent), + mTouchPoint(touchPoint) { mSize = HsScene::mainWindow()->layoutRect().size(); } @@ -110,15 +107,37 @@ foreach (HsWidgetHost *newWidget, mNewWidgets) { rects << QRectF(QPointF(), newWidget->preferredSize()); } - HsWidgetPositioningOnWidgetAdd *algorithm = - HsWidgetPositioningOnWidgetAdd::instance(); - QRectF pageRect = HsScene::mainWindow()->layoutRect(); - pageRect.adjust( (qreal)0,(qreal)64,(qreal)0,(qreal)0); - QList calculatedRects = - algorithm->convert(pageRect, rects, QPointF()); - for ( int i=0; isetGeometry(calculatedRects.at(i)); + /* if there is touch point defined (widget added from context menu) + then there is only one widget in the list + -> set widget center point to this touch point + */ + if (mTouchPoint != QPointF() && mNewWidgets.count() == 1) { + QRectF pageRect = HsScene::mainWindow()->layoutRect(); + qreal widgetX = qBound(qreal(0), mTouchPoint.x() - rects.at(0).width() / 2, pageRect.width() - rects.at(0).width()); + qreal widgetY = qBound(qreal(64), mTouchPoint.y() - rects.at(0).height() / 2, pageRect.height() - rects.at(0).height()); + mNewWidgets.at(0)->setGeometry(widgetX, + widgetY, + rects.at(0).width(), + rects.at(0).height()); + /* we have to save widget presentation data here after drawing + to get correct position for later use + */ + mNewWidgets.at(0)->savePresentation(); + } + // otherwise calculate position with algorithm + else { + HsWidgetPositioningOnWidgetAdd *algorithm = + HsWidgetPositioningOnWidgetAdd::instance(); + QRectF pageRect = HsScene::mainWindow()->layoutRect(); + pageRect.adjust( (qreal)0,(qreal)64,(qreal)0,(qreal)0); + QList calculatedRects = + algorithm->convert(pageRect, rects, QPointF()); + + for ( int i=0; isetGeometry(calculatedRects.at(i)); + mNewWidgets.at(i)->savePresentation(); + } } }