]> git.sur5r.net Git - fstl/blobdiff - src/window.cpp
Cross-thread lambda functions fail on win32
[fstl] / src / window.cpp
index ebb4b70020731c0f5efdb6f524ebb21d63861738..15ffb0324d32000b4685b7e125b1718c254949db 100644 (file)
@@ -7,11 +7,15 @@
 #include "loader.h"
 
 Window::Window(QWidget *parent) :
-    QMainWindow(parent)
+    QMainWindow(parent),
+    open_action(new QAction("Open", this)),
+    about_action(new QAction("About", this)),
+    quit_action(new QAction("Quit", this))
+
 {
     setWindowTitle("fstl");
 
-    QFile styleFile( ":/style.qss" );
+    QFile styleFile(":/qt/style.qss");
     styleFile.open( QFile::ReadOnly );
     setStyleSheet(styleFile.readAll());
 
@@ -22,19 +26,16 @@ 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::on_open);
+                     this, &Window::close);
 
-    about_action = new QAction("About", this);
     QObject::connect(about_action, &QAction::triggered,
-                     this, &Window::on_open);
+                     this, &Window::on_about);
 
     auto file_menu = menuBar()->addMenu("File");
     file_menu->addAction(open_action);
@@ -68,13 +69,25 @@ void Window::on_about()
         "   style=\"color: #93a1a1;\">matt.j.keeter@gmail.com</a></p>");
 }
 
-void Window::load_stl(const QString &filename)
+void Window::enable_open()
+{
+    open_action->setEnabled(true);
+}
+
+void Window::disable_open()
 {
+    open_action->setEnabled(false);
+}
+
+bool Window::load_stl(const QString& filename)
+{
+    if (!open_action->isEnabled())  return false;
+
     canvas->set_status("Loading " + filename);
 
     Loader* loader = new Loader(this, filename);
     connect(loader, &Loader::started,
-            [=](){ open_action->setEnabled(false); });
+              this, &Window::disable_open);
 
     connect(loader, &Loader::got_mesh,
             canvas, &Canvas::load_mesh);
@@ -82,12 +95,16 @@ void Window::load_stl(const QString &filename)
     connect(loader, &Loader::finished,
             loader, &Loader::deleteLater);
     connect(loader, &Loader::finished,
-            [=](){ open_action->setEnabled(true); });
+              this, &Window::enable_open);
     connect(loader, &Loader::finished,
-            [=](){ canvas->set_status(""); });
+            canvas, &Canvas::clear_status);
 
-    connect(loader, &Loader::loaded_file,
-            this, &Window::setWindowTitle);
+    if (filename[0] != ':')
+    {
+        connect(loader, &Loader::loaded_file,
+                  this, &Window::setWindowTitle);
+    }
 
     loader->start();
+    return true;
 }