]> git.sur5r.net Git - fstl/blob - src/window.cpp
6b125636027a33836aa0ef234972abf964113cc3
[fstl] / src / window.cpp
1 #include <QMenuBar>
2 #include <QMessageBox>
3 #include <QFileDialog>
4
5 #include "window.h"
6 #include "canvas.h"
7 #include "loader.h"
8
9 Window::Window(QWidget *parent) :
10     QMainWindow(parent)
11 {
12     setWindowTitle("fstl");
13
14     QGLFormat format;
15     format.setVersion(2, 1);
16     format.setSampleBuffers(true);
17
18     canvas = new Canvas(format, this);
19     setCentralWidget(canvas);
20
21     open_action = new QAction("Open", this);
22     open_action->setShortcut(QKeySequence::Open);
23     QObject::connect(open_action, SIGNAL(triggered()),
24                      this, SLOT(on_open()));
25
26     quit_action = new QAction("Quit", this);
27     quit_action->setShortcut(QKeySequence::Quit);
28     QObject::connect(quit_action, SIGNAL(triggered()),
29                      this, SLOT(close()));
30
31     about_action = new QAction("About", this);
32     QObject::connect(about_action, SIGNAL(triggered()),
33                      this, SLOT(on_about()));
34
35     auto file_menu = menuBar()->addMenu("File");
36     file_menu->addAction(open_action);
37     file_menu->addAction(quit_action);
38
39     auto help_menu = menuBar()->addMenu("Help");
40     help_menu->addAction(about_action);
41
42     resize(600, 400);
43 }
44
45 void Window::on_open()
46 {
47     QString filename = QFileDialog::getOpenFileName(
48                 this, "Load .stl file", QString(), "*.stl");
49     if (not filename.isNull())
50     {
51         load_stl(filename);
52     }
53 }
54
55 void Window::on_about()
56 {
57     QMessageBox::about(this, "About fstl", "<b>fstl</b><br><br>"
58                        "A fast viewer for <code>.stl</code> files.<br>"
59                        "<a href=\"https://github.com/mkeeter/fstl\">https://github.com/mkeeter/fstl</a><br><br>"
60                        "© 2014 Matthew Keeter<br>"
61                        "<a href=\"mailto:matt.j.keeter@gmail.com\">matt.j.keeter@gmail.com</a><br>");
62 }
63
64
65 void Window::enable_open_action()
66 {
67     open_action->setEnabled(true);
68 }
69
70
71 void Window::disable_open_action()
72 {
73
74     open_action->setEnabled(false);
75 }
76
77
78 void Window::load_stl(const QString &filename)
79 {
80     disable_open_action();
81     Loader* loader = new Loader(this, filename);
82     connect(loader, SIGNAL(got_mesh(Mesh*)),
83             canvas, SLOT(load_mesh(Mesh*)));
84     connect(loader, SIGNAL(finished()),
85             loader, SLOT(deleteLater()));
86     connect(loader, SIGNAL(finished()),
87             this, SLOT(enable_open_action()));
88     loader->start();
89 }