123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #include "brainywindow.h"
- #include "ui_brainywindow.h"
- #include <QFileDialog>
- #include <QFontDialog>
- #include <QMessageBox>
- #include <QFile>
- #include <QTextStream>
- #include <QFontMetrics>
- #include <iostream>
- #include <memory>
- BrainyWindow::BrainyWindow(QWidget *parent) :
- QMainWindow{ parent },
- ui{ std::make_unique<Ui::BrainyWindow>() }
- {
- ui->setupUi(this);
- ui->textEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
- sh = std::make_unique<SyntaxHighlighter>(ui->textEdit->document());
- ui->actionOpen->connect(ui->actionOpen, &QAction::triggered, this, &BrainyWindow::openFile);
- ui->actionSave->connect(ui->actionSave, &QAction::triggered, this, &BrainyWindow::saveFile);
- ui->actionSave_As->connect(ui->actionSave_As, &QAction::triggered, this, &BrainyWindow::saveFileAs);
- ui->actionEditor_Font->connect(ui->actionEditor_Font, &QAction::triggered, this, [this] () {
- bool ok;
- QFont font = QFontDialog::getFont(&ok, ui->textEdit->font(), this);
- if (ok)
- ui->textEdit->setFont(font);
- });
- }
- BrainyWindow::~BrainyWindow()
- {
- }
- void BrainyWindow::openFile()
- {
- /*auto dialog = std::make_unique<QFileDialog>(this, tr("Open File"), "", tr("Brainfuck File (*.bf);; Any File (*.*)"));
- dialog->show();*/
- auto filename = QFileDialog::getOpenFileName(this,
- tr("Open File"), "", tr("Brainfuck File (*.bf);; Any File (*.*)"));
- if (filename == "")
- return;
- QFileInfo fileInfo(filename);
- if (!fileInfo.exists()) {
- QMessageBox::critical(this, "Error opening file", "File does not exist");
- }
- openedFile = std::make_unique<QFile>(filename);
- if (!openedFile->open(QIODevice::ReadOnly | QFile::Text)) {
- QMessageBox::critical(this, "Error opening file", "Could not open file");
- return;
- }
- QTextStream in(openedFile.get());
- ui->textEdit->setText(in.readAll());
- }
- void BrainyWindow::saveFile()
- {
- if (!openedFile) {
- auto filename = QFileDialog::getSaveFileName(this,
- tr("Save File"), "", tr("Brainfuck File (*.bf);; Any File (*.*)"));
- if (filename == "")
- return;
- openedFile = std::make_unique<QFile>(filename);
- }
- if (openedFile) {
- if (openedFile->isOpen() && !openedFile->isWritable()) {
- openedFile->close();
- }
- if (!openedFile->isOpen()) {
- openedFile->open(QIODevice::WriteOnly | QFile::Text | QFile::Truncate);
- }
- if (openedFile->isOpen()) {
- openedFile->write(ui->textEdit->document()->toPlainText().toUtf8().data());
- openedFile->close();
- }
- else {
- QMessageBox::critical(this, "Error saving file", "Could not open file to save");
- }
- }
- }
- void BrainyWindow::saveFileAs()
- {
- if (openedFile) {
- openedFile->close();
- openedFile.reset(nullptr);
- }
- saveFile();
- }
- bool BrainyWindow::changesToSave() const
- {
- return changedAnything;
- }
|