summaryrefslogtreecommitdiffstats
path: root/interactioncanvas.cpp
blob: 2c2b81b61e1123f9490d6648ae4821d1e76e3417 (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
#include "interactioncanvas.h"

InteractionCanvas::InteractionCanvas()
{
    setFocusPolicy(Qt::StrongFocus);
    setMouseTracking(true);
    m_Line = NULL;
}

InteractionCanvas::~InteractionCanvas()
{
    delete tempPainter;
    tempPainter = NULL;
    delete normalPainter;
    normalPainter = NULL;
}

void InteractionCanvas::mouseMoveEvent(QMouseEvent *mouseEvent)
{
    qDebug() << "InteractionCanvas:" << mouseEvent->pos();
    m_LastMousePosition = mouseEvent->pos();

    if (m_Line)
    {
        m_Line->setP2(m_LastMousePosition);
        update();
    }
}


void InteractionCanvas::mousePressEvent(QMouseEvent *mouseEvent)
{
    qDebug() << "InteractionCanvas: Mouse: pressed:" << mouseEvent->button();

    if (mouseEvent->button() == Qt::LeftButton)
    {
        if (m_Line)
        {
            delete m_Line;
            m_Line = NULL;
        }

        m_Line = new Line();
        m_MousePressPoint = mouseEvent->pos();
        m_LastMousePosition = m_MousePressPoint;
        m_Line->setP1(m_MousePressPoint);
        m_Line->setP2(m_LastMousePosition);
    }

    if (mouseEvent->button() ==  Qt::RightButton)
    {
        for(int i = 0; i < m_Lines.size(); i++)
        {
            m_Lines[i].setSelected(m_Lines[i].isHit(mouseEvent->pos()));
        }
    }
}

void InteractionCanvas::mouseReleaseEvent(QMouseEvent *mouseEvent)
{
    qDebug() << "InteractionCanvas: Mouse: released:" << mouseEvent->button();

    if (mouseEvent->button() == Qt::LeftButton)
    {

        m_MouseReleasePoint = mouseEvent->pos();
        m_Line->setP2(m_MouseReleasePoint);
        m_Line->setSelected(false);
        m_Lines.append(*m_Line);
        m_Line = NULL;
    }

    update();
}

void InteractionCanvas::keyPressEvent(QKeyEvent *keyEvent)
{
    qDebug() << "InteractionCanvas: Key: pressed:" << keyEvent->key() << "(" <<
             keyEvent->text() << ")" << (keyEvent->isAutoRepeat() ? "druck" : "");

    if(!m_Lines.isEmpty() && keyEvent->key() == Qt::Key_Z && keyEvent->modifiers() == Qt::ControlModifier)
    {
        m_Lines.removeLast();
        update();
    }
}

void InteractionCanvas::keyReleaseEvent(QKeyEvent *keyEvent)
{
    qDebug() << "InteractionCanvas: Key: released:" << keyEvent->key() << "(" <<
             keyEvent->text() << ")" << (keyEvent->isAutoRepeat() ? "druck" : "");
}


void InteractionCanvas::paintEvent(QPaintEvent *paintEvent)
{
    // Setup the Painters
    QPainter painter(this);

    if (m_Line)
    {
        m_Line->draw(&painter);
    }

    foreach (Line line, m_Lines)
    {
        line.draw(&painter);
    }
}