@@ -191,11 +191,11 @@ void DiagramScene::deleteSelected()
191
191
StateNode* node = dynamic_cast <StateNode*>(item);
192
192
if (node)
193
193
{
194
+ FA->removeState (node->getName ());
194
195
removeItem (node);
195
196
if (node == startingState)
196
197
{
197
198
this ->startingState = NULL ;
198
- FA->startState = " " ;
199
199
}
200
200
foreach (Arrow* arrowToRemove,node->arrows )
201
201
removeItem (arrowToRemove);
@@ -211,6 +211,7 @@ void DiagramScene::deleteSelected()
211
211
void DiagramScene::setStartNode (QString nodeName)
212
212
{
213
213
StateNode* node = getNodeByName (nodeName);
214
+ startingState = node;
214
215
if (node != NULL )
215
216
node->setStartinState ();
216
217
}
@@ -372,12 +373,51 @@ Arrow* DiagramScene::getArrow(StateNode *from, StateNode* to)
372
373
return NULL ;
373
374
}
374
375
376
+ void DiagramScene::clean ()
377
+ {
378
+
379
+ QList<QGraphicsItem*> items = this ->items ();
380
+
381
+
382
+ // first delete edges
383
+ foreach (QGraphicsItem* item,items)
384
+ {
385
+ Arrow* arrow = dynamic_cast <Arrow*>(item);
386
+ if (arrow)
387
+ {
388
+ removeItem (arrow);
389
+ items.removeOne (arrow);
390
+ delete arrow;
391
+ }
392
+ }
393
+
394
+
395
+
396
+ // then delete nodes
397
+ foreach (QGraphicsItem* item,items)
398
+ {
399
+ StateNode* node = dynamic_cast <StateNode*>(item);
400
+ if (node)
401
+ {
402
+ removeItem (node);
403
+ foreach (Arrow* arrowToRemove,node->arrows )
404
+ removeItem (arrowToRemove);
405
+ delete node;
406
+ // FA->removeState(node->)
407
+ }
408
+ else
409
+ qDebug () << " Chyba v diagramscene.cpp, ktera by nikdy nemela nastat!" ;
410
+ }
411
+ emit FA_changed (FA);
412
+
413
+ }
414
+
375
415
void DiagramScene::setFA (FiniteAutomata* _FA)
376
416
{
377
- this ->selectAll ();
378
- this ->deleteSelected ();
417
+ // this->selectAll();
418
+ // this->deleteSelected();
379
419
380
- delete this -> FA ;
420
+ clean () ;
381
421
this ->FA = _FA;
382
422
addNodes (FA->states );
383
423
setStartNode (FA->startState );
0 commit comments