|
@@ -2,20 +2,24 @@
|
|
|
#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(new Ui::BrainyWindow)
|
|
|
+ QMainWindow{ parent },
|
|
|
+ ui{ std::make_unique<Ui::BrainyWindow>() }
|
|
|
{
|
|
|
ui->setupUi(this);
|
|
|
- sh = new SyntaxHighlighter(ui->textEdit->document());
|
|
|
+ ui->textEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
|
|
|
+ sh = std::make_unique<SyntaxHighlighter>(ui->textEdit->document());
|
|
|
|
|
|
- ui->actionOpen_2->connect(ui->actionOpen_2, &QAction::triggered, this, &BrainyWindow::openFile);
|
|
|
- ui->actionSave_2->connect(ui->actionSave_2, &QAction::triggered, this, &BrainyWindow::saveFile);
|
|
|
+ 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);
|
|
@@ -26,30 +30,68 @@ BrainyWindow::BrainyWindow(QWidget *parent) :
|
|
|
|
|
|
BrainyWindow::~BrainyWindow()
|
|
|
{
|
|
|
- delete ui;
|
|
|
}
|
|
|
|
|
|
|
|
|
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 (*.*)"));
|
|
|
- openedFile = new QFile(filename);
|
|
|
- if (!openedFile->open(QIODevice::ReadWrite | QFile::Text)) return;
|
|
|
- QTextStream in(openedFile);
|
|
|
+ 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->isOpen()) {
|
|
|
- openedFile->open(QIODevice::WriteOnly | QFile::Text | QFile::Truncate);
|
|
|
+ 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->isOpen()) {
|
|
|
- openedFile->write(ui->textEdit->document()->toPlainText().toUtf8().data());
|
|
|
+ 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();
|
|
|
}
|
|
|
|
|
|
|