49 m_parentScreen(parentScreen)
236 LOG(VB_GENERAL, LOG_ERR, QString(
"MusicCommon: Got a bad saved visualizer: %1").arg(
m_currentVisual));
453 if (plview->Create())
471 auto *oldView = qobject_cast<PlaylistEditorView *>(
this);
473 oldView->saveTreePosition();
479 if (pleview->Create())
500 auto *oldView = qobject_cast<PlaylistEditorView *>(
this);
502 oldView->saveTreePosition();
506 auto *pleview =
new PlaylistEditorView(mainStack, parentScreen,
"gallery", restorePos);
508 if (pleview->Create())
526 auto *sview =
new SearchView(mainStack,
this);
560 auto *lview =
new LyricsView(mainStack,
this);
589 bool handled =
false;
606 for (
int i = 0; i < actions.size() && !handled; i++)
608 const QString&
action = actions[i];
635 else if (
action ==
"DOWN")
670 if (exit_action ==
"stop")
676 else if (exit_action ==
"play")
687 else if (
action ==
"THMBUP")
691 else if (
action ==
"THMBDOWN")
695 else if (
action ==
"NEXTTRACK")
702 else if (
action ==
"PREVTRACK")
709 else if (
action ==
"FFWD")
719 else if (
action ==
"RWND")
729 else if (
action ==
"PAUSE")
752 else if (
action ==
"PLAY")
759 else if (
action ==
"STOP")
767 else if (
action ==
"CYCLEVIS")
771 else if (
action ==
"BLANKSCR")
781 else if (
action ==
"VOLUMEDOWN")
785 else if (
action ==
"VOLUMEUP")
789 else if (
action ==
"SPEEDDOWN")
793 else if (
action ==
"SPEEDUP")
797 else if (
action ==
"MUTE")
801 else if (
action ==
"TOGGLEUPMIX")
839 else if (
action ==
"MENU")
843 else if (
action ==
"REFRESH")
848 else if (
action ==
"MARK")
899 else if (
action ==
"TOGGLESHUFFLE")
904 else if (
action ==
"TOGGLEREPEAT")
974 QString status = QString(
"%1%").arg((
int)(100.0 / ((
double)maxSize / (
double)available)));
987 int percentplayed = 1;
1096 lcd->switchToTime();
1168 decoder->
seek(pos.count());
1192 float percent_heard =
m_maxTime <= 0s ? 0.0F : ((float)pos.count() /
1198 if (lcd_time_string.length() > lcd->getLCDWidth())
1199 lcd_time_string.remove(
' ');
1201 lcd->setMusicProgress(lcd_time_string, percent_heard);
1233 QString statusString;
1235 if (event->type() == AudioOutput::Event::kPlaying)
1241 statusString = tr(
"Playing stream.");
1268 else if (event->type() == AudioOutput::Event::kBuffering)
1270 statusString = tr(
"Buffering stream.");
1272 else if (event->type() == AudioOutput::Event::kPaused)
1274 statusString = tr(
"Stream paused.");
1295 else if (event->type() == AudioOutput::Event::kInfo)
1303 std::chrono::seconds rs = 0s;
1327 0.0F:((float)rs.count() / (float)curMeta->
Length().count()) * 1000.0F;
1329 QString lcd_time_string = time_string;
1332 if (time_string.length() > lcd->getLCDWidth())
1333 lcd_time_string.remove(
' ');
1335 lcd->setMusicProgress(lcd_time_string, percent_heard);
1339 QString info_string;
1342 if (oe->bitrate() < 2000)
1344 info_string = QString(
"%1 "+tr(
"kbps")+
" %2 "+ tr(
"kHz")+
" %3 "+ tr(
"ch"))
1346 .arg(
static_cast<double>(oe->frequency()) / 1000.0,0,
'f',1,QChar(
'0'))
1347 .arg(oe->channels() > 1 ?
"2" :
"1");
1351 info_string = QString(
"%1 "+ tr(
"kHz")+
" %2 "+ tr(
"ch"))
1352 .arg(
static_cast<double>(oe->frequency()) / 1000.0,0,
'f',1,QChar(
'0'))
1353 .arg(oe->channels() > 1 ?
"2" :
"1");
1367 else if (event->type() == AudioOutput::Event::kStopped)
1369 statusString = tr(
"Stream stopped.");
1396 if ((dce ==
nullptr) || (dce->GetResult() < 0))
1399 QString resultid = dce->
GetId();
1400 QString resulttext = dce->GetResultText();
1402 if (resultid ==
"mainmenu")
1404 if (resulttext == tr(
"Fullscreen Visualizer"))
1408 else if (resulttext == tr(
"Playlist Editor") ||
1409 resulttext == tr(
"Browse Music Library"))
1416 else if (resulttext == tr(
"Search for Music"))
1420 else if (resulttext == tr(
"Switch To Gallery View"))
1424 else if (resulttext == tr(
"Switch To Tree View"))
1428 else if (resulttext == tr(
"Lyrics"))
1433 else if (resultid ==
"submenu")
1435 if (resulttext == tr(
"Search List..."))
1438 else if (resultid ==
"playlistmenu")
1440 if (resulttext == tr(
"Sync List With Current Track"))
1444 else if (resulttext == tr(
"Remove Selected Track"))
1454 else if (resulttext == tr(
"Remove All Tracks"))
1462 else if (resulttext == tr(
"Save To New Playlist"))
1464 QString message = tr(
"Enter new playlist name");
1470 if (inputdialog->Create())
1472 inputdialog->SetReturnEvent(
this,
"addplaylist");
1480 else if (resulttext == tr(
"Save To Existing Playlist"))
1482 QString message = tr(
"Select the playlist to save to");
1489 if (searchdialog->Create())
1491 searchdialog->SetReturnEvent(
this,
"updateplaylist");
1495 else if (resulttext == tr(
"Switch To Move Mode"))
1503 else if (resulttext == tr(
"Switch To Select Mode"))
1520 else if (resultid ==
"repeatmenu")
1522 int mode = dce->GetData().toInt();
1526 else if (resultid ==
"shufflemenu")
1528 int mode = dce->GetData().toInt();
1532 else if (resultid ==
"exitmenu")
1534 if (resulttext == tr(
"No - Exit, Stop Playing"))
1540 else if (resulttext == tr(
"Yes - Exit, Continue Playing"))
1545 else if (resultid ==
"playermenu")
1547 if (resulttext == tr(
"Change Volume"))
1549 else if (resulttext == tr(
"Mute"))
1551 else if (resulttext == tr(
"Previous Track"))
1553 else if (resulttext == tr(
"Next Track"))
1555 else if (resulttext == tr(
"Jump Back"))
1557 else if (resulttext == tr(
"Jump Forward"))
1559 else if (resulttext == tr(
"Play"))
1561 else if (resulttext == tr(
"Stop"))
1563 else if (resulttext == tr(
"Pause"))
1566 else if (resultid ==
"quickplaylistmenu")
1568 if (resulttext == tr(
"All Tracks"))
1570 else if (resulttext == tr(
"From CD"))
1572 else if (resulttext == tr(
"Tracks By Current Artist"))
1574 else if (resulttext == tr(
"Tracks From Current Genre"))
1576 else if (resulttext == tr(
"Tracks From Current Album"))
1578 else if (resulttext == tr(
"Tracks From Current Year"))
1580 else if (resulttext == tr(
"Tracks With Same Title"))
1583 else if (resultid ==
"playlistoptionsmenu")
1585 if (resulttext == tr(
"Replace Tracks"))
1590 else if (resulttext == tr(
"Add Tracks"))
1595 else if (resulttext == tr(
"Play Now"))
1605 else if (resulttext == tr(
"Prefer Play Now"))
1609 else if (resulttext == tr(
"Prefer Add Tracks"))
1614 else if (resultid ==
"visualizermenu")
1616 if (dce->GetResult() >= 0)
1624 else if (resultid ==
"addplaylist")
1630 else if (resultid ==
"updateplaylist")
1654 if (
m_currentTrack >= 0 && m_currentTrack < m_currentPlaylist->GetCount())
1664 if (trackNo >= 0 && trackNo < m_currentPlaylist->GetCount())
1764 mdata->
toMap(metadataMap);
1767 QVariant::fromValue(mdata));
1769 item->SetTextFromMap(metadataMap);
1774 item->SetFontState(
"running");
1775 item->DisplayState(
"playing",
"playstate");
1779 item->SetFontState(
"normal");
1780 item->DisplayState(
"default",
"playstate");
1823 if (mdata && mdata->ID() == trackID)
1826 mdata->
toMap(metadataMap);
1829 item->
DisplayState(QString(
"%1").arg(mdata->Rating()),
"ratingstate");
1841 if (mdata && mdata->ID() == trackID)
1844 mdata->
toMap(metadataMap);
1872 if (mdata && mdata->ID() == trackID)
1878 if (artFile.isEmpty())
1885 item->
SetImage(mdata->getAlbumArtFile());
1886 item->
SetImage(mdata->getAlbumArtFile(),
"coverart");
1911 if (mdata && mdata->ID() == trackID)
1957 if (!editDialog->Create())
1972 metadata.
toMap(metadataMap);
1973 metadata.
toMap(metadataMap,
"next");
2000 mdata->
toMap(metadataMap);
2005 nextMetadata->
toMap(metadataMap,
"next");
2077 if (mdata && item->
GetText() ==
" ")
2082 if (artFile.isEmpty())
2089 item->
SetImage(mdata->getAlbumArtFile());
2090 item->
SetImage(mdata->getAlbumArtFile(),
"coverart");
2095 mdata->toMap(metadataMap);
2098 item->
DisplayState(QString(
"%1").arg(mdata->Rating()),
"ratingstate");
2125 QVariant::fromValue(mdata));
2127 item->SetText(mdata->
Artist() + mdata->
Album() + mdata->
Title(),
"**search**");
2128 item->SetFontState(
"normal");
2129 item->DisplayState(
"default",
"playstate");
2136 item->SetFontState(
"running");
2137 item->DisplayState(
"playing",
"playstate");
2141 item->SetFontState(
"idle");
2142 item->DisplayState(
"paused",
"playstate");
2146 item->SetFontState(
"normal");
2147 item->DisplayState(
"stopped",
"playstate");
2166 for (
int x = playedList.count(); x > 0; x--)
2170 QVariant::fromValue(mdata));
2173 mdata->
toMap(metadataMap);
2174 item->SetTextFromMap(metadataMap);
2176 item->SetFontState(
"normal");
2177 item->DisplayState(
"default",
"playstate");
2193 QString playlistcurrent = QLocale::system().toString(
m_currentTrack + 1);
2194 QString playlisttotal = QLocale::system().toString(trackCount);
2196 map[
"playlistposition"] = tr(
"%1 of %2").arg(playlistcurrent, playlisttotal);
2197 map[
"playlistcurrent"] = playlistcurrent;
2198 map[
"playlistcount"] = playlisttotal;
2203 if (playlistName ==
"default_playlist_storage")
2204 playlistName = tr(
"Default Playlist");
2205 else if (playlistName ==
"stream_playlist")
2206 playlistName = tr(
"Stream Playlist");
2207 map[
"playlistname"] = playlistName;
2214 map[
"playlistposition"] =
"";
2215 map[
"playlistcurrent"] =
"";
2216 map[
"playlistcount"] =
"";
2217 map[
"playlisttime"] =
"";
2218 map[
"playlistplayedtime"] =
"";
2219 map[
"playlisttotaltime"] =
"";
2220 map[
"playlistname"] =
"";
2221 map[
"playedtime"] =
"";
2222 map[
"totaltime"] =
"";
2223 map[
"trackspeed"] =
"";
2234 if (exTime > -1s && maxTime <= 0s)
2236 (exTime >= 1h) ?
"H:mm:ss" :
"mm:ss");
2238 QString fmt = (maxTime >= 1h) ?
"H:mm:ss" :
"mm:ss";
2242 QString speedstr =
"";
2243 if (lroundf(speed * 100.0F) != 100.0F)
2245 speedstr = QString(
"%1").arg(speed);
2246 out +=
", " + speedstr +
"X";
2270 auto *menuPopup =
new MythDialogBox(mainMenu, popupStack,
"actionmenu");
2272 if (menuPopup->Create())
2280 QString label = tr(
"View Actions");
2286 menu->AddItem(tr(
"Switch To Gallery View"));
2290 menu->AddItem(tr(
"Switch To Tree View"));
2293 QStringList screenList;
2297 screenList.append(screen->objectName());
2298 screen = qobject_cast<MusicCommon*>(screen)->m_parentScreen;
2301 if (!screenList.contains(
"visualizerview"))
2302 menu->AddItem(tr(
"Fullscreen Visualizer"));
2305 menu->AddItem(tr(
"Browse Music Library"));
2308 if (!screenList.contains(
"searchview") && !screenList.contains(
"streamview"))
2309 menu->AddItem(tr(
"Search for Music"));
2311 if (!screenList.contains(
"lyricsview"))
2312 menu->AddItem(tr(
"Lyrics"));
2322 QString label = tr(
"Actions");
2328 menu->AddItem(tr(
"Search List..."));
2350 QString label = tr(
"Playlist Options");
2352 auto *
menu =
new MythMenu(label,
this,
"playlistmenu");
2356 menu->AddItem(tr(
"Sync List With Current Track"));
2357 menu->AddItem(tr(
"Remove Selected Track"));
2360 menu->AddItem(tr(
"Remove All Tracks"));
2364 menu->AddItem(tr(
"Save To New Playlist"));
2365 menu->AddItem(tr(
"Save To Existing Playlist"));
2368 menu->AddItem(tr(
"Switch To Select Mode"));
2370 menu->AddItem(tr(
"Switch To Move Mode"));
2378 QString label = tr(
"Exiting Music Player.\n\n"
2379 "Do you want to continue playing in the background?");
2391 menu->SetReturnEvent(
this,
"exitmenu");
2393 menu->AddButton(tr(
"No - Exit, Stop Playing"));
2394 menu->AddButton(tr(
"Yes - Exit, Continue Playing"));
2395 menu->AddButton(tr(
"Cancel"));
2402 QString label = tr(
"Player Actions");
2406 menu->AddItem(tr(
"Change Volume"));
2407 menu->AddItem(tr(
"Mute"));
2408 menu->AddItem(tr(
"Previous Track"));
2409 menu->AddItem(tr(
"Next Track"));
2413 menu->AddItem(tr(
"Jump Back"));
2414 menu->AddItem(tr(
"Jump Forward"));
2417 menu->AddItem(tr(
"Play"));
2418 menu->AddItem(tr(
"Stop"));
2421 menu->AddItem(tr(
"Pause"));
2428 QString label = tr(
"Set Repeat Mode");
2443 QString label = tr(
"Set Shuffle Mode");
2460 QString label = tr(
"Quick Playlists");
2462 auto *
menu =
new MythMenu(label,
this,
"quickplaylistmenu");
2464 menu->AddItem(tr(
"All Tracks"));
2467 menu->AddItem(tr(
"From CD"));
2471 menu->AddItem(tr(
"Tracks By Current Artist"));
2472 menu->AddItem(tr(
"Tracks From Current Album"));
2473 menu->AddItem(tr(
"Tracks From Current Genre"));
2474 menu->AddItem(tr(
"Tracks From Current Year"));
2475 menu->AddItem(tr(
"Tracks With Same Title"));
2483 QString label = tr(
"Choose Visualizer");
2485 auto *
menu =
new MythMenu(label,
this,
"visualizermenu");
2497 QString label = tr(
"Add to Playlist Options");
2499 auto *
menu =
new MythMenu(label,
this,
"playlistoptionsmenu");
2503 menu->AddItem(tr(
"Play Now"));
2504 menu->AddItem(tr(
"Add Tracks"));
2505 menu->AddItem(tr(
"Replace Tracks"));
2506 menu->AddItem(tr(
"Prefer Add Tracks"));
2510 menu->AddItem(tr(
"Add Tracks"));
2511 menu->AddItem(tr(
"Play Now"));
2512 menu->AddItem(tr(
"Replace Tracks"));
2513 menu->AddItem(tr(
"Prefer Play Now"));
2521 m_whereClause =
"ORDER BY music_artists.artist_name, album_name, disc_number, track";
2550 m_whereClause =
"WHERE music_artists.artist_name = " + value +
2551 " ORDER BY album_name, disc_number, track";
2564 " ORDER BY disc_number, track";
2577 " ORDER BY music_artists.artist_name, album_name, disc_number, track";
2590 " ORDER BY music_artists.artist_name, album_name, disc_number, track";
2603 " ORDER BY music_artists.artist_name, album_name, disc_number, track";
2632 if (menuPopup->Create())
2640 int curTrackID = -1;
2670 if (
nullptr == playlist)
2730 bool foundTrack =
false;
2733 if (
nullptr == playlist)
2809 QStringList actions;
2812 for (
int i = 0; i < actions.size() && !handled; i++)
2814 const QString&
action = actions[i];
2908 QStringList actions;
2911 for (
int i = 0; i < actions.size() && !handled; i++)
2913 const QString&
action = actions[i];
MusicMetadata * getCDMetadata(int m_the_track)
MusicMetadata * getMetadata(int an_id)
int getCDTrackCount(void) const
virtual bool IsPaused(void) const =0
virtual void SetTimecode(std::chrono::milliseconds timecode)=0
virtual bool ToggleUpmix(void)
virtual void unlock(void)
virtual void seek(double)=0
Event dispatched from MythUI modal dialogs to a listening class containing a result of some form.
static const Type kEventType
void switchToMusic(const QString &artist, const QString &album, const QString &track)
bool isRunning(void) const
void prepare(void) override
void setVisual(const QString &name)
QStringList getVisualizations(void)
int getCurrentVisual(void) const
void seek(std::chrono::seconds pos)
MythUIButton * m_nextButton
void updateRepeatMode(void)
void changeVolume(bool up) const
MythMenu * createRepeatMenu(void)
void cycleVisualizer(void)
MythUIButton * m_ffButton
MythMenu * createPlaylistOptionsMenu(void)
std::chrono::seconds m_currentTime
std::chrono::seconds m_maxTime
void playlistItemClicked(MythUIButtonListItem *item)
void init(bool startPlayback=true)
void switchVisualizer(const QString &visual)
static void showSpeed(bool show)
MythUIProgressBar * m_trackProgress
QStringList m_visualModes
static void toggleUpmix(void)
MythUIVideo * m_visualizerVideo
void updateShuffleMode(bool updateUIList=false)
MythUIButton * m_playButton
MythMenu * createMainMenu(void)
MythMenu * createPlaylistMenu(void)
MythUIText * m_trackSpeedText
MythUIStateType * m_shuffleState
void doUpdatePlaylist(void)
MythScreenType * m_parentScreen
static void setTrackOnLCD(MusicMetadata *mdata)
MythMenu * createShuffleMenu(void)
MythMenu * createVisualizerMenu(void)
std::chrono::seconds m_playlistPlayedTime
void changeSpeed(bool up)
void stopVisualizer(void)
~MusicCommon(void) override
PlaylistOptions m_playlistOptions
MythUIButton * m_pauseButton
MythUIButton * m_rewButton
static void showTrackInfo(MusicMetadata *mdata)
static void showVolume(void)
void updateTrackInfo(MusicMetadata *mdata)
MythUIText * m_trackProgressText
MythMenu * createQuickPlaylistsMenu(void)
static void changeRating(bool increase)
void ShowMenu(void) override
MythUIStateType * m_ratingState
void updateUIPlayedList(void)
static void playlistItemVisible(MythUIButtonListItem *item)
static void editTrackInfo(MusicMetadata *mdata)
MythMenu * createSubMenu(void)
std::chrono::seconds m_playlistMaxTime
bool keyPressEvent(QKeyEvent *e) override
Key event handler.
MythUIText * m_visualText
MythUIProgressBar * m_playlistProgress
unsigned int m_currentVisual
bool restorePosition(int trackID)
MythUIButtonList * m_playedTracksList
MainVisual * m_mainvisual
MythUIText * m_volumeText
MythUIText * m_noTracksText
static QString getTimeString(std::chrono::seconds exTime, std::chrono::seconds maxTime)
MythUIStateType * m_repeatState
void showPlaylistOptionsMenu(bool addMainMenu=false)
void searchButtonList(void)
MythUIButton * m_prevButton
MythUIButton * m_stopButton
void updateProgressBar(void)
uint m_playlistTrackCount
void switchView(MusicView view)
MythUIImage * m_coverartImage
MythUIStateType * m_trackState
MusicCommon(MythScreenStack *parent, MythScreenType *parentScreen, const QString &name)
void customEvent(QEvent *event) override
MythUIStateType * m_movingTracksState
MythUIButtonList * m_currentPlaylist
void toggleMute(void) const
static void playFirstTrack()
void updatePlaylistStats(void)
void startVisualizer(void)
MythMenu * createPlayerMenu(void)
void updateUIPlaylist(void)
MythUIStateType * m_muteState
PlaylistContainer * m_all_playlists
static const Type kMetadataChangedEvent
static const Type kTrackStatsChangedEvent
static const Type kTrackUnavailableEvent
static const Type kAlbumArtChangedEvent
static const Type kVolumeChangeEvent
static const Type kAllTracksRemovedEvent
static const Type kTrackAddedEvent
static const Type kTrackChangeEvent
static const Type kTrackRemovedEvent
MusicMetadata * getCurrentMetadata(void)
get the metadata for the current track in the playlist
ShuffleMode toggleShuffleMode(void)
PlayMode getPlayMode(void)
void playlistChanged(int playlistID)
uint getVolume(void) const
void setPlayMode(PlayMode mode)
void removeTrack(int trackID)
void stop(bool stopAll=false)
void activePlaylistChanged(int trackID, bool deleted)
@ PLAYMODE_TRACKSPLAYLIST
void getBufferStatus(int *bufferAvailable, int *bufferSize) const
void setAllowRestorePos(bool allow)
QList< MusicMetadata * > & getPlayedTracksList(void)
void moveTrackUpDown(bool moveUp, int whichTrack)
void restorePosition(void)
void removeListener(QObject *listener)
bool isPlaying(void) const
void removeVisual(MainVisual *visual)
bool setCurrentTrackPos(int pos)
ShuffleMode getShuffleMode(void)
AudioOutput * getOutput(void)
void sendTrackStatsChangedEvent(int trackID)
void addListener(QObject *listener)
RepeatMode getRepeatMode(void)
static bool getPlayNow(void)
void setShuffleMode(ShuffleMode mode)
Playlist * getCurrentPlaylist(void)
static void setPlayNow(bool PlayNow)
whether we prefer Play Now over Add Tracks
void setRepeatMode(RepeatMode mode)
Decoder * getDecoder(void)
MusicMetadata * getNextMetadata(void)
get the metadata for the next track in the playlist
RepeatMode toggleRepeatMode(void)
void changeCurrentTrack(int trackNo)
change the current track to the given track
int getCurrentTrackPos(void) const
void addVisual(MainVisual *visual)
void toMap(InfoMap &infoMap) const
QString GetSetting(const QString &key, const QString &defaultval="")
bool GetBoolSetting(const QString &key, bool defaultval=false)
Basic menu dialog, message and a list of options.
MythScreenStack * GetMainStack()
bool TranslateKeyPress(const QString &Context, QKeyEvent *Event, QStringList &Actions, bool AllowJumps=true)
Get a list of actions for a keypress in the given context.
MythScreenStack * GetStack(const QString &Stackname)
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
Screen in which all other widgets are contained and rendered.
MythUIType * GetFocusWidget(void) const
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Dialog prompting the user to enter a text string.
virtual void SetTextFromMap(const InfoMap &infoMap)
virtual void ResetMap(const InfoMap &infoMap)
Image widget, displays a single image or multiple images in sequence.
bool Load(bool allowLoadInBackground=true, bool forceStat=false)
Load the image(s), wraps ImageLoader::LoadImage()
void SetFilename(const QString &filename)
Must be followed by a call to Load() to load the image.
void Reset(void) override
Reset the image back to the default defined in the theme.
Provide a dialog to quickly find an entry in a list.
This widget is used for grouping other widgets for display when a particular named state is called.
bool DisplayState(const QString &name)
All purpose text widget, displays a text string.
void Reset(void) override
Reset the widget to it's original state, should not reset changes made by the theme.
void SetTextFromMap(const InfoMap &map)
virtual void SetText(const QString &text)
virtual void SetVisible(bool visible)
MythUIType * GetChild(const QString &name) const
Get a named child of this UIType.
Playlist * getPlaylist(int id)
Playlist * getActive(void)
void copyNewPlaylist(const QString &name)
QStringList getPlaylistNames(void)
QString toRawSonglist(bool shuffled=false, bool tracksOnly=false)
void removeAllTracks(void)
int fillSonglistFromQuery(const QString &whereClause, bool removeDuplicates=false, InsertPLOption insertOption=PL_REPLACE, int currentTrackID=0)
void fillSongsFromSonglist(const QString &songList)
void getStats(uint *trackCount, std::chrono::seconds *totalLength, uint currentTrack=0, std::chrono::seconds *playedLength=nullptr) const
MusicMetadata * getSongAt(int pos) const
int fillSonglistFromList(const QList< int > &songList, bool removeDuplicates, InsertPLOption insertOption, int currentTrackID)
MusicMetadata * m_metadata
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
bool Create(void) override
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
static constexpr std::chrono::milliseconds MUSICVOLUMEPOPUPTIME
@ MV_PLAYLISTEDITORGALLERY
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
static void startPlayback(void)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
MythMainWindow * GetMythMainWindow(void)
Convenience inline random number generator functions.
static MythThemedMenu * menu
QHash< QString, QString > InfoMap
QString formatTime(std::chrono::milliseconds msecs, QString fmt)
Format a milliseconds time value.
uint32_t MythRandom()
generate 32 random bits
static eu8 clamp(eu8 value, eu8 low, eu8 high)
static void show(uint8_t *buf, int length)
QString formattedFieldValue(const QVariant &value)
PlayPLOption playPLOption
InsertPLOption insertPLOption
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)