-
-
-#include <qapp.h>
-#include <qmenubar.h>
-#include <qpopmenu.h>
-#include <qlabel.h>
-#include <qlistbox.h>
-#include <qfile.h>
-#include <qfiledlg.h>
-#include <qfontmet.h>
-#include <qtooltip.h>
-#include <qfont.h>
-#include <qpixmap.h>
-#include <qmsgbox.h>
-#include <stdio.h>
-#include <stdlib.h>
#include <unistd.h>
-#include <qscrbar.h>
-#include <qpainter.h>
-#include <qcolor.h>
-#include <qpoint.h>
-#include <qtstream.h>
-#include <qchkbox.h>
-#include <qkeycode.h>
+#include <QtCore/QTextStream>
+#include <QtGui/QApplication>
+#include <QtGui/QMenuBar>
+#include <QtGui/QFileDialog>
+#include <QtGui/QColor>
+#include <QtGui/QPalette>
+#include <QtGui/QCloseEvent>
+#include <QtGui/QTextDocument>
+#include <QtGui/QMainWindow>
+#include <QtGui/QStatusBar>
+#include <QtGui/QCheckBox>
+#include <QtGui/QVBoxLayout>
#include "editor.h"
#define TYPENUM 5
+/**
+ * @attention Currently not in use
+ */
+char *UnitTypes[TYPENUM] = {
+ "CLASS",
+ "PROCEDURE",
+ "FUNCTION",
+ "PROCESS",
+ "COROUTINE"
+};
+
+/**
+ * Editor constructor. Initializes and sets variables of Loglan Editor.
+ *
+ * @param argc command line argc parameter
+ * @param argv command line argv parameter
+ */
+Editor::Editor(int argc, char **argv)
+{
+ setupUi(this);
-Editor *e;
-
-
-char *UnitTypes[5] = {"CLASS","PROCEDURE","FUNCTION","PROCESS","COROUTINE"};
+ if (argc > 1) {
+ strcpy(HomeDir, argv[1]);
+ }
+ find_text = "";
+ sensitive = FALSE;
+ /* loglan->insertItem( "Program structure", this, SLOT(log_prog()));*/
+ /* loglan->insertItem( "Unit structure", this, SLOT(log_unit()));*/
+ 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()));
+}
-My_Edit::My_Edit(QWidget *parent,const char *name)
-: QMultiLineEdit(parent,name)
+/**
+ * Editor destructor
+ */
+Editor::~Editor()
{
- parent = NULL;
- name = NULL;
}
-void My_Edit::keyPressEvent(QKeyEvent *ev)
+/**
+ * Displays line:column position of cursor
+ */
+void Editor::on_editor_cursorPositionChanged()
{
- QMultiLineEdit::keyPressEvent(ev);
- emit cursorMove();
-}
+ QString position;
+ int cx;
+ int cy;
+ cx = editor->textCursor().blockNumber();
+ cy = editor->textCursor().columnNumber();
+ position.sprintf("%d:%d", cx, cy);
-void Editor::closeEvent ( QCloseEvent * e ) {
- e->ignore();
+ statusBar()->showMessage(position);
}
-Editor::Editor( char *hdir,QWidget * parent , const char * name)
- : QWidget( parent, name )
+/**
+ * Loads given file content to the editor.
+ *
+ * @param fileName Filename of file which will be read.
+ */
+void Editor::load(const char *fileName)
{
- QFont f1("Helvetica",10,QFont::Bold);
-
-
- strcpy(HomeDir,hdir);
- strcpy(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);
-
-}
+ fname.sprintf("%s", fileName);
+ QFile file(fileName);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
+ return;
-Editor::~Editor()
-{
-
-}
-
+ editor->clear();
+ QTextStream textStream(&file);
+ while (!file.atEnd()) {
+ editor->append(textStream.readLine());
+ }
+ file.close();
-void Editor::updateline()
-{
- char pom[255];
- int cx,cy;
-
- e->getCursorPosition(&cx,&cy);
- sprintf(pom," %d:%d ",cx,cy);
- position->setText(pom);
+ editor->repaint();
+ setWindowTitle(fileName);
}
-void Editor::resizeEvent( QResizeEvent * )
+/**
+ * Saves editor content to the given filename.
+ * @param fileName File name of the file where content should be saved.
+ */
+void Editor::save(const char *fileName)
{
- 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) );
- position->setGeometry(width()-80,m->height()+ e->height()-10,
- position->width(),position->height());
- }
-}
-
+ QFile file(fileName);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
+ return;
-void Editor::load()
-{
- QString fn = QFileDialog::getOpenFileName(file_path.data(),"*.log");
- if ( !fn.isEmpty() )
- load( fn );
+ file.reset();
+ file.write(editor->toPlainText().toAscii().data(), editor->toPlainText().length());
+ file.close();
}
-
-void Editor::load( const char *fileName )
+/**
+ * Invokes compiler in the giving mode.
+ * @param mode Mode of compilation. Possible values:
+ * - COMP_MODE - compilation mode
+ * - GEN_MODE - program generation mode
+ * - ALL_MODE - compilation & generation mode.
+ */
+void Editor::compile(int mode)
{
- fname.sprintf("%s",fileName);
-
+ char cmd[255];
+ messages->setReadOnly(FALSE);
+ messages->clear();
+ messages->repaint();
+
+ /*i = fname.find('.');*/
+ /* if (i>=0) {*/
+
+ /* fn.truncate(i);*/
+ switch(mode) {
+ case COMP_MODE:
+ sprintf(cmd, "%s %s > comp_data!", compiler_path.toAscii().data(),
+ fname.toAscii().data());
+ break;
+ case GEN_MODE:
+ sprintf(cmd, "%s %s > comp_data!", gen_path.toAscii().data(),
+ fname.toAscii().data());
+ break;
+ case ALL_MODE:
+ sprintf(cmd, "%s %s > comp_data!", compiler_path.toAscii().data(),
+ fname.toAscii().data());
+ system(cmd);
+ sprintf(cmd, "%s %s >> comp_data!", gen_path.toAscii().data(),
+ fname.toAscii().data());
+ break;
+ }
- QFile f( fileName );
- if ( !f.open( IO_ReadOnly ) )
- return;
+ system(cmd);
+ QFile f("comp_data!");
+ if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
+ return;
- e->setAutoUpdate( FALSE );
- e->clear();
+ QTextStream t(&f);
+ while (!t.atEnd()) {
+ QString s = t.readLine();
+ messages->append(s);
+ }
+ f.close();
- QTextStream t(&f);
- while ( !t.eof() ) {
- QString s = t.readLine();
- e->append( s );
- }
- f.close();
+ messages->setReadOnly(TRUE);
- e->setAutoUpdate( TRUE );
- e->repaint();
- setCaption( fileName );
+ messages->repaint();
+ unlink("comp_data!");
+ /*}*/
}
-
-void Editor::save()
+/**
+ * Empties editor content.
+ */
+void Editor::on_actionNew_triggered()
{
- 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);
-}
+ editor->clear();
+ fname.sprintf("%s", "");}
-void Editor::save_as()
+/**
+ * Displays additional window
+ */
+void Editor::on_actionOpen_triggered()
{
- QString fn = QFileDialog::getSaveFileName(file_path.data(),"*.log");
- if ( !fn.isEmpty() )
- {
- fname.sprintf("%s",fn.data());
- save( fn );
- }
- setCaption(fname);
+ QString fn = QFileDialog::getOpenFileName(this, "Load file", file_path, "*.log");
+ if (!fn.isEmpty())
+ load(fn.toAscii().data());
}
-void Editor::save(const char *fileName)
+/**
+ * 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()
{
-
- QFile f(fileName);
- if (!f.open(IO_WriteOnly)) return;
- f.reset();
- f.writeBlock( e->text().data(),e->text().length() );
- f.close();
-
-
+ 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);
}
-
-void Editor::create()
+/**
+ * Saves editor content to the file.
+ * Forces saving editor content to the new file. Special dialog is shown for
+ * that purpose.
+ */
+void Editor::on_actionSave_as_triggered()
{
- e->clear();
- fname.sprintf("%s","");
+ 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::print()
+void Editor::on_actionQuit_triggered()
{
-
+ QApplication::instance()->quit();
}
-
-
-
-void Editor::cmp()
+void Editor::on_actionCopy_triggered()
{
- save();
- compile(COMP_MODE);
}
-
-void Editor::gen()
+void Editor::on_actionPaste_triggered()
{
- compile(GEN_MODE);
}
-
-void Editor::comp_all()
+void Editor::on_actionCut_triggered()
{
- save();
- compile(ALL_MODE);
}
-
-
-void Editor::compile(int mode)
+void Editor::on_actionClear_all_triggered()
{
- char cmd[255];
-
- msg->setAutoUpdate( FALSE );
- msg->setReadOnly(FALSE);
- msg->clear();
- msg->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());
- break;
- case GEN_MODE:
- sprintf(cmd,"%s %s > comp_data!",gen_path.data(),fn.data());
- break;
- case ALL_MODE:
- sprintf(cmd,"%s %s > comp_data!",compiler_path.data(),fn.data());
- system(cmd);
- sprintf(cmd,"%s %s >> comp_data!",gen_path.data(),fn.data());
- break;
-
- } /*switch */
-
- system(cmd);
- QFile f( "comp_data!" );
- if ( !f.open( IO_ReadOnly ) )
- return;
-
-
- QTextStream t(&f);
- while ( !t.eof() ) {
- QString s = t.readLine();
- msg->append( s );
- }
- f.close();
- msg->setReadOnly(TRUE);
- msg->setAutoUpdate( TRUE );
- msg->repaint();
- unlink("comp_data!");
- }
}
-
-
-void Editor::props()
+/**
+ * Searches for given text in editor content.
+ * Displays window to set search parameters. If text is found sets cursor
+ * position on it.
+ */
+void Editor::on_actionFind_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);
+ QDialog dlg(this, Qt::Dialog);
+ QString *txt;
+ int res, line, pom;
- if (dlg.exec())
- {
- compiler_path.sprintf("%s",compp->text().ascii());
-// gen_path.sprintf("%s",genp->text());
- file_path.sprintf("%s",files->text().ascii());
- };
- }
-
-/* --------------------------------------- */
+ QLineEdit *tmpQLineEdit;
+ tmpQLineEdit = new QLineEdit("", &dlg);
+ tmpQLineEdit->setGeometry(60, 10, 180, 30);
+ QLabel *tmpQLabel;
+ tmpQLabel = new QLabel(&dlg);
+ tmpQLabel->setGeometry(10, 10, 50, 30);
+ tmpQLabel->setText("Text:");
+ QCheckBox *tmpQRadioButton;
+ tmpQRadioButton = new QCheckBox("Case sensitive", &dlg);
+ tmpQRadioButton->setGeometry(70, 50, 150, 30);
+ tmpQRadioButton->setAutoRepeat(FALSE);
+ QPushButton *okbtn, *cbtn;
+ okbtn = new QPushButton("Find", &dlg);
+ okbtn->setGeometry(260, 10, 100, 30);
+ okbtn->setDefault(TRUE);
+ connect(okbtn,SIGNAL(clicked()), &dlg, SLOT(accept()));
+
+ cbtn = new QPushButton("Close", &dlg);
+ cbtn->setGeometry(260, 50, 100, 30);
+ connect(cbtn, SIGNAL(clicked()), &dlg, SLOT(reject()));
+
+ dlg.resize(380, 90);
+
+ if (dlg.exec()) {
+ sensitive = tmpQRadioButton->isChecked();
+ find_text = tmpQLineEdit->text();
+
+ QTextDocument::FindFlags flags = 0;
+
+ if (sensitive) {
+ flags |= QTextDocument::FindCaseSensitively;
+ }
+ editor->find(find_text, flags);
+ }
+}
-void Editor::log_unit()
+/**
+ * Searches for next occurence of given text in editor content.
+ * Displays window to set search parameters. If text is found sets cursor
+ * position on it.
+ */
+void Editor::on_actionFind_Next_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 );
+ if (!find_text.isEmpty()) {
+ QTextDocument::FindFlags flags = 0;
+
+ if (sensitive) {
+ flags |= QTextDocument::FindCaseSensitively;
+ }
+ editor->find(find_text, flags);
+ }
+}
- QLabel* tmpQLabel;
- tmpQLabel = new QLabel( &dlg, "Label_1" );
- tmpQLabel->setGeometry( 10, 20, 100, 30 );
- tmpQLabel->setText( "Unit name:" );
- tmpQLabel->setAlignment( 289 );
- tmpQLabel->setMargin( -1 );
+/**
+ * Displays window with editor properties
+ */
+void Editor::on_actionPreferences_triggered()
+{
+ QDialog dlg(this, Qt::Dialog);
+
+ QLineEdit *files;
+ files = new QLineEdit(&dlg);
+ files->setGeometry(130, 20, 250, 30);
+ files->setText(file_path);
+ files->setMaxLength(32767);
+ files->setEchoMode(QLineEdit::Normal);
+ files->setFrame(TRUE);
+
+ QLabel *tmpQLabel;
+ tmpQLabel = new QLabel("Path to files:", &dlg);
+ tmpQLabel->setGeometry(10, 20, 100, 30);
+ tmpQLabel->setAlignment(Qt::AlignLeft);
+ tmpQLabel->setMargin(-1);
+
+ tmpQLabel = new QLabel("Path to compiler:", &dlg);
+ tmpQLabel->setGeometry(10, 60, 100, 30);
+ tmpQLabel->setAlignment(Qt::AlignLeft);
+ 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(compiler_path, &dlg);
+ compp->setGeometry(130, 60, 250, 30);
+ 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( 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);
-
- txt.sprintf("UNIT %s : %s( <params> );\nBEGIN\n\nEND %s;",uname,
- lst.text(lst.currentItem()).ascii(), uname);
- e->insertAt(txt,cx,cy);
- };
+ tmpQPushButton = new QPushButton("Ok", &dlg);
+ tmpQPushButton->setGeometry(90, 100, 70, 30);
+ tmpQPushButton->setAutoRepeat(FALSE);
+ connect(tmpQPushButton,SIGNAL(clicked()), &dlg, SLOT(accept()));
+
+ tmpQPushButton = new QPushButton("Cancel", &dlg);
+ tmpQPushButton->setGeometry(180, 100, 70, 30);
+ tmpQPushButton->setAutoRepeat(FALSE);
+ connect(tmpQPushButton,SIGNAL(clicked()), &dlg, SLOT(reject()));
+
+ dlg.resize(400, 140);
+
+ if (dlg.exec()) {
+ compiler_path.sprintf("%s", compp->text().toAscii().data());
+ /* gen_path.sprintf("%s",genp->text()); */
+ file_path.sprintf("%s", files->text().toAscii().data());
+ };
}
-
-void Editor::log_prog()
+/**
+ * Saves and compiles code.
+ */
+void Editor::on_actionCompile_triggered()
{
- QString txt;
- QDialog dlg(this,"unit",TRUE);
- int cx,cy;
- char uname[255];
+ on_actionSave_triggered();
+ compile(COMP_MODE);
+}
+/**
+ * Generates program.
+ */
+void Editor::on_actionGen_triggered()
+{
+ compile(GEN_MODE);
+}
- 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 );
+/**
+ * Saves, compiles and generates code.
+ */
+void Editor::on_actionCompile_Gen_triggered()
+{
+ on_actionSave_triggered();
+ compile(ALL_MODE);
+}
- QLabel* tmpQLabel;
- tmpQLabel = new QLabel( &dlg, "Label_1" );
- tmpQLabel->setGeometry( 10, 20, 100, 30 );
- tmpQLabel->setText( "Program name:" );
+void Editor::on_actionProgram_structure_triggered()
+{
+ /*
+ Code commented during Qt4 migration.
+ Code is not used, so there is no rush with this...
+ */
+ /*
+ 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);
- };
-
+ 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);
+ }
+ */
}
-
-void Editor::findText()
+void Editor::on_actionUnit_structure_triggered()
{
- QDialog dlg(this,"",TRUE);
- QString *txt;
- int res,line,pom;
+ /*
+ Code commented during Qt4 migration.
+ Code is not used, so there is no rush with this...
+ */
+ /*
+ QString txt;
+ QDialog dlg(this, Qt::Dialog);
+ int cx, cy, i;
+ char uname[255];
-
- QLineEdit* tmpQLineEdit;
- tmpQLineEdit = new QLineEdit( &dlg, "LineEdit_1" );
- tmpQLineEdit->setGeometry( 60, 10, 180, 30 );
- tmpQLineEdit->setText( "" );
+ 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, 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:" );
+ tmpQLabel = new QLabel(&dlg, "Label_1");
+ tmpQLabel->setGeometry(10, 20, 100, 30);
+ tmpQLabel->setText("Unit name:");
+ tmpQLabel->setAlignment(289);
+ tmpQLabel->setMargin(-1);
- 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;}
- } //for
- }
+ 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);
-void Editor::find_next()
-{
- 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;}
- } //for
-
+ txt.sprintf("UNIT %s : %s( <params> );\nBEGIN\n\nEND %s;",
+ uname, lst.text(lst.currentItem()).ascii(), uname);
+ e->insertAt(txt, cx, cy);
+ }
+ */
}
-int main( int argc, char **argv )
+/**
+ * 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);
- e = new Editor(argv[1]);
- e->resize( 600, 400 );
- e->show();
- return a.exec();
+ QApplication app(argc, argv);
+ Editor * editor = new Editor(argc, argv);
+ editor->show();
+ return app.exec();
}