Go to the documentation of this file.
28 const QString &name,
const QString &
action,
34 m_showArrow(showArrow)
69 item->setDrawArrow(
true);
72 item->setDrawArrow(
true);
84 #define LOC QString("PlaylistEditorView: ")
85 #define LOC_WARN QString("PlaylistEditorView, Warning: ")
86 #define LOC_ERR QString("PlaylistEditorView, Error: ")
89 const QString &layout,
bool restorePosition)
90 :
MusicCommon(parent, parentScreen,
"playlisteditorview"),
91 m_layout(layout), m_restorePosition(restorePosition)
118 windowName =
"playlisteditorview_gallery";
123 windowName =
"playlisteditorview_tree";
146 LOG(VB_GENERAL, LOG_ERR, QString(
"Cannot load screen '%1'").arg(windowName));
200 auto *me =
dynamic_cast<MythEvent*
>(event);
204 if (me->Message().startsWith(
"MUSIC_RESYNC_FINISHED"))
206 QStringList list = me->
Message().simplified().split(
' ');
207 if (list.size() == 4)
209 int added = list[1].toInt();
210 int removed = list[2].toInt();
211 int changed = list[3].toInt();
214 if (added || removed || changed)
224 if ((dce ==
nullptr) || (dce->GetResult() < 0))
227 QString resultid = dce->
GetId();
228 QString resulttext = dce->GetResultText();
230 if (resultid ==
"smartplaylistmenu")
243 if (resulttext == tr(
"New Smart Playlist"))
246 if (mnode->getAction() ==
"smartplaylistcategory")
252 if (!editor->Create())
258 editor->newSmartPlaylist(category);
265 else if (resulttext == tr(
"Remove Smart Playlist"))
267 QString category = mnode->getParent()->GetText();
268 QString name = mnode->GetText();
270 ShowOkPopup(tr(
"Are you sure you want to delete this Smart Playlist?\n"
271 "Category: %1 - Name: %2").arg(category, name),
274 else if (resulttext == tr(
"Edit Smart Playlist"))
276 QString category = mnode->getParent()->GetText();
277 QString name = mnode->GetText();
282 if (!editor->Create())
288 editor->editSmartPlaylist(category, name);
295 else if (resulttext == tr(
"Replace Tracks"))
300 else if (resulttext == tr(
"Add Tracks"))
305 else if (resulttext == tr(
"Play Now"))
315 else if (resultid ==
"treeplaylistmenu")
328 if (resulttext == tr(
"Remove Playlist"))
330 QString name = mnode->
GetText();
332 ShowOkPopup(tr(
"Are you sure you want to delete this Playlist?\n"
333 "Name: %1").arg(name),
336 else if (resulttext == tr(
"Replace Tracks"))
341 else if (resulttext == tr(
"Add Tracks"))
346 else if (resulttext == tr(
"Play Now"))
376 for (
int i = 0; i < actions.size() && !handled; i++)
378 QString
action = actions[i];
391 if (mnode->getAction() ==
"smartplaylist" &&
action ==
"EDIT")
394 QString name = mnode->GetText();
399 if (!editor->Create())
405 editor->editSmartPlaylist(category, name);
413 else if (mnode->getAction() ==
"smartplaylistcategory" &&
action ==
"EDIT")
415 QString category = mnode->GetText();
420 if (!editor->Create())
426 editor->newSmartPlaylist(category);
435 else if (mnode->getAction() ==
"trackid")
461 if (mnode->getAction() ==
"smartplaylist")
464 QString name = mnode->GetText();
466 ShowOkPopup(tr(
"Are you sure you want to delete this Smart Playlist?\n"
467 "Category: %1 - Name: %2").arg(category, name),
471 else if (mnode->getAction() ==
"playlist")
473 QString name = mnode->GetText();
475 ShowOkPopup(tr(
"Are you sure you want to delete this Playlist?\n"
476 "Name: %1").arg(name),
483 else if (
action ==
"MARK")
540 node->
getAction() ==
"smartplaylistcategory")
547 else if (node->
getAction() ==
"all tracks" ||
559 for (
int x = 0; x < allTracksNode->childCount(); x++)
579 if (allTracksNode->childCount() == 0)
582 for (
int x = 0; x < allTracksNode->childCount(); x++)
590 else if (node->
getAction() ==
"smartplaylist")
594 for (
int x = 0; x < children->count(); x++)
600 else if (node->
getAction() ==
"playlist")
603 int playlistID = node->
getInt();
624 for (
int x = 0; x < tracks->count(); x++)
645 if (mnode->getAction() ==
"smartplaylists" ||
646 mnode->getAction() ==
"smartplaylistcategory" ||
647 mnode->getAction() ==
"smartplaylist")
651 else if (mnode->getAction() ==
"playlists" ||
652 mnode->getAction() ==
"playlist")
657 (mnode->getAction() ==
"error"))
676 if (menuPopup->Create())
699 if (mnode->getAction() ==
"playlist")
701 menu =
new MythMenu(tr(
"Playlist Actions"),
this,
"treeplaylistmenu");
704 menu->AddItem(tr(
"Play Now"));
705 menu->AddItem(tr(
"Add Tracks"));
709 menu->AddItem(tr(
"Add Tracks"));
710 menu->AddItem(tr(
"Play Now"));
712 menu->AddItem(tr(
"Replace Tracks"));
713 menu->AddItem(tr(
"Remove Playlist"));
731 if (mnode->getAction() ==
"smartplaylists" || mnode->getAction() ==
"smartplaylistcategory")
733 QString label = tr(
"Smart Playlist Actions");
737 menu->AddItem(tr(
"New Smart Playlist"));
739 else if (mnode->getAction() ==
"smartplaylist")
741 menu =
new MythMenu(tr(
"Smart Playlist Actions"),
this,
"smartplaylistmenu");
745 menu->AddItem(tr(
"Play Now"));
746 menu->AddItem(tr(
"Add Tracks"));
750 menu->AddItem(tr(
"Add Tracks"));
751 menu->AddItem(tr(
"Play Now"));
753 menu->AddItem(tr(
"Replace Tracks"));
755 menu->AddItem(tr(
"Edit Smart Playlist"));
756 menu->AddItem(tr(
"New Smart Playlist"));
757 menu->AddItem(tr(
"Remove Smart Playlist"));
771 node->setDrawArrow(
true);
775 node->setDrawArrow(
true);
779 node->setDrawArrow(
true);
783 node->setDrawArrow(
true);
787 node->setDrawArrow(
true);
788 node->SetData(QVariant::fromValue(
gMusicData->all_music->getAllMetadata()));
791 node->setDrawArrow(
true);
795 node->setDrawArrow(
true);
799 node->setDrawArrow(
true);
805 for (
int x = 0; x < alltracks->count(); x++)
811 compTracks->append(mdata);
814 node->SetData(QVariant::fromValue(compTracks));
819 node->setDrawArrow(
true);
824 node->setDrawArrow(
true);
828 node->setDrawArrow(
true);
831 node->setDrawArrow(
true);
843 if (mnode->getAction() ==
"trackid")
878 if (item->
GetText(
"*").isEmpty())
884 if (mnode->getAction() ==
"trackid")
890 else if (mnode->getAction() ==
"album")
894 for (
int x = 0; x < tracks->count(); x++)
900 if (!artFile.isEmpty())
905 else if (mnode->getAction() ==
"compartist")
907 artFile =
findIcon(
"artist", mnode->GetText().toLower());
909 else if (mnode->getAction() ==
"all tracks" || mnode->getAction() ==
"genres" ||
910 mnode->getAction() ==
"albums" || mnode->getAction() ==
"artists" ||
911 mnode->getAction() ==
"compartists"|| mnode->getAction() ==
"ratings" ||
912 mnode->getAction() ==
"years" || mnode->getAction() ==
"compilations" ||
913 mnode->getAction() ==
"cd" || mnode->getAction() ==
"directory" ||
914 mnode->getAction() ==
"playlists" || mnode->getAction() ==
"smartplaylists")
916 artFile =
"blank.png";
920 artFile =
findIcon(mnode->getAction(), mnode->GetText().toLower());
923 QString state =
"default";
925 if (mnode->getAction() ==
"all tracks")
927 else if (mnode->getAction() ==
"genres")
929 else if (mnode->getAction() ==
"albums")
931 else if (mnode->getAction() ==
"artists")
933 else if (mnode->getAction() ==
"compartists")
934 state =
"compartists";
935 else if (mnode->getAction() ==
"ratings")
937 else if (mnode->getAction() ==
"years")
939 else if (mnode->getAction() ==
"compilations")
940 state =
"compilations";
941 else if (mnode->getAction() ==
"cd")
943 else if (mnode->getAction() ==
"directory")
945 else if (mnode->getAction() ==
"playlists")
947 else if (mnode->getAction() ==
"smartplaylists")
948 state =
"smartplaylists";
952 if (artFile.isEmpty())
968 route = route.remove(
"Root Music Node -> ");
978 if (mnode->childCount() > 0 || mnode->getAction() ==
"trackid")
981 if (mnode->getAction() ==
"smartplaylists")
985 else if (mnode->getAction() ==
"smartplaylistcategory")
989 else if (mnode->getAction() ==
"smartplaylist")
993 else if (mnode->getAction() ==
"playlists")
997 else if (mnode->getAction() ==
"playlist")
1001 else if (mnode->getAction() ==
"cd")
1018 QMultiMap<QString, int> map;
1019 bool isAlbum =
false;
1023 isAlbum = parentNode->
getAction() ==
"album";
1025 for (
int x = 0; x < tracks->count(); x++)
1030 QString key = mdata->
Title();
1033 if (isAlbum && mdata->
Track() > 0)
1035 key.prepend(QString::number(mdata->
Track()) +
" - ");
1036 if (mdata->
Track() < 10)
1042 key.prepend(QString::number(mdata->
DiscNumber()) +
"/");
1047 map.insert(key, mdata->
ID());
1051 auto i = map.constBegin();
1052 while (i != map.constEnd())
1055 newnode->setInt(i.value());
1056 newnode->setDrawArrow(
false);
1064 else if (node->
getAction() ==
"artists")
1066 QMap<QString, MetadataPtrList*> map;
1068 for (
int x = 0; x < tracks->count(); x++)
1073 if (map.contains(mdata->
Artist()))
1076 filteredTracks->append(mdata);
1082 filteredTracks->append(mdata);
1083 map.insert(mdata->
Artist(), filteredTracks);
1088 QMap<QString, MetadataPtrList*>::const_iterator i = map.constBegin();
1089 while (i != map.constEnd())
1092 newnode->SetData(QVariant::fromValue(i.value()));
1098 else if (node->
getAction() ==
"compartists")
1100 QMap<QString, MetadataPtrList*> map;
1102 for (
int x = 0; x < tracks->count(); x++)
1112 filteredTracks->append(mdata);
1118 filteredTracks->append(mdata);
1125 QMap<QString, MetadataPtrList*>::const_iterator i = map.constBegin();
1126 while (i != map.constEnd())
1129 newnode->SetData(QVariant::fromValue(i.value()));
1137 QMap<QString, MetadataPtrList*> map;
1139 for (
int x = 0; x < tracks->count(); x++)
1144 if (map.contains(mdata->
Album()))
1147 filteredTracks->append(mdata);
1153 filteredTracks->append(mdata);
1154 map.insert(mdata->
Album(), filteredTracks);
1159 QMap<QString, MetadataPtrList*>::const_iterator i = map.constBegin();
1160 while (i != map.constEnd())
1163 newnode->SetData(QVariant::fromValue(i.value()));
1171 QMap<QString, MetadataPtrList*> map;
1173 for (
int x = 0; x < tracks->count(); x++)
1178 if (map.contains(mdata->
Genre()))
1181 filteredTracks->append(mdata);
1187 filteredTracks->append(mdata);
1188 map.insert(mdata->
Genre(), filteredTracks);
1193 QMap<QString, MetadataPtrList*>::const_iterator i = map.constBegin();
1194 while (i != map.constEnd())
1197 newnode->SetSortText(i.key());
1198 newnode->SetData(QVariant::fromValue(i.value()));
1204 else if (node->
getAction() ==
"ratings")
1206 QMap<QString, MetadataPtrList*> map;
1208 for (
int x = 0; x < tracks->count(); x++)
1213 QString ratingStr = tr(
"%n Star(s)",
"", mdata->
Rating());
1214 if (map.contains(ratingStr))
1217 filteredTracks->append(mdata);
1223 filteredTracks->append(mdata);
1224 map.insert(ratingStr, filteredTracks);
1229 QMap<QString, MetadataPtrList*>::const_iterator i = map.constBegin();
1230 while (i != map.constEnd())
1233 newnode->SetData(QVariant::fromValue(i.value()));
1239 QMap<QString, MetadataPtrList*> map;
1241 for (
int x = 0; x < tracks->count(); x++)
1246 QString yearStr = QString(
"%1").arg(mdata->
Year());
1247 if (map.contains(yearStr))
1250 filteredTracks->append(mdata);
1256 filteredTracks->append(mdata);
1257 map.insert(yearStr, filteredTracks);
1262 QMap<QString, MetadataPtrList*>::const_iterator i = map.constBegin();
1263 while (i != map.constEnd())
1266 newnode->SetData(QVariant::fromValue(i.value()));
1270 else if (node->
getAction() ==
"directory")
1272 QMap<QString, MetadataPtrList*> map;
1279 dir = climber->
GetText() +
'/' + dir;
1284 QString top2 =
"Root Music Node/" + tr(
"Directory") +
'/';
1285 if (dir.startsWith(top2))
1286 dir = dir.mid(top2.length());
1288 for (
int x = 0; x < tracks->count(); x++)
1298 QStringList dirs =
filename.split(
"/");
1300 QString key = dirs.count() > 1 ? dirs[0] :
"[TRACK]" + dirs[0];
1301 if (map.contains(key))
1304 filteredTracks->append(mdata);
1310 filteredTracks->append(mdata);
1311 map.insert(key, filteredTracks);
1317 QMap<QString, MetadataPtrList*>::const_iterator i = map.constBegin();
1318 while (i != map.constEnd())
1320 if (!i.key().startsWith(
"[TRACK]"))
1323 newnode->SetData(QVariant::fromValue(i.value()));
1329 i = map.constBegin();
1330 while (i != map.constEnd())
1332 if (i.key().startsWith(
"[TRACK]"))
1335 newnode->setInt(i.value()->at(0)->ID());
1336 newnode->setDrawArrow(
false);
1357 auto *newnode =
new MusicGenericTree(node, tr(
"All Tracks"),
"all tracks");
1358 newnode->setDrawArrow(
true);
1359 newnode->SetData(node->
GetData());
1361 if (!fields.contains(
"albums"))
1364 newnode->setDrawArrow(
true);
1365 newnode->SetData(node->
GetData());
1368 if (!fields.contains(
"artists"))
1371 newnode->setDrawArrow(
true);
1372 newnode->SetData(node->
GetData());
1375 if (!fields.contains(
"compartists"))
1378 bool showCompArtists =
false;
1382 if (mnode->
getAction() ==
"compilations")
1384 showCompArtists =
true;
1395 for (
int x = 0; x < tracks2->count(); x++)
1408 if (showCompArtists && found)
1410 newnode =
new MusicGenericTree(node, tr(
"Compilation Artists"),
"compartists");
1411 newnode->setDrawArrow(
true);
1412 newnode->SetData(node->
GetData());
1416 if (!fields.contains(
"genres"))
1419 newnode->setDrawArrow(
true);
1420 newnode->SetData(node->
GetData());
1423 if (!fields.contains(
"tags"))
1426 newnode->setDrawArrow(
true);
1427 newnode->SetData(node->
GetData());
1430 if (!fields.contains(
"ratings"))
1433 newnode->setDrawArrow(
true);
1434 newnode->SetData(node->
GetData());
1437 if (!fields.contains(
"years"))
1440 newnode->setDrawArrow(
true);
1441 newnode->SetData(node->
GetData());
1450 if (query.
exec(
"SELECT categoryid, name FROM music_smartplaylist_categories ORDER BY name;"))
1455 while (query.
next())
1461 newnode->setInt(query.
value(0).toInt());
1473 int categoryid = node->
getInt();
1476 query.
prepare(
"SELECT smartplaylistid, name FROM music_smartplaylists WHERE categoryid = :CATEGORYID "
1478 query.
bindValue(
":CATEGORYID", categoryid);
1484 while (query.
next())
1490 newnode->setInt(query.
value(0).toInt());
1507 query.
prepare(
"SELECT smartplaylistid, matchtype, orderby, limitto "
1508 "FROM music_smartplaylists "
1509 "WHERE smartplaylistid = :SMARTPLAYLISTID;");
1510 query.
bindValue(
":SMARTPLAYLISTID", playlistID);
1517 matchType = (query.
value(1).toString() ==
"All") ?
" AND " :
" OR ";
1518 orderBy = query.
value(2).toString();
1519 limitTo = query.
value(3).toInt();
1523 LOG(VB_GENERAL, LOG_WARNING,
1524 LOC + QString(
"Cannot find smartplaylist: %1").arg(playlistID));
1535 QString whereClause =
"WHERE ";
1537 query.
prepare(
"SELECT field, operator, value1, value2 "
1538 "FROM music_smartplaylist_items "
1539 "WHERE smartplaylistid = :ID;");
1544 while (query.
next())
1546 QString fieldName = query.
value(0).toString();
1547 QString operatorName = query.
value(1).toString();
1548 QString value1 = query.
value(2).toString();
1549 QString value2 = query.
value(3).toString();
1553 operatorName, value1, value2);
1569 whereClause +=
" LIMIT " + QString::number(limitTo);
1575 theQuery =
"SELECT song_id, name FROM music_songs "
1576 "LEFT JOIN music_directories ON"
1577 " music_songs.directory_id=music_directories.directory_id "
1578 "LEFT JOIN music_artists ON"
1579 " music_songs.artist_id=music_artists.artist_id "
1580 "LEFT JOIN music_albums ON"
1581 " music_songs.album_id=music_albums.album_id "
1582 "LEFT JOIN music_genres ON"
1583 " music_songs.genre_id=music_genres.genre_id "
1584 "LEFT JOIN music_artists AS music_comp_artists ON "
1585 "music_albums.artist_id=music_comp_artists.artist_id ";
1586 if (whereClause.length() > 0)
1587 theQuery += whereClause;
1589 if (!query.
exec(theQuery))
1595 while (query.
next())
1599 newnode->setInt(query.
value(0).toInt());
1600 newnode->setDrawArrow(
false);
1610 newnode->setDrawArrow(
false);
1619 for (
int x =0; x < playlists->count(); x++)
1621 Playlist *playlist = playlists->at(x);
1626 newnode->setInt(playlist->
getID());
1634 for (
int x = 0; x < tracks->count(); x++)
1637 QString title = QString(
"%1 - %2").arg(mdata->
Track()).arg(mdata->
FormatTitle());
1639 newnode->setInt(mdata->
ID());
1640 newnode->setDrawArrow(
false);
1658 newnode->setInt(mdata->
ID());
1659 newnode->setDrawArrow(
false);
1671 newnode->setDrawArrow(
false);
1687 if (mnode->getAction() ==
"trackid")
1694 if (mnode->childCount())
1720 if (route.count() < 2)
1725 for (
int x = 1 ; x < route.count(); x++)
1753 route <<
"Root Music Node" << tr(
"Smart Playlists") << category << name;
1768 if (mnode->getAction() ==
"smartplaylist")
1771 QString name = mnode->GetText();
1791 if (mnode->getAction() ==
"playlist")
1793 int id = mnode->
getInt();
bool isActive(void) const
void setDrawArrow(bool flag)
void setCheck(MythUIButtonListItem::CheckState state)
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
QSqlQuery wrapper that fetches a DB connection from the connection pool.
MythScreenStack * GetMainStack()
static void editTrackInfo(MusicMetadata *mdata)
void updateSonglist(MusicGenericTree *node)
QString findIcon(const QString &type, const QString &name, bool ignoreCache)
find an image for a artist or genre
MusicGenericTree(MusicGenericTree *parent, const QString &name, const QString &action="", MythUIButtonListItem::CheckState check=MythUIButtonListItem::CantCheck, bool showArrow=true)
static void getSmartPlaylistCategories(MusicGenericTree *node)
MusicMetadata * getSongAt(int pos) const
bool setCurrentTrackPos(int pos)
static const Type kMythEventMessage
static bool deleteSmartPlaylist(const QString &category, const QString &name)
QString GetText(const QString &name="") const
QString getOrderBySQL(const QString &orderByFields)
void treeItemClicked(MythUIButtonListItem *item)
MetadataPtrList * getAllCDMetadata(void)
MythMenu * createPlaylistOptionsMenu(void)
bool keyPressEvent(QKeyEvent *e) override
Key event handler.
QPointer< MusicButtonItem > m_buttonItem
PlaylistEditorView(MythScreenStack *parent, MythScreenType *parentScreen, const QString &layout, bool restorePosition=false)
uint visibleChildCount() const
InsertPLOption insertPLOption
This class is used as a container for messages.
static bool getPlayNow(void)
QVariant value(int i) const
QVariant GetData(void) const
void setShuffleMode(ShuffleMode mode)
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
void doUpdatePlaylist(void)
bool Create(void) override
MythGenericTree * getChildByName(const QString &a_name) const
static void getSmartPlaylistTracks(MusicGenericTree *node, int playlistID)
void deletePlaylist(int kill_me)
static void showTrackInfo(MusicMetadata *mdata)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Screen in which all other widgets are contained and rendered.
static const Type kMetadataChangedEvent
Playlist * getCurrentPlaylist(void)
static void getPlaylists(MusicGenericTree *node)
void removeListener(QObject *listener)
void prepare(void) override
const QString & Message() const
static const Type kAllTracksRemovedEvent
void updateSelectedTracks(void)
MythUIType * GetFocusWidget(void) const
MetadataPtrList * getAllMetadata(void)
void smartPLChanged(const QString &category, const QString &name)
QString getCriteriaSQL(const QString &fieldName, const QString &operatorName, QString value1, QString value2)
PlaylistOptions m_playlistOptions
QList< MetadataPtrList * > m_deleteList
void ShowMenu(void) override
MythGenericTree * getChildAt(uint reference) const
MythGenericTree * addNode(const QString &a_string, int an_int=0, bool selectable_flag=false, bool visible=true)
void addListener(QObject *listener)
Add a listener to the observable.
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
MythUIButtonListItem * CreateListButton(MythUIButtonList *list) override
bool TranslateKeyPress(const QString &Context, QKeyEvent *Event, QStringList &Actions, bool AllowJumps=true)
Get a list of actions for a keypress in the given context.
void deletePlaylist(bool ok)
bool first(void)
Wrap QSqlQuery::first() so we can display the query results.
QStringList getRouteByString(void)
Basic menu dialog, message and a list of options.
static MythThemedMenu * menu
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
QString getAction(void) const
static void DBError(const QString &where, const MSqlQuery &query)
void BuildFocusList(void)
QString getCDTitle(void) const
int childCount(void) const
Playlist * getPlaylist(int id)
@ MV_PLAYLISTEDITORGALLERY
void stopVisualizer(void)
int getCDTrackCount(void) const
MainVisual * m_mainvisual
void setSelectable(bool flag)
void deleteSmartPlaylist(bool ok)
bool checkTrack(MusicMetadata::IdType trackID) const
MusicMetadata * getMetadata(int an_id)
void removeTrack(int trackID)
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
PlaylistContainer * m_all_playlists
~PlaylistEditorView(void) override
QList< MythGenericTree * > * getAllChildren() const
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
int siblingCount(void) const
static void treeItemVisible(MythUIButtonListItem *item)
static const Type kCDChangedEvent
MythMenu * createMainMenu(void)
static void getCDTracks(MusicGenericTree *node)
void restoreTreePosition(const QStringList &route)
void updateShuffleMode(bool updateUIList=false)
void setRepeatMode(RepeatMode mode)
void customEvent(QEvent *event) override
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
MythGenericTree * getParent(void) const
void addTrack(int trackID, bool updateUI)
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
Event dispatched from MythUI modal dialogs to a listening class containing a result of some form.
virtual void SetText(const QString &text)
static const Type kEventType
MythMenu * createPlaylistMenu(void)
MythMainWindow * GetMythMainWindow(void)
MythUIText * m_positionText
void createRootNode(void)
void saveTreePosition(void)
static const Type kTrackRemovedEvent
PlayPLOption playPLOption
MythScreenStack * GetStack(const QString &Stackname)
static const Type kTrackAddedEvent
static void getPlaylistTracks(MusicGenericTree *node, int playlistID)
static void getSmartPlaylists(MusicGenericTree *node)
void updateUIPlaylist(void)
MythMenu * createSmartPlaylistMenu(void)
void smartPLChanged(const QString &category, const QString &name)
void treeNodeChanged(MythGenericTree *node)
void SaveSetting(const QString &key, int newValue)
QList< Playlist * > * getPlaylists(void)
MythUIButtonTree * m_playlistTree
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
MusicGenericTree * m_rootNode
MythConfirmationDialog * ShowOkPopup(const QString &message, bool showCancel)
Non-blocking version of MythPopupBox::showOkPopup()
MythUIButtonListItem::CheckState m_check
void customEvent(QEvent *event) override
static const Type kPlaylistChangedEvent
void removeListener(QObject *listener)
Remove a listener to the observable.
void filterTracks(MusicGenericTree *node)
void ShowMenu(void) override
QString GetSetting(const QString &key, const QString &defaultval="")
static const Type kAlbumArtChangedEvent
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
MythUIText * m_breadcrumbsText