diff --git a/src/app.cpp b/src/app.cpp index afa4ea7..b6eb3af 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -8,7 +8,10 @@ App::App(int argc, char *argv[]) : QApplication(argc, argv), window(new Window()) { window->show(); - window->load_stl(":gl/sphere.stl"); + if (argc > 1) + window->load_stl(argv[1]); + else + window->load_stl(":gl/sphere.stl"); } bool App::event(QEvent* e) diff --git a/src/window.cpp b/src/window.cpp index 2d809bf..3002ecc 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -14,6 +14,7 @@ Window::Window(QWidget *parent) : { setWindowTitle("fstl"); + setAcceptDrops(true); QFile styleFile(":/qt/style.qss"); styleFile.open( QFile::ReadOnly ); @@ -128,3 +129,18 @@ bool Window::load_stl(const QString& filename) loader->start(); return true; } + +void Window::dragEnterEvent(QDragEnterEvent *event) +{ + if (event->mimeData()->hasUrls()) + { + auto urls = event->mimeData()->urls(); + if (urls.size() == 1 && urls.front().path().endsWith(".stl")) + event->acceptProposedAction(); + } +} + +void Window::dropEvent(QDropEvent *event) +{ + load_stl(event->mimeData()->urls().front().toLocalFile()); +} diff --git a/src/window.h b/src/window.h index 3ac5e95..cb92ebb 100644 --- a/src/window.h +++ b/src/window.h @@ -12,6 +12,10 @@ public: explicit Window(QWidget* parent=0); bool load_stl(const QString& filename); +protected: + void dragEnterEvent(QDragEnterEvent* event); + void dropEvent(QDropEvent* event); + public slots: void on_open(); void on_about();