199
202
//TODO should just update the relevent playlist here
205
else if (event->type() == DialogCompletionEvent::kEventType)
207
DialogCompletionEvent *dce = dynamic_cast<DialogCompletionEvent*>(event);
212
// make sure the user didn't ESCAPE out of the menu
213
if (dce->GetResult() < 0)
216
QString resultid = dce->GetId();
217
QString resulttext = dce->GetResultText();
219
if (resultid == "smartplaylistmenu")
221
if (GetFocusWidget() != m_playlistTree)
224
MythGenericTree *node = m_playlistTree->GetCurrentNode();
228
MusicGenericTree *mnode = dynamic_cast<MusicGenericTree*>(node);
232
if (resulttext == tr("New Smart Playlist"))
235
if (mnode->getAction() == "smartplaylistcategory")
236
category = mnode->getString();
238
MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
239
SmartPlaylistEditor* editor = new SmartPlaylistEditor(mainStack);
241
if (!editor->Create())
247
editor->newSmartPlaylist(category);
249
connect(editor, SIGNAL(smartPLChanged(const QString&, const QString&)),
250
this, SLOT(smartPLChanged(QString, QString)));
252
mainStack->AddScreen(editor);
254
else if (resulttext == tr("Remove Smart Playlist"))
256
QString category = mnode->getParent()->getString();
257
QString name = mnode->getString();
259
ShowOkPopup(QString("Are you sure you want to delete this Smart Playlist?\n"
260
"Category: %1 - Name: %2").arg(category).arg(name),
261
this, SLOT(deleteSmartPlaylist(bool)), true);
263
else if (resulttext == tr("Edit Smart Playlist"))
265
QString category = mnode->getParent()->getString();
266
QString name = mnode->getString();
268
MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
269
SmartPlaylistEditor* editor = new SmartPlaylistEditor(mainStack);
271
if (!editor->Create())
277
editor->editSmartPlaylist(category, name);
279
connect(editor, SIGNAL(smartPLChanged(const QString&, const QString&)),
280
this, SLOT(smartPLChanged(QString, QString)));
282
mainStack->AddScreen(editor);
284
else if (resulttext == tr("Replace Tracks"))
286
m_playlistOptions.insertPLOption = PL_REPLACE;
289
else if (resulttext == tr("Add Tracks"))
291
m_playlistOptions.insertPLOption = PL_INSERTATEND;
295
else if (resultid == "playlistmenu")
297
if (GetFocusWidget() != m_playlistTree)
300
MythGenericTree *node = m_playlistTree->GetCurrentNode();
304
MusicGenericTree *mnode = dynamic_cast<MusicGenericTree*>(node);
308
if (resulttext == tr("Remove Playlist"))
310
QString name = mnode->getString();
312
ShowOkPopup(QString("Are you sure you want to delete this Playlist?\n"
313
"Name: %1").arg(name),
314
this, SLOT(deletePlaylist(bool)), true);
316
else if (resulttext == tr("Replace Tracks"))
318
m_playlistOptions.playPLOption = PL_CURRENT;
319
m_playlistOptions.insertPLOption = PL_REPLACE;
322
else if (resulttext == tr("Add Tracks"))
324
m_playlistOptions.insertPLOption = PL_INSERTATEND;
203
330
MusicCommon::customEvent(event);
468
void PlaylistEditorView::ShowMenu(void)
470
if (GetFocusWidget() == m_playlistTree)
472
m_playlistOptions.playPLOption = PL_CURRENT;
473
m_playlistOptions.insertPLOption = PL_REPLACE;
475
MythMenu *menu = NULL;
476
MusicGenericTree *mnode = dynamic_cast<MusicGenericTree*>(m_playlistTree->GetCurrentNode());
480
MusicCommon::ShowMenu();
484
if (mnode->getAction() == "smartplaylists" ||
485
mnode->getAction() == "smartplaylistcategory" ||
486
mnode->getAction() == "smartplaylist")
488
menu = createSmartPlaylistMenu();
490
else if (mnode->getAction() == "playlists" ||
491
mnode->getAction() == "playlist")
493
menu = createPlaylistMenu();
495
else if (mnode->getAction() == "album" ||
496
mnode->getAction() == "artist" ||
497
mnode->getAction() == "compartist" ||
498
mnode->getAction() == "genre" ||
499
mnode->getAction() == "year" ||
500
mnode->getAction() == "rating")
502
menu = createPlaylistOptionsMenu();
505
MetadataPtrList *tracks = qVariantValue<MetadataPtrList*> (mnode->GetData());
506
for (int x = 0; x < tracks->count(); x++)
508
Metadata *mdata = tracks->at(x);
510
m_songList.append((int)mdata->ID());
516
menu->AddItem(tr("More Options"), NULL, createMainMenu());
518
MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
520
MythDialogBox *menuPopup = new MythDialogBox(menu, popupStack, "actionmenu");
522
if (menuPopup->Create())
523
popupStack->AddScreen(menuPopup);
531
MusicCommon::ShowMenu();
534
MythMenu* PlaylistEditorView::createPlaylistMenu(void)
536
MythMenu *menu = NULL;
538
if (GetFocusWidget() == m_playlistTree)
540
MusicGenericTree *mnode = dynamic_cast<MusicGenericTree*>(m_playlistTree->GetCurrentNode());
545
if (mnode->getAction() == "playlist")
547
menu = new MythMenu(tr("Playlist Actions"), this, "playlistmenu");
548
menu->AddItem(tr("Replace Tracks"));
549
menu->AddItem(tr("Add Tracks"));
550
menu->AddItem(tr("Remove Playlist"));
552
// get list of tracks to add
554
int playlistID = mnode->getInt();
555
Playlist *playlist = gMusicData->all_playlists->getPlaylist(playlistID);
559
SongList songlist = playlist->getSongs();
561
for (int x = 0; x < songlist.count(); x++)
563
m_songList.append(songlist.at(x)->ID());
572
MythMenu* PlaylistEditorView::createSmartPlaylistMenu(void)
574
MythMenu *menu = NULL;
576
if (GetFocusWidget() == m_playlistTree)
578
MusicGenericTree *mnode = dynamic_cast<MusicGenericTree*>(m_playlistTree->GetCurrentNode());
583
if (mnode->getAction() == "smartplaylists" || mnode->getAction() == "smartplaylistcategory")
585
QString label = tr("Smart Playlist Actions");
587
menu = new MythMenu(label, this, "smartplaylistmenu");
589
menu->AddItem(tr("New Smart Playlist"));
591
else if (mnode->getAction() == "smartplaylist")
593
menu = new MythMenu(tr("Smart Playlist Actions"), this, "smartplaylistmenu");
595
menu->AddItem(tr("Replace Tracks"));
596
menu->AddItem(tr("Add Tracks"));
598
menu->AddItem(tr("Edit Smart Playlist"));
599
menu->AddItem(tr("New Smart Playlist"));
600
menu->AddItem(tr("Remove Smart Playlist"));
602
// add the selected smart playlist's tracks to the song list
604
QList<MythGenericTree*> *children = mnode->getAllChildren();
605
for (int x = 0; x < children->count(); x++)
607
MythGenericTree *childnode = children->at(x);
608
m_songList.append(childnode->getInt());
341
616
void PlaylistEditorView::createRootNode(void )
370
645
node = new MusicGenericTree(m_rootNode, tr("Years"), "years");
371
646
node->setDrawArrow(true);
372
647
node->SetData(qVariantFromValue(gMusicData->all_music->getAllMetadata()));
649
node = new MusicGenericTree(m_rootNode, tr("Compilations"), "compilations");
650
node->setDrawArrow(true);
652
MetadataPtrList *alltracks = gMusicData->all_music->getAllMetadata();
653
MetadataPtrList *compTracks = new MetadataPtrList;
654
m_deleteList.append(compTracks);
656
for (int x = 0; x < alltracks->count(); x++)
658
Metadata *mdata = alltracks->at(x);
661
if (mdata->Compilation())
662
compTracks->append(mdata);
665
node->SetData(qVariantFromValue(compTracks));
374
668
node = new MusicGenericTree(m_rootNode, tr("Directory"), "directory");
375
669
node->setDrawArrow(true);
392
686
if (mnode->getAction() == "smartplaylists" ||
393
687
mnode->getAction() == "smartplaylistcategory" ||
394
mnode->getAction() == "playlists")
398
else if (mnode->getAction() == "smartplaylist")
400
// add selected smart playlist's tracks to the current playlist
402
QList<MythGenericTree*> *children = node->getAllChildren();
403
for (int x = 0; x < children->count(); x++)
405
MythGenericTree *childnode = children->at(x);
406
m_songList.append(childnode->getInt());
409
showPlaylistOptionsMenu();
411
else if (mnode->getAction() == "playlist")
413
// add selected playlist's tracks to the current playlist
415
// get list of tracks to add
416
int playlistID = mnode->getInt();
417
Playlist *playlist = gMusicData->all_playlists->getPlaylist(playlistID);
422
SongList songlist = playlist->getSongs();
424
for (int x = 0; x < songlist.count(); x++)
426
m_songList.append(songlist.at(x)->ID());
429
// show the playlist options dialog
430
showPlaylistOptionsMenu();
432
else if (mnode->getAction() == "album" || mnode->getAction() == "artist" ||
433
mnode->getAction() == "genre" || mnode->getAction() == "year" ||
434
mnode->getAction() == "rating")
436
MetadataPtrList *tracks = qVariantValue<MetadataPtrList*> (node->GetData());
437
for (int x = 0; x < tracks->count(); x++)
439
Metadata *mdata = tracks->at(x);
441
m_songList.append((int)mdata->ID());
444
// show the playlist options dialog
445
showPlaylistOptionsMenu();
688
mnode->getAction() == "playlists" ||
689
mnode->getAction() == "smartplaylist" ||
690
mnode->getAction() == "playlist" ||
691
mnode->getAction() == "album" ||
692
mnode->getAction() == "artist" ||
693
mnode->getAction() == "compartist" ||
694
mnode->getAction() == "genre" ||
695
mnode->getAction() == "year" ||
696
mnode->getAction() == "rating")
447
700
else if (mnode->getAction() == "trackid")
910
else if (node->getAction() == "compartists")
912
QMap<QString, MetadataPtrList*> map;
914
for (int x = 0; x < tracks->count(); x++)
916
Metadata *mdata = tracks->at(x);
919
if (mdata->CompilationArtist() != mdata->Artist())
921
if (map.contains(mdata->CompilationArtist()))
923
MetadataPtrList *filteredTracks = map.value(mdata->CompilationArtist());
924
filteredTracks->append(mdata);
928
MetadataPtrList *filteredTracks = new MetadataPtrList;
929
m_deleteList.append(filteredTracks);
930
filteredTracks->append(mdata);
931
map.insert(mdata->CompilationArtist(), filteredTracks);
937
QMap<QString, MetadataPtrList*>::const_iterator i = map.constBegin();
938
while (i != map.constEnd())
940
MusicGenericTree *newnode = new MusicGenericTree(node, i.key(), "compartist");
941
newnode->SetData(qVariantFromValue(i.value()));
651
945
else if (node->getAction() == "albums")
653
947
QMap<QString, MetadataPtrList*> map;
809
1107
newnode->SetData(node->GetData());
1110
if (!fields.contains("compartists"))
1112
// only show the Compilation Artists node if we are one the Compilations branch
1113
bool showCompArtists = false;
1114
MusicGenericTree *mnode = node;
1117
if (mnode->getAction() == "compilations")
1119
showCompArtists = true;
1123
mnode = (MusicGenericTree *) mnode->getParent();
1127
// only show the Comp. Artist if it differs from the Artist
1129
MetadataPtrList *tracks = qVariantValue<MetadataPtrList*> (node->GetData());
1130
for (int x = 0; x < tracks->count(); x++)
1132
Metadata *mdata = tracks->at(x);
1135
if (mdata->Artist() != mdata->CompilationArtist())
1143
if (showCompArtists && found)
1145
newnode = new MusicGenericTree(node, tr("Compilation Artists"), "compartists");
1146
newnode->setDrawArrow(true);
1147
newnode->SetData(node->GetData());
812
1151
if (!fields.contains("genres"))
814
1153
newnode = new MusicGenericTree(node, tr("Genres"), "genres");