brainywindow.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #include "brainywindow.h"
  2. #include "ui_brainywindow.h"
  3. #include <QFileDialog>
  4. #include <QFontDialog>
  5. #include <QMessageBox>
  6. #include <QFile>
  7. #include <QTextStream>
  8. #include <QFontMetrics>
  9. #include <iostream>
  10. #include <memory>
  11. BrainyWindow::BrainyWindow(QWidget *parent) :
  12. QMainWindow{ parent },
  13. ui{ std::make_unique<Ui::BrainyWindow>() }
  14. {
  15. ui->setupUi(this);
  16. ui->textEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
  17. ui->runConsole->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
  18. sh = std::make_unique<SyntaxHighlighter>(ui->textEdit->document());
  19. ui->actionOpen->connect(ui->actionOpen, &QAction::triggered, this, &BrainyWindow::openFile);
  20. ui->actionSave->connect(ui->actionSave, &QAction::triggered, this, &BrainyWindow::saveFile);
  21. ui->actionSave_As->connect(ui->actionSave_As, &QAction::triggered, this, &BrainyWindow::saveFileAs);
  22. ui->run->connect(ui->run, &QPushButton::clicked, this, &BrainyWindow::startRun);
  23. ui->actionEditor_Font->connect(ui->actionEditor_Font, &QAction::triggered, this, [this] () {
  24. bool ok;
  25. QFont font = QFontDialog::getFont(&ok, ui->textEdit->font(), this);
  26. if (ok) {
  27. ui->textEdit->setFont(font);
  28. ui->runConsole->setFont(font);
  29. }
  30. });
  31. }
  32. BrainyWindow::~BrainyWindow()
  33. {
  34. }
  35. void BrainyWindow::openFile()
  36. {
  37. /*auto dialog = std::make_unique<QFileDialog>(this, tr("Open File"), "", tr("Brainfuck File (*.bf);; Any File (*.*)"));
  38. dialog->show();*/
  39. auto filename = QFileDialog::getOpenFileName(this,
  40. tr("Open File"), "", tr("Brainfuck File (*.bf);; Any File (*.*)"));
  41. if (filename == "")
  42. return;
  43. QFileInfo fileInfo(filename);
  44. if (!fileInfo.exists()) {
  45. QMessageBox::critical(this, "Error opening file", "File does not exist");
  46. }
  47. openedFile = std::make_unique<QFile>(filename);
  48. if (!openedFile->open(QIODevice::ReadOnly | QFile::Text)) {
  49. QMessageBox::critical(this, "Error opening file", "Could not open file");
  50. return;
  51. }
  52. QTextStream in(openedFile.get());
  53. ui->textEdit->setText(in.readAll());
  54. }
  55. void BrainyWindow::saveFile()
  56. {
  57. if (!openedFile) {
  58. auto filename = QFileDialog::getSaveFileName(this,
  59. tr("Save File"), "", tr("Brainfuck File (*.bf);; Any File (*.*)"));
  60. if (filename == "")
  61. return;
  62. openedFile = std::make_unique<QFile>(filename);
  63. }
  64. if (openedFile) {
  65. if (openedFile->isOpen() && !openedFile->isWritable()) {
  66. openedFile->close();
  67. }
  68. if (!openedFile->isOpen()) {
  69. openedFile->open(QIODevice::WriteOnly | QFile::Text | QFile::Truncate);
  70. }
  71. if (openedFile->isOpen()) {
  72. openedFile->write(ui->textEdit->document()->toPlainText().toUtf8().data());
  73. openedFile->close();
  74. }
  75. else {
  76. QMessageBox::critical(this, "Error saving file", "Could not open file to save");
  77. }
  78. }
  79. }
  80. void BrainyWindow::saveFileAs()
  81. {
  82. if (openedFile) {
  83. openedFile->close();
  84. openedFile.reset(nullptr);
  85. }
  86. saveFile();
  87. }
  88. void BrainyWindow::startRun()
  89. {
  90. this->ui->runConsole->append("output goes here");
  91. }
  92. bool BrainyWindow::changesToSave() const
  93. {
  94. return changedAnything;
  95. }