@@ -940,42 +940,79 @@ void MainWindow::on_Determinization_advanced_example_4_triggered()
940940}
941941void MainWindow::on_action_save_triggered ()
942942{
943- QFile file (" /tmp/test.txt" );
943+ if (activeConversion == none)
944+ {
945+ showStatusMessage (tr (" ERROR: No conversion selected!" ));
946+ return ;
947+ }
948+ QString filename = " " ;
949+ if ((filename = QFileDialog::getSaveFileName (this ,tr (" Save conversion" ))) == " " )
950+ return ;
951+
952+ QFile file (filename);
944953 file.open (QIODevice::WriteOnly);
945954 QDataStream out (&file); // we will serialize the data into the file
946955 out << activeConversion << mode;
947956 switch (activeConversion)
948957 {
949- case none:
950- break ;
951958 case RE_to_FA:
952- out << *reg_exp_algorithm->re ;
959+ {
960+ // In play mode does not make sence to save output fa
961+ if (mode == Algorithm::PLAY_MODE)
962+ {
963+ out << reg_exp_algorithm->re ->regexp ;
964+ }
965+ else
966+ {
967+ out << *reg_exp_algorithm->re ;
968+ }
969+ }
953970 break ;
954971 case REMOVE_EPSILON:
972+ if (mode == Algorithm::PLAY_MODE)
973+ {
974+ out << remove_epsilon_algorithm->FA ;
975+ }
976+ else
977+ {
955978 out << remove_epsilon_algorithm->FA << remove_epsilon_algorithm->non_epsilon_FA ;
979+ }
956980 break ;
957981 case DFA:
958- out << DFA_algorithm->FA << DFA_algorithm->DFA ;
982+ if (mode == Algorithm::PLAY_MODE)
983+ {
984+ out << DFA_algorithm->FA ;
985+ }
986+ else
987+ {
988+ out << DFA_algorithm->FA << DFA_algorithm->DFA ;
989+ }
990+ break ;
991+ // This should never happend
992+ case none:
959993 break ;
960994 }
961995 file.close ();
962996}
963997
964998void MainWindow::on_action_open_file_triggered ()
965999{
966- QFile read (" /tmp/test.txt" );
1000+ QString filename = " " ;
1001+ if ((filename = QFileDialog::getOpenFileName (this , tr (" Open conversion" )))==" " )
1002+ return ;
1003+
1004+ QFile read (filename);
9671005 read.open (QIODevice::ReadOnly);
9681006 QDataStream in (&read); // read the data serialized from the file
9691007 FiniteAutomata FA;
9701008 //
971- Conversions conversion;
1009+ Conversions conversion = none;
1010+ Algorithm::modes tmp_mode = Algorithm::NONE;
1011+
9721012 in >> conversion;
973- in >> mode ;
974- switch (mode )
1013+ in >> tmp_mode ;
1014+ switch (tmp_mode )
9751015 {
976- case Algorithm::NONE:
977-
978- break ;
9791016 case Algorithm::CHECK_MODE:
9801017 on_action_check_mode_triggered ();
9811018 break ;
@@ -985,44 +1022,64 @@ void MainWindow::on_action_open_file_triggered()
9851022 case Algorithm::STEP_MODE:
9861023 on_action_step_mode_triggered ();
9871024 break ;
1025+ case Algorithm::NONE:
1026+ showStatusMessage (tr (" ERROR: Input file in wrong format!" ));
1027+ return ;
1028+ break ;
9881029 }
1030+ mode = tmp_mode;
9891031
9901032 switch (conversion)
9911033 {
992- case none:
993- qDebug () << " Conversion: none" ;
994- break ;
9951034 case RE_to_FA:
9961035 {
997- qDebug () << " Conversion: RE_to_FA" ;
998- RegExp re;
999- in >> re;
1000- prepareREtoFA (new RegExp (re));
1036+ if (mode == Algorithm::PLAY_MODE)
1037+ {
1038+ QString regexp_str;
1039+ in >> regexp_str;
1040+ prepareREtoFA (new RegExp (regexp_str));
1041+ }
1042+ else
1043+ {
1044+ RegExp re;
1045+ in >> re;
1046+ prepareREtoFA (new RegExp (re));
1047+ }
10011048 }
10021049 break ;
10031050 case REMOVE_EPSILON:
10041051 {
1005- qDebug () << " Conversion: REMOVE_EPSILON" ;
10061052 FiniteAutomata in_FA;
1007- FiniteAutomata out_FA;
1008- in >> in_FA >> out_FA;
1053+ in >> in_FA;
10091054 prepareRemoveEpsilon ();
10101055 remove_epsilon_algorithm->setInputFA (in_FA);
1011- remove_epsilon_algorithm->setOutputFA (out_FA);
1056+ if (mode != Algorithm::PLAY_MODE)
1057+ {
1058+ FiniteAutomata out_FA;
1059+ in >> out_FA;
1060+ remove_epsilon_algorithm->setOutputFA (out_FA);
1061+ }
10121062 }
10131063 break ;
10141064 case DFA:
1015- qDebug () << " Conversion: DFA " ;
1065+ {
10161066 FiniteAutomata in_FA;
1017- FiniteAutomata out_FA;
1018- in >> in_FA >> out_FA;
1067+ in >> in_FA;
10191068 prepareDFA ();
10201069 DFA_algorithm->setInputFA (in_FA);
1021- DFA_algorithm->setOutputFA (out_FA);
1070+ if (mode != Algorithm::PLAY_MODE)
1071+ {
1072+ FiniteAutomata out_FA;
1073+ in >> out_FA;
1074+ DFA_algorithm->setOutputFA (out_FA);
1075+ }
1076+ }
1077+ break ;
1078+ case none:
1079+ showStatusMessage (tr (" ERROR: Input file in wrong format!" ));
1080+ return ;
10221081 break ;
10231082 }
1024-
1025- qDebug () << FA;
10261083}
10271084
10281085QDataStream& operator >>(QDataStream& in, MainWindow::Conversions& e)
0 commit comments