Fixed #10: ask to save modified data when exiting
parent
96b367e877
commit
66c18d95a7
|
@ -64,45 +64,63 @@ void DataModel::read(const QJsonObject &source)
|
|||
void DataModel::pluralModelChanged()
|
||||
{
|
||||
m_results.setPluralResult(m_plural.getPoints());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
||||
void DataModel::metaDataChanged()
|
||||
{
|
||||
m_results.setAge(m_metaData.getAge());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
||||
void DataModel::genusModelChanged()
|
||||
{
|
||||
m_results.setGenusResult(m_genus.getPoints());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
||||
void DataModel::verbEndModelChanged()
|
||||
{
|
||||
m_results.setVerbEndResult(m_verbEnd.getPoints());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
||||
void DataModel::akkusativModelChanged()
|
||||
{
|
||||
m_results.setAkkusativResult(m_akkusativ.getPoints());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
||||
void DataModel::dativModelChanged()
|
||||
{
|
||||
m_results.setDativResult(m_dativ.getPoints());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
||||
void DataModel::v2SvkModelChanged()
|
||||
{
|
||||
m_results.setV2Result(m_v2Svk.getV2Points());
|
||||
m_results.setSvkResult(m_v2Svk.getSvkPoints());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
||||
void DataModel::passivModelChanged()
|
||||
{
|
||||
m_results.setPassivResult(m_passiv.getPoints());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
||||
void DataModel::genitivModelChanged()
|
||||
{
|
||||
m_results.setGenitivResult(m_genitiv.getPoints());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
|
|
@ -37,6 +37,9 @@ public:
|
|||
void write(QJsonObject &target) const;
|
||||
void read(const QJsonObject &source);
|
||||
|
||||
signals:
|
||||
void modelChanged();
|
||||
|
||||
private:
|
||||
template <class ModelType>
|
||||
void write(
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
#include <QFile>
|
||||
#include <QFileDialog>
|
||||
#include <QDataWidgetMapper>
|
||||
#include <QCloseEvent>
|
||||
#include <QMessageBox>
|
||||
#include <QDebug>
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
|
@ -38,12 +41,17 @@ void MainWindow::newFile()
|
|||
ui->akkusativDativWidget->setAkkusativModel(&m_dataModel->m_akkusativ);
|
||||
ui->akkusativDativWidget->setDativModel(&m_dataModel->m_dativ);
|
||||
ui->v2SvkWidget->setV2SvkModel(&m_dataModel->m_v2Svk);
|
||||
ui->lateSkillsWidget->setPassivModel(&m_dataModel->m_passiv);
|
||||
ui->lateSkillsWidget->setGenitivModel(&m_dataModel->m_genitiv);
|
||||
ui->lateSkillsWidget->setPassivModel(&m_dataModel->m_passiv);
|
||||
ui->lateSkillsWidget->setGenitivModel(&m_dataModel->m_genitiv);
|
||||
|
||||
ui->resultWidget->setModel(&m_dataModel->m_results);
|
||||
|
||||
connect(&*m_dataModel, &DataModel::modelChanged, this, &MainWindow::dataModelChanged);
|
||||
|
||||
setWindowModified(false);
|
||||
setWindowTitle("untitled[*]");
|
||||
m_filename = "";
|
||||
m_saveOnClose = false;
|
||||
}
|
||||
|
||||
void MainWindow::openFile()
|
||||
|
@ -67,6 +75,9 @@ void MainWindow::openFile()
|
|||
|
||||
m_dataModel->read(loadDoc.object());
|
||||
|
||||
setWindowModified(false);
|
||||
setWindowTitle(filename + "[*]");
|
||||
m_saveOnClose = false;
|
||||
m_filename = filename;
|
||||
|
||||
ui->metaDataWidget->toFirst();
|
||||
|
@ -96,6 +107,49 @@ void MainWindow::saveFileAs()
|
|||
saveFile(filename);
|
||||
}
|
||||
|
||||
void MainWindow::dataModelChanged()
|
||||
{
|
||||
qDebug() << "data model changed";
|
||||
|
||||
m_saveOnClose = true;
|
||||
setWindowModified(true);
|
||||
}
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
if (m_saveOnClose == false)
|
||||
{
|
||||
event->accept();
|
||||
return;
|
||||
}
|
||||
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("The document has been modified.");
|
||||
msgBox.setInformativeText("Do you want to save your changes?");
|
||||
msgBox.setStandardButtons(
|
||||
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
|
||||
msgBox.setDefaultButton(QMessageBox::Save);
|
||||
int ret = msgBox.exec();
|
||||
|
||||
switch (ret)
|
||||
{
|
||||
case QMessageBox::Save:
|
||||
saveFile();
|
||||
if (m_saveOnClose == true)
|
||||
{
|
||||
event->ignore();
|
||||
break;
|
||||
}
|
||||
case QMessageBox::Discard:
|
||||
event->accept();
|
||||
break;
|
||||
case QMessageBox::Cancel:
|
||||
default:
|
||||
event->ignore();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::saveFile(const QString &filename)
|
||||
{
|
||||
QJsonObject saveData;
|
||||
|
@ -108,5 +162,8 @@ void MainWindow::saveFile(const QString &filename)
|
|||
saveFile.write(saveDoc.toJson());
|
||||
saveFile.close();
|
||||
|
||||
setWindowTitle(filename + "[*]");
|
||||
setWindowModified(false);
|
||||
m_filename = filename;
|
||||
m_saveOnClose = false;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ private:
|
|||
Ui::MainWindow *ui;
|
||||
std::unique_ptr<DataModel> m_dataModel;
|
||||
QString m_filename;
|
||||
bool m_saveOnClose = false;
|
||||
|
||||
public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
|
@ -29,6 +30,10 @@ public slots:
|
|||
void openFile();
|
||||
void saveFile();
|
||||
void saveFileAs();
|
||||
void dataModelChanged();
|
||||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
|
||||
private:
|
||||
void saveFile(const QString &filename);
|
||||
|
|
Loading…
Reference in New Issue