summaryrefslogtreecommitdiffstats
path: root/interactioncanvas.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'interactioncanvas.cpp')
-rw-r--r--interactioncanvas.cpp127
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();
}