]> git.sur5r.net Git - fstl/blobdiff - src/window.cpp
Misc bugfixes and cleanup
[fstl] / src / window.cpp
index b4d7c99e889005a9c4cf69d6276f88da18bb43dc..1e389f616aaea9c58652e33a64c371047cf967d4 100644 (file)
@@ -1,3 +1,7 @@
+#include <QMenuBar>
+#include <QMessageBox>
+#include <QFileDialog>
+
 #include "window.h"
 #include "canvas.h"
 #include "loader.h"
@@ -7,6 +11,10 @@ Window::Window(QWidget *parent) :
 {
     setWindowTitle("fstl");
 
+    QFile styleFile(":/qt/style.qss");
+    styleFile.open( QFile::ReadOnly );
+    setStyleSheet(styleFile.readAll());
+
     QGLFormat format;
     format.setVersion(2, 1);
     format.setSampleBuffers(true);
@@ -14,15 +22,72 @@ Window::Window(QWidget *parent) :
     canvas = new Canvas(format, this);
     setCentralWidget(canvas);
 
+    open_action = new QAction("Open", this);
+    open_action->setShortcut(QKeySequence::Open);
+    QObject::connect(open_action, &QAction::triggered,
+                     this, &Window::on_open);
+
+    quit_action = new QAction("Quit", this);
+    quit_action->setShortcut(QKeySequence::Quit);
+    QObject::connect(quit_action, &QAction::triggered,
+                     this, &Window::close);
+
+    about_action = new QAction("About", this);
+    QObject::connect(about_action, &QAction::triggered,
+                     this, &Window::on_about);
+
+    auto file_menu = menuBar()->addMenu("File");
+    file_menu->addAction(open_action);
+    file_menu->addAction(quit_action);
+
+    auto help_menu = menuBar()->addMenu("Help");
+    help_menu->addAction(about_action);
+
     resize(600, 400);
 }
 
+void Window::on_open()
+{
+    QString filename = QFileDialog::getOpenFileName(
+                this, "Load .stl file", QString(), "*.stl");
+    if (not filename.isNull())
+    {
+        load_stl(filename);
+    }
+}
+
+void Window::on_about()
+{
+    QMessageBox::about(this, "",
+        "<p align=\"center\"><b>fstl</b></p>"
+        "<p>A fast viewer for <code>.stl</code> files.<br>"
+        "<a href=\"https://github.com/mkeeter/fstl\""
+        "   style=\"color: #93a1a1;\">https://github.com/mkeeter/fstl</a></p>"
+        "<p>© 2014 Matthew Keeter<br>"
+        "<a href=\"mailto:matt.j.keeter@gmail.com\""
+        "   style=\"color: #93a1a1;\">matt.j.keeter@gmail.com</a></p>");
+}
+
 void Window::load_stl(const QString &filename)
 {
+    canvas->set_status("Loading " + filename);
+
     Loader* loader = new Loader(this, filename);
-    connect(loader, SIGNAL(got_mesh(Mesh*)),
-            canvas, SLOT(load_mesh(Mesh*)));
-    connect(loader, SIGNAL(finished()),
-            loader, SLOT(deleteLater()));
+    connect(loader, &Loader::started,
+            [=](){ open_action->setEnabled(false); });
+
+    connect(loader, &Loader::got_mesh,
+            canvas, &Canvas::load_mesh);
+
+    connect(loader, &Loader::finished,
+            loader, &Loader::deleteLater);
+    connect(loader, &Loader::finished,
+            [=](){ open_action->setEnabled(true); });
+    connect(loader, &Loader::finished,
+            [=](){ canvas->set_status(""); });
+
+    connect(loader, &Loader::loaded_file,
+            this, &Window::setWindowTitle);
+
     loader->start();
 }