]> Some of my projects - AniAdd.git/commitdiff
Add drag&drop to main window.
authorAPTX <marek321@gmail.com>
Fri, 6 Jan 2012 19:09:40 +0000 (20:09 +0100)
committerAPTX <marek321@gmail.com>
Fri, 6 Jan 2012 19:09:40 +0000 (20:09 +0100)
mainwindow.cpp
mainwindow.h

index 43b4a186c344c05a2a666ad73da0d1ef417e0944..9c9799d4b245901d5f767d730673bef8b6d1bc01 100644 (file)
@@ -4,6 +4,9 @@
 #include <QDeclarativeContext>
 #include <QDeclarativeProperty>
 #include <QGraphicsObject>
+#include <QDragEnterEvent>
+#include <QDropEvent>
+#include <QUrl>
 
 #include <QGLWidget>
 
@@ -22,6 +25,7 @@ MainWindow::MainWindow(QWidget *parent) :
     ui->setupUi(this);
        setWindowTitle("AniAdd");
 
+       qRegisterMetaType<QFileInfoList>("QFileInfoList");
 
        QDeclarativeContext *ctxt = ui->declarativeView->rootContext();
 
@@ -35,10 +39,9 @@ MainWindow::MainWindow(QWidget *parent) :
 
 
        connect(ui->actionQuit, SIGNAL(triggered()), qApp, SLOT(quit()));
+       connect(this, SIGNAL(filesToBeAdded(QFileInfoList)), qApp->fileModel(), SLOT(addFiles(QFileInfoList)), Qt::QueuedConnection);
 
-
-       QDeclarativeProperty p( ui->declarativeView->rootObject());
-       qDebug() << p.read().toString();
+       setAcceptDrops(true);
 }
 
 MainWindow::~MainWindow()
@@ -104,6 +107,29 @@ void MainWindow::setSelectedIndex(int index)
        emit selectedIndexChanged();
 }
 
+void MainWindow::dragEnterEvent(QDragEnterEvent *event)
+{
+       if (event->mimeData()->hasFormat("text/uri-list"))
+               event->acceptProposedAction();
+}
+
+void MainWindow::dropEvent(QDropEvent *event)
+{
+       QList<QUrl> urls = event->mimeData()->urls();
+       QFileInfoList files;
+qDebug() << urls.count();
+       for (int i = 0; i < urls.count(); ++i)
+       {
+               qDebug() << urls[i].isLocalFile();
+               if (!urls[i].isLocalFile())
+                       continue;
+               qDebug() << urls[i].toLocalFile();
+               files << QFileInfo(urls[i].toLocalFile());
+       }
+       event->acceptProposedAction();
+       emit filesToBeAdded(files);
+}
+
 void MainWindow::on_actionRenameScript_triggered()
 {
        RenameSettingsDialog dialog;
index 33657cf1a6c9f6382477b231473e69e69f35eab0..eafbe4c2e502241529f4701a01673eaf0041e9cd 100644 (file)
@@ -2,6 +2,7 @@
 #define MAINWINDOW_H
 
 #include <QMainWindow>
+#include <QFileInfoList>
 
 namespace Ui {
     class MainWindow;
@@ -22,6 +23,10 @@ public:
        int selectedIndex() const;
        void setSelectedIndex(int index);
 
+protected:
+       void dragEnterEvent(QDragEnterEvent *event);
+       void dropEvent(QDropEvent *event);
+
 private slots:
        void on_actionAddFiles_triggered();
        void on_actionAddDirectories_triggered();
@@ -38,6 +43,7 @@ private slots:
 
 signals:
        void selectedIndexChanged();
+       void filesToBeAdded(const QFileInfoList &files);
 
 private:
        void saveSettings();
@@ -45,8 +51,6 @@ private:
 
        QString lastDirectory;
 
-       AniAdd *aniAdd;
-
     Ui::MainWindow *ui;
 
        int m_selectedIndex;