X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Fedit%2Feditor.cpp;h=ffdc94c9cfe89498d8448da2c341006d4d514d5b;hb=384b67e0232e553151dfdc9caffd255c5f597d2b;hp=381de48ad206d3a3b42708412ff7dde246e3896e;hpb=d51a3585287ecb5d86ea4dfea9acacecb1db208e;p=vlp.git diff --git a/src/edit/editor.cpp b/src/edit/editor.cpp index 381de48..ffdc94c 100644 --- a/src/edit/editor.cpp +++ b/src/edit/editor.cpp @@ -1,154 +1,52 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ProgramStructureDialog.h" +#include "UnitStructureDialog.h" +#include "PreferencesDialog.h" +#include "FindDialog.h" #include "editor.h" -#define TYPENUM 5 - -Editor *e; - -/** - * @attention Currently not in use - */ -char *UnitTypes[TYPENUM] = { - "CLASS", - "PROCEDURE", - "FUNCTION", - "PROCESS", - "COROUTINE" -}; - -/** - * My_Edit constructor. Initializes and sets variables of Multiline editor - * widget. - * @param parent Parent widget of this widget. If set, this widget becomes a - * child window inside parent. If not set this widget becomes a - * top level window. Default: NULL - * @param name If set, name is sent to the Qobject constructor, so widget is - * identifiable (e.g. in Qt Designer) - */ -My_Edit::My_Edit(QWidget *parent, const char *name) - : QMultiLineEdit(parent, name) -{ - parent = NULL; - name = NULL; -} - -/** - * @copydoc QWidget::keyPressEvent(QKeyEvent*) - */ -void My_Edit::keyPressEvent(QKeyEvent *ev) -{ - QMultiLineEdit::keyPressEvent(ev); - emit cursorMove(); -} - -/** - * Event invoked on program close. - * @copydoc QWidget::closeEvent(QCloseEvent*) - */ -void Editor::closeEvent(QCloseEvent * e) { - e->ignore(); -} +namespace loglan { +namespace vlp { /** * Editor constructor. Initializes and sets variables of Loglan Editor. - * @param hdir Home directory of program (specified in configuration file) - * @param parent Parent widget of this widget. If set, this widget becomes a - * child window inside parent. If not set this widget becomes a - * top level window. Default: NULL - * @param name If set, name is sent to the Qobject constructor, so widget is - * identifiable (e.g. in Qt Designer) + * + * @param argc command line argc parameter + * @param argv command line argv parameter */ -Editor::Editor(char *hdir,QWidget * parent , const char * name) - : QWidget(parent, name) +Editor::Editor(int argc, char **argv) { - QFont f1("Helvetica", 10, QFont::Bold); + setupUi(this); + + if (argc > 1) { + strcpy(HomeDir, argv[1]); + fprintf(stderr, "EDIT: HomeDir inited with: %s (%s)\n", HomeDir, argv[1]); + } - strcpy(HomeDir, hdir); - strcpy(find_text, ""); + find_text = ""; sensitive = FALSE; - m = new QMenuBar(this, "menu"); - m->setFont(f1); - QPopupMenu * file = new QPopupMenu(); - QPopupMenu * comp = new QPopupMenu(); - QPopupMenu * loglan = new QPopupMenu(); - QPopupMenu *medit = new QPopupMenu(); - - file->setFont(f1); - comp->setFont(f1); - loglan->setFont(f1); - medit->setFont(f1); - CHECK_PTR(file); - CHECK_PTR(comp); - m->insertItem("&File ", file); - m->insertItem("&Edit", medit); - m->insertItem("&Compile", this,SLOT(cmp())); - - /* m->insertItem( "&LOGLAN ", loglan );*/ - m->insertItem("&Properties", this, SLOT(props())); - - file->insertItem("New ", this, SLOT(create()), CTRL + Key_N); - file->insertItem("Open ", this, SLOT(load()), CTRL + Key_O); - file->insertItem("Save ", this, SLOT(save()),CTRL + Key_S); - file->insertItem("Save as", this, SLOT(save_as()),CTRL + Key_A); - file->insertSeparator(); - file->insertItem("Quit ", qApp, SLOT(quit())); - - /* comp->insertItem("Compile ", this, SLOT(cmp()), CTRL + Key_C);*/ - /* comp->insertItem("Gen ", this, SLOT(gen()), CTRL + Key_G);*/ - /* comp->insertItem("Compile & Gen ", this, SLOT(comp_all()));*/ - - /* loglan->insertItem( "Program structure", this, SLOT(log_prog()));*/ - /* loglan->insertItem( "Unit structure", this, SLOT(log_unit()));*/ - - e = new My_Edit( this, "editor" ); - connect(e,SIGNAL(cursorMove()),this,SLOT(updateline())); - medit->insertItem("Copy ",e,SLOT(copy()),CTRL + Key_Insert); - medit->insertItem("Paste ",e,SLOT(paste()), SHIFT + Key_Insert); - medit->insertItem("Cut ",e,SLOT(cut()), CTRL + Key_Delete); - medit->insertItem("Clear All ",e,SLOT(clear())); - medit->insertSeparator(); - medit->insertItem("Find ",this,SLOT(findText()), CTRL + Key_F); - medit->insertItem("Find Next ",this,SLOT(find_next()),CTRL + Key_L); - - msg = new QMultiLineEdit( this, "messages" ); - msg->setReadOnly(TRUE); - compiler_path.sprintf("%s/%s",HomeDir,"compile/logcomp"); - gen_path.sprintf("%s/%s",HomeDir,"compile/gen"); - file_path.sprintf("%s",HomeDir); - - QFont f2("Times", 14, QFont::Bold); - e->setFont(f1); - QColor col(200, 200, 200); - QColorGroup grp(black, col, col.light(), col.dark(), col.dark(), black, col); - - msg->setPalette(QPalette(grp, grp, grp)); - position = new QLabel(this); - position->setFont(f2); - position->setFrameStyle(QFrame::NoFrame); - position->setAutoResize(TRUE); - resize(400, 300); + + compiler_path.sprintf("%s/%s", HomeDir, "compile/logcomp"); + gen_path.sprintf("%s/%s", HomeDir, "compile/gen"); + file_path.sprintf("%s", HomeDir); + + + connect(editor, SIGNAL(cursorPositionChanged()), this, SLOT(on_editor_cursorPositionChanged())); } /** @@ -161,108 +59,43 @@ Editor::~Editor() /** * Displays line:column position of cursor */ -void Editor::updateline() +void Editor::on_editor_cursorPositionChanged() { - char pom[255]; + QString position; int cx; int cy; - e->getCursorPosition(&cx, &cy); - sprintf(pom," %d:%d ", cx, cy); - position->setText(pom); -} - -/** - * Event invoked on resizing editor application window. - * @copydoc QWidget::resizeEvent(QResizeEvent*) - * @param event Currently does nothing - */ -void Editor::resizeEvent(QResizeEvent *event) -{ - if (e && m) { - e->setGeometry(0, m->height(), width(), - 3 * (int)((height() - m->height()) / 4)); - - msg->setGeometry(0, m->height() + e->height(), width(), - (int)((height() - m->height()) / 4)); + cx = editor->textCursor().blockNumber(); + cy = editor->textCursor().columnNumber(); + position.sprintf("%d:%d", cx, cy); - position->setGeometry(width() - 80, - m->height() + e->height() - 10, - position->width(), - position->height()); - } -} - -/** - * Displays additional window - */ -void Editor::load() -{ - QString fn = QFileDialog::getOpenFileName(file_path.data(), "*.log"); - if (!fn.isEmpty()) - load(fn); + statusBar()->showMessage(position); } /** * Loads given file content to the editor. + * * @param fileName Filename of file which will be read. */ void Editor::load(const char *fileName) { fname.sprintf("%s", fileName); - QFile f(fileName); - if (!f.open(IO_ReadOnly)) + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; - e->setAutoUpdate(FALSE); - e->clear(); + editor->clear(); - QTextStream t(&f); - while (!t.eof()) { - QString s = t.readLine(); - e->append(s); + QTextStream textStream(&file); + while (!file.atEnd()) { + editor->append(textStream.readLine()); } - f.close(); - e->setAutoUpdate(TRUE); - e->repaint(); - setCaption(fileName); -} + file.close(); -/** - * Saves editor content to the file. - * If content has been read from file, it is written to this file. Otherwise - * dialog is shown to save content to the specified by user, file. - */ -void Editor::save() -{ - if (fname.isEmpty()) { - QString fn = QFileDialog::getSaveFileName(file_path.data(), - "*.log"); - if (!fn.isEmpty()) { - fname.sprintf("%s",fn.data()); - save( fn ); - } - } else { - save(fname); - } - setCaption(fname); -} - -/** - * Saves editor content to the file. - * Forces saving editor content to the new file. Special dialog is shown for - * that purpose. - */ -void Editor::save_as() -{ - QString fn = QFileDialog::getSaveFileName(file_path.data(), "*.log"); - if (!fn.isEmpty()) { - fname.sprintf("%s", fn.data()); - save(fn); - } - setCaption(fname); + editor->repaint(); + setWindowTitle(fileName); } /** @@ -271,60 +104,13 @@ void Editor::save_as() */ void Editor::save(const char *fileName) { - QFile f(fileName); - if (!f.open(IO_WriteOnly)) + QFile file(fileName); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return; - f.reset(); - f.writeBlock(e->text().data(), e->text().length()); - f.close(); -} - -/** - * Empties editor content. - */ -void Editor::create() -{ - e->clear(); - fname.sprintf("%s", ""); -} - -/** - * @attention Currently not in use - */ -void Editor::print() -{ -} - -/** - * @attention Currently not in use. - * - * Saves and compiles code. - */ -void Editor::cmp() -{ - save(); - compile(COMP_MODE); -} - -/** - * @attention Currently not in use. - * - * Generates program. - */ -void Editor::gen() -{ - compile(GEN_MODE); -} -/** - * @attention Currently not in use. - * - * Saves, compiles and generates code. - */ -void Editor::comp_all() -{ - save(); - compile(ALL_MODE); + file.reset(); + file.write(editor->toPlainText().toAscii().data(), editor->toPlainText().length()); + file.close(); } /** @@ -337,235 +123,124 @@ void Editor::comp_all() void Editor::compile(int mode) { char cmd[255]; - - msg->setAutoUpdate(FALSE); - msg->setReadOnly(FALSE); - msg->clear(); - msg->repaint(); + messages->setReadOnly(FALSE); + messages->clear(); + messages->repaint(); /*i = fname.find('.');*/ /* if (i>=0) {*/ - QString fn = fname.data(); - /* fn.truncate(i);*/ switch(mode) { case COMP_MODE: - sprintf(cmd, "%s %s > comp_data!", compiler_path.data(), - fname.data()); + sprintf(cmd, "%s %s > comp_data!", compiler_path.toStdString().c_str(), + fname.toStdString().c_str()); break; case GEN_MODE: - sprintf(cmd, "%s %s > comp_data!", gen_path.data(), fn.data()); + sprintf(cmd, "%s %s > comp_data!", gen_path.toStdString().c_str(), + fname.toStdString().c_str()); break; case ALL_MODE: - sprintf(cmd, "%s %s > comp_data!", compiler_path.data(), - fn.data()); + sprintf(cmd, "%s %s > comp_data!", compiler_path.toStdString().c_str(), + fname.toStdString().c_str()); system(cmd); - sprintf(cmd, "%s %s >> comp_data!", gen_path.data(), fn.data()); + sprintf(cmd, "%s %s >> comp_data!", gen_path.toStdString().c_str(), + fname.toStdString().c_str()); break; } system(cmd); QFile f("comp_data!"); - if (!f.open(IO_ReadOnly)) + if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream t(&f); - while (!t.eof()) { + while (!t.atEnd()) { QString s = t.readLine(); - msg->append(s); + messages->append(s); } f.close(); - msg->setReadOnly(TRUE); - msg->setAutoUpdate(TRUE); - msg->repaint(); + + messages->setReadOnly(TRUE); + + messages->repaint(); unlink("comp_data!"); /*}*/ } /** - * Displays window with editor properties + * Empties editor content. */ -void Editor::props() +void Editor::on_actionNew_triggered() { - QDialog dlg(this, "Properties", TRUE); - - QLineEdit *files; - files = new QLineEdit(&dlg, "f_path"); - files->setGeometry(130, 20, 250, 30); - files->setText(file_path.data()); - files->setMaxLength(32767); - files->setEchoMode(QLineEdit::Normal); - files->setFrame(TRUE); - - QLabel *tmpQLabel; - tmpQLabel = new QLabel(&dlg, "Label_1"); - tmpQLabel->setGeometry(10, 20, 100, 30); - tmpQLabel->setText("Path to files:"); - tmpQLabel->setAlignment(289); - tmpQLabel->setMargin(-1); - - tmpQLabel = new QLabel(&dlg, "Label_2"); - tmpQLabel->setGeometry(10, 60, 100, 30); - tmpQLabel->setText("Path to compiler:"); - tmpQLabel->setAlignment(289); - tmpQLabel->setMargin(-1); - - /* - tmpQLabel = new QLabel(&dlg, "Label_3"); - tmpQLabel->setGeometry(10, 100, 100, 30); - tmpQLabel->setText("Path to gen:"); - tmpQLabel->setAlignment(289); - tmpQLabel->setMargin(-1); - */ - - QLineEdit *compp; - compp = new QLineEdit(&dlg, "l_path"); - compp->setGeometry(130, 60, 250, 30); - compp->setText(compiler_path.data()); - compp->setMaxLength(32767); - compp->setEchoMode(QLineEdit::Normal); - compp->setFrame(TRUE); - - /* - QLineEdit* genp; - genp = new QLineEdit(&dlg, "g_path"); - genp->setGeometry(130, 100, 250, 30); - genp->setText(gen_path.data()); - genp->setMaxLength(32767); - genp->setEchoMode(QLineEdit::Normal); - genp->setFrame(TRUE); - */ - - QPushButton* tmpQPushButton; - tmpQPushButton = new QPushButton(&dlg, "OkBtn"); - tmpQPushButton->setGeometry(90, 100, 70, 30); - tmpQPushButton->setText("Ok"); - tmpQPushButton->setAutoRepeat(FALSE); - tmpQPushButton->setAutoResize(FALSE); - connect(tmpQPushButton,SIGNAL(clicked()), &dlg, SLOT(accept())); - - tmpQPushButton = new QPushButton(&dlg, "CancelBtn"); - tmpQPushButton->setGeometry(180, 100, 70, 30); - tmpQPushButton->setText("Cancel"); - tmpQPushButton->setAutoRepeat(FALSE); - tmpQPushButton->setAutoResize(FALSE); - connect(tmpQPushButton,SIGNAL(clicked()), &dlg, SLOT(reject())); - dlg.resize(400, 140); - - if (dlg.exec()) { - compiler_path.sprintf("%s", compp->text().ascii()); - /* gen_path.sprintf("%s",genp->text()); */ - file_path.sprintf("%s",files->text().ascii()); - }; + on_actionClear_all_triggered(); + fname.sprintf("%s", ""); } /** - * @attention Currently not in use + * Displays additional window */ -void Editor::log_unit() +void Editor::on_actionOpen_triggered() { - QString txt; - QDialog dlg(this, "unit", TRUE); - int cx, cy, i; - char uname[255]; - - QLineEdit* files; - files = new QLineEdit(&dlg, "f_path"); - files->setGeometry(130, 20, 250, 30); - files->setText(""); - files->setMaxLength(32767); - files->setEchoMode(QLineEdit::Normal); - files->setFrame(TRUE); - - QLabel* tmpQLabel; - tmpQLabel = new QLabel(&dlg, "Label_1"); - tmpQLabel->setGeometry(10, 20, 100, 30); - tmpQLabel->setText("Unit name:"); - tmpQLabel->setAlignment(289); - tmpQLabel->setMargin(-1); - - QPushButton* tmpQPushButton; - tmpQPushButton = new QPushButton(&dlg, "OkBtn"); - tmpQPushButton->setGeometry(40, 170, 70, 30); - tmpQPushButton->setText("Ok"); - tmpQPushButton->setAutoRepeat(FALSE); - tmpQPushButton->setAutoResize(FALSE); - connect(tmpQPushButton,SIGNAL(clicked()), &dlg, SLOT(accept())); - - tmpQPushButton = new QPushButton(&dlg, "CancelBtn"); - tmpQPushButton->setGeometry(130, 170, 100, 30); - tmpQPushButton->setText("Cancel"); - tmpQPushButton->setAutoRepeat(FALSE); - tmpQPushButton->setAutoResize(FALSE); - connect(tmpQPushButton,SIGNAL(clicked()), &dlg, SLOT(reject())); - - tmpQLabel = new QLabel(&dlg, "Label_1"); - tmpQLabel->setGeometry(10, 50, 100, 60); - tmpQLabel->setText("Unit type:"); - - QListBox lst(&dlg, "type"); - for(i = 0; i < TYPENUM; i++) { - lst.insertItem(UnitTypes[i]); - } - lst.setGeometry(130, 60, 180, 80); - lst.setCurrentItem(0); - - if (dlg.exec()) { - strcpy(uname, files->text()); - e->getCursorPosition(&cx, &cy); + QString fn = QFileDialog::getOpenFileName(this, "Load file", file_path, "*.log"); + if (!fn.isEmpty()) + load(fn.toAscii().data()); +} - txt.sprintf("UNIT %s : %s( );\nBEGIN\n\nEND %s;", - uname, lst.text(lst.currentItem()).ascii(), uname); - e->insertAt(txt, cx, cy); +/** + * Saves editor content to the file. + * If content has been read from file, it is written to this file. Otherwise + * dialog is shown to save content to the specified by user, file. + */ +void Editor::on_actionSave_triggered() +{ + if (fname.isEmpty()) { + QString fn = QFileDialog::getSaveFileName(this, "Save file", + file_path, "*.log"); + if (!fn.isEmpty()) { + fname.sprintf("%s", fn.toAscii().data()); + save(fn.toAscii().data()); + } + } else { + save(fname.toAscii().data()); } + setWindowTitle(fname); } /** - * @attention Currently not in use + * Saves editor content to the file. + * Forces saving editor content to the new file. Special dialog is shown for + * that purpose. */ -void Editor::log_prog() +void Editor::on_actionSave_as_triggered() { - QString txt; - QDialog dlg(this, "unit", TRUE); - int cx, cy; - char uname[255]; - - QLineEdit *files; - files = new QLineEdit(&dlg, "f_path"); - files->setGeometry(130, 20, 250, 30); - files->setText(""); - files->setMaxLength(32767); - files->setEchoMode(QLineEdit::Normal); - files->setFrame(TRUE); - - QLabel *tmpQLabel; - tmpQLabel = new QLabel(&dlg, "Label_1"); - tmpQLabel->setGeometry(10, 20, 100, 30); - tmpQLabel->setText("Program name:"); - - QPushButton* tmpQPushButton; - tmpQPushButton = new QPushButton(&dlg, "OkBtn"); - tmpQPushButton->setGeometry(40, 70, 70, 30); - tmpQPushButton->setText("Ok"); - tmpQPushButton->setAutoRepeat(FALSE); - tmpQPushButton->setAutoResize(FALSE); - connect(tmpQPushButton,SIGNAL(clicked()), &dlg, SLOT(accept())); - - tmpQPushButton = new QPushButton(&dlg, "CancelBtn"); - tmpQPushButton->setGeometry(130, 70, 100, 30); - tmpQPushButton->setText("Cancel"); - tmpQPushButton->setAutoRepeat(FALSE); - tmpQPushButton->setAutoResize(FALSE); - connect(tmpQPushButton,SIGNAL(clicked()), &dlg, SLOT(reject())); - - if (dlg.exec()) { - strcpy(uname, files->text()); - e->getCursorPosition(&cx, &cy); - - txt.sprintf("PROGRAM %s\n\nBEGIN\n\nEND ", uname); - e->insertAt(txt, cx, cy); + QString fn = QFileDialog::getSaveFileName(this, "Save file as", + file_path, "*.log"); + if (!fn.isEmpty()) { + fname.sprintf("%s", fn.toAscii().data()); + save(fn.toAscii().data()); } + setWindowTitle(fname); +} +void Editor::on_actionQuit_triggered() +{ + QApplication::instance()->quit(); +} +void Editor::on_actionCopy_triggered() +{ + editor->copy(); +} +void Editor::on_actionPaste_triggered() +{ + editor->paste(); +} +void Editor::on_actionCut_triggered() +{ + editor->cut(); +} +void Editor::on_actionClear_all_triggered() +{ + editor->clear(); } /** @@ -573,65 +248,21 @@ void Editor::log_prog() * Displays window to set search parameters. If text is found sets cursor * position on it. */ -void Editor::findText() +void Editor::on_actionFind_triggered() { - QDialog dlg(this, "", TRUE); - QString *txt; - int res, line, pom; - - QLineEdit *tmpQLineEdit; - tmpQLineEdit = new QLineEdit(&dlg, "LineEdit_1"); - tmpQLineEdit->setGeometry(60, 10, 180, 30); - tmpQLineEdit->setText(""); - - QLabel *tmpQLabel; - tmpQLabel = new QLabel(&dlg, "Label_1"); - tmpQLabel->setGeometry(10, 10, 50, 30); - - QFont font("helvetica", 12, 75, 0); - font.setStyleHint((QFont::StyleHint)0); - //font.setCharSet((QFont::CharSet)0); - tmpQLabel->setFont(font); - - tmpQLabel->setText("Text:"); - - QCheckBox *tmpQRadioButton; - tmpQRadioButton = new QCheckBox(&dlg, "RadioButton_1"); - tmpQRadioButton->setGeometry(70, 50, 150, 30); - tmpQRadioButton->setText("Case sensitive"); - tmpQRadioButton->setAutoRepeat(FALSE); - tmpQRadioButton->setAutoResize(FALSE); - - QPushButton *okbtn, *cbtn; - okbtn = new QPushButton(&dlg, "PushButton_1"); - okbtn->setGeometry(260, 10, 100, 30); - okbtn->setText("Find"); - okbtn->setDefault(TRUE); - connect(okbtn,SIGNAL(clicked()), &dlg, SLOT(accept())); - - cbtn = new QPushButton(&dlg, "PushButton_2"); - cbtn->setGeometry(260, 50, 100, 30); - cbtn->setText("Close"); - connect(cbtn, SIGNAL(clicked()), &dlg, SLOT(reject())); - dlg.resize(380, 90); - - if (dlg.exec()) { - e->getCursorPosition(&pom, &res); - sensitive = tmpQRadioButton->isChecked(); - for (line = pom + 1; line < e->numLines(); line++) { - txt = new QString(e->textLine(line)); - if (tmpQRadioButton->isChecked()) - res = txt->find(tmpQLineEdit->text(), 0, TRUE); - else - res = txt->find(tmpQLineEdit->text(), 0, FALSE); - - delete txt; - if (res >= 0) { - e->setCursorPosition(line, 1); - strcpy(find_text, tmpQLineEdit->text()); - break; - } + dialog::FindDialog dialog(this); + + if (dialog.exec()) { + sensitive = dialog.isCaseSensitive(); + find_text = dialog.getSearchText(); + + QTextDocument::FindFlags flags = 0; + + if (sensitive) { + flags |= QTextDocument::FindCaseSensitively; } + + editor->find(find_text, flags); } } @@ -640,44 +271,96 @@ void Editor::findText() * Displays window to set search parameters. If text is found sets cursor * position on it. */ -void Editor::find_next() +void Editor::on_actionFind_Next_triggered() { - int pom,res,line; - QString *txt; - - e->getCursorPosition(&pom, &res); - for(line = pom + 1; line < e->numLines(); line++) { - txt = new QString(e->textLine(line)); - if (sensitive) - res=txt->find(find_text, 0, TRUE); - else - res=txt->find(find_text, 0, FALSE); - - delete txt; - if (res >= 0) { - e->setCursorPosition(line, 1); - break; + if (!find_text.isEmpty()) { + QTextDocument::FindFlags flags = 0; + + if (sensitive) { + flags |= QTextDocument::FindCaseSensitively; } + editor->find(find_text, flags); } } +/** + * Displays window with editor properties + */ +void Editor::on_actionPreferences_triggered() +{ + dialog::PreferencesDialog dialog(this); + + dialog.setCompilerPath(compiler_path); + dialog.setFilesPath(file_path); + dialog.setGenPath(gen_path); + + if (dialog.exec()) { + compiler_path.sprintf("%s", dialog.getCompilerPath().toStdString().c_str()); + gen_path.sprintf("%s",dialog.getGenPath().toStdString().c_str()); + file_path.sprintf("%s", dialog.getFilesPath().toStdString().c_str()); + }; +} + +/** + * Saves and compiles code. + */ +void Editor::on_actionCompile_triggered() +{ + on_actionSave_triggered(); + compile(COMP_MODE); +} + +/** + * Generates program. + */ +void Editor::on_actionGen_triggered() +{ + compile(GEN_MODE); +} + +/** + * Saves, compiles and generates code. + */ +void Editor::on_actionCompile_Gen_triggered() +{ + on_actionSave_triggered(); + compile(ALL_MODE); +} + +void Editor::on_actionProgram_structure_triggered() +{ + dialog::ProgramStructureDialog dialog(this); + + if (dialog.exec()) { + editor->textCursor().insertText(dialog.getCode()); + } +} + +void Editor::on_actionUnit_structure_triggered() +{ + dialog::UnitStructureDialog dialog(this); + + if (dialog.exec()) { + editor->textCursor().insertText(dialog.getCode()); + } +} + +} +} + /** * Program main function. * argv[1] is mandatory and should be a path to the home directory of * application (same as in configuration file). + * * @param argc Number of program arguments * @param argv Program arguments */ int main(int argc, char **argv) { - QApplication a(argc, argv); - //a.setStyle(WindowsStyle); - /* - Defaults are zeroed, so created Editor widget become top-level window. - */ - e = new Editor(argv[1]); - e->resize(600, 400); - e->show(); - return a.exec(); + QApplication app(argc, argv); + loglan::vlp::Editor * editor = new loglan::vlp::Editor(argc, argv); + editor->show(); + return app.exec(); }