Mixxx

/home/maxime/Projets/Mixxx/1.10/mixxx/src/widget/wpreparecratestableview.cpp

Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines