]> git.sur5r.net Git - fstl/blob - src/window.cpp
Misc bugfixes and cleanup
[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     QFile styleFile(":/qt/style.qss");
15     styleFile.open( QFile::ReadOnly );
16     setStyleSheet(styleFile.readAll());
17
18     QGLFormat format;
19     format.setVersion(2, 1);
20     format.setSampleBuffers(true);
21
22     canvas = new Canvas(format, this);
23     setCentralWidget(canvas);
24
25     open_action = new QAction("Open", this);
26     open_action->setShortcut(QKeySequence::Open);
27     QObject::connect(open_action, &QAction::triggered,
28                      this, &Window::on_open);
29
30     quit_action = new QAction("Quit", this);
31     quit_action->setShortcut(QKeySequence::Quit);
32     QObject::connect(quit_action, &QAction::triggered,
33                      this, &Window::close);
34
35     about_action = new QAction("About", this);
36     QObject::connect(about_action, &QAction::triggered,
37                      this, &Window::on_about);
38
39     auto file_menu = menuBar()->addMenu("File");
40     file_menu->addAction(open_action);
41     file_menu->addAction(quit_action);
42
43     auto help_menu = menuBar()->addMenu("Help");
44     help_menu->addAction(about_action);
45
46     resize(600, 400);
47 }
48
49 void Window::on_open()
50 {
51     QString filename = QFileDialog::getOpenFileName(
52                 this, "Load .stl file", QString(), "*.stl");
53     if (not filename.isNull())
54     {
55         load_stl(filename);
56     }
57 }
58
59 void Window::on_about()
60 {
61     QMessageBox::about(this, "",
62         "<p align=\"center\"><b>fstl</b></p>"
63         "<p>A fast viewer for <code>.stl</code> files.<br>"
64         "<a href=\"https://github.com/mkeeter/fstl\""
65         "   style=\"color: #93a1a1;\">https://github.com/mkeeter/fstl</a></p>"
66         "<p>© 2014 Matthew Keeter<br>"
67         "<a href=\"mailto:matt.j.keeter@gmail.com\""
68         "   style=\"color: #93a1a1;\">matt.j.keeter@gmail.com</a></p>");
69 }
70
71 void Window::load_stl(const QString &filename)
72 {
73     canvas->set_status("Loading " + filename);
74
75     Loader* loader = new Loader(this, filename);
76     connect(loader, &Loader::started,
77             [=](){ open_action->setEnabled(false); });
78
79     connect(loader, &Loader::got_mesh,
80             canvas, &Canvas::load_mesh);
81
82     connect(loader, &Loader::finished,
83             loader, &Loader::deleteLater);
84     connect(loader, &Loader::finished,
85             [=](){ open_action->setEnabled(true); });
86     connect(loader, &Loader::finished,
87             [=](){ canvas->set_status(""); });
88
89     connect(loader, &Loader::loaded_file,
90             this, &Window::setWindowTitle);
91
92     loader->start();
93 }