diff options
-rw-r--r-- | mainwin.cc | 33 | ||||
-rw-r--r-- | openscad.h | 2 |
2 files changed, 35 insertions, 0 deletions
@@ -34,6 +34,9 @@ #include <QLabel> #include <QFileInfo> #include <QStatusBar> +#include <QDropEvent> +#include <QMimeData> +#include <QUrl> //for chdir #include <unistd.h> @@ -252,6 +255,7 @@ MainWindow::MainWindow(const char *filename) #endif viewPerspective(); + setAcceptDrops(true); current_win = NULL; } @@ -1303,3 +1307,32 @@ void MainWindow::viewOrthogonal() screen->updateGL(); } +void MainWindow::dragEnterEvent(QDragEnterEvent *event) +{ + if (event->mimeData()->hasUrls()) + event->acceptProposedAction(); +} + +void MainWindow::dropEvent(QDropEvent *event) +{ + current_win = this; + const QList<QUrl> urls = event->mimeData()->urls(); + for (int i = 0; i < urls.size(); i++) { + if (urls[i].scheme() != "file") + continue; + QString fn = urls[i].path(); +#if ENABLE_MDI + if (!editor->toPlainText().isEmpty()) { + new MainWindow(fn.toAscii().data()); + break; + } +#endif + filename = fn; + setWindowTitle(filename); + maybe_change_dir(); + load(); + break; + } + current_win = NULL; +} + @@ -808,6 +808,8 @@ public slots: void viewPerspective(); void viewOrthogonal(); void animateUpdate(); + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent *event); }; extern AbstractModule *parse(const char *text, int debug); |