1 /**************************************************************************
3 ** This file is part of Qt Creator
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
7 ** Contact: Nokia Corporation (qt-info@nokia.com)
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 ** In addition, as a special exception, Nokia gives you certain additional
26 ** rights. These rights are described in the Nokia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 ** If you have questions regarding the use of this file, please contact
30 ** Nokia at qt-info@nokia.com.
32 **************************************************************************/
34 #ifndef ANCHORCONTROLLER_H
35 #define ANCHORCONTROLLER_H
37 #include <QSharedPointer>
38 #include <QPainterPath>
41 #include <qmlanchors.h>
43 namespace QmlDesigner {
45 struct AnchorHandlePathData
47 QPainterPath sourceAnchorLinePath;
48 QPainterPath targetAnchorLinePath;
49 QPainterPath arrowPath;
50 QPainterPath targetNamePath;
51 QPointF beginArrowPoint;
52 QPointF endArrowPoint;
57 class AnchorHandleItem;
59 class AnchorControllerData
62 AnchorControllerData(LayerItem *layerItem,
63 FormEditorItem *formEditorItem);
64 AnchorControllerData(const AnchorControllerData &other);
65 ~AnchorControllerData();
67 QWeakPointer<LayerItem> layerItem;
68 FormEditorItem *formEditorItem;
70 AnchorHandleItem *topItem;
71 AnchorHandleItem *leftItem;
72 AnchorHandleItem *rightItem;
73 AnchorHandleItem *bottomItem;
75 QTransform sceneTransform;
79 class AnchorController
83 AnchorController(LayerItem *layerItem, FormEditorItem *formEditorItem);
84 AnchorController(const QSharedPointer<AnchorControllerData> &data);
90 void updatePosition();
94 QWeakPointer<AnchorControllerData> weakPointer() const;
97 FormEditorItem *formEditorItem() const;
99 bool isTopHandle(const AnchorHandleItem *handle) const;
100 bool isLeftHandle(const AnchorHandleItem *handle) const;
101 bool isRightHandle(const AnchorHandleItem *handle) const;
102 bool isBottomHandle(const AnchorHandleItem *handle) const;
104 void updateTargetPoint(AnchorLine::Type anchorLine, const QPointF &targetPoint);
106 void clearHighlight();
107 void highlight(AnchorLine::Type anchorLine);
110 AnchorHandlePathData createPainterPathForAnchor(const QRectF &boundingRect,
111 AnchorLine::Type anchorLine,
112 const QPointF &targetPoint = QPointF()) const;
113 QPainterPath createTargetAnchorLinePath(AnchorLine::Type anchorLine) const;
114 QPainterPath createTargetNamePathPath(AnchorLine::Type anchorLine) const;
116 QSharedPointer<AnchorControllerData> m_data;
119 } // namespace QmlDesigner
121 #endif // ANCHORCONTROLLER_H