This repository has been archived on 2024-12-15. You can view files and clone it, but cannot push or open issues or pull requests.
ESGRAF48/source/mainwindow.cpp

249 lines
6.1 KiB
C++
Raw Permalink Normal View History

2018-05-10 16:41:14 +00:00
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "version.h"
#include <QJsonObject>
#include <QJsonDocument>
#include <QFile>
#include <QFileDialog>
#include <QDataWidgetMapper>
#include <QCloseEvent>
#include <QMessageBox>
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrintDialog>
2018-10-29 21:05:34 +00:00
#include <QTextDocument>
2019-01-12 15:50:04 +00:00
#include <QPainter>
2018-10-29 21:05:34 +00:00
#include <QDebug>
2018-11-03 21:29:38 +00:00
#include <fstream>
2019-10-05 14:14:45 +00:00
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, m_dataModel(this)
{
2019-10-05 14:14:45 +00:00
ui->setupUi(this);
setupUi();
2019-10-05 14:14:45 +00:00
newFile();
}
2019-10-05 14:14:45 +00:00
MainWindow::MainWindow(QWidget* parent, const QString& filename)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, m_dataModel(this)
2018-05-10 16:41:14 +00:00
{
2019-10-05 14:14:45 +00:00
ui->setupUi(this);
setupUi();
2019-10-05 14:14:45 +00:00
openFile(filename);
}
void MainWindow::setupUi()
{
2019-10-05 14:14:45 +00:00
ui->metaDataWidget->setModel(&m_dataModel.m_metaData);
ui->verbEndWidget->setModel(&m_dataModel.m_verbEnd);
ui->genusWidget->setModel(&m_dataModel.m_genus);
ui->pluralWidget->setModel(&m_dataModel.m_plural);
ui->akkusativDativWidget->setAkkusativModel(&m_dataModel.m_akkusativ);
ui->akkusativDativWidget->setDativModel(&m_dataModel.m_dativ);
2019-01-31 19:14:38 +00:00
2019-10-05 14:14:45 +00:00
ui->v2SvkWidget->setWFModel(&m_dataModel.m_wfModel);
ui->v2SvkWidget->setOTModel(&m_dataModel.m_otModel);
ui->v2SvkWidget->setTPrModel(&m_dataModel.m_tPrModel);
ui->v2SvkWidget->setTPeModel(&m_dataModel.m_tPeModel);
2019-01-31 19:14:38 +00:00
2019-10-05 14:14:45 +00:00
ui->lateSkillsWidget->setPassivModel(&m_dataModel.m_passiv);
ui->lateSkillsWidget->setGenitivModel(&m_dataModel.m_genitiv);
ui->resultWidget->setModel(&m_dataModel.m_results);
2019-10-05 14:14:45 +00:00
connect(ui->actionNew, &QAction::triggered, this, &MainWindow::newFile);
connect(ui->actionOpen, &QAction::triggered, this, qOverload<>(&MainWindow::openFile));
connect(ui->actionSave, &QAction::triggered, this, qOverload<>(&MainWindow::saveFile));
connect(ui->actionSave_as, &QAction::triggered, this, &MainWindow::saveFileAs);
connect(ui->actionPrint, &QAction::triggered, this, &MainWindow::print);
connect(ui->actionExport_PDF, &QAction::triggered, this, qOverload<>(&MainWindow::savePdf));
2019-10-05 14:14:45 +00:00
connect(ui->actionAbout, &QAction::triggered, this, &MainWindow::aboutDialog);
2019-10-05 14:14:45 +00:00
connect(&m_dataModel, &DataModel::modelChanged, this, &MainWindow::dataModelChanged);
2018-05-10 16:41:14 +00:00
}
MainWindow::~MainWindow()
{
2019-10-05 14:14:45 +00:00
delete ui;
2018-05-10 16:41:14 +00:00
}
2018-05-20 10:04:21 +00:00
void MainWindow::newFile()
{
2019-10-05 14:14:45 +00:00
closeFile();
2019-10-05 14:14:45 +00:00
setWindowModified(false);
setWindowTitle("untitled[*]");
m_filename = "";
m_saveOnClose = false;
}
2018-05-16 05:02:12 +00:00
2018-05-20 10:04:21 +00:00
void MainWindow::openFile()
2018-05-16 05:02:12 +00:00
{
2019-10-05 14:14:45 +00:00
QString filename =
QFileDialog::getOpenFileName(this, "Open file", "", "ESGRAF 4-8 (*.esgraf48)");
if (filename.isEmpty())
{
return;
}
2018-05-16 05:02:12 +00:00
2019-10-05 14:14:45 +00:00
try
{
openFile(filename);
}
catch (std::exception& e)
{
QString errorMessage = QString("Error loading \"") + filename + "\": " + e.what();
QMessageBox::critical(this, "Error", errorMessage);
}
}
2019-10-05 14:14:45 +00:00
void MainWindow::openFile(const QString& filename)
{
2019-10-05 14:14:45 +00:00
closeFile();
2019-10-05 14:14:45 +00:00
m_dataModel.read(filename);
2018-05-16 05:02:12 +00:00
2019-10-05 14:14:45 +00:00
setWindowModified(false);
setWindowTitle(filename + "[*]");
m_saveOnClose = false;
m_filename = filename;
2018-05-24 09:54:24 +00:00
2019-10-05 14:14:45 +00:00
ui->metaDataWidget->toFirst();
2018-05-24 09:54:24 +00:00
}
void MainWindow::saveFile()
{
2019-10-05 14:14:45 +00:00
if (m_filename.isEmpty())
{
saveFileAs();
}
else
{
saveFile(m_filename);
}
2018-05-16 05:02:12 +00:00
}
2018-05-20 10:04:21 +00:00
void MainWindow::saveFileAs()
{
2019-10-05 14:14:45 +00:00
QFileDialog saveFilenameDialog(this);
saveFilenameDialog.setAcceptMode(QFileDialog::AcceptSave);
saveFilenameDialog.setDefaultSuffix("esgraf48");
saveFilenameDialog.setFileMode(QFileDialog::AnyFile);
saveFilenameDialog.setNameFilter("ESGRAF 4-8 (*.esgraf48)");
saveFilenameDialog.setWindowTitle("Save file");
2019-10-05 14:14:45 +00:00
if (!saveFilenameDialog.exec())
{
return;
}
2018-05-20 10:04:21 +00:00
2019-10-05 14:14:45 +00:00
saveFile(saveFilenameDialog.selectedFiles().first());
2018-05-24 09:54:24 +00:00
}
void MainWindow::closeFile()
{
2019-10-05 14:14:45 +00:00
if (m_saveOnClose == true)
{
QMessageBox msgBox;
msgBox.setText("The document has been modified.");
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard);
msgBox.setDefaultButton(QMessageBox::Save);
2019-10-05 14:14:45 +00:00
if (msgBox.exec() == QMessageBox::Save)
{
saveFile();
}
}
}
void MainWindow::print() const
{
2019-10-05 14:14:45 +00:00
QPrinter printer;
printer.setPaperSize(QPrinter::A4);
printer.setPageMargins(20, 20, 20, 20, QPrinter::Millimeter);
2019-10-05 14:14:45 +00:00
QPrintDialog dialog(&printer);
if (dialog.exec() != QDialog::Accepted)
{
return;
}
2018-10-29 21:05:34 +00:00
2019-10-05 14:14:45 +00:00
m_dataModel.printTo(printer);
}
void MainWindow::dataModelChanged()
{
2019-10-05 14:14:45 +00:00
m_saveOnClose = true;
setWindowModified(true);
}
2018-12-09 10:11:55 +00:00
void MainWindow::savePdf()
{
2019-10-05 14:14:45 +00:00
QFileDialog saveFilenameDialog(this);
saveFilenameDialog.setDefaultSuffix("pdf");
saveFilenameDialog.setFileMode(QFileDialog::AnyFile);
saveFilenameDialog.setNameFilter("PDF File (*.pdf)");
saveFilenameDialog.setWindowTitle("Save file");
2018-12-09 10:11:55 +00:00
2019-10-05 14:14:45 +00:00
if (!saveFilenameDialog.exec())
{
return;
}
2018-12-09 10:11:55 +00:00
2019-10-05 14:14:45 +00:00
savePdf(saveFilenameDialog.selectedFiles().first());
2018-12-09 10:11:55 +00:00
}
2019-10-05 14:14:45 +00:00
void MainWindow::closeEvent(QCloseEvent* event)
{
2019-10-05 14:14:45 +00:00
closeFile();
}
2019-10-05 14:14:45 +00:00
void MainWindow::saveFile(const QString& filename)
2018-05-24 09:54:24 +00:00
{
2019-10-05 14:14:45 +00:00
try
{
m_dataModel.write(filename);
}
catch (std::exception& e)
{
QString errorMessage = QString("Error saving \"") + filename + "\": " + e.what();
QMessageBox::critical(this, "Error", errorMessage);
return;
}
2018-05-20 10:04:21 +00:00
2019-10-05 14:14:45 +00:00
qDebug() << "Wrote" << filename;
2019-10-05 14:14:45 +00:00
setWindowTitle(filename + "[*]");
setWindowModified(false);
m_filename = filename;
m_saveOnClose = false;
2018-05-20 10:04:21 +00:00
}
2018-12-09 10:11:55 +00:00
2019-10-05 14:14:45 +00:00
void MainWindow::savePdf(const QString& filename)
2018-12-09 10:11:55 +00:00
{
2019-10-05 14:14:45 +00:00
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setPaperSize(QPrinter::A4);
printer.setPageMargins(20, 20, 20, 20, QPrinter::Millimeter);
printer.setOutputFileName(filename);
2018-12-09 10:11:55 +00:00
2019-10-05 14:14:45 +00:00
m_dataModel.printTo(printer);
2018-12-09 10:11:55 +00:00
}
void MainWindow::aboutDialog()
{
2019-10-05 14:14:45 +00:00
QString infoString =
QString::fromUtf8(ESGRAF48_DESCRIPTION) + " Version " + QString::fromUtf8(ESGRAF48_VERSION);
QMessageBox::information(this, ESGRAF48_DESCRIPTION, infoString);
}