diff -r 2e2dc3d30ca8 -r 341166945d65 homescreenapp/hsutils/inc/hswidgetpositioningonwidgetmove.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsutils/inc/hswidgetpositioningonwidgetmove.h Fri Jun 25 19:19:22 2010 +0300 @@ -0,0 +1,172 @@ +/* +* Copyright (c) 2009 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 HSWIDGETPOSITIONINGONWIDGETMOVE_H +#define HSWIDGETPOSITIONINGONWIDGETMOVE_H + +#include +#include +#include +#include +#include + +#include "hsutils_global.h" +#include "hstest_global.h" + +HOMESCREEN_TEST_CLASS(t_hsUtils) + +class HSUTILS_EXPORT HsWidgetPositioningOnWidgetMove +{ +public: + class Result + { + public: + Result() : hasHorizontalSnap(false), hasVerticalSnap(false), + horizontalSnapPosition(0.0), verticalSnapPosition(0.0) + { } + bool isNull() const + { return !hasHorizontalSnap && !hasVerticalSnap; } + + bool hasHorizontalSnap; + bool hasVerticalSnap; + qreal horizontalSnapPosition; + qreal verticalSnapPosition; + QLineF verticalSnapLine; + QLineF horizontalSnapLine; + }; + + virtual ~HsWidgetPositioningOnWidgetMove() {} + + virtual void setConfiguration(const QVariantHash &configuration) = 0; + + virtual void setPagePresentation(const QRectF &containerRect, + const QList &inactiveRects, + const QRectF &activeRect) = 0; + + virtual Result run(const QRectF &movingRect) = 0; + + static void setInstance(HsWidgetPositioningOnWidgetMove *instance); + static HsWidgetPositioningOnWidgetMove *instance(); + +private: + static HsWidgetPositioningOnWidgetMove *mInstance; +}; + +class HsSnapRectangle +{ +public: + HsSnapRectangle() : rectangle(QRectF()) + { } + HsSnapRectangle(QRectF rect) : rectangle(rect), isLeftSnapableForAbove(true), isLeftSnapableForBelow(true), + isRightSnapableForAbove(true), isRightSnapableForBelow(true), + isTopSnapableForLeft(true), isTopSnapableForRight(true), + isBottomSnapableForLeft(true), isBottomSnapableForRight(true) + { } + + QRectF rectangle; + bool isLeftSnapableForAbove; + bool isLeftSnapableForBelow; + bool isRightSnapableForAbove; + bool isRightSnapableForBelow; + bool isTopSnapableForLeft; + bool isTopSnapableForRight; + bool isBottomSnapableForLeft; + bool isBottomSnapableForRight; +}; + +class HSUTILS_EXPORT HsSnapToLines : public HsWidgetPositioningOnWidgetMove +{ +public: + HsSnapToLines(); + + void setConfiguration(const QVariantHash &configuration); + + void setPagePresentation(const QRectF &containerRect, + const QList &inactiveRects, + const QRectF &activeRect); + + Result run(const QRectF &movingRect); +private: + + void createSnappableRectangles(const QList &inactiveRects); + void checkForCenterSnapping(); + void checkInactiveRectLieAboveOrBelowOfMovingRect(); + void compareLeftSideOfMovingRectForSnapping(); + void compareRightSideOfMovingRectForSnapping(); + void checkInactiveRectLieLeftOrRightOfMovingRect(); + void compareTopOfMovingRectForSnapping(); + void compareBottomOfMovingRectForSnapping(); + void extendVerticalLine(); + void extendHorizontalLine(); + void checkInactiveRectPositionToVerticalLine(); + void extendVerticalLineToIncludeInactiveRect(); + void checkInactiveRectPositionToHorizontalLine(); + void extendHorizontalLineToIncludeInactiveRect(); + +private: //data + QRectF mContainerRect; + + qreal mActiveRectWidth; + qreal mActiveRectHeight; + + QList mInactiveSnapRects; + + QRectF mInactiveRectToCompare; + HsSnapRectangle mInactiveSnapRectToCompare; + QRectF mMovingRect; + qreal mHorizontalSnapPosition; + qreal mVerticalSnapPosition; + + bool mHorizontalSnapFound; + QLineF mVerticalLine; + + bool mVerticalSnapFound; + QLineF mHorizontalLine; + + bool mRectLieAbove; + bool mLeftInRange; + bool mRightInRange; + qreal mMinVerticalEdgesDistance; + qreal mVerticalDistance; + qreal mVerticalDistanceFromSelectedRect; + qreal mContainerVerticalEdgeDistance; + + bool mRectLieLeft; + bool mTopInRange; + bool mBottomInRange; + qreal mMinHorizontalEdgesDistance; + qreal mHorizontalDistance; + qreal mHorizontalDistanceFromSelectedRect; + qreal mContainerHorizontalEdgeDistance; + + bool mSnapEnabled; + qreal mSnapForce; + qreal mSnapGap; + qreal mSnapBorderGap; + + bool mRectVerticalEdgeLiesInLineWithVerticalLine; + bool mRectLieAboveVerticalLine; + bool mRectLieBelowVerticalLine; + + bool mRectHorizontalEdgeLiesInLineWithHorizontalLine; + bool mRectLieLeftOfHorizontalLine; + bool mRectLiesRightOfHorizontalLine; + + HOMESCREEN_TEST_FRIEND_CLASS(t_hsUtils) +}; + +#endif // HSWIDGETPOSITIONINGONWIDGETMOVE_H