diff options
| author | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-06-08 10:27:31 +0200 |
|---|---|---|
| committer | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-06-08 10:27:31 +0200 |
| commit | d847e6bf7929c8565bff4e17d9fd077b8e0ca74d (patch) | |
| tree | b3b06f5ecb08251d7ea1660ce5318a7eb38271b5 /interactioncanvas.cpp | |
| parent | 45813562e266cf8e58ea9cb04f655bbb542a555e (diff) | |
| download | GUI_SS2015-d847e6bf7929c8565bff4e17d9fd077b8e0ca74d.tar.gz GUI_SS2015-d847e6bf7929c8565bff4e17d9fd077b8e0ca74d.zip | |
Add XML files for reading and writing
Diffstat (limited to 'interactioncanvas.cpp')
| -rw-r--r-- | interactioncanvas.cpp | 127 |
1 files changed, 109 insertions, 18 deletions
diff --git a/interactioncanvas.cpp b/interactioncanvas.cpp index 80a4317..3236be1 100644 --- a/interactioncanvas.cpp +++ b/interactioncanvas.cpp @@ -1,7 +1,7 @@ #include "interactioncanvas.h" InteractionCanvas::InteractionCanvas(QWidget *parent) - :QLabel(parent) + : QLabel(parent) { setFocusPolicy(Qt::StrongFocus); setMouseTracking(true); @@ -9,19 +9,27 @@ InteractionCanvas::InteractionCanvas(QWidget *parent) m_SelectedLine = NULL; } -InteractionCanvas::~InteractionCanvas() +void InteractionCanvas::clearLines() { - for(int i = 0; i < m_Lines.size(); i++) + for (int i = 0; i < m_Lines.size(); i++) { delete m_Lines[i]; - m_Lines.removeAt(i); } - if(m_NewLine) + + m_Lines.clear(); +} + +InteractionCanvas::~InteractionCanvas() +{ + clearLines(); + + if (m_NewLine) { delete m_NewLine; m_NewLine = NULL; } - if(m_SelectedLine) + + if (m_SelectedLine) { delete m_SelectedLine; m_SelectedLine = NULL; @@ -66,22 +74,100 @@ void InteractionCanvas::addPolygon() changeSelectedLine(tmpLine); } +void InteractionCanvas::read(QFile *file) +{ + m_fileName.setContent(file, false); + + QDomElement root = m_fileName.documentElement(); + + if (root.tagName() == "geometric_objects") + { + QDomElement child = root.firstChildElement(); + + Line *line = NULL; + + clearLines(); + + while (!child.isNull()) + { + line = NULL; + + if (child.tagName() == "Line") + { + line = new Line(); + } + + if (child.tagName() == "Rectangle") + { + line = new Rectangle(); + } + + if (child.tagName() == "Ellipse") + { + line = new Ellipse(); + } + + if (child.tagName() == "Polygon") + { + line = new Polygon(); + } + + if (line != NULL) + { + line->fromDomElement(child); + line->setSelected(false); + m_Lines.append(line); + } + + child = child.nextSiblingElement(); + } + } +} + +void InteractionCanvas::write(QFile *file) +{ + const int IndentSize = 4; + + m_fileName.clear(); + + QDomElement root = m_fileName.createElement("geometric_objects"); + + m_fileName.appendChild(root); + + QListIterator<Line *> childs(m_Lines); + + Line *child = NULL; + + while (childs.hasNext()) + { + child = childs.next(); + + root.appendChild(child->toDomElement(&m_fileName)); + } + + QTextStream out(file); + m_fileName.save(out, IndentSize); +} + void InteractionCanvas::mouseMoveEvent(QMouseEvent *mouseEvent) { qDebug() << "InteractionCanvas:" << mouseEvent->pos(); if (mouseEvent->buttons() == Qt::LeftButton) { - if(m_SelectedLine) + if (m_SelectedLine) { m_SelectedLine->move(m_LastMousePosition, mouseEvent->pos()); } - if(m_NewLine) + + if (m_NewLine) { m_NewLine->setP2(mouseEvent->pos()); } + update(); } + m_LastMousePosition = mouseEvent->pos(); } @@ -92,7 +178,7 @@ void InteractionCanvas::mousePressEvent(QMouseEvent *mouseEvent) if (mouseEvent->button() == Qt::LeftButton) { - if(!m_SelectedLine) + if (!m_SelectedLine) { m_MousePressPoint = mouseEvent->pos(); m_LastMousePosition = m_MousePressPoint; @@ -105,14 +191,16 @@ void InteractionCanvas::mousePressEvent(QMouseEvent *mouseEvent) if (mouseEvent->button() == Qt::RightButton) { changeSelectedLine(NULL); - for(int i = 0; i < m_Lines.size() && !m_SelectedLine; i++) + + 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]); } } } + update(); } @@ -122,7 +210,7 @@ void InteractionCanvas::mouseReleaseEvent(QMouseEvent *mouseEvent) if (mouseEvent->button() == Qt::LeftButton) { - if(m_NewLine) + if (m_NewLine) { m_MouseReleasePoint = mouseEvent->pos(); m_NewLine->setP2(m_MouseReleasePoint); @@ -140,12 +228,14 @@ 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) + if (!m_Lines.isEmpty() && keyEvent->key() == Qt::Key_Z && + keyEvent->modifiers() == Qt::ControlModifier) { - if(m_SelectedLine == m_Lines.last()) + if (m_SelectedLine == m_Lines.last()) { m_SelectedLine = NULL; } + delete m_Lines.last(); m_Lines.removeLast(); update(); @@ -155,7 +245,7 @@ void InteractionCanvas::keyPressEvent(QKeyEvent *keyEvent) void InteractionCanvas::keyReleaseEvent(QKeyEvent *keyEvent) { qDebug() << "InteractionCanvas: Key: released:" << keyEvent->key() << "(" << - keyEvent->text() << ")" << (keyEvent->isAutoRepeat() ? "druck" : ""); + keyEvent->text() << ")" << (keyEvent->isAutoRepeat() ? "druck" : ""); } /** @@ -165,12 +255,13 @@ void InteractionCanvas::keyReleaseEvent(QKeyEvent *keyEvent) */ void InteractionCanvas::changeSelectedLine(Line *newSelectedLine) { - if(m_SelectedLine) + if (m_SelectedLine) { m_SelectedLine->setSelected(false); m_SelectedLine = NULL; } - if(newSelectedLine) + + if (newSelectedLine) { m_SelectedLine = newSelectedLine; m_SelectedLine->setSelected(true); @@ -185,7 +276,7 @@ void InteractionCanvas::addNewLine(Line *newLine) m_NewLine = NULL; } - if(newLine) + if (newLine) { m_NewLine = new Line(); } |
