brainywindow.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. sh = std::make_unique<SyntaxHighlighter>(ui->textEdit->document());
  18. ui->actionOpen->connect(ui->actionOpen, &QAction::triggered, this, &BrainyWindow::openFile);
  19. ui->actionSave->connect(ui->actionSave, &QAction::triggered, this, &BrainyWindow::saveFile);
  20. ui->actionSave_As->connect(ui->actionSave_As, &QAction::triggered, this, &BrainyWindow::saveFileAs);
  21. ui->actionEditor_Font->connect(ui->actionEditor_Font, &QAction::triggered, this, [this] () {
  22. bool ok;
  23. QFont font = QFontDialog::getFont(&ok, ui->textEdit->font(), this);
  24. if (ok)
  25. ui->textEdit->setFont(font);
  26. });
  27. }
  28. BrainyWindow::~BrainyWindow()
  29. {
  30. }
  31. void BrainyWindow::openFile()
  32. {
  33. /*auto dialog = std::make_unique<QFileDialog>(this, tr("Open File"), "", tr("Brainfuck File (*.bf);; Any File (*.*)"));
  34. dialog->show();*/
  35. auto filename = QFileDialog::getOpenFileName(this,
  36. tr("Open File"), "", tr("Brainfuck File (*.bf);; Any File (*.*)"));
  37. if (filename == "")
  38. return;
  39. QFileInfo fileInfo(filename);
  40. if (!fileInfo.exists()) {
  41. QMessageBox::critical(this, "Error opening file", "File does not exist");
  42. }
  43. openedFile = std::make_unique<QFile>(filename);
  44. if (!openedFile->open(QIODevice::ReadOnly | QFile::Text)) {
  45. QMessageBox::critical(this, "Error opening file", "Could not open file");
  46. return;
  47. }
  48. QTextStream in(openedFile.get());
  49. ui->textEdit->setText(in.readAll());
  50. }
  51. void BrainyWindow::saveFile()
  52. {
  53. if (!openedFile) {
  54. auto filename = QFileDialog::getSaveFileName(this,
  55. tr("Save File"), "", tr("Brainfuck File (*.bf);; Any File (*.*)"));
  56. if (filename == "")
  57. return;
  58. openedFile = std::make_unique<QFile>(filename);
  59. }
  60. if (openedFile) {
  61. if (openedFile->isOpen() && !openedFile->isWritable()) {
  62. openedFile->close();
  63. }
  64. if (!openedFile->isOpen()) {
  65. openedFile->open(QIODevice::WriteOnly | QFile::Text | QFile::Truncate);
  66. }
  67. if (openedFile->isOpen()) {
  68. openedFile->write(ui->textEdit->document()->toPlainText().toUtf8().data());
  69. openedFile->close();
  70. }
  71. else {
  72. QMessageBox::critical(this, "Error saving file", "Could not open file to save");
  73. }
  74. }
  75. }
  76. void BrainyWindow::saveFileAs()
  77. {
  78. if (openedFile) {
  79. openedFile->close();
  80. openedFile.reset(nullptr);
  81. }
  82. saveFile();
  83. }
  84. bool BrainyWindow::changesToSave() const
  85. {
  86. return changedAnything;
  87. }