![]() |
Mixxx
|
00001 #include <QHeaderView> 00002 #include <QDropEvent> 00003 #include <QDragMoveEvent> 00004 #include <QDragEnterEvent> 00005 #include "library/trackcollection.h" 00006 #include "library/dao/trackdao.h" 00007 #include "library/dao/cratedao.h" 00008 #include "library/preparecratedelegate.h" 00009 #include "wpreparecratestableview.h" 00010 00011 00012 WPrepareCratesTableView::WPrepareCratesTableView(QWidget* parent, TrackCollection* pTrackCollection) : QTableView(parent) 00013 { 00014 m_pTrackCollection = pTrackCollection; 00015 setAcceptDrops(true); 00016 setShowGrid(false); 00017 setSelectionMode(QAbstractItemView::NoSelection); 00018 00019 //Hack the max height into here so it doesn't go giant 00020 setMaximumHeight(51); 00021 00022 horizontalHeader()->hide(); 00023 verticalHeader()->hide(); 00024 00025 setItemDelegate(new PrepareCrateDelegate(this)); 00026 } 00027 00028 WPrepareCratesTableView::~WPrepareCratesTableView() 00029 { 00030 } 00031 00032 00034 void WPrepareCratesTableView::dragEnterEvent(QDragEnterEvent * event) 00035 { 00036 //qDebug() << "dragEnterEvent" << event->mimeData()->formats(); 00037 if (event->mimeData()->hasUrls()) 00038 { 00039 if (event->source() == this) { 00040 event->ignore(); 00041 } else { 00042 event->acceptProposedAction(); 00043 } 00044 } else { 00045 event->ignore(); 00046 } 00047 } 00048 00053 void WPrepareCratesTableView::dragMoveEvent(QDragMoveEvent * event) 00054 { 00055 //qDebug() << "dragMoveEvent" << event->mimeData()->formats(); 00056 if (event->mimeData()->hasUrls()) 00057 { 00058 if (event->source() == this) { 00059 event->ignore(); 00060 } else { 00061 event->acceptProposedAction(); 00062 } 00063 } else { 00064 event->ignore(); 00065 } 00066 } 00067 00069 void WPrepareCratesTableView::dropEvent(QDropEvent * event) 00070 { 00071 if (event->mimeData()->hasUrls()) { 00072 QList<QUrl> urls(event->mimeData()->urls()); 00073 QUrl url; 00074 QModelIndex destIndex; 00075 00076 //Drag and drop within this widget (crate reordering) 00077 if (event->source() == this) 00078 { 00079 event->ignore(); 00080 } 00081 else 00082 { 00083 //Drag-and-drop from an external widget 00084 00085 destIndex = this->indexAt(event->pos()); 00086 foreach (url, urls) 00087 { 00088 QModelIndex destIndex = this->indexAt(event->pos()); 00089 QString crateName = destIndex.data().toString(); 00090 int crateId = m_pTrackCollection->getCrateDAO().getCrateIdByName(crateName); 00091 int trackId = m_pTrackCollection->getTrackDAO().getTrackId(url.toLocalFile()); 00092 if (trackId >= 0) 00093 m_pTrackCollection->getCrateDAO().addTrackToCrate(trackId, crateId); 00094 } 00095 } 00096 00097 event->acceptProposedAction(); 00098 00099 } else { 00100 event->ignore(); 00101 } 00102 }