Console line with simple auto completion
This commit is contained in:
+87
-4
@@ -13,6 +13,7 @@
|
||||
#include <QChart>
|
||||
#include <QChartView>
|
||||
#include <QLineSeries>
|
||||
#include <QCompleter>
|
||||
#include "scriptengine.h"
|
||||
#include "chartgraph.h"
|
||||
|
||||
@@ -110,6 +111,35 @@ BatchProcessing::BatchProcessing(Database *database, QWidget *parent) : QDialog(
|
||||
|
||||
_textColor = _ui->log->palette().text().color();
|
||||
|
||||
_engine = new Script::ScriptEngine(_database, this);
|
||||
connect(_engine, &Script::ScriptEngine::newMessage, this, &BatchProcessing::newMessage);
|
||||
QStringList apiList;
|
||||
apiList << "core.log" << "core.mark" << "core.unmark" << "core.isMarked" << "core.getObjects" << "core.setMaxthread";
|
||||
apiList << "core.sync" << "core.getString" << "core.getInt" << "core.getFloat" << "core.question" << "core.plot";
|
||||
apiList << "fileName" << "absoluteFileName";
|
||||
_completerModel = new QStringListModel(this);
|
||||
_completerModel->setStringList(apiList);
|
||||
_completer = new QCompleter(_completerModel, this);
|
||||
_ui->consoleLineEdit->setCompleter(_completer);
|
||||
connect(_ui->executeButton, &QPushButton::clicked, _ui->consoleLineEdit, &QLineEdit::returnPressed);
|
||||
connect(_ui->consoleLineEdit, &QLineEdit::returnPressed, [this](){
|
||||
if(!_completer->popup()->isVisible())
|
||||
{
|
||||
QString program = _ui->consoleLineEdit->text();
|
||||
QJSValue val = _engine->eval(program);
|
||||
_ui->consoleLineEdit->addLine();
|
||||
qDebug() << val.toString();
|
||||
}
|
||||
});
|
||||
|
||||
connect(_ui->consoleLineEdit, &QLineEdit::textEdited, [this](const QString &text){
|
||||
QStringList comp = _engine->complete(text);
|
||||
qDebug() << comp;
|
||||
_completerModel->setStringList(comp);
|
||||
});
|
||||
|
||||
_ui->addFilesButton->setAutoDefault(false);
|
||||
|
||||
QSettings settings;
|
||||
_ui->outputPath->setText(settings.value("batchprocessing/outputpath", QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).first()).toString());
|
||||
}
|
||||
@@ -143,6 +173,15 @@ void BatchProcessing::closeEvent(QCloseEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
void BatchProcessing::refreshPaths()
|
||||
{
|
||||
QStringList paths;
|
||||
for(int i=0; i<_ui->pathsList->count(); i++)
|
||||
paths.append(_ui->pathsList->item(i)->text());
|
||||
_paths = scanDirectories(paths);
|
||||
_engine->setParams("", _paths, _ui->outputPath->text());
|
||||
}
|
||||
|
||||
void BatchProcessing::addFiles()
|
||||
{
|
||||
QSettings settings;
|
||||
@@ -152,6 +191,7 @@ void BatchProcessing::addFiles()
|
||||
_ui->pathsList->addItems(files);
|
||||
settings.setValue("batchprocessing/inputpath", QFileInfo(files.first()).absolutePath());
|
||||
}
|
||||
refreshPaths();
|
||||
}
|
||||
|
||||
void BatchProcessing::addDir()
|
||||
@@ -163,6 +203,7 @@ void BatchProcessing::addDir()
|
||||
_ui->pathsList->addItem(dir);
|
||||
settings.setValue("batchprocessing/inputpath", dir);
|
||||
}
|
||||
refreshPaths();
|
||||
}
|
||||
|
||||
void BatchProcessing::addMarked()
|
||||
@@ -174,17 +215,20 @@ void BatchProcessing::addMarked()
|
||||
if(info.exists() && info.isReadable())
|
||||
_ui->pathsList->addItem(file);
|
||||
};
|
||||
refreshPaths();
|
||||
}
|
||||
|
||||
void BatchProcessing::removePath()
|
||||
{
|
||||
for(auto &item : _ui->pathsList->selectedItems())
|
||||
delete item;
|
||||
refreshPaths();
|
||||
}
|
||||
|
||||
void BatchProcessing::removeAllPaths()
|
||||
{
|
||||
_ui->pathsList->clear();
|
||||
refreshPaths();
|
||||
}
|
||||
|
||||
void BatchProcessing::browse()
|
||||
@@ -208,9 +252,6 @@ void BatchProcessing::runScript()
|
||||
_engineThread = new Script::ScriptEngineThread(_database, this);
|
||||
connect(_engineThread, &Script::ScriptEngineThread::newMessage, this, &BatchProcessing::newMessage);
|
||||
connect(_engineThread, &Script::ScriptEngineThread::finished, this, &BatchProcessing::scriptFinished);
|
||||
QStringList paths;
|
||||
for(int i=0; i<_ui->pathsList->count(); i++)
|
||||
paths.append(_ui->pathsList->item(i)->text());
|
||||
|
||||
QFileInfo outDir(_ui->outputPath->text());
|
||||
if(outDir.exists() && outDir.isWritable())
|
||||
@@ -221,7 +262,7 @@ void BatchProcessing::runScript()
|
||||
else
|
||||
script = ":/scripts/" + script;
|
||||
|
||||
_engineThread->setParams(script, scanDirectories(paths), _ui->outputPath->text());
|
||||
_engineThread->setParams(script, _paths, _ui->outputPath->text());
|
||||
_engineThread->start();
|
||||
_ui->startButton->setEnabled(false);
|
||||
_ui->stopButton->setEnabled(true);
|
||||
@@ -329,6 +370,48 @@ void BatchProcessing::plot(const QVariant &graph)
|
||||
chart->plot(graph);
|
||||
}
|
||||
|
||||
ConsoleLine::ConsoleLine(QWidget *parent) : QLineEdit(parent)
|
||||
{
|
||||
}
|
||||
|
||||
void ConsoleLine::addLine()
|
||||
{
|
||||
QString line = text();
|
||||
clear();
|
||||
if(_history.size() && _history.last() == line)return;
|
||||
|
||||
_history.append(line);
|
||||
if(_history.size() > 100)_history.removeFirst();
|
||||
_currentLine = _history.size();
|
||||
}
|
||||
|
||||
void ConsoleLine::keyReleaseEvent(QKeyEvent *event)
|
||||
{
|
||||
if(event->key() == Qt::Key_Up)
|
||||
{
|
||||
_currentLine--;
|
||||
if(_currentLine < 0)
|
||||
{
|
||||
_currentLine = -1;
|
||||
clear();
|
||||
return;
|
||||
}
|
||||
setText(_history.at(_currentLine));
|
||||
}
|
||||
else if(event->key() == Qt::Key_Down)
|
||||
{
|
||||
_currentLine++;
|
||||
if(_currentLine >= _history.size())
|
||||
{
|
||||
_currentLine = _history.size();
|
||||
clear();
|
||||
return;
|
||||
}
|
||||
setText(_history.at(_currentLine));
|
||||
}
|
||||
else QLineEdit::keyReleaseEvent(event);
|
||||
}
|
||||
|
||||
void openDir(const QString &path)
|
||||
{
|
||||
#ifdef Q_OS_LINUX
|
||||
|
||||
Reference in New Issue
Block a user