MythTV  master
lyricsview.cpp
Go to the documentation of this file.
1 // C++
2 #include <cstdlib>
3 #include <iostream>
4 #include <unistd.h>
5 
6 // qt
7 #include <QDomDocument>
8 #include <QKeyEvent>
9 #include <QThread>
10 
11 // MythTV
14 #include <libmythbase/mythdbcon.h>
15 #include <libmythbase/mythdirs.h>
18 #include <libmythbase/mythversion.h>
21 #include <libmythui/mythuibutton.h>
24 #include <libmythui/mythuihelper.h>
27 #include <libmythui/mythuitext.h>
29 #include <libmythui/mythuiutils.h>
30 
31 // mythmusic
32 #include "lyricsview.h"
33 #include "musiccommon.h"
34 #include "musicplayer.h"
35 
37 // LyricsView
38 
40  : MusicCommon(parent, parentScreen, "lyricsview")
41 {
43 
45 }
46 
48 {
49  if (m_lyricData)
50  {
51  m_lyricData->disconnect();
52  m_lyricData = nullptr;
53  }
54 
56 }
57 
59 {
60  QString windowName = gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_RADIO ? "streamlyricsview" : "trackslyricsview";
61 
62  // Load the theme for this screen
63  bool err = LoadWindowFromXML("music-ui.xml", windowName, this);
64 
65  if (!err)
66  return false;
67 
68  // find common widgets available on any view
69  err = CreateCommon();
70 
71  // find widgets specific to this view
72  UIUtilE::Assign(this, m_lyricsList, "lyrics_list", &err);
73  UIUtilW::Assign(this, m_statusText, "status_text");
74  UIUtilW::Assign(this, m_loadingState, "loading_state");
75 
76  // for streams
77  UIUtilW::Assign(this, m_bufferStatus, "bufferstatus", &err);
78  UIUtilW::Assign(this, m_bufferProgress, "bufferprogress", &err);
79 
80  if (err)
81  {
82  LOG(VB_GENERAL, LOG_ERR, QString("Cannot load screen '%1'").arg(windowName));
83  return false;
84  }
85 
87 
89 
90  findLyrics();
91 
92  return true;
93 }
94 
95 void LyricsView::customEvent(QEvent *event)
96 {
97  bool handled = false;
98 
99  if ((event->type() == MusicPlayerEvent::kTrackChangeEvent) ||
101  {
102  findLyrics();
103  }
104  else if (event->type() == OutputEvent::kInfo)
105  {
106  if (m_autoScroll)
107  {
108  auto *oe = dynamic_cast<OutputEvent *>(event);
110 
111  if (!oe || !curMeta)
112  return;
113 
114  std::chrono::milliseconds rs = 0ms;
115 
117  {
119  }
120  else
121  {
122  rs = oe->elapsedSeconds();
123  }
124 
125  int pos = 0;
126  for (int x = 0; x < m_lyricsList->GetCount(); x++)
127  {
129  auto *lyric = item->GetData().value<LyricsLine*>();
130  if (lyric)
131  {
132  if (lyric->m_time > 1s && rs >= lyric->m_time)
133  pos = x;
134  }
135  }
136 
138  }
139  }
140  else if (event->type() == DialogCompletionEvent::kEventType)
141  {
142  auto *dce = dynamic_cast<DialogCompletionEvent*>(event);
143 
144  // make sure the user didn't ESCAPE out of the menu
145  if ((dce == nullptr) || (dce->GetResult() < 0))
146  return;
147 
148  QString resultid = dce->GetId();
149  QString resulttext = dce->GetResultText();
150  if (resultid == "actionmenu")
151  {
152  if (resulttext == tr("Save Lyrics"))
153  {
154  saveLyrics();
155  }
156  else if ((resulttext == tr("Edit Lyrics")) ||
157  (resulttext == tr("Add Lyrics")))
158  {
159  editLyrics();
160  }
161  else if (resulttext == tr("Auto Scroll Lyrics"))
162  {
163  m_autoScroll = true;
164  }
165 
166  handled = true;
167  }
168  else if (resultid == "findlyricsmenu")
169  {
170  if (dce->GetResult() >= 0)
171  {
172  QString grabber = dce->GetData().toString();
173  m_lyricData->clear();
174  findLyrics(grabber);
175  }
176 
177  handled = true;
178  }
179  }
180  else if (event->type() == DecoderHandlerEvent::kOperationStart)
181  {
182  auto *dhe = dynamic_cast<DecoderHandlerEvent*>(event);
183  if (!dhe)
184  return;
185  if (dhe->getMessage() && m_bufferStatus)
186  {
187  m_bufferStatus->SetText(*dhe->getMessage());
188  }
189  }
190  else if (event->type() == DecoderHandlerEvent::kBufferStatus)
191  {
192  auto *dhe = dynamic_cast<DecoderHandlerEvent*>(event);
193  if (!dhe)
194  return;
195 
196  int available = 0;
197  int maxSize = 0;
198  dhe->getBufferStatus(&available, &maxSize);
199 
200  if (m_bufferStatus)
201  {
202  QString status = QString("%1%").arg((int)(100.0 / ((double)maxSize / (double)available)));
203  m_bufferStatus->SetText(status);
204  }
205 
206  if (m_bufferProgress)
207  {
208  m_bufferProgress->SetTotal(maxSize);
209  m_bufferProgress->SetUsed(available);
210  }
211  }
212  else if (event->type() == DecoderHandlerEvent::kOperationStop)
213  {
214  if (m_bufferStatus)
216  }
217 
218  if (!handled)
220 }
221 
223 {
224  QString label = tr("Actions");
225 
226  auto *menu = new MythMenu(label, this, "actionmenu");
227 
228  if (m_lyricData)
229  {
230  menu->AddItem(tr("Find Lyrics"), nullptr, createFindLyricsMenu());
231 
233  {
234  if (!m_lyricData->lyrics()->isEmpty())
235  menu->AddItem(tr("Edit Lyrics"), nullptr, nullptr);
236  else
237  menu->AddItem(tr("Add Lyrics"), nullptr, nullptr);
238 
239  if (!m_lyricData->lyrics()->isEmpty() && m_lyricData->changed())
240  menu->AddItem(tr("Save Lyrics"), nullptr, nullptr);
241  }
242 
243  if (!m_autoScroll)
244  menu->AddItem(tr("Auto Scroll Lyrics"), nullptr, nullptr);
245  }
246 
247  menu->AddItem(tr("Other Options"), nullptr, createMainMenu());
248 
249  MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
250 
251  auto *menuPopup = new MythDialogBox(menu, popupStack, "actionmenu");
252 
253  if (menuPopup->Create())
254  popupStack->AddScreen(menuPopup);
255  else
256  delete menuPopup;
257 }
258 
260 {
261  QString label = tr("Find Lyrics");
262 
263  auto *menu = new MythMenu(label, this, "findlyricsmenu");
264  menu->AddItemV(tr("Search All Grabbers"), QVariant::fromValue(QString("ALL")));
265 
266  QStringList strList("MUSIC_LYRICS_GETGRABBERS");
267  if (gCoreContext->SendReceiveStringList(strList))
268  {
269  for (int x = 1; x < strList.count(); x++)
270  menu->AddItemV(tr("Search %1").arg(strList.at(x)), QVariant::fromValue(strList.at(x)));
271  }
272 
273  return menu;
274 }
275 
276 bool LyricsView::keyPressEvent(QKeyEvent *event)
277 {
278  bool handled = false;
279  QStringList actions;
280 
281  if (GetFocusWidget() && GetFocusWidget()->keyPressEvent(event))
282  {
283  // if the lyrics list widget has focus and the UP/DOWN or PAGEUP/PAGEDOWN keys
284  // are pressed turn off auto scroll
285  if (GetFocusWidget() == m_lyricsList)
286  {
287  GetMythMainWindow()->TranslateKeyPress("Global", event, actions);
288  if (actions.contains("UP") || actions.contains("DOWN") ||
289  actions.contains("PAGEUP") || actions.contains("PAGEDOWN"))
290  m_autoScroll = false;
291  }
292 
293  return true;
294  }
295 
296  handled = GetMythMainWindow()->TranslateKeyPress("Music", event, actions);
297 
298  for (int i = 0; i < actions.size() && !handled; i++)
299  {
300  const QString& action = actions[i];
301  handled = true;
302 
303  if (action == "EDIT")
304  {
305  if (GetFocusWidget() == m_lyricsList)
306  {
308  editLyrics();
309  }
310  else
311  {
312  // pass the EDIT action on for normal tracks if not on the lyrics list
314  handled = false;
315  }
316  }
317  else if (GetFocusWidget() == m_lyricsList && (action == "MARK" || action == "SELECT"))
318  {
319  setLyricTime();
320  }
321  else
322  {
323  handled = false;
324  }
325  }
326 
327  if (!handled && MusicCommon::keyPressEvent(event))
328  handled = true;
329 
330  return handled;
331 }
332 
334 {
335  // change the time of the next lyric to the playback time
337  {
339 
341  if (item)
342  {
343  auto *lyric = item->GetData().value<LyricsLine*>();
344  if (lyric)
345  {
346  lyric->m_time = gPlayer->getOutput()->GetAudiotime() - 750ms;
347  m_lyricData->setChanged(true);
349  m_autoScroll = false;
350  }
351  }
352  }
353 }
354 
355 void LyricsView::findLyrics(const QString &grabber)
356 {
357  if (m_lyricData)
358  {
359  if (m_lyricData->changed())
360  m_lyricData->save();
361 
362  m_lyricData->disconnect();
363  m_lyricData = nullptr;
364  }
365 
366  MusicMetadata *mdata = nullptr;
367 
369  {
370  if (!gPlayer->getPlayedTracksList().isEmpty())
371  mdata = gPlayer->getPlayedTracksList().last();
372  }
373  else
374  {
375  mdata = gPlayer->getCurrentMetadata();
376  }
377 
378  if (!mdata)
379  return;
380 
381  m_lyricsList->Reset();
382 
383  if (m_loadingState)
385 
386  m_lyricData = mdata->getLyricsData();
387 
390 
391  m_lyricData->findLyrics(grabber);
392 }
393 
394 void LyricsView::lyricStatusChanged(LyricsData::Status status, const QString &message)
395 {
396  switch (status)
397  {
399  {
400  showMessage(message);
401  break;
402  }
403 
405  {
406  if (m_loadingState)
408 
409  showMessage(message);
410  break;
411  }
412 
414  {
415  showLyrics();
416  break;
417  }
418 
419  default:
420  if (m_loadingState)
422 
423  showMessage("");
424  break;
425  }
426 }
427 
428 void LyricsView::showMessage(const QString &message)
429 {
430  if (m_statusText)
431  {
432  if (message.isEmpty())
433  {
434  m_statusText->Reset();
435  m_statusText->Hide();
436  }
437  else
438  {
439  m_statusText->SetText(message);
440  m_statusText->Show();
441  }
442  }
443 }
444 
446 {
447  if (m_loadingState)
449 
450  showMessage("");
451 
452  m_lyricsList->Reset();
453 
454  QString syncronized = m_lyricData->syncronized() ? tr("Syncronized") : tr("Unsyncronized");
455  new MythUIButtonListItem(m_lyricsList, tr("** Lyrics from %1 (%2) **")
456  .arg(m_lyricData->grabber(), syncronized));
457 
458  for (auto * line : std::as_const(*m_lyricData->lyrics()))
459  {
460  if (line)
461  new MythUIButtonListItem(m_lyricsList, line->m_lyric, QVariant::fromValue(line));
462  }
463 
464  m_autoScroll = true;
465 }
466 
468 {
469  if (m_lyricData)
470  m_lyricData->save();
471 }
472 
474 {
476 
477  auto *editDialog = new EditLyricsDialog(mainStack, m_lyricData);
478 
479  if (!editDialog->Create())
480  {
481  delete editDialog;
482  return;
483  }
484  connect(editDialog, &EditLyricsDialog::haveResult, this, &LyricsView::editFinished);
485  mainStack->AddScreen(editDialog);
486 }
487 
488 void LyricsView::editFinished(bool result)
489 {
490  if (result)
491  showLyrics();
492 }
493 
495 // EditLyricsDialog
496 
498  MythScreenStack *parent, LyricsData *sourceData) :
499  MythScreenType(parent, "EditLyricsDialog"),
500  m_sourceData(sourceData)
501 {
502 }
503 
505 {
506  // Load the theme for this screen
507  bool foundtheme = LoadWindowFromXML("music-ui.xml", "editlyrics", this);
508  if (!foundtheme)
509  return false;
510 
511  bool err = false;
512  UIUtilE::Assign(this, m_grabberEdit, "grabberedit", &err);
513  UIUtilE::Assign(this, m_syncronizedCheck, "syncronizedcheck", &err);
514  UIUtilE::Assign(this, m_titleEdit, "titleedit", &err);
515  UIUtilE::Assign(this, m_artistEdit, "artistedit", &err);
516  UIUtilE::Assign(this, m_albumEdit, "albumedit", &err);
517  UIUtilE::Assign(this, m_lyricsEdit, "lyricsedit", &err);
518  UIUtilE::Assign(this, m_okButton, "okbutton", &err);
519  UIUtilE::Assign(this, m_cancelButton, "cancelbutton", &err);
520 
521  if (err)
522  {
523  LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'editlyrics'");
524  return false;
525  }
526 
530 
536 
537  loadLyrics();
538 
539  BuildFocusList();
540 
541  return true;
542 }
543 
544 bool EditLyricsDialog::keyPressEvent(QKeyEvent *event)
545 {
546  bool handled = false;
547  QStringList actions;
548 
549  if (GetFocusWidget()->keyPressEvent(event))
550  return true;
551 
552  handled = GetMythMainWindow()->TranslateKeyPress("Music", event, actions);
553 
554  for (int i = 0; i < actions.size() && !handled; i++)
555  {
556  const QString& action = actions[i];
557 
558  if (action == "ESCAPE" && somethingChanged())
559  {
560  cancelPressed();
561  return true;
562  }
563  }
564 
565  return MythScreenType::keyPressEvent(event);
566 }
567 
569 {
570  QString lyrics;
571  LyricsLineMap::iterator i = m_sourceData->lyrics()->begin();
572  while (i != m_sourceData->lyrics()->end())
573  {
574  LyricsLine *line = (*i);
575  ++i;
576 
578 
579  if (i != m_sourceData->lyrics()->end())
580  lyrics += '\n';
581  }
582 
583  m_lyricsEdit->SetText(lyrics);
584 }
585 
586 void EditLyricsDialog::syncronizedChanged([[maybe_unused]] bool syncronized)
587 {
588  loadLyrics();
589 }
590 
592 {
593  bool changed = false;
594 
595  changed |= m_sourceData->artist() != m_artistEdit->GetText();
596  changed |= m_sourceData->album() != m_albumEdit->GetText();
597  changed |= m_sourceData->title() != m_titleEdit->GetText();
598  changed |= m_sourceData->grabber() != m_grabberEdit->GetText();
600 
601  QStringList lines = m_lyricsEdit->GetText().split('\n');
602 
603  if (lines.count() != m_sourceData->lyrics()->count())
604  return true;
605 
606  int x = 0;
607  for (auto * line : std::as_const(*m_sourceData->lyrics()))
608  {
609  if (line->toString(m_sourceData->syncronized()) != lines.at(x))
610  changed = true;
611  ++x;
612  }
613 
614  return changed;
615 }
616 
618 {
619  if (!somethingChanged())
620  {
621  emit haveResult(false);
622  Close();
623  return;
624  }
625 
626  QStringList lyrics = m_lyricsEdit->GetText().split('\n');
627 
628  m_sourceData->setChanged(true);
634  m_sourceData->setLyrics(lyrics);
635  m_sourceData->save();
636  m_sourceData->setChanged(false);
637 
638  emit haveResult(true);
639  Close();
640 }
641 
643 {
644  if (!ok)
645  {
646  emit haveResult(false);
647  Close();
648  return;
649  }
650 
651  okPressed();
652 }
653 
655 {
656  if (somethingChanged())
657  {
658  ShowOkPopup(tr("Save changes?"), this, &EditLyricsDialog::saveEdits, true);
659  return;
660  }
661 
662  emit haveResult(false);
663  Close();
664 }
MythUIButton::Clicked
void Clicked()
MusicCommon::m_currentView
MusicView m_currentView
Definition: musiccommon.h:141
MythUIButtonList::GetItemAt
MythUIButtonListItem * GetItemAt(int pos) const
Definition: mythuibuttonlist.cpp:1700
MythMainWindow::GetMainStack
MythScreenStack * GetMainStack()
Definition: mythmainwindow.cpp:317
MusicPlayer::getOutput
AudioOutput * getOutput(void)
Definition: musicplayer.h:128
EditLyricsDialog::m_sourceData
LyricsData * m_sourceData
Definition: lyricsview.h:84
gPlayer
MusicPlayer * gPlayer
Definition: musicplayer.cpp:38
MythUIButtonList::GetItemCurrent
MythUIButtonListItem * GetItemCurrent() const
Definition: mythuibuttonlist.cpp:1614
LyricsView::LyricsView
LyricsView(MythScreenStack *parent, MythScreenType *parentScreen)
Definition: lyricsview.cpp:39
mythuitext.h
mythuiprogressbar.h
DialogCompletionEvent::GetId
QString GetId()
Definition: mythdialogbox.h:51
MythUIText::Reset
void Reset(void) override
Reset the widget to it's original state, should not reset changes made by the theme.
Definition: mythuitext.cpp:65
EditLyricsDialog::okPressed
void okPressed(void)
Definition: lyricsview.cpp:617
MythCoreContext::SendReceiveStringList
bool SendReceiveStringList(QStringList &strlist, bool quickTimeout=false, bool block=true)
Send a message to the backend and wait for a response.
Definition: mythcorecontext.cpp:1381
LyricsData::lyrics
LyricsLineMap * lyrics(void)
Definition: lyricsdata.h:76
OutputEvent
Definition: output.h:31
MusicCommon::CreateCommon
bool CreateCommon(void)
Definition: musiccommon.cpp:78
MythScreenType::Close
virtual void Close()
Definition: mythscreentype.cpp:384
EditLyricsDialog::m_artistEdit
MythUITextEdit * m_artistEdit
Definition: lyricsview.h:89
EditLyricsDialog::m_okButton
MythUIButton * m_okButton
Definition: lyricsview.h:93
LyricsView::showMessage
void showMessage(const QString &message)
Definition: lyricsview.cpp:428
LyricsView::createFindLyricsMenu
MythMenu * createFindLyricsMenu(void)
Definition: lyricsview.cpp:259
LyricsData::STATUS_NOTFOUND
@ STATUS_NOTFOUND
Definition: lyricsdata.h:90
MusicCommon::keyPressEvent
bool keyPressEvent(QKeyEvent *e) override
Key event handler.
Definition: musiccommon.cpp:587
LyricsData::STATUS_SEARCHING
@ STATUS_SEARCHING
Definition: lyricsdata.h:88
EditLyricsDialog::m_titleEdit
MythUITextEdit * m_titleEdit
Definition: lyricsview.h:88
LyricsLine::m_time
std::chrono::milliseconds m_time
Definition: lyricsdata.h:26
EditLyricsDialog::cancelPressed
void cancelPressed(void)
Definition: lyricsview.cpp:654
MusicPlayer::PLAYMODE_RADIO
@ PLAYMODE_RADIO
Definition: musicplayer.h:73
MythUICheckBox::GetBooleanCheckState
bool GetBooleanCheckState(void) const
Definition: mythuicheckbox.cpp:103
LyricsData::setArtist
void setArtist(const QString &artist)
Definition: lyricsdata.h:68
MythUIProgressBar::SetUsed
void SetUsed(int value)
Definition: mythuiprogressbar.cpp:72
mythdialogbox.h
MythScreenStack
Definition: mythscreenstack.h:16
mythdbcon.h
LyricsData::setAlbum
void setAlbum(const QString &album)
Definition: lyricsdata.h:71
LyricsView::findLyrics
void findLyrics(const QString &grabber="ALL")
Definition: lyricsview.cpp:355
MusicPlayer::isPlaying
bool isPlaying(void) const
Definition: musicplayer.h:109
EditLyricsDialog::syncronizedChanged
void syncronizedChanged(bool syncronized)
Definition: lyricsview.cpp:586
LyricsData::clear
void clear(void)
Definition: lyricsdata.cpp:27
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
MythScreenType
Screen in which all other widgets are contained and rendered.
Definition: mythscreentype.h:45
mythuistatetype.h
MusicMetadata
Definition: musicmetadata.h:80
MythUITextEdit::GetText
QString GetText(void) const
Definition: mythuitextedit.h:50
mythdirs.h
mythuibuttonlist.h
EditLyricsDialog::Create
bool Create(void) override
Definition: lyricsview.cpp:504
MusicPlayer::getPlayMode
PlayMode getPlayMode(void)
Definition: musicplayer.h:77
MythUIButtonList::GetCount
int GetCount() const
Definition: mythuibuttonlist.cpp:1679
LyricsView::setLyricTime
void setLyricTime(void)
Definition: lyricsview.cpp:333
EditLyricsDialog
Definition: lyricsview.h:58
EditLyricsDialog::keyPressEvent
bool keyPressEvent(QKeyEvent *e) override
Key event handler.
Definition: lyricsview.cpp:544
LyricsData::setLyrics
void setLyrics(const QStringList &lyrics)
Definition: lyricsdata.cpp:313
LyricsView::m_lyricsList
MythUIButtonList * m_lyricsList
Definition: lyricsview.h:47
MythScreenType::GetFocusWidget
MythUIType * GetFocusWidget(void) const
Definition: mythscreentype.cpp:111
MythUICheckBox::toggled
void toggled(bool)
LyricsView::m_bufferStatus
MythUIText * m_bufferStatus
Definition: lyricsview.h:50
MythObservable::addListener
void addListener(QObject *listener)
Add a listener to the observable.
Definition: mythobservable.cpp:38
MusicPlayerEvent::kPlayedTracksChangedEvent
static const Type kPlayedTracksChangedEvent
Definition: musicplayer.h:50
MusicPlayer::getCurrentMetadata
MusicMetadata * getCurrentMetadata(void)
get the metadata for the current track in the playlist
Definition: musicplayer.cpp:1189
mythuiutils.h
MythUIButtonListItem
Definition: mythuibuttonlist.h:41
MythUITextEdit::SetText
void SetText(const QString &text, bool moveCursor=true)
Definition: mythuitextedit.cpp:198
DecoderHandlerEvent
Events sent by the DecoderHandler and it's helper classes.
Definition: decoderhandler.h:25
MythUIProgressBar::SetTotal
void SetTotal(int value)
Definition: mythuiprogressbar.cpp:78
LyricsData::save
void save(void)
Definition: lyricsdata.cpp:117
MythUIType::Show
void Show(void)
Definition: mythuitype.cpp:1144
mythlogging.h
DecoderHandlerEvent::getBufferStatus
void getBufferStatus(int *available, int *maxSize) const
Definition: decoderhandler.cpp:60
LyricsView::lyricStatusChanged
void lyricStatusChanged(LyricsData::Status status, const QString &message)
Definition: lyricsview.cpp:394
LyricsData::statusChanged
void statusChanged(LyricsData::Status status, const QString &message)
MythUIButtonList::itemClicked
void itemClicked(MythUIButtonListItem *item)
MythMainWindow::TranslateKeyPress
bool TranslateKeyPress(const QString &Context, QKeyEvent *Event, QStringList &Actions, bool AllowJumps=true)
Get a list of actions for a keypress in the given context.
Definition: mythmainwindow.cpp:1111
MusicMetadata::getLyricsData
LyricsData * getLyricsData(void)
Definition: musicmetadata.cpp:1397
MythUIButtonList::GetCurrentPos
int GetCurrentPos() const
Definition: mythuibuttonlist.h:240
LyricsView::customEvent
void customEvent(QEvent *event) override
Definition: lyricsview.cpp:95
MusicPlayerEvent::kTrackChangeEvent
static const Type kTrackChangeEvent
Definition: musicplayer.h:39
LyricsLine
Definition: lyricsdata.h:19
MythDialogBox
Basic menu dialog, message and a list of options.
Definition: mythdialogbox.h:165
menu
static MythThemedMenu * menu
Definition: mythtv-setup.cpp:58
EditLyricsDialog::somethingChanged
bool somethingChanged(void)
Definition: lyricsview.cpp:591
DecoderHandlerEvent::kOperationStart
static const Type kOperationStart
Definition: decoderhandler.h:49
OutputEvent::kInfo
static const Type kInfo
Definition: output.h:65
MythScreenType::BuildFocusList
void BuildFocusList(void)
Definition: mythscreentype.cpp:204
LyricsData::setGrabber
void setGrabber(const QString &grabber)
Definition: lyricsdata.h:65
LyricsView::ShowMenu
void ShowMenu(void) override
Definition: lyricsview.cpp:222
EditLyricsDialog::haveResult
void haveResult(bool ok)
LyricsData::STATUS_FOUND
@ STATUS_FOUND
Definition: lyricsdata.h:89
LyricsData::changed
bool changed(void) const
Definition: lyricsdata.h:82
LyricsView::m_lyricData
LyricsData * m_lyricData
Definition: lyricsview.h:53
LyricsData::setSyncronized
void setSyncronized(bool syncronized)
Definition: lyricsdata.h:80
EditLyricsDialog::EditLyricsDialog
EditLyricsDialog(MythScreenStack *parent, LyricsData *sourceData)
Definition: lyricsview.cpp:497
LyricsData::Status
Status
Definition: lyricsdata.h:85
LyricsData
Definition: lyricsdata.h:47
EditLyricsDialog::loadLyrics
void loadLyrics(void)
Definition: lyricsview.cpp:568
MythUIButtonListItem::GetData
QVariant GetData()
Definition: mythuibuttonlist.cpp:3715
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:57
LyricsData::syncronized
bool syncronized(void) const
Definition: lyricsdata.h:79
LyricsView::m_autoScroll
bool m_autoScroll
Definition: lyricsview.h:55
DecoderHandlerEvent::kOperationStop
static const Type kOperationStop
Definition: decoderhandler.h:50
MV_LYRICS
@ MV_LYRICS
Definition: musiccommon.h:34
EditLyricsDialog::m_syncronizedCheck
MythUICheckBox * m_syncronizedCheck
Definition: lyricsview.h:87
AudioOutput::GetAudiotime
virtual std::chrono::milliseconds GetAudiotime(void)=0
LyricsData::setChanged
void setChanged(bool changed)
Definition: lyricsdata.h:83
UIUtilDisp::Assign
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
Definition: mythuiutils.h:27
MythUIType::Hide
void Hide(void)
Definition: mythuitype.cpp:1139
LyricsData::artist
QString artist(void)
Definition: lyricsdata.h:67
musiccommon.h
LyricsData::title
QString title(void)
Definition: lyricsdata.h:73
mythuihelper.h
MusicPlayer::getPlayedTracksList
QList< MusicMetadata * > & getPlayedTracksList(void)
Definition: musicplayer.h:141
LyricsView::editFinished
void editFinished(bool result)
Definition: lyricsview.cpp:488
MusicCommon::createMainMenu
MythMenu * createMainMenu(void)
Definition: musiccommon.cpp:2277
lyricsview.h
MythMenu
Definition: mythdialogbox.h:98
EditLyricsDialog::m_grabberEdit
MythUITextEdit * m_grabberEdit
Definition: lyricsview.h:86
MythScreenType::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: mythscreentype.cpp:402
LyricsView::showLyrics
void showLyrics(void)
Definition: lyricsview.cpp:445
mythcorecontext.h
mythuitextedit.h
MythUICheckBox::SetCheckState
void SetCheckState(MythUIStateType::StateType state)
Definition: mythuicheckbox.cpp:66
XMLParseBase::LoadWindowFromXML
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
Definition: xmlparsebase.cpp:701
LyricsData::grabber
QString grabber(void)
Definition: lyricsdata.h:64
LyricsView::m_loadingState
MythUIStateType * m_loadingState
Definition: lyricsview.h:49
LyricsView::editLyrics
void editLyrics(void)
Definition: lyricsview.cpp:473
LyricsView::m_statusText
MythUIText * m_statusText
Definition: lyricsview.h:48
LyricsData::setTitle
void setTitle(const QString &title)
Definition: lyricsdata.h:74
DialogCompletionEvent
Event dispatched from MythUI modal dialogs to a listening class containing a result of some form.
Definition: mythdialogbox.h:40
audiooutput.h
DecoderHandlerEvent::kBufferStatus
static const Type kBufferStatus
Definition: decoderhandler.h:48
MythUIText::SetText
virtual void SetText(const QString &text)
Definition: mythuitext.cpp:115
DialogCompletionEvent::kEventType
static const Type kEventType
Definition: mythdialogbox.h:56
MythUIButtonList::Reset
void Reset() override
Reset the widget to it's original state, should not reset changes made by the theme.
Definition: mythuibuttonlist.cpp:116
GetMythMainWindow
MythMainWindow * GetMythMainWindow(void)
Definition: mythmainwindow.cpp:104
MythUIButtonList::SetItemCurrent
void SetItemCurrent(MythUIButtonListItem *item)
Definition: mythuibuttonlist.cpp:1581
build_compdb.action
action
Definition: build_compdb.py:9
EditLyricsDialog::saveEdits
void saveEdits(bool ok)
Definition: lyricsview.cpp:642
mythuibutton.h
MythMainWindow::GetStack
MythScreenStack * GetStack(const QString &Stackname)
Definition: mythmainwindow.cpp:322
LyricsLine::toString
QString toString(bool syncronized)
Definition: lyricsdata.h:29
LyricsData::findLyrics
void findLyrics(const QString &grabber)
Definition: lyricsdata.cpp:50
EditLyricsDialog::m_cancelButton
MythUIButton * m_cancelButton
Definition: lyricsview.h:92
MusicPlayer::getCurrentTrackTime
std::chrono::seconds getCurrentTrackTime(void) const
Definition: musicplayer.h:147
LyricsData::album
QString album(void)
Definition: lyricsdata.h:70
mythuicheckbox.h
mythdownloadmanager.h
LyricsView::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: lyricsview.cpp:276
mythmainwindow.h
LyricsView::saveLyrics
void saveLyrics(void)
Definition: lyricsview.cpp:467
MythScreenStack::AddScreen
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
Definition: mythscreenstack.cpp:52
ShowOkPopup
MythConfirmationDialog * ShowOkPopup(const QString &message, bool showCancel)
Non-blocking version of MythPopupBox::showOkPopup()
Definition: mythdialogbox.cpp:566
LyricsView::Create
bool Create(void) override
Definition: lyricsview.cpp:58
LyricsView::~LyricsView
~LyricsView(void) override
Definition: lyricsview.cpp:47
MusicCommon::customEvent
void customEvent(QEvent *event) override
Definition: musiccommon.cpp:1232
MythObservable::removeListener
void removeListener(QObject *listener)
Remove a listener to the observable.
Definition: mythobservable.cpp:55
EditLyricsDialog::m_lyricsEdit
MythUITextEdit * m_lyricsEdit
Definition: lyricsview.h:91
MythUIStateType::DisplayState
bool DisplayState(const QString &name)
Definition: mythuistatetype.cpp:84
MusicCommon
Definition: musiccommon.h:49
musicplayer.h
LyricsView::m_bufferProgress
MythUIProgressBar * m_bufferProgress
Definition: lyricsview.h:51
EditLyricsDialog::m_albumEdit
MythUITextEdit * m_albumEdit
Definition: lyricsview.h:90