X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fwindow.cpp;h=2d809bfb0610c8a3924213148528d9693c377c22;hb=9cc3bd82e832f5d49911048d6dc053e177922abf;hp=6b125636027a33836aa0ef234972abf964113cc3;hpb=a396e030e8c05f35422ae5d9046149a26553f77c;p=fstl diff --git a/src/window.cpp b/src/window.cpp index 6b12563..2d809bf 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -7,10 +7,18 @@ #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(":/qt/style.qss"); + styleFile.open( QFile::ReadOnly ); + setStyleSheet(styleFile.readAll()); + QGLFormat format; format.setVersion(2, 1); format.setSampleBuffers(true); @@ -18,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, SIGNAL(triggered()), - this, SLOT(on_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, SIGNAL(triggered()), - this, SLOT(close())); + QObject::connect(quit_action, &QAction::triggered, + this, &Window::close); - about_action = new QAction("About", this); - QObject::connect(about_action, SIGNAL(triggered()), - this, SLOT(on_about())); + QObject::connect(about_action, &QAction::triggered, + this, &Window::on_about); auto file_menu = menuBar()->addMenu("File"); file_menu->addAction(open_action); @@ -54,36 +59,72 @@ void Window::on_open() void Window::on_about() { - QMessageBox::about(this, "About fstl", "fstl

" - "A fast viewer for .stl files.
" - "https://github.com/mkeeter/fstl

" - "© 2014 Matthew Keeter
" - "matt.j.keeter@gmail.com
"); + QMessageBox::about(this, "", + "

fstl

" + "

A fast viewer for .stl files.
" + "https://github.com/mkeeter/fstl

" + "

© 2014 Matthew Keeter
" + "matt.j.keeter@gmail.com

"); } - -void Window::enable_open_action() +void Window::on_ascii_stl() { - open_action->setEnabled(true); + QMessageBox::critical(this, "Error", + "Error:
" + "Cannot open ASCII .stl file
" + "Please convert to binary .stl and retry"); } +void Window::on_bad_stl() +{ + QMessageBox::critical(this, "Error", + "Error:
" + "This .stl file is invalid or corrupted.
" + "Please export it from the original source, verify, and retry."); +} -void Window::disable_open_action() +void Window::enable_open() { + open_action->setEnabled(true); +} +void Window::disable_open() +{ open_action->setEnabled(false); } - -void Window::load_stl(const QString &filename) +bool Window::load_stl(const QString& filename) { - disable_open_action(); + if (!open_action->isEnabled()) return false; + + canvas->set_status("Loading " + filename); + Loader* loader = new Loader(this, filename); - connect(loader, SIGNAL(got_mesh(Mesh*)), - canvas, SLOT(load_mesh(Mesh*))); - connect(loader, SIGNAL(finished()), - loader, SLOT(deleteLater())); - connect(loader, SIGNAL(finished()), - this, SLOT(enable_open_action())); + connect(loader, &Loader::started, + this, &Window::disable_open); + + connect(loader, &Loader::got_mesh, + canvas, &Canvas::load_mesh); + connect(loader, &Loader::error_ascii_stl, + this, &Window::on_ascii_stl); + connect(loader, &Loader::error_bad_stl, + this, &Window::on_bad_stl); + + connect(loader, &Loader::finished, + loader, &Loader::deleteLater); + connect(loader, &Loader::finished, + this, &Window::enable_open); + connect(loader, &Loader::finished, + canvas, &Canvas::clear_status); + + if (filename[0] != ':') + { + connect(loader, &Loader::loaded_file, + this, &Window::setWindowTitle); + } + loader->start(); + return true; }