diff options
Diffstat (limited to 'client/mainwindow.cc')
-rw-r--r-- | client/mainwindow.cc | 128 |
1 files changed, 116 insertions, 12 deletions
diff --git a/client/mainwindow.cc b/client/mainwindow.cc index 51bb772..3d49752 100644 --- a/client/mainwindow.cc +++ b/client/mainwindow.cc @@ -37,20 +37,50 @@ #include <QScrollArea> #include <QSettings> #include <QStatusBar> +#include <QMessageBox> +#include <QToolBar> +#include <QAction> #include "macrodrawer.h" -MainWindow::MainWindow(QString cpr, QString templ, QString host, quint16 port, QString user) +MainWindow::MainWindow(QString cpr, QString templ, QString host, + quint16 port, QString user) : QMainWindow(0, Qt::WindowContextHelpButtonHint), - netcom(host, port, user, cpr) + netcom(host, port) { + isStored = false; + header = NULL; + this->cpr = cpr; + this->user = user; + setWindowTitle("Pracro - " + cpr); QStatusBar *status = statusBar(); status->addPermanentWidget(new QLabel("Pracro v."VERSION)); + QToolBar *toolbar = addToolBar("controls"); + toolbar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + QAction *close_commit = toolbar->addAction("Close and commit"); + close_commit->setIcon(QPixmap(":icons/icon_close_commit.png")); + + QAction *close_no_commit = toolbar->addAction("Close no commit"); + close_no_commit->setIcon(QPixmap(":icons/icon_close_no_commit.png")); + /* + QAction *close_discard = toolbar->addAction("Close discard"); + close_discard->setIcon(QPixmap(":icons/icon_discard.png")); + connect(close_discard, SIGNAL(triggered()), this, SLOT(closeDiscard())); + */ + toolbar->addSeparator(); + + QAction *show_sessions = toolbar->addAction("Show sessions"); + show_sessions->setIcon(QPixmap(":icons/icon_current_sessions.png")); + + connect(close_commit, SIGNAL(triggered()), this, SLOT(closeCommit())); + connect(close_no_commit, SIGNAL(triggered()), this, SLOT(closeNoCommit())); + connect(show_sessions, SIGNAL(triggered()), this, SLOT(showSessions())); + QScrollArea *s = new QScrollArea(); setCentralWidget(s); w = new QWidget(); @@ -61,24 +91,77 @@ MainWindow::MainWindow(QString cpr, QString templ, QString host, quint16 port, Q this->templ = templ; setStatusBar(status); - + init(); + + if(sessions.isEmpty()) { + show_sessions->setEnabled(false); + } } MainWindow::~MainWindow() { } -void MainWindow::closeEvent(QCloseEvent *) +void MainWindow::closeCommit() { - QSettings settings("Aasimon.org", "Pracro"); + netcom.commit(); + sessions.remove(cpr); + isStored = true; + close(); +} - settings.beginGroup("MainWindow"); - settings.setValue("size", size()); - settings.setValue("pos", pos()); - settings.endGroup(); +void MainWindow::closeNoCommit() +{ + QMessageBox::information(this, + "Closing without commit", + "This session will be stored on this computer only." + " To reopen it at a later time, simply open the same patient again."); + sessions.add(cpr, user, netcom.sessionid); + isStored = true; + close(); +} - QApplication::quit(); +void MainWindow::closeDiscard() +{ + if(QMessageBox::question(this, + "Discard", + "This session will <strong>NOT</strong> be stored in the journal.<br/>" + "Are you sure you want to continue?", + QMessageBox::Yes | QMessageBox::No) + == QMessageBox::Yes) { + netcom.discard(); + sessions.remove(cpr); + isStored = true; + close(); + } +} + +void MainWindow::showSessions() +{ + sessions.show(); +} + +void MainWindow::closeEvent(QCloseEvent *event) +{ + if(isStored || QMessageBox::question(this, + "Discard", + "This session will <strong>NOT</strong> be stored in the journal.<br/>" + "Are you sure you want to continue?", + QMessageBox::Yes | QMessageBox::No) + == QMessageBox::Yes) { + QSettings settings("Aasimon.org", "Pracro"); + + settings.beginGroup("MainWindow"); + settings.setValue("size", size()); + settings.setValue("pos", pos()); + settings.setValue(QString("sessions"), sessions.toVariant()); + settings.endGroup(); + + event->accept(); + } else { + event->ignore(); + } } void MainWindow::init() @@ -88,8 +171,21 @@ void MainWindow::init() settings.beginGroup("MainWindow"); resize(settings.value("size", QSize(700, 800)).toSize()); move(settings.value("pos", QPoint(0, 0)).toPoint()); + sessions.fromVariant(settings.value("sessions")); settings.endGroup(); + netcom.patientid = cpr; + netcom.user = user; + + if(sessions.contains(cpr)) { + netcom.sessionid = sessions.getSessionID(cpr); + if(sessions.getUser(cpr) != user) { + // What to do? We are running an old session with a new user! + } + } + + netcom.initConnection(); + initialising = true; update(); initialising = false; @@ -112,7 +208,8 @@ void MainWindow::updateTemplateHeaders(QDomNode templatenode) w->layout()->addWidget(header); } - statusBar()->showMessage(template_title + " (" + template_name + ")"); + statusBar()->showMessage(template_title + " (" + template_name + + ") - SessionID: " + netcom.sessionid); } @@ -122,6 +219,13 @@ void MainWindow::update() QDomNodeList templates = xml_doc.documentElement().childNodes(); QDomNode templatenode = templates.at(0); // There can be only one! (Swush, flomp) + + if(templatenode.toElement().tagName() == "error") { + QMessageBox::critical(this, "Error", + templatenode.toElement().text()); + return; + } + updateTemplateHeaders(templatenode); @@ -142,7 +246,7 @@ void MainWindow::update() i++; } - // if(found == false || macroelement.hasAttribute("header")) { + // if(found == false || macroelement.hasAttribute("header")) { if(found == false || macroelement.tagName() == "header") { QString num; num.sprintf("%04d", j); |