defuze.me
Client
|
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 }