@@ -41,8 +41,11 @@ ScriptingWindow::ScriptingWindow(const QVector<CANFrame> *frames, QWidget *paren
41
41
connect (ui->btnRecompile , &QAbstractButton::pressed, this , &ScriptingWindow::recompileScript);
42
42
connect (ui->btnRemoveScript , &QAbstractButton::pressed, this , &ScriptingWindow::deleteCurrentScript);
43
43
connect (ui->btnRevertScript , &QAbstractButton::pressed, this , &ScriptingWindow::revertScript);
44
+ connect (ui->btnReloadScript , &QAbstractButton::pressed, this , &ScriptingWindow::reloadScript);
44
45
connect (ui->btnSaveScript , &QAbstractButton::pressed, this , &ScriptingWindow::saveScript);
46
+ connect (ui->btnSaveAsScript , &QAbstractButton::pressed, this , &ScriptingWindow::saveAsScript);
45
47
connect (ui->btnClearLog , &QAbstractButton::pressed, this , &ScriptingWindow::clickedLogClear);
48
+ connect (ui->btnSaveLog , &QAbstractButton::pressed, this , &ScriptingWindow::saveLog);
46
49
connect (ui->listLoadedScripts , &QListWidget::currentRowChanged, this , &ScriptingWindow::changeCurrentScript);
47
50
connect (ui->tableVariables , SIGNAL (cellChanged (int ,int )), this , SLOT (updatedValue (int , int )));
48
51
@@ -301,6 +304,21 @@ void ScriptingWindow::refreshSourceWindow()
301
304
}
302
305
303
306
void ScriptingWindow::saveScript ()
307
+ {
308
+ QFile *outFile = new QFile (currentScript->filePath );
309
+
310
+ if (!outFile->open (QIODevice::WriteOnly | QIODevice::Text))
311
+ {
312
+ delete outFile;
313
+ return ;
314
+ }
315
+ outFile->write (editor->toPlainText ().toUtf8 ());
316
+ currentScript->scriptText = editor->toPlainText ();
317
+ outFile->close ();
318
+ delete outFile;
319
+ }
320
+
321
+ void ScriptingWindow::saveAsScript ()
304
322
{
305
323
QString filename;
306
324
QFileDialog dialog (this );
@@ -358,6 +376,38 @@ void ScriptingWindow::revertScript()
358
376
}
359
377
}
360
378
379
+ void ScriptingWindow::reloadScript ()
380
+ {
381
+ QMessageBox msgBox;
382
+ msgBox.setText (" Are you sure you'd like to reload from disk?" );
383
+ msgBox.setInformativeText (" Really do it?" );
384
+ msgBox.setStandardButtons (QMessageBox::Yes | QMessageBox::No);
385
+ msgBox.setDefaultButton (QMessageBox::Cancel);
386
+ int ret = msgBox.exec ();
387
+ switch (ret)
388
+ {
389
+ case QMessageBox::Yes:
390
+ {
391
+ // get the latest version from disk and set in the editor/state
392
+ QFile scriptFile (currentScript->filePath );
393
+ if (scriptFile.open (QIODevice::ReadOnly | QIODevice::Text))
394
+ {
395
+ QString contents = scriptFile.readAll ();
396
+ scriptFile.close ();
397
+ editor->setPlainText (contents);
398
+ currentScript->scriptText = contents;
399
+ currentScript->compileScript ();
400
+ }
401
+ break ;
402
+ }
403
+ case QMessageBox::No:
404
+ break ;
405
+ default :
406
+ // should never be reached
407
+ break ;
408
+ }
409
+ }
410
+
361
411
void ScriptingWindow::recompileScript ()
362
412
{
363
413
if (currentScript)
@@ -373,6 +423,45 @@ void ScriptingWindow::clickedLogClear()
373
423
elapsedTime.start ();
374
424
}
375
425
426
+ void ScriptingWindow::saveLog ()
427
+ {
428
+ QString filename;
429
+ QFileDialog dialog (this );
430
+ QSettings settings;
431
+
432
+ QStringList filters;
433
+ filters.append (QString (tr (" Log File (*.log)" )));
434
+
435
+ dialog.setDirectory (settings.value (" ScriptingWindow/LoadSaveDirectory" , dialog.directory ().path ()).toString ());
436
+ dialog.setFileMode (QFileDialog::AnyFile);
437
+ dialog.setNameFilters (filters);
438
+ dialog.setViewMode (QFileDialog::Detail);
439
+ dialog.setAcceptMode (QFileDialog::AcceptSave);
440
+
441
+ if (dialog.exec () == QDialog::Accepted)
442
+ {
443
+ filename = dialog.selectedFiles ()[0 ];
444
+ if (!filename.contains (' .' )) filename += " .log" ;
445
+ if (dialog.selectedNameFilter () == filters[0 ])
446
+ {
447
+ QFile *outFile = new QFile (filename);
448
+
449
+ if (!outFile->open (QIODevice::WriteOnly | QIODevice::Text))
450
+ {
451
+ delete outFile;
452
+ return ;
453
+ }
454
+ int c = ui->listLog ->count ();
455
+ for (int row = 0 ; row < c; row++) {
456
+ outFile->write (ui->listLog ->item (row)->data (Qt::DisplayRole).toString ().toUtf8 () + " \n " );
457
+ }
458
+ outFile->close ();
459
+ delete outFile;
460
+ settings.setValue (" ScriptingWindow/LoadSaveDirectory" , dialog.directory ().path ());
461
+ }
462
+ }
463
+ }
464
+
376
465
void ScriptingWindow::log (QString text)
377
466
{
378
467
ScriptContainer *cont = qobject_cast<ScriptContainer*>(sender ());
0 commit comments