1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
#include "edgestyle.h"
#include <QPainter>
#include <QPixmap>
EdgeStyle *noneEdgeStyle = new EdgeStyle();
EdgeStyle::EdgeStyle() : Style()
{
}
EdgeStyle::EdgeStyle(QString name, GraphElementData *data) : Style(name, data)
{
}
EdgeStyle::ArrowTipStyle EdgeStyle::arrowHead() const
{
if (_data == 0) return NoTip;
if (_data->atom("->") || _data->atom("<->") || _data->atom("|->")) return Pointer;
if (_data->atom("-|") || _data->atom("<-|") || _data->atom("|-|")) return Flat;
return NoTip;
}
EdgeStyle::ArrowTipStyle EdgeStyle::arrowTail() const
{
if (_data == 0) return NoTip;
if (_data->atom("<-") || _data->atom("<->") || _data->atom("<-|")) return Pointer;
if (_data->atom("|-") || _data->atom("|->") || _data->atom("|-|")) return Flat;
return NoTip;
}
EdgeStyle::DrawStyle EdgeStyle::drawStyle() const
{
if (_data == 0) return Solid;
if (_data->atom("dashed")) return Dashed;
if (_data->atom("dotted")) return Dotted;
return Solid;
}
QPen EdgeStyle::pen() const
{
QPen p(strokeColor());
p.setWidthF((float)strokeThickness() * 3.0f);
QVector<qreal> pat;
switch (drawStyle()) {
case Dashed:
pat << 3.0 << 3.0;
p.setDashPattern(pat);
break;
case Dotted:
pat << 1.0 << 1.0;
p.setDashPattern(pat);
break;
}
return p;
}
QPainterPath EdgeStyle::path() const
{
return QPainterPath();
}
QPainterPath EdgeStyle::palettePath() const
{
return QPainterPath();
}
QIcon EdgeStyle::icon() const
{
// draw an icon matching the style
QPixmap px(100,100);
px.fill(Qt::transparent);
QPainter painter(&px);
if (_data == 0) {
QPen pen(Qt::black);
pen.setWidth(3);
} else {
painter.setPen(pen());
}
painter.drawLine(10, 50, 90, 50);
switch (arrowHead()) {
case Pointer:
painter.drawLine(90,50,80,40);
painter.drawLine(90,50,80,60);
break;
case Flat:
painter.drawLine(90,40,90,60);
break;
}
switch (arrowTail()) {
case Pointer:
painter.drawLine(10,50,20,40);
painter.drawLine(10,50,20,60);
break;
case Flat:
painter.drawLine(10,40,10,60);
break;
}
return QIcon(px);
}
|