defuze.me  Client
playliststreeview.cpp
00001 #include "playliststreeview.hpp"
00002 #include "playlists.hpp"
00003 #include "playlistsmodel.hpp"
00004 #include "playlistitem.hpp"
00005 #include <qmenu.h>
00006 #include <QContextMenuEvent>
00007 
00008 using namespace Playlists;
00009 
00010 PlaylistsTreeView::PlaylistsTreeView(QWidget *parent) :
00011     QTreeView(parent)
00012 {
00013     setupUi(this);
00014     setContextMenuPolicy(Qt::DefaultContextMenu);
00015     setDragDropMode(QAbstractItemView::DragDrop);
00016     setHeaderHidden(true);
00017     idToDelete = -1;
00018     trackIndexToDelete = -1;
00019 }
00020 
00021 void PlaylistsTreeView::changeEvent(QEvent *e)
00022 {
00023     QWidget::changeEvent(e);
00024     switch (e->type()) {
00025     case QEvent::LanguageChange:
00026         retranslateUi(this);
00027         break;
00028     default:
00029         break;
00030     }
00031 }
00032 
00033 void            PlaylistsTreeView::deletePlaylist()
00034 {
00035     PlaylistsModel *model = static_cast<PlaylistsModel *>(this->model());
00036     model->getPlaylists()->deletePlaylist(idToDelete);
00037     idToDelete = -1;
00038 }
00039 
00040 void            PlaylistsTreeView::deleteTrack()
00041 {
00042     Playlist *playlist = ((PlaylistsModel *)this->model())->getPlaylists()->getPlaylistById(idToDelete);
00043     playlist->getTrackList()->removeAt(trackIndexToDelete);
00044     playlist->updatePlaylist();
00045     ((PlaylistsModel *)this->model())->update(playlist->getId());
00046     idToDelete = -1;
00047 }
00048 
00049 void PlaylistsTreeView::contextMenuEvent(QContextMenuEvent *event)
00050 {
00051     PlaylistItem *item = static_cast<PlaylistItem *>(((QStandardItemModel *)model())->itemFromIndex(this->indexAt(((QContextMenuEvent *)event)->pos())));
00052     if (item)
00053     {
00054         QMenu* contextMenu = new QMenu ( this );
00055         Q_CHECK_PTR ( contextMenu );
00056         if (item->itemIsPlaylist())
00057         {
00058             idToDelete = item->getIdItem();
00059             contextMenu->addAction ( "Supprimer" , this , SLOT (deletePlaylist()));
00060         }
00061         else
00062         {
00063             idToDelete = ((PlaylistItem*)(item->QStandardItem::parent()))->getIdItem();
00064             trackIndexToDelete = item->row();
00065             contextMenu->addAction ( "Supprimer" , this , SLOT (deleteTrack()));
00066         }
00067         contextMenu->popup( QCursor::pos() );
00068         contextMenu->exec ();
00069         delete contextMenu;
00070         contextMenu = 0;
00071     }
00072 }
00073 
00074 void    PlaylistsTreeView::dragEnterEvent(QDragEnterEvent *event)
00075 {
00076         if (event->mimeData()->hasFormat("application/x-defuzeme-audiotrack"))
00077                 event->accept();
00078         else
00079                 event->ignore();
00080 
00081 }
00082 
00083 void    PlaylistsTreeView::dragMoveEvent(QDragMoveEvent *event)
00084 {
00085         event->accept();
00086 }
00087 
00088 void    PlaylistsTreeView::dropEvent(QDropEvent *event)
00089 {
00090     event->pos();
00091     PlaylistItem *item = static_cast<PlaylistItem *>(((QStandardItemModel *)this->model())->itemFromIndex(this->indexAt(((QContextMenuEvent *)event)->pos())));
00092     qDebug() << item;
00093     if (item)
00094     {
00095         QByteArray  encodedData;
00096             if (event->mimeData()->hasFormat("application/x-defuzeme-audiotrack"))
00097                 encodedData = event->mimeData()->data("application/x-defuzeme-audiotrack");
00098         else
00099                 return;
00100 
00101         QDataStream stream(&encodedData, QIODevice::ReadOnly);
00102         QList<int> ids;
00103 
00104         while (!stream.atEnd())
00105         {
00106                 int id;
00107                 stream >> id;
00108                 ids << id;
00109         }
00110         Playlist *playlist;
00111         if (item->itemIsPlaylist())
00112         {
00113             playlist = ((PlaylistsModel *)this->model())->getPlaylists()->getPlaylistById(item->getIdItem());
00114             foreach (int id, ids)
00115             {
00116                playlist->addTrack(id);
00117             }
00118         }
00119         else
00120         {
00121             playlist = ((PlaylistsModel *)this->model())->getPlaylists()->getPlaylistById(((PlaylistItem*)(item->QStandardItem::parent()))->getIdItem());
00122             foreach (int id, ids)
00123             {
00124                 playlist->addTrack(id, item->row());
00125             }
00126         }
00127         playlist->updatePlaylist();
00128         ((PlaylistsModel *)this->model())->update(playlist->getId());
00129     }
00130 }