]> git.sur5r.net Git - fstl/blob - src/window.cpp
Prettier about box
[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( ":/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, SIGNAL(triggered()),
28                      this, SLOT(on_open()));
29
30     quit_action = new QAction("Quit", this);
31     quit_action->setShortcut(QKeySequence::Quit);
32     QObject::connect(quit_action, SIGNAL(triggered()),
33                      this, SLOT(close()));
34
35     about_action = new QAction("About", this);
36     QObject::connect(about_action, SIGNAL(triggered()),
37                      this, SLOT(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, "", "<p align=\"center\"><b>fstl</b></p>"
62                        "<p>A fast viewer for <code>.stl</code> files.<br>"
63                        "<a href=\"https://github.com/mkeeter/fstl\">https://github.com/mkeeter/fstl</a></p>"
64                        "<p>© 2014 Matthew Keeter<br>"
65                        "<a href=\"mailto:matt.j.keeter@gmail.com\">matt.j.keeter@gmail.com</a></p>");
66 }
67
68
69 void Window::enable_open_action()
70 {
71     open_action->setEnabled(true);
72 }
73
74
75 void Window::disable_open_action()
76 {
77     open_action->setEnabled(false);
78 }
79
80
81 void Window::load_stl(const QString &filename)
82 {
83     Loader* loader = new Loader(this, filename);
84     connect(loader, SIGNAL(started()),
85             this, SLOT(disable_open_action()));
86     connect(loader, SIGNAL(got_mesh(Mesh*)),
87             canvas, SLOT(load_mesh(Mesh*)));
88     connect(loader, SIGNAL(finished()),
89             loader, SLOT(deleteLater()));
90     connect(loader, SIGNAL(finished()),
91             this, SLOT(enable_open_action()));
92     connect(loader, SIGNAL(loaded_file(QString)),
93             this, SLOT(setWindowTitle(QString)));
94     loader->start();
95 }