1
1

mainwindow.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "playfield.h"
  4. #include <QFile>
  5. #include <QTextStream>
  6. #include "parse.h"
  7. MainWindow::MainWindow(QWidget *parent)
  8. : QMainWindow(parent)
  9. , ui(new Ui::MainWindow)
  10. {
  11. ui->setupUi(this);
  12. lblCycles = new QLabel(ui->statusBar);
  13. ui->statusBar->addWidget(lblCycles);
  14. QFile file("C:/test.ccp");
  15. if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
  16. return;
  17. QTextStream in(&file);
  18. QString code = in.readAll();
  19. auto tokens = lex(code);
  20. QVector<ParseError> errors;
  21. auto instrbanks = parse(code, tokens, errors);
  22. // setMinimumSize(simulator.size * 40, simulator.size * 40);
  23. simulator.loadProgram(Qt::red, 10, 10);
  24. simulator.loadProgram(Qt::blue, 15, 15);
  25. ui->centralWidget->layout()->addWidget(new Playfield(simulator, ui->centralWidget));
  26. auto timerRepaint = new QTimer(this);
  27. connect(timerRepaint, &QTimer::timeout, this, [this](){
  28. mutex.lock();
  29. repaint();
  30. lblCycles->setText(QString(tr("Cycles: %1 CntA: %2 CntB: %3")).arg(simulator.cycle).arg(simulator.teams[0]->programCount).arg(simulator.teams[1]->programCount));
  31. mutex.unlock();
  32. });
  33. timerRepaint->start(100);
  34. connect(timer, &QTimer::timeout, this, [this](){
  35. simulate();
  36. });
  37. connect(ui->actionStart, &QAction::triggered, this, [this](){
  38. timer->start(100);
  39. });
  40. connect(ui->actionPause, &QAction::triggered, this, [this](){
  41. timer->stop();
  42. });
  43. connect(ui->actionSingleStep, &QAction::triggered, this, [this](){
  44. timer->stop();
  45. simulate();
  46. });
  47. }
  48. MainWindow::~MainWindow()
  49. {
  50. delete ui;
  51. }
  52. void MainWindow::simulate()
  53. {
  54. mutex.lock();
  55. simulator.simulate();
  56. mutex.unlock();
  57. }