]> git.sur5r.net Git - fstl/blob - src/window.cpp
Disable open when load is in progress
[fstl] / src / window.cpp
1 #include <QMenuBar>
2 #include <QFileDialog>
3
4 #include "window.h"
5 #include "canvas.h"
6 #include "loader.h"
7
8 Window::Window(QWidget *parent) :
9     QMainWindow(parent)
10 {
11     setWindowTitle("fstl");
12
13     QGLFormat format;
14     format.setVersion(2, 1);
15     format.setSampleBuffers(true);
16
17     canvas = new Canvas(format, this);
18     setCentralWidget(canvas);
19
20     open_action = new QAction("Open", this);
21     open_action->setShortcut(QKeySequence::Open);
22     QObject::connect(open_action, SIGNAL(triggered()),
23                      this, SLOT(on_open()));
24
25     quit_action = new QAction("Quit", this);
26     quit_action->setShortcut(QKeySequence::Quit);
27     QObject::connect(quit_action, SIGNAL(triggered()),
28                      this, SLOT(close()));
29
30     auto file_menu = menuBar()->addMenu("File");
31     file_menu->addAction(open_action);
32     file_menu->addAction(quit_action);
33
34     resize(600, 400);
35 }
36
37 void Window::on_open()
38 {
39     QString filename = QFileDialog::getOpenFileName(
40                 this, "Load .stl file", QString(), "*.stl");
41     if (not filename.isNull())
42     {
43         load_stl(filename);
44     }
45 }
46
47
48 void Window::enable_open_action()
49 {
50     open_action->setEnabled(true);
51 }
52
53
54 void Window::disable_open_action()
55 {
56
57     open_action->setEnabled(false);
58 }
59
60
61 void Window::load_stl(const QString &filename)
62 {
63     disable_open_action();
64     Loader* loader = new Loader(this, filename);
65     connect(loader, SIGNAL(got_mesh(Mesh*)),
66             canvas, SLOT(load_mesh(Mesh*)));
67     connect(loader, SIGNAL(finished()),
68             loader, SLOT(deleteLater()));
69     connect(loader, SIGNAL(finished()),
70             this, SLOT(enable_open_action()));
71     loader->start();
72 }