summaryrefslogtreecommitdiffstats
path: root/archiveview.h
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2014-04-10 16:14:32 +0200
committerArno <am@disconnect.de>2014-04-10 16:14:32 +0200
commitb0d671fede5adfadad2b465fb4c8ae50b40516f3 (patch)
tree0215645b3be6eea7dd11c72c987222eddc0a0faa /archiveview.h
parent9f314ad26720a925e8e7a7f1a9f61330f3fd29c1 (diff)
downloadSheMov-b0d671fede5adfadad2b465fb4c8ae50b40516f3.tar.gz
SheMov-b0d671fede5adfadad2b465fb4c8ae50b40516f3.tar.bz2
SheMov-b0d671fede5adfadad2b465fb4c8ae50b40516f3.zip
Implement Drag and Drop in Movie Archive
Well, this was actually a bit of a drag. You have read the docs very carefully to get it right. For one, don't construct the drag object in mousePressEvent if you also want a double click, otherwise you end up with very weird behavior. Same goes for the receiving end. Differentiate between dragEnterEvent and dragMoveEvent, otherwise you'll only be able to drop items if you hit the right row on entering. There are some artefacts during the drag, but I guess that's a Qt bug. Didn't bother to look into it.
Diffstat (limited to 'archiveview.h')
-rw-r--r--archiveview.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/archiveview.h b/archiveview.h
index f1b9029..dbe0e8f 100644
--- a/archiveview.h
+++ b/archiveview.h
@@ -33,6 +33,8 @@ class QCompleter;
class QStandardItemModel;
class QSpinBox;
class QToolBar;
+class QMouseEvent;
+class QDragEnterEvent;
class ArchiveView : public QWidget {
Q_OBJECT
@@ -96,6 +98,11 @@ class ArchiveTree : public SmTreeView {
void deleteFromTree();
void newPart();
+ protected:
+ virtual void dragEnterEvent(QDragEnterEvent *e);
+ virtual void dragMoveEvent(QDragMoveEvent *e);
+ virtual void dropEvent(QDropEvent *e);
+
private:
void impossible(const QString msg = tr("Unable to perform function!"));
QModelIndex firstSelected();
@@ -106,6 +113,13 @@ class ArchiveTree : public SmTreeView {
class ArchiveFiles : public SmTreeView {
public:
explicit ArchiveFiles(const QString &headerSettings = "afilesheaders", QWidget *parent = 0);
+
+ protected:
+ virtual void mousePressEvent(QMouseEvent *e);
+ virtual void mouseMoveEvent(QMouseEvent *e);
+
+ private:
+ QPoint mDragStartPos;
};
class ArchiveProxy : public QSortFilterProxyModel {