From 631f37ee26c19d38408ee733ffda24ad283c7921 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Tue, 19 Dec 2017 22:47:05 +0100 Subject: Implement basic ui Changes: - Clean up code to use Qt coding style - Add comments to some methods - Add debugtools to have debug_msg() and debug_err() macros - New Serializer class header to save / load data - MetadataDialog: check validity of metadata - MainWindow: initial code for `tool' buttons to edit the structogram - MainWindow: open / save dialog --- src/ui/mainwindow.cpp | 115 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 97 insertions(+), 18 deletions(-) (limited to 'src/ui/mainwindow.cpp') diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 5a60391..5776db7 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -1,17 +1,22 @@ -#include "ui/mainwindow.h" -#include "ui_mainwindow.h" +#include "debugtools.h" #include "ui/metadatadialog.h" +#include "ui/mainwindow.h" +#include "ui_mainwindow.h" #include +#include +#include + MainWindow::MainWindow(samb::Structogram *structogram, QWidget *parent) : QMainWindow(parent), _ui(new Ui::MainWindow), _structogram(structogram) { _ui->setupUi(this); - initData(); + + toolButtonsEnabled((_structogram != nullptr)); } MainWindow::~MainWindow() @@ -24,43 +29,117 @@ MainWindow::~MainWindow() void MainWindow::on_newButton_clicked() { if (_structogram != nullptr) - { - // TODO: implement save dialog - std::cout << "TODO: implement save dialog" << std::endl; + if (!askSaveDialog()) + return; - delete _structogram; - _structogram = nullptr; - } + delete _structogram; + _structogram = nullptr; MetadataDialog *dialog = new MetadataDialog(this); - if (dialog->exec() == QDialog::Accepted) - { + if (dialog->exec() == QDialog::Accepted) { _structogram = new samb::Structogram(dialog->title(), dialog->author()); + toolButtonsEnabled(true); + } else { + toolButtonsEnabled(false); } delete dialog; } +void MainWindow::on_openButton_clicked() +{ + if (_structogram != nullptr) + if (!askSaveDialog()) + return; + + QString fileName = QFileDialog::getOpenFileName(this, + tr("Load diagram"), "", "NS Diagram (*.nsdg);;All Files (*)"); + + if (fileName.isEmpty()) + return; + + debug_err("load dialog is unimplemented"); + + // toolButtonsEnabled(true); +} + +void MainWindow::on_saveButton_clicked() +{ + QString fileName = QFileDialog::getSaveFileName(this, + tr("Save diagram"), "", tr("NS Diagram (*.nsdg);;All Files (*)")); + + if (fileName.isEmpty()) + return; + + debug_err("saved dialog is unimplemented"); + + // toolButtonsEnabled(true); +} + +void MainWindow::on_refreshButton_clicked() +{ + +} + void MainWindow::on_metadataButton_clicked() { - if (_structogram == nullptr) { return; } + if (_structogram == nullptr) + return; MetadataDialog *dialog = new MetadataDialog(this); dialog->setMetadata(_structogram->title(), _structogram->author()); - if (dialog->exec() == QDialog::Accepted) - { + if (dialog->exec() == QDialog::Accepted) { _structogram->title(dialog->title()); _structogram->author(dialog->author()); } } +void MainWindow::on_newStatementButton_clicked() +{ + +} + /**** private methods ****/ -void MainWindow::initData() +/* @brief open a save dialog + * @return true if operation completed successfully + */ +bool MainWindow::askSaveDialog() { - if (_structogram == nullptr) - { - _structogram = new samb::Structogram("", ""); + // TODO: check if it has already been saved once + auto reply = QMessageBox::question(this, + "Save " + _structogram->title(), + "'" + _structogram->title() + "' is not saved.\nDo you want to save it?", + QMessageBox::Save, QMessageBox::Discard); + + if (reply == QMessageBox::Save) { + on_saveButton_clicked(); + + // TODO: check if file has been ACTUALLY saved + return true; + } else { + return true; + } + +} + +/* @brief control ui elements that are relate to _structogram member + */ +void MainWindow::toolButtonsEnabled(bool state) +{ + if (_structogram == nullptr && state == true) { + debug_err("called enableToolButtons(true) but _structogram is nullptr"); + return; } + + // buttons + _ui->refreshButton->setEnabled(state); + _ui->metadataButton->setEnabled(state); + _ui->newStatementButton->setEnabled(state); + + // actions + _ui->actionSave->setEnabled(state); + _ui->actionSaveAs->setEnabled(state); + _ui->actionClose->setEnabled(state); } -- cgit v1.2.1