added drag support to classic and grid view. by now grid doesn't support multiple drags and pressents some secondary effects (cells are moved inside the grid, and target is not working properly)

This commit is contained in:
Luis Ángel San Martín 2014-11-02 23:00:11 +01:00
parent ac3b3a8a85
commit 9325eb5a7b
3 changed files with 49 additions and 23 deletions

View File

@ -148,7 +148,7 @@ Qt::ItemFlags ComicModel::flags(const QModelIndex &index) const
return 0; return 0;
if(index.column() == ComicModel::Rating) if(index.column() == ComicModel::Rating)
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
return Qt::ItemIsEnabled | Qt::ItemIsSelectable; return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled;
} }
//! [4] //! [4]

View File

@ -28,6 +28,8 @@ Rectangle {
height: grid.cellHeight height: grid.cellHeight
color: backgroundColor color: backgroundColor
MouseArea { MouseArea {
id: mouseArea
drag.target: realCell
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
comicsSelectionHelper.clear(); comicsSelectionHelper.clear();
@ -38,7 +40,14 @@ Rectangle {
Rectangle { Rectangle {
id: realCell id: realCell
width: 156; height: 287 Drag.active: mouseArea.drag.active
Drag.hotSpot.x: 32
Drag.hotSpot.y: 32
Drag.dragType: Drag.Automatic
Drag.mimeData: { "text/plain": "comic" }
Drag.proposedAction: Qt.CopyAction
width: 156; height: 287
color: ((dummyValue || !dummyValue) && comicsSelectionHelper.isSelectedIndex(index)) || grid.currentIndex === index?selectedColor:cellColor; color: ((dummyValue || !dummyValue) && comicsSelectionHelper.isSelectedIndex(index)) || grid.currentIndex === index?selectedColor:cellColor;
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter

View File

@ -4,6 +4,8 @@
#include <QResizeEvent> #include <QResizeEvent>
#include <QPropertyAnimation> #include <QPropertyAnimation>
#include <QPainter> #include <QPainter>
#include <QDrag>
#include <QMimeData>
#include "comic_item.h" #include "comic_item.h"
@ -47,9 +49,9 @@ YACReaderTableView::YACReaderTableView(QWidget *parent) :
//comicView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); //comicView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
verticalHeader()->setDefaultSectionSize(24); verticalHeader()->setDefaultSectionSize(24);
#if QT_VERSION >= 0x050000 #if QT_VERSION >= 0x050000
verticalHeader()->setSectionsClickable(false); //TODO comportamiento anómalo verticalHeader()->setSectionsClickable(false); //TODO comportamiento anómalo
#else #else
verticalHeader()->setClickable(false); //TODO comportamiento anómalo verticalHeader()->setClickable(false); //TODO comportamiento anómalo
#endif #endif
setCornerButtonEnabled(false); setCornerButtonEnabled(false);
@ -65,6 +67,9 @@ YACReaderTableView::YACReaderTableView(QWidget *parent) :
showDeletingProgressAnimation = new QPropertyAnimation(deletingProgress,"pos"); showDeletingProgressAnimation = new QPropertyAnimation(deletingProgress,"pos");
showDeletingProgressAnimation->setDuration(150);*/ showDeletingProgressAnimation->setDuration(150);*/
//drag
setDragEnabled(true);
} }
void YACReaderTableView::mouseMoveEvent(QMouseEvent *event) void YACReaderTableView::mouseMoveEvent(QMouseEvent *event)
@ -100,25 +105,37 @@ void YACReaderTableView::mouseMoveEvent(QMouseEvent *event)
} }
void YACReaderTableView::mousePressEvent(QMouseEvent * event) void YACReaderTableView::mousePressEvent(QMouseEvent * event)
{ {
QTableView::mousePressEvent(event); QTableView::mousePressEvent(event);
QModelIndex mi = indexAt(event->pos()); QModelIndex mi = indexAt(event->pos());
if(mi.isValid()) if(mi.isValid())
{ {
QList<QModelIndex> selectedIndexes = this->selectedIndexes(); QList<QModelIndex> selectedIndexes = this->selectedIndexes();
if(selectedIndexes.contains(mi)) if(selectedIndexes.contains(mi))
{ {
if(mi.column() == 11) if(mi.column() == 11)
{ {
if(!editing) if(!editing)
{ {
editing = true; editing = true;
currentIndexEditing = mi; currentIndexEditing = mi;
edit(mi); edit(mi);
myeditor = indexWidget(mi); myeditor = indexWidget(mi);
} }
} return;
} }
} }
}
QMimeData *mimeData = new QMimeData;
mimeData->setText("comic"); //TODO set the right mime data
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
drag->setPixmap(QPixmap(":/images/openInYACReader.png")); //TODO add better image
Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction);
} }
void YACReaderTableView::leaveEvent(QEvent * event) void YACReaderTableView::leaveEvent(QEvent * event)
{ {