From 7975afc30f737e8468b32285b82db26bf0023d32 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 20 Jun 2018 09:42:47 +0200 Subject: Added custom line editor with history --- gui/pythontab.cc | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'gui/pythontab.cc') diff --git a/gui/pythontab.cc b/gui/pythontab.cc index 3764696e..04db056d 100644 --- a/gui/pythontab.cc +++ b/gui/pythontab.cc @@ -15,7 +15,7 @@ PythonTab::PythonTab(QWidget *parent) : QWidget(parent) f.setStyleHint(QFont::Monospace); plainTextEdit->setFont(f); - lineEdit = new QLineEdit(); + lineEdit = new LineEditor(); lineEdit->setMinimumHeight(30); lineEdit->setMaximumHeight(30); lineEdit->setFont(f); @@ -25,8 +25,8 @@ PythonTab::PythonTab(QWidget *parent) : QWidget(parent) mainLayout->addWidget(lineEdit, 1, 0); setLayout(mainLayout); - connect(lineEdit, SIGNAL(returnPressed()), this, - SLOT(editLineReturnPressed())); + connect(lineEdit, SIGNAL(textLineInserted(QString)), this, + SLOT(editLineReturnPressed(QString))); write = [this](std::string s) { plainTextEdit->moveCursor(QTextCursor::End); @@ -34,11 +34,22 @@ PythonTab::PythonTab(QWidget *parent) : QWidget(parent) plainTextEdit->moveCursor(QTextCursor::End); }; emb::set_stdout(write); + + char buff[1024]; + sprintf(buff, "Python %s on %s\n", Py_GetVersion(), Py_GetPlatform()); + print(buff); +} + +void PythonTab::print(std::string line) +{ + plainTextEdit->moveCursor(QTextCursor::End); + plainTextEdit->insertPlainText(line.c_str()); + plainTextEdit->moveCursor(QTextCursor::End); } void handle_system_exit() { exit(-1); } -int PythonTab::executePython(std::string command) +int PythonTab::executePython(std::string &command) { PyObject *m, *d, *v; m = PyImport_AddModule("__main__"); @@ -70,9 +81,7 @@ int PythonTab::executePython(std::string command) PyObject *objectsRepresentation = PyObject_Str(v); std::string errorStr = PyUnicode_AsUTF8(objectsRepresentation) + std::string("\n"); - plainTextEdit->moveCursor(QTextCursor::End); - plainTextEdit->insertPlainText(errorStr.c_str()); - plainTextEdit->moveCursor(QTextCursor::End); + print(errorStr); Py_DECREF(objectsRepresentation); Py_XDECREF(exception); Py_XDECREF(v); @@ -83,13 +92,9 @@ int PythonTab::executePython(std::string command) return 0; } -void PythonTab::editLineReturnPressed() +void PythonTab::editLineReturnPressed(QString text) { - std::string input = lineEdit->text().toStdString(); - plainTextEdit->moveCursor(QTextCursor::End); - plainTextEdit->insertPlainText(std::string(">>> " + input + "\n").c_str()); - plainTextEdit->moveCursor(QTextCursor::End); - plainTextEdit->update(); - lineEdit->clear(); + std::string input = text.toStdString(); + print(std::string(">>> " + input + "\n")); int error = executePython(input); } -- cgit v1.2.3