Skip to content

Commit ae94211

Browse files
navrkaldnavrkald
authored andcommitted
Basic operation on first conversion DONE!
* Next step is good debug if found some errors. * Next step is also add advanced features.
1 parent 101ef3f commit ae94211

File tree

8 files changed

+63
-16
lines changed

8 files changed

+63
-16
lines changed

RegularConvertor/algorithms/algorithm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class Algorithm : public QStandardItemModel
1212
//TODO add bool if brakepoint is set for some step
1313
QVector <QString> instructions;
1414
QVector <bool> breakpoints;
15-
enum modes {CHECK_MODE, PLAY_MODE, STEP_MODE};
15+
enum modes {NONE, CHECK_MODE, PLAY_MODE, STEP_MODE};
1616

1717
static const int HasBreakpoint_Role = Qt::UserRole;
1818
static const int Breakpoint_Role = Qt::UserRole +1 ;

RegularConvertor/algorithms/algorithmwidget.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ AlgorithmWidget::AlgorithmWidget(Algorithm::modes _mode, QWidget *parent) :
77
{
88
ui->setupUi(this);
99

10-
showSolution = false;
10+
showSolution = true;
1111

1212
connect(this->ui->nextButton,SIGNAL(clicked()),this,SIGNAL(nextPressed()));
1313
connect(this->ui->prewButton,SIGNAL(clicked()),this,SIGNAL(prewPressed()));
@@ -93,12 +93,12 @@ void AlgorithmWidget::on_showButton_clicked()
9393
showSolution=!showSolution;
9494
if(showSolution)
9595
{
96-
ui->showButton->setText("Show solution.");
96+
ui->showButton->setText("Show solution");
9797
emit showCorrectSolutionPressed();
9898
}
9999
else
100100
{
101-
ui->showButton->setText("Back.");
101+
ui->showButton->setText("Back");
102102
emit showUserSolutionPressed();
103103
}
104104
}

RegularConvertor/algorithms/algorithmwidget.ui

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@
9898
<item>
9999
<widget class="QToolButton" name="showButton">
100100
<property name="text">
101-
<string>Show correct solution</string>
101+
<string>Show solution</string>
102102
</property>
103103
</widget>
104104
</item>

RegularConvertor/algorithms/regexptofa.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
RegExpToFA::RegExpToFA(RegExp* _re) : Algorithm()
1717
{
18+
mode = NONE;
1819
setRE(_re);
1920
}
2021

@@ -120,8 +121,7 @@ void RegExpToFA::setRE(RegExp* _re)
120121
{
121122
computeSolution();
122123
postOrder(re->rootNode);
123-
}
124-
124+
}
125125
}
126126

127127
void RegExpToFA::selectRegExp(QModelIndex index)
@@ -131,15 +131,15 @@ void RegExpToFA::selectRegExp(QModelIndex index)
131131
QList<RegExpNode*> children = node->children;
132132
if(children.count() > 0)
133133
{
134-
left_fa_widget->setFA(new FiniteAutomata(children.at(0)->user_FA));
134+
left_fa_widget->setFA(&children.at(0)->user_FA);
135135
}
136136
else
137137
{
138138
left_fa_widget->setFA(new FiniteAutomata());
139139
}
140140
if(children.count() > 1)
141141
{
142-
right_fa_widget->setFA(new FiniteAutomata(children.at(1)->user_FA));
142+
right_fa_widget->setFA(&children.at(1)->user_FA);
143143
}
144144
else
145145
{
@@ -152,7 +152,7 @@ void RegExpToFA::selectRegExp(QModelIndex index)
152152
}
153153
else
154154
{
155-
center_fa_widget->setFA(new FiniteAutomata(node->user_FA));
155+
center_fa_widget->setFA(&node->user_FA);
156156
}
157157

158158

@@ -329,7 +329,7 @@ void RegExpToFA::checkSolution()
329329
QList<RegExpNode*> nodes_to_check(nodesToProcede);
330330
while(!nodes_to_check.empty())
331331
{
332-
RegExpNode* node = nodesToProcede.first();
332+
RegExpNode* node = nodes_to_check.first();
333333
nodes_to_check.pop_front();
334334
if(FiniteAutomata::areEquivalent(node->correct_FA, node->user_FA))
335335
{

RegularConvertor/finite_machine/arrow.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,12 @@ QWidget *)
199199
foreach(QString symbol,deletedSymbols)
200200
{
201201
FA->removeRule(ComputationalRules(startItem()->getName(),endItem()->getName(),symbol));
202+
FA->removeSymbol(symbol);
202203
}
203204
foreach(QString symbol,newSymbols)
204205
{
205206
FA->addRule(ComputationalRules(startItem()->getName(),endItem()->getName(),symbol));
207+
FA->addSymbol(symbol);
206208
}
207209
//Setup this
208210
this->symbols = editedSymbols;

RegularConvertor/finite_machine/diagramscene.cpp

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,11 @@ void DiagramScene::deleteSelected()
191191
StateNode* node = dynamic_cast<StateNode*>(item);
192192
if (node)
193193
{
194+
FA->removeState(node->getName());
194195
removeItem(node);
195196
if(node == startingState)
196197
{
197198
this->startingState = NULL;
198-
FA->startState = "";
199199
}
200200
foreach(Arrow* arrowToRemove,node->arrows)
201201
removeItem(arrowToRemove);
@@ -211,6 +211,7 @@ void DiagramScene::deleteSelected()
211211
void DiagramScene::setStartNode(QString nodeName)
212212
{
213213
StateNode* node = getNodeByName(nodeName);
214+
startingState = node;
214215
if(node != NULL)
215216
node->setStartinState();
216217
}
@@ -372,12 +373,51 @@ Arrow* DiagramScene::getArrow(StateNode *from, StateNode* to)
372373
return NULL;
373374
}
374375

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+
375415
void DiagramScene::setFA(FiniteAutomata* _FA)
376416
{
377-
this->selectAll();
378-
this->deleteSelected();
417+
// this->selectAll();
418+
// this->deleteSelected();
379419

380-
delete this->FA;
420+
clean();
381421
this->FA = _FA;
382422
addNodes(FA->states);
383423
setStartNode(FA->startState);

RegularConvertor/finite_machine/diagramscene.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ class DiagramScene : public QGraphicsScene
3131
Mode getMode();
3232
StateNode* startingState;
3333
Arrow* getArrow(StateNode* from, StateNode* to);
34-
34+
//clean scene but not delete or change FA
35+
void clean();
3536

3637
public slots:
3738
void setFA(FiniteAutomata* FA);

RegularConvertor/finite_machine/finiteautomata.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,10 @@ bool FiniteAutomata::removeState(QString stateName)
579579
{
580580
bool retval = this->states.remove(stateName);
581581
removeFinalState(stateName);
582+
if(this->startState == stateName)
583+
{
584+
this->startState = "";
585+
}
582586
foreach(ComputationalRules rule,this->rules)
583587
{
584588
if (rule.from == stateName || rule.to == stateName)

0 commit comments

Comments
 (0)