Root/Software/sie_cg/arrow.h

1/****************************************************************************
2**
3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation (qt-info@nokia.com)
6**
7** This file is part of the examples of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at qt-info@nokia.com.
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef ARROW_H
43#define ARROW_H
44
45#include <QGraphicsLineItem>
46#include <QtXml>
47
48#include <QGraphicsLineItem>
49#include <QtXml>
50#include "diagramtextitem.h"
51#include "lineitem.h"
52#include "diagramitem.h"
53
54class lineItem;
55
56QT_BEGIN_NAMESPACE
57class QGraphicsPolygonItem;
58class QGraphicsLineItem;
59class QGraphicsPathItem;
60class QGraphicsScene;
61class QRectF;
62class QGraphicsSceneMouseEvent;
63class QPainterPath;
64QT_END_NAMESPACE
65
66class Arrow : public QGraphicsPathItem
67{
68public:
69    enum { Type = UserType + 32 };
70
71    Arrow(DiagramTextItem *startItem, DiagramTextItem *endItem,
72      QGraphicsItem *parent = 0, QGraphicsScene *scene = 0);
73
74    int type() const
75        { return Type; }
76    QRectF boundingRect() const;
77    QPainterPath shape() const;
78    void setColor(const QColor &color)
79        { myColor=color; }
80    DiagramTextItem *startItem() const
81        { return myStartItem; }
82    DiagramTextItem *endItem() const
83        { return myEndItem; }
84
85    void removeLine(lineItem *line);
86    void removeLines();
87    bool addLine(lineItem *line);
88    QList<QPointF> getCorners()
89        { return myCorners;}
90
91    void createCorner(QPointF cornerPos, lineItem *inLine);
92    void createCorner(QPointF cornerPos, int index);
93    void moveCorner(QPointF cornerPos, lineItem *inLine);
94
95    void setVisibleCorners(bool visible);
96    void setSelectedLines(bool sel);
97
98    void snapToGrid(QGraphicsSceneMouseEvent *event);
99
100    QDomDocument toXmlFormat();
101
102    QPointF startOffset() const
103        { return myStartItem->offset();}
104
105    QPointF endOffset() const
106        { return myEndItem->offset();}
107
108    DiagramItem *startOwner() const
109        { return myStartItem->ownerItem();}
110    DiagramItem *endOwner() const
111        { return myEndItem->ownerItem();}
112
113    QDomElement toXml(QDomDocument &,QHash<int , DiagramItem *>) const;
114
115    QGraphicsScene *myOwnerScene;
116
117    void mousePressEvent(QGraphicsSceneMouseEvent *event);
118    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
119    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
120
121public slots:
122    void updatePosition();
123
124protected:
125    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
126               QWidget *widget = 0);
127
128private:
129    DiagramTextItem *myStartItem;
130    DiagramTextItem *myEndItem;
131    QColor myColor;
132    QPolygonF arrowHeadEnd;
133    QPolygonF arrowHeadStart;
134    QList<lineItem *> myLines;
135    QList<lineItem *> myCLines;
136    QList<QPointF> myCorners;
137    qreal arrowSize;
138    bool moving;
139    QPointF previousPos;
140    bool positionChanged;
141};
142
143#endif
144

Archive Download this file

Branches:
master



interactive