diff options
| author | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-05-17 19:19:38 +0200 |
|---|---|---|
| committer | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-05-17 19:19:38 +0200 |
| commit | 2778d2d6c0821a7a1622ca4312416739525781be (patch) | |
| tree | 8589cab180728a024b8bd29a01fd9a5e85e9bce4 /interactioncanvas.cpp | |
| parent | 31eb4d5361026dad3107dc647ac7c3ff63f50c7b (diff) | |
| download | GUI_SS2015-2778d2d6c0821a7a1622ca4312416739525781be.tar.gz GUI_SS2015-2778d2d6c0821a7a1622ca4312416739525781be.zip | |
Add different shapes for drawing
Diffstat (limited to 'interactioncanvas.cpp')
| -rw-r--r-- | interactioncanvas.cpp | 94 |
1 files changed, 81 insertions, 13 deletions
diff --git a/interactioncanvas.cpp b/interactioncanvas.cpp index 7bd8de8..1c4e54f 100644 --- a/interactioncanvas.cpp +++ b/interactioncanvas.cpp @@ -1,6 +1,7 @@ #include "interactioncanvas.h" -InteractionCanvas::InteractionCanvas() +InteractionCanvas::InteractionCanvas(QWidget *parent) + :QLabel(parent) { setFocusPolicy(Qt::StrongFocus); setMouseTracking(true); @@ -10,7 +11,65 @@ InteractionCanvas::InteractionCanvas() InteractionCanvas::~InteractionCanvas() { + for(int i = 0; i < m_Lines.size(); i++) + { + delete m_Lines[i]; + m_Lines.removeAt(i); + } + if(m_NewLine) + { + delete m_NewLine; + m_NewLine = NULL; + } + if(m_SelectedLine) + { + delete m_SelectedLine; + m_SelectedLine = NULL; + } +} +void InteractionCanvas::addLine() +{ + Line *tmpLine = new Line(); + tmpLine->setP1(QPoint(10, 50)); + tmpLine->setP2(QPoint(30, 50)); + addNewLine(tmpLine); + m_NewLine = NULL; + m_Lines.append(tmpLine); + changeSelectedLine(tmpLine); +} + +void InteractionCanvas::addRectangle() +{ + Line *tmpLine = new Rectangle(); + tmpLine->setP1(QPoint(10, 50)); + tmpLine->setP2(QPoint(30, 70)); + addNewLine(tmpLine); + m_NewLine = NULL; + m_Lines.append(tmpLine); + changeSelectedLine(tmpLine); +} + +void InteractionCanvas::addEllipse() +{ + Line *tmpLine = new Ellipse(); + tmpLine->setP1(QPoint(10, 50)); + tmpLine->setP2(QPoint(30, 70)); + addNewLine(tmpLine); + m_NewLine = NULL; + m_Lines.append(tmpLine); + changeSelectedLine(tmpLine); +} + +void InteractionCanvas::addPolygon() +{ + Line *tmpLine = new Polygon(); + tmpLine->setP1(QPoint(10, 50)); + tmpLine->setP2(QPoint(30, 70)); + addNewLine(tmpLine); + m_NewLine = NULL; + m_Lines.append(tmpLine); + changeSelectedLine(tmpLine); } void InteractionCanvas::mouseMoveEvent(QMouseEvent *mouseEvent) @@ -42,15 +101,9 @@ void InteractionCanvas::mousePressEvent(QMouseEvent *mouseEvent) { if(!m_SelectedLine) { - if (m_NewLine) - { - delete m_NewLine; - m_NewLine = NULL; - } - - m_NewLine = new Line(); m_MousePressPoint = mouseEvent->pos(); m_LastMousePosition = m_MousePressPoint; + addNewLine(new Line); m_NewLine->setP1(m_MousePressPoint); m_NewLine->setP2(m_LastMousePosition); } @@ -61,9 +114,9 @@ void InteractionCanvas::mousePressEvent(QMouseEvent *mouseEvent) changeSelectedLine(NULL); for(int i = 0; i < m_Lines.size() && !m_SelectedLine; i++) { - if(m_Lines[i].isHit(mouseEvent->pos())) + if(m_Lines[i]->isHit(mouseEvent->pos())) { - changeSelectedLine(&(m_Lines[i])); + changeSelectedLine(m_Lines[i]); } } } @@ -81,7 +134,7 @@ void InteractionCanvas::mouseReleaseEvent(QMouseEvent *mouseEvent) m_MouseReleasePoint = mouseEvent->pos(); m_NewLine->setP2(m_MouseReleasePoint); m_NewLine->setSelected(false); - m_Lines.append(*m_NewLine); + m_Lines.append(m_NewLine); m_NewLine = NULL; } } @@ -96,6 +149,7 @@ void InteractionCanvas::keyPressEvent(QKeyEvent *keyEvent) if(!m_Lines.isEmpty() && keyEvent->key() == Qt::Key_Z && keyEvent->modifiers() == Qt::ControlModifier) { + delete m_Lines.last(); m_Lines.removeLast(); update(); } @@ -126,6 +180,20 @@ void InteractionCanvas::changeSelectedLine(Line *newSelectedLine) } } +void InteractionCanvas::addNewLine(Line *newLine) +{ + if (m_NewLine) + { + delete m_NewLine; + m_NewLine = NULL; + } + + if(newLine) + { + m_NewLine = new Line(); + } +} + void InteractionCanvas::paintEvent(QPaintEvent *paintEvent) { // Setup the Painters @@ -136,8 +204,8 @@ void InteractionCanvas::paintEvent(QPaintEvent *paintEvent) m_NewLine->draw(&painter); } - foreach (Line line, m_Lines) + foreach (Line *line, m_Lines) { - line.draw(&painter); + line->draw(&painter); } } |
