summaryrefslogtreecommitdiff
path: root/src/data/edgestyle.cpp
blob: 9fb2638442ab75a6941851573a6638f3a8c24658 (plain)
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
110
111
112
113
#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() * 2.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);

	QPen pn = pen();
	pn.setStyle(Qt::SolidLine);
	painter.setPen(pn);

    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);
}