23 #include "../Exception.h" 24 #include "../qt/widgets/ceditor/ScriptWidget.h" 25 #include "../qt/widgets/ceditor/Utils.h" 26 #include "../vm/core/VirtualMachineManager.h" 27 #include "ui_CodeEditorDialogForm.h" 30 #include <QtConcurrent/qtconcurrentrun.h> 31 #include <QFileDialog> 33 #include <QFutureWatcher> 35 #include <QMessageBox> 36 #include <QPushButton> 44 :
QDialog(parent, f), m_vm(nullptr), m_ui(new
Ui::CodeEditorDialogForm)
46 this->setWindowTitle(tr(
"TerraLib Code Editor"));
50 m_ui->m_newButton->setIcon(QIcon::fromTheme(
"document-new"));
51 m_ui->m_newButton->setShortcut(QKeySequence(
"Ctrl+N"));
52 m_ui->m_newButton->setIconSize(QSize(24, 24));
53 m_ui->m_newButton->setToolTip(
"New script file");
55 m_ui->m_openButton->setIcon(QIcon::fromTheme(
"document-open"));
56 m_ui->m_openButton->setShortcut(QKeySequence(
"Ctrl+O"));
57 m_ui->m_openButton->setIconSize(QSize(24, 24));
58 m_ui->m_openButton->setToolTip(
"Open script file");
60 m_ui->m_saveButton->setIcon(QIcon::fromTheme(
"document-save"));
61 m_ui->m_saveButton->setShortcut(QKeySequence(
"Ctrl+S"));
62 m_ui->m_saveButton->setIconSize(QSize(24, 24));
63 m_ui->m_saveButton->setToolTip(
"Save script file");
65 m_ui->m_saveAsButton->setIcon(QIcon::fromTheme(
"document-save-as"));
66 m_ui->m_saveAsButton->setShortcut(QKeySequence(
"Ctrl+Shift+S"));
67 m_ui->m_saveAsButton->setIconSize(QSize(24, 24));
68 m_ui->m_saveAsButton->setToolTip(
"Save script file as");
70 m_ui->m_runButton->setIcon(QIcon::fromTheme(
"media-playback-start-green"));
71 m_ui->m_runButton->setShortcut(QKeySequence(
"Ctrl+R"));
72 m_ui->m_runButton->setIconSize(QSize(32, 32));
73 m_ui->m_runButton->setToolTip(
"Run script file");
75 m_ui->m_stopButton->setIcon(QIcon::fromTheme(
"process-stop"));
76 m_ui->m_stopButton->setShortcut(QKeySequence(
"Ctrl+Shift+R"));
77 m_ui->m_stopButton->setIconSize(QSize(24, 24));
78 m_ui->m_stopButton->setToolTip(
"Stop running script");
84 connect(
m_ui->m_newButton, SIGNAL(clicked()),
this,
86 connect(
m_ui->m_openButton, SIGNAL(clicked()),
this,
88 connect(
m_ui->m_saveButton, SIGNAL(clicked()),
this,
90 connect(
m_ui->m_saveAsButton, SIGNAL(clicked()),
this,
92 connect(
m_ui->m_runButton, SIGNAL(clicked()),
this,
94 connect(
m_ui->m_codeTab, SIGNAL(tabCloseRequested(
int)),
this,
100 QString::fromUtf8(
"QPushButton:disabled { color: gray }"));
103 m_ui->m_stopButton->setEnabled(
false);
108 m_ui->m_codeTab->clear();
119 m_ui->m_codeTab->insertTab(0, editor,
"");
122 m_ui->m_codeTab->setCurrentIndex(0);
124 connect(editor, SIGNAL(textChanged()),
this, SLOT(
onTextChanged()));
130 if(
m_ui->m_codeTab->count() == 0)
141 tr(
"Python (*.py *.PY);;Lua (*.lua *.LUA);;All files(*.*)");
143 QString
file = QFileDialog::getSaveFileName(
this, tr(
"Save Script File"),
144 "", filter, &selFilter);
146 auto index =
m_ui->m_codeTab->currentIndex();
147 m_ui->m_codeTab->setTabText(index, QFileInfo(file).fileName());
153 auto index =
m_ui->m_codeTab->currentIndex();
154 m_ui->m_codeTab->setTabText(index,
165 if(
m_ui->m_codeTab->count() == 0)
182 connect(
m_vm, SIGNAL(output(QString)),
m_io, SLOT(append(QString)));
183 connect(
m_vm, SIGNAL(requestReadline()),
m_io, SLOT(addPrompt()));
184 connect(
m_io, SIGNAL(command(QString)),
m_vm, SLOT(readline(QString)));
185 connect(
m_ui->m_stopButton, SIGNAL(clicked()),
m_vm, SLOT(stop()));
190 m_ui->m_runButton->setDisabled(
true);
191 m_ui->m_stopButton->setDisabled(
false);
196 QFuture<void> future =
202 QMessageBox::warning(
203 nullptr, this->windowTitle(),
204 "Could not find a interpreter to run the following file: " +
216 disconnect(
m_vm, SIGNAL(output(QString)),
m_io, SLOT(append(QString)));
217 disconnect(
m_vm, SIGNAL(requestReadline()),
m_io, SLOT(addPrompt()));
218 disconnect(
m_io, SIGNAL(command(QString)),
m_vm, SLOT(readline(QString)));
219 disconnect(
m_ui->m_stopButton, SIGNAL(clicked()),
m_vm, SLOT(stop()));
222 m_ui->m_runButton->setDisabled(
false);
223 m_ui->m_stopButton->setDisabled(
true);
226 std::string elapsed =
"[Time elapsed: " + std::to_string(time) +
"ms]";
243 tr(
"Python (*.py *.PY);;Lua (*.lua *.LUA);;All files (*.*)");
246 QString
file = QFileDialog::getOpenFileName(
this, tr(
"Open Script File"),
"",
263 QFileInfo(f).fileName());
265 m_ui->m_codeTab->setCurrentIndex(0);
267 connect(editor, SIGNAL(textChanged()),
this, SLOT(
onTextChanged()));
272 m_ui->m_codeTab->removeTab(index);
279 int tabIndex =
m_ui->m_codeTab->indexOf(editor);
281 QString tabText =
m_ui->m_codeTab->tabText(tabIndex);
282 if(!tabText.endsWith(
" *"))
285 m_ui->m_codeTab->setTabText(tabIndex, tabText);
virtual void setFileName(QString file)=0
setFileName Sets the file that will be used in the Virtual Machine.
void onSaveAsButtonClicked()
void onOpenButtonClicked()
virtual void execute()=0
execute Executes the script file previously set.
void onNewButtonClicked()
CodeEditorDialog(QWidget *parent=0, Qt::WindowFlags f=0)
static VirtualMachineManager & instance()
Return a reference to the singleton.
te::vm::core::VirtualMachine * m_vm
void onRunButtonClicked()
te::qt::widgets::IOWidget * m_io
An exception indicating that a given item was not found in a collection (or range).
VirtualMachine * get(const std::string &id) const
It returns the VM identified by id.
void onSaveButtonClicked()
file(WRITE ${CMAKE_BINARY_DIR}/config_qhelp.cmake"configure_file (${TERRALIB_ABSOLUTE_ROOT_DIR}/doc/qhelp/help.qhcp.in ${CMAKE_BINARY_DIR}/share/terraview/help/help.qhcp @ONLY)") add_custom_command(OUTPUT del_dir COMMAND $
std::unique_ptr< Ui::CodeEditorDialogForm > m_ui
QFutureWatcher< void > m_watcher
void onCloseTabClicked(int index)