aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/mainwindow.cpp22
-rw-r--r--src/ui/painter.cpp60
-rw-r--r--src/ui/statementdialog.cpp14
3 files changed, 86 insertions, 10 deletions
diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp
index 5776db7..8b40c1b 100644
--- a/src/ui/mainwindow.cpp
+++ b/src/ui/mainwindow.cpp
@@ -1,9 +1,12 @@
#include "debugtools.h"
#include "ui/metadatadialog.h"
+#include "ui/statementdialog.h"
#include "ui/mainwindow.h"
#include "ui_mainwindow.h"
+#include "diagram/statement.h"
+
#include <iostream>
#include <QMessageBox>
@@ -15,6 +18,7 @@ MainWindow::MainWindow(samb::Structogram *structogram, QWidget *parent) :
_structogram(structogram)
{
_ui->setupUi(this);
+ _ui->painter->structogram(&_structogram);
toolButtonsEnabled((_structogram != nullptr));
}
@@ -53,7 +57,7 @@ void MainWindow::on_openButton_clicked()
return;
QString fileName = QFileDialog::getOpenFileName(this,
- tr("Load diagram"), "", "NS Diagram (*.nsdg);;All Files (*)");
+ tr("Load diagram"), "", tr("NS Diagram (*.nsdg);;All Files (*)"));
if (fileName.isEmpty())
return;
@@ -86,18 +90,24 @@ void MainWindow::on_metadataButton_clicked()
if (_structogram == nullptr)
return;
- MetadataDialog *dialog = new MetadataDialog(this);
- dialog->setMetadata(_structogram->title(), _structogram->author());
+ MetadataDialog dialog(this);
+ dialog.setMetadata(_structogram->title(), _structogram->author());
- if (dialog->exec() == QDialog::Accepted) {
- _structogram->title(dialog->title());
- _structogram->author(dialog->author());
+ if (dialog.exec() == QDialog::Accepted) {
+ _structogram->title(dialog.title());
+ _structogram->author(dialog.author());
}
}
void MainWindow::on_newStatementButton_clicked()
{
+ if (_structogram == nullptr)
+ return;
+
+ StatementDialog dialog(this);
+ if (dialog.exec() == QDialog::Accepted) {
+ }
}
/**** private methods ****/
diff --git a/src/ui/painter.cpp b/src/ui/painter.cpp
index b04e389..74f140e 100644
--- a/src/ui/painter.cpp
+++ b/src/ui/painter.cpp
@@ -1,14 +1,66 @@
#include "ui/painter.h"
-#include "ui_painter.h"
+
+#include "debugtools.h"
+
+#include <cmath>
+
Painter::Painter(QWidget *parent) :
QWidget(parent),
- _ui(new Ui::Painter)
+ _font("Latin Modern Roman"),
+ _fontMetrics(_font)
{
- _ui->setupUi(this);
+ // default font size
+ _font.setPixelSize(15);
}
Painter::~Painter()
{
- delete _ui;
+
+}
+
+void Painter::paintEvent(QPaintEvent *event)
+{
+ Q_UNUSED(event);
+
+ if (_structogram == nullptr) {
+ return;
+ }
+
+ if (*_structogram == nullptr) {
+ return;
+ }
+
+ QPainter qp(this);
+ qp.setFont(_font);
+
+ // TODO default values should not be magic numbers
+ QRect rect(50, 50, 600, 00);
+ for (auto it = (*_structogram)->begin(); it != (*_structogram)->end(); ++it) {
+ drawStatement(qp, *it, rect);
+ rect.setY(rect.y() + rect.height());
+ }
+}
+
+void Painter::drawStatement(QPainter &qp, samb::Statement &statement, const QRect &rect)
+{
+ QRect textRect(rect.x() + _margin,
+ rect.y() + _margin,
+ rect.width() - 2*_margin,
+ rect.height() - 2*_margin);
+
+ int textHeight;
+ if (textRect.width() < _fontMetrics.width(statement.text())) {
+ textHeight = (_fontMetrics.height() + _fontMetrics.lineSpacing()) *
+ (int) ceil(_fontMetrics.width(statement.text()) / (double) textRect.width());
+ } else {
+ textHeight = _fontMetrics.height();
+ }
+
+ if (textRect.height() < textHeight) {
+ debug_msg("painter error, textRect.height() < height");
+ }
+
+ qp.drawRect(rect);
+ qp.drawText(textRect, Qt::AlignVCenter, statement.text());
}
diff --git a/src/ui/statementdialog.cpp b/src/ui/statementdialog.cpp
new file mode 100644
index 0000000..a543f95
--- /dev/null
+++ b/src/ui/statementdialog.cpp
@@ -0,0 +1,14 @@
+#include "include/ui/statementdialog.h"
+#include "ui_statementdialog.h"
+
+StatementDialog::StatementDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::StatementDialog)
+{
+ ui->setupUi(this);
+}
+
+StatementDialog::~StatementDialog()
+{
+ delete ui;
+}