summaryrefslogtreecommitdiff
path: root/src/data/tikzassembler.cpp
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2020-04-12 16:43:44 +0100
committerAleks Kissinger <aleks0@gmail.com>2020-04-12 16:43:44 +0100
commitd9ec25d1bcea4e45d1965e95bb3099c3864e04a0 (patch)
tree181ddebe4d8c47d751d7cdbb0e27da8326d93d35 /src/data/tikzassembler.cpp
parentc56b682750e9f2a911a841e89e4e51b7d0608ab5 (diff)
parsing and outputting complex paths
Diffstat (limited to 'src/data/tikzassembler.cpp')
-rw-r--r--src/data/tikzassembler.cpp34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/data/tikzassembler.cpp b/src/data/tikzassembler.cpp
index ee75f7b..3cb3c10 100644
--- a/src/data/tikzassembler.cpp
+++ b/src/data/tikzassembler.cpp
@@ -30,6 +30,7 @@ TikzAssembler::TikzAssembler(Graph *graph, QObject *parent) :
yylex_init(&scanner);
yyset_extra(this, scanner);
_currentEdgeData = nullptr;
+ _currentPath = nullptr;
}
TikzAssembler::TikzAssembler(TikzStyles *tikzStyles, QObject *parent) :
@@ -38,6 +39,7 @@ TikzAssembler::TikzAssembler(TikzStyles *tikzStyles, QObject *parent) :
yylex_init(&scanner);
yyset_extra(this, scanner);
_currentEdgeData = nullptr;
+ _currentPath = nullptr;
}
void TikzAssembler::addNodeToMap(Node *n) { _nodeMap.insert(n->name(), n); }
@@ -82,6 +84,15 @@ void TikzAssembler::setCurrentEdgeSource(Node *currentEdgeSource)
_currentEdgeSource = currentEdgeSource;
}
+Node *TikzAssembler::currentPathSource() const
+{
+ if (_currentPath && _currentPath->length() > 0) {
+ return _currentPath->edges()[0]->source();
+ } else {
+ return nullptr;
+ }
+}
+
GraphElementData *TikzAssembler::currentEdgeData() const
{
return _currentEdgeData;
@@ -102,12 +113,31 @@ void TikzAssembler::setCurrentEdgeSourceAnchor(const QString &currentEdgeSourceA
_currentEdgeSourceAnchor = currentEdgeSourceAnchor;
}
+void TikzAssembler::addEdge(Edge *e)
+{
+ if (!_currentPath) _currentPath = new Path();
+ _currentPath->addEdge(e);
+ _graph->addEdge(e);
+}
+
void TikzAssembler::finishCurrentPath()
{
if (_currentEdgeData) {
- delete _currentEdgeData;
+ GraphElementData *d = _currentEdgeData;
_currentEdgeData = nullptr;
+ delete d;
+ }
+
+ if (_currentPath) {
+ if (_currentPath->length() < 2) {
+ _currentPath->removeEdges();
+ Path *p = _currentPath;
+ _currentPath = nullptr;
+ delete p;
+ } else {
+ _graph->addPath(_currentPath);
+ _currentPath = nullptr;
+ }
}
- // TODO: create a path and add it to graph
}