#include "interactioncanvas.h" InteractionCanvas::InteractionCanvas() { setFocusPolicy(Qt::StrongFocus); setMouseTracking(true); m_NewLine = NULL; m_SelectedLine = NULL; } InteractionCanvas::~InteractionCanvas() { } void InteractionCanvas::mouseMoveEvent(QMouseEvent *mouseEvent) { qDebug() << "InteractionCanvas:" << mouseEvent->pos(); if (mouseEvent->buttons() == Qt::LeftButton) { if(m_SelectedLine) { m_SelectedLine->setP1(m_SelectedLine->p1()+(mouseEvent->pos()-m_LastMousePosition)); m_SelectedLine->setP2(m_SelectedLine->p2()+(mouseEvent->pos()-m_LastMousePosition)); } if(m_NewLine) { m_NewLine->setP2(mouseEvent->pos()); } update(); } m_LastMousePosition = mouseEvent->pos(); } void InteractionCanvas::mousePressEvent(QMouseEvent *mouseEvent) { qDebug() << "InteractionCanvas: Mouse: pressed:" << mouseEvent->button(); if (mouseEvent->button() == Qt::LeftButton) { if(!m_SelectedLine) { if (m_NewLine) { delete m_NewLine; m_NewLine = NULL; } m_NewLine = new Line(); m_MousePressPoint = mouseEvent->pos(); m_LastMousePosition = m_MousePressPoint; m_NewLine->setP1(m_MousePressPoint); m_NewLine->setP2(m_LastMousePosition); } } if (mouseEvent->button() == Qt::RightButton) { changeSelectedLine(NULL); for(int i = 0; i < m_Lines.size() && !m_SelectedLine; i++) { if(m_Lines[i].isHit(mouseEvent->pos())) { changeSelectedLine(&(m_Lines[i])); } } } update(); } void InteractionCanvas::mouseReleaseEvent(QMouseEvent *mouseEvent) { qDebug() << "InteractionCanvas: Mouse: released:" << mouseEvent->button(); if (mouseEvent->button() == Qt::LeftButton) { if(m_NewLine) { m_MouseReleasePoint = mouseEvent->pos(); m_NewLine->setP2(m_MouseReleasePoint); m_NewLine->setSelected(false); m_Lines.append(*m_NewLine); m_NewLine = 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" : ""); } /** * @brief InteractionCanvas::changeSelectedLine * @param newSelectedLine * The new selected line or null to simply deselect. */ void InteractionCanvas::changeSelectedLine(Line *newSelectedLine) { if(m_SelectedLine) { m_SelectedLine->setSelected(false); m_SelectedLine = NULL; } if(newSelectedLine) { m_SelectedLine = newSelectedLine; m_SelectedLine->setSelected(true); } } void InteractionCanvas::paintEvent(QPaintEvent *paintEvent) { // Setup the Painters QPainter painter(this); if (m_NewLine) { m_NewLine->draw(&painter); } foreach (Line line, m_Lines) { line.draw(&painter); } }