MythTV  master
viewscheduled.cpp
Go to the documentation of this file.
1 
2 #include "viewscheduled.h"
3 
4 #include <QCoreApplication>
5 
6 // libmythbase
7 
8 #include "mythcorecontext.h"
9 #include "mythlogging.h"
10 
11 // libmythui
12 
13 #include "mythuitext.h"
14 #include "mythuistatetype.h"
15 #include "mythuibuttonlist.h"
16 #include "mythdialogbox.h"
17 #include "mythmainwindow.h"
18 
19 // libmythtv
20 
21 #include "recordinginfo.h"
22 #include "tv_play.h"
23 #include "recordingrule.h"
24 #include "remoteutil.h"
25 #include "programtypes.h" // for RecStatus, etc
26 #include "recordingtypes.h" // for toString
27 #include "tv_actions.h" // for ACTION_CHANNELSEARCH
28 
29 // mythfrontend
30 #include "guidegrid.h"
31 
32 void *ViewScheduled::RunViewScheduled(void *player, bool showTV)
33 {
35  ViewScheduled *vsb = new ViewScheduled(mainStack, static_cast<TV*>(player),
36  showTV);
37 
38  if (vsb->Create())
39  mainStack->AddScreen(vsb, (player == nullptr));
40  else
41  delete vsb;
42 
43  return nullptr;
44 }
45 
46 ViewScheduled::ViewScheduled(MythScreenStack *parent, TV* player, bool /*showTV*/)
47  : ScheduleCommon(parent, "ViewScheduled"),
48  m_showAll(!gCoreContext->GetBoolSetting("ViewSchedShowLevel", false)),
49  m_player(player)
50 {
52 }
53 
55 {
57  gCoreContext->SaveBoolSetting("ViewSchedShowLevel", !m_showAll);
58 
59  // if we have a player, we need to tell we are done
60  if (m_player)
61  {
62  QString message = QString("VIEWSCHEDULED_EXITING");
63  qApp->postEvent(m_player, new MythEvent(message));
64  }
65 }
66 
68 {
69  if (!LoadWindowFromXML("schedule-ui.xml", "viewscheduled", this))
70  return false;
71 
72  m_groupList = dynamic_cast<MythUIButtonList *> (GetChild("groups"));
73  m_schedulesList = dynamic_cast<MythUIButtonList *> (GetChild("schedules"));
74 
75  if (!m_schedulesList)
76  {
77  LOG(VB_GENERAL, LOG_ERR, "Theme is missing critical theme elements.");
78  return false;
79  }
80 
81  connect(m_schedulesList, SIGNAL(itemSelected(MythUIButtonListItem*)),
83  connect(m_schedulesList, SIGNAL(itemClicked(MythUIButtonListItem*)),
84  SLOT(EditRecording()));
85 
86  m_schedulesList->SetLCDTitles(tr("Scheduled Recordings"),
87  "shortstarttimedate|channel|titlesubtitle|card");
88  m_schedulesList->SetSearchFields("titlesubtitle");
89 
90  if (m_groupList)
91  {
92  connect(m_groupList, SIGNAL(itemSelected(MythUIButtonListItem*)),
94  connect(m_groupList, SIGNAL(itemClicked(MythUIButtonListItem*)),
95  SLOT(SwitchList()));
96  m_groupList->SetLCDTitles(tr("Group List"), "");
97  }
98 
101 
102  EmbedTVWindow();
103 
104  return true;
105 }
106 
108 {
110 }
111 
113 {
114  LoadList(true);
115 }
116 
118 {
119  // don't fade the screen if we are returning to the player
120  if (m_player)
121  GetScreenStack()->PopScreen(this, false);
122  else
123  GetScreenStack()->PopScreen(this, true);
124 }
125 
127 {
128  if (GetFocusWidget() == m_groupList)
130  else if (GetFocusWidget() == m_schedulesList)
132 }
133 
134 bool ViewScheduled::keyPressEvent(QKeyEvent *event)
135 {
136  // FIXME: Blackholes keypresses, not good
137  if (m_inEvent)
138  return true;
139 
140  m_inEvent = true;
141 
142  if (GetFocusWidget()->keyPressEvent(event))
143  {
144  m_inEvent = false;
145  return true;
146  }
147 
148  QStringList actions;
149  bool handled = GetMythMainWindow()->TranslateKeyPress("TV Frontend", event,
150  actions);
151 
152  for (int i = 0; i < actions.size() && !handled; i++)
153  {
154  QString action = actions[i];
155  handled = true;
156 
157  if (action == "EDIT")
158  EditScheduled();
159  else if (action == "CUSTOMEDIT")
160  EditCustom();
161  else if (action == "DELETE")
162  deleteRule();
163  else if (action == "UPCOMING")
164  ShowUpcoming();
165  else if (action == "VIEWSCHEDULED")
167  else if (action == "PREVRECORDED")
168  ShowPrevious();
169  else if (action == "DETAILS" || action == "INFO")
170  ShowDetails();
171  else if (action == "GUIDE")
172  ShowGuide();
173  else if (action == ACTION_CHANNELSEARCH)
175  else if (action == "1")
176  setShowAll(true);
177  else if (action == "2")
178  setShowAll(false);
179  else if (action == "PREVVIEW" || action == "NEXTVIEW")
181  else if (action == "VIEWINPUT")
182  viewInputs();
183  else
184  handled = false;
185  }
186 
187  if (m_needFill)
188  LoadList();
189 
190  if (!handled && MythScreenType::keyPressEvent(event))
191  handled = true;
192 
193  m_inEvent = false;
194 
195  return handled;
196 }
197 
199 {
200  QString label = tr("Options");
201 
202  MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
203  MythDialogBox *menuPopup = new MythDialogBox(label, popupStack,
204  "menuPopup");
205 
206  if (menuPopup->Create())
207  {
208  menuPopup->SetReturnEvent(this, "menu");
209 
210  if (m_showAll)
211  menuPopup->AddButton(tr("Show Important"));
212  else
213  menuPopup->AddButton(tr("Show All"));
214  menuPopup->AddButton(tr("Program Details"));
215  menuPopup->AddButton(tr("Program Guide"));
216  menuPopup->AddButton(tr("Channel Search"));
217  menuPopup->AddButton(tr("Upcoming by title"));
218  menuPopup->AddButton(tr("Upcoming scheduled"));
219  menuPopup->AddButton(tr("Previously Recorded"));
220  menuPopup->AddButton(tr("Custom Edit"));
221  menuPopup->AddButton(tr("Delete Rule"));
222  menuPopup->AddButton(tr("Show Inputs"));
223 
224  popupStack->AddScreen(menuPopup);
225  }
226  else
227  {
228  delete menuPopup;
229  }
230 }
231 
232 void ViewScheduled::LoadList(bool useExistingData)
233 {
234  if (m_inFill)
235  return;
236 
237  m_inFill = true;
238 
240 
241  QString callsign;
242  QDateTime startts, recstartts;
243  QDate group = m_currentGroup;
244 
245  if (currentItem)
246  {
247  ProgramInfo *currentpginfo = currentItem->GetData()
248  .value<ProgramInfo*>();
249  if (currentpginfo)
250  {
251  callsign = currentpginfo->GetChannelSchedulingID();
252  startts = currentpginfo->GetScheduledStartTime();
253  recstartts = currentpginfo->GetRecordingStartTime();
254  }
255  }
256 
257  QDateTime now = MythDate::current();
258 
259  QMap<int, int> toomanycounts;
260 
262  if (m_groupList)
263  m_groupList->Reset();
264 
265  m_recgroupList.clear();
266 
267  if (!useExistingData)
269 
271  QString currentDate;
273  m_recgroupList[m_defaultGroup].setAutoDelete(false);
274  while (pit != m_recList.end())
275  {
276  ProgramInfo *pginfo = *pit;
277  const RecStatus::Type recstatus = pginfo->GetRecordingStatus();
278  if ((pginfo->GetRecordingEndTime() >= now ||
279  pginfo->GetScheduledEndTime() >= now ||
280  recstatus == RecStatus::Recording ||
281  recstatus == RecStatus::Tuning ||
282  recstatus == RecStatus::Failing) &&
283  (m_showAll ||
284  (recstatus >= RecStatus::Pending &&
285  recstatus <= RecStatus::WillRecord) ||
286  recstatus == RecStatus::DontRecord ||
287  (recstatus == RecStatus::TooManyRecordings &&
288  ++toomanycounts[pginfo->GetRecordingRuleID()] <= 1) ||
289  (recstatus > RecStatus::TooManyRecordings &&
290  recstatus != RecStatus::Repeat &&
291  recstatus != RecStatus::NeverRecord)))
292  {
293  m_inputref[pginfo->GetInputID()]++;
294  if (pginfo->GetInputID() > m_maxinput)
295  m_maxinput = pginfo->GetInputID();
296 
297  QDate date = pginfo->GetRecordingStartTime().toLocalTime().date();
298  m_recgroupList[date].push_back(pginfo);
299  m_recgroupList[date].setAutoDelete(false);
300 
301  m_recgroupList[m_defaultGroup].push_back(pginfo);
302 
303  ++pit;
304  }
305  else
306  {
307  pit = m_recList.erase(pit);
308  continue;
309  }
310  }
311 
312  if (m_groupList)
313  {
314  QString label;
315  QMap<QDate,ProgramList>::iterator dateit = m_recgroupList.begin();
316  while (dateit != m_recgroupList.end())
317  {
318  if (dateit.key().isNull())
319  label = tr("All");
320  else
321  label = MythDate::toString(
322  dateit.key(), MythDate::kDateFull | MythDate::kSimplify);
323 
325  qVariantFromValue(dateit.key()));
326  ++dateit;
327  }
328 
329  // Restore group
330  if (m_recgroupList.contains(group))
331  m_currentGroup = group;
332  else
334 
335  m_groupList->SetValueByData(qVariantFromValue(m_currentGroup));
336  }
337 
338  FillList();
339 
340  // Restore position after a list update
341  if (!callsign.isEmpty())
342  {
344 
345  int listPos = ((int) plist.size()) - 1;
346  int i;
347  for (i = listPos; i >= 0; --i)
348  {
349  ProgramInfo *pginfo = plist[i];
350  if (callsign == pginfo->GetChannelSchedulingID() &&
351  startts == pginfo->GetScheduledStartTime())
352  {
353  listPos = i;
354  break;
355  }
356  if (recstartts <= pginfo->GetRecordingStartTime())
357  listPos = i;
358  }
360  }
361 
362  m_inFill = false;
363  m_needFill = false;
364 }
365 
366 
368 {
369  if (!item || m_recList.empty())
370  return;
371 
372  QDate group = item->GetData().value<QDate>();
373 
374  m_currentGroup = group;
375 
376  if (!m_inFill)
377  FillList();
378 }
379 
381 {
383 
384  MythUIText *norecordingText = dynamic_cast<MythUIText*>
385  (GetChild("norecordings_info"));
386 
387  if (norecordingText)
388  norecordingText->SetVisible(m_recList.empty());
389 
390  if (m_recList.empty())
391  return;
392 
393  ProgramList plist;
394 
395  if (!m_recgroupList.contains(m_currentGroup))
397 
399 
400  ProgramList::iterator pit = plist.begin();
401  while (pit != plist.end())
402  {
403  ProgramInfo *pginfo = *pit;
404  if (!pginfo)
405  {
406  ++pit;
407  continue;
408  }
409 
410  QString state;
411 
412  const RecStatus::Type recstatus = pginfo->GetRecordingStatus();
413  if (recstatus == RecStatus::Recording ||
414  recstatus == RecStatus::Tuning)
415  state = "running";
416  else if (recstatus == RecStatus::Conflict ||
417  recstatus == RecStatus::Offline ||
418  recstatus == RecStatus::TunerBusy ||
419  recstatus == RecStatus::Failed ||
420  recstatus == RecStatus::Failing ||
421  recstatus == RecStatus::Aborted ||
422  recstatus == RecStatus::Missed)
423  state = "error";
424  else if (recstatus == RecStatus::WillRecord ||
425  recstatus == RecStatus::Pending)
426  {
427  if (m_curinput == 0 || pginfo->GetInputID() == m_curinput)
428  {
429  if (pginfo->GetRecordingPriority2() < 0)
430  state = "warning";
431  else
432  state = "normal";
433  }
434  }
435  else if (recstatus == RecStatus::Repeat ||
436  recstatus == RecStatus::NeverRecord ||
437  recstatus == RecStatus::DontRecord ||
438  (recstatus != RecStatus::DontRecord &&
439  recstatus <= RecStatus::EarlierShowing))
440  state = "disabled";
441  else
442  state = "warning";
443 
444  MythUIButtonListItem *item =
446  qVariantFromValue(pginfo));
447 
448  InfoMap infoMap;
449  pginfo->ToMap(infoMap);
450  item->SetTextFromMap(infoMap, state);
451 
452  QString rating = QString::number(pginfo->GetStars(10));
453  item->DisplayState(rating, "ratingstate");
454  item->DisplayState(state, "status");
455 
456  ++pit;
457  }
458 
459  MythUIText *statusText = dynamic_cast<MythUIText*>(GetChild("status"));
460  if (statusText)
461  {
462  if (m_conflictBool)
463  {
464  // Find first conflict and store in m_conflictDate field
465  ProgramList::const_iterator it = plist.begin();
466  for (; it != plist.end(); ++it)
467  {
468  ProgramInfo &p = **it;
470  {
472  .toLocalTime().date();
473  break;
474  }
475  }
476 
477  // TODO: This can be templated instead of hardcoding
478  // Conflict/No Conflict
479  QString cstring = tr("Conflict %1")
482 
483  statusText->SetText(cstring);
484  }
485  else
486  statusText->SetText(tr("No Conflicts"));
487  }
488 
489  MythUIText *filterText = dynamic_cast<MythUIText*>(GetChild("filter"));
490  if (filterText)
491  {
492  if (m_showAll)
493  filterText->SetText(tr("All"));
494  else
495  filterText->SetText(tr("Important"));
496  }
497 }
498 
500 {
501  if (!item)
502  return;
503 
504  ProgramInfo *pginfo = item->GetData().value<ProgramInfo*> ();
505  if (pginfo)
506  {
507  InfoMap infoMap;
508  pginfo->ToMap(infoMap);
509  SetTextFromMap(infoMap);
510 
511  MythUIStateType *ratingState = dynamic_cast<MythUIStateType*>
512  (GetChild("ratingstate"));
513  if (ratingState)
514  {
515  QString rating = QString::number(pginfo->GetStars(10));
516  ratingState->DisplayState(rating);
517  }
518  }
519 }
520 
522 {
524 
525  if (!item)
526  return;
527 
528  ProgramInfo *pginfo = item->GetData().value<ProgramInfo*>();
529  if (!pginfo)
530  return;
531 
532  RecordingRule *record = new RecordingRule();
533  if (!record->LoadByProgram(pginfo))
534  {
535  delete record;
536  return;
537  }
538 
539  QString message = tr("Delete '%1' %2 rule?").arg(record->m_title)
540  .arg(toString(pginfo->GetRecordingRuleType()));
541 
542  MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
543 
544  MythConfirmationDialog *okPopup = new MythConfirmationDialog(popupStack,
545  message, true);
546 
547  okPopup->SetReturnEvent(this, "deleterule");
548  okPopup->SetData(qVariantFromValue(record));
549 
550  if (okPopup->Create())
551  popupStack->AddScreen(okPopup);
552  else
553  delete okPopup;
554 }
555 
557 {
558  m_showAll = all;
559  m_needFill = true;
560 }
561 
563 {
564  m_needFill = true;
565 
566  m_curinput++;
567  while (m_curinput <= m_maxinput)
568  {
569  if (m_inputref[m_curinput] > 0)
570  return;
571  m_curinput++;
572  }
573  m_curinput = 0;
574 }
575 
577 {
578  if (m_player)
579  m_player->StartEmbedding(QRect());
580 }
581 
582 void ViewScheduled::customEvent(QEvent *event)
583 {
584  if (event->type() == MythEvent::MythEventMessage)
585  {
586  MythEvent *me = static_cast<MythEvent *>(event);
587  const QString& message = me->Message();
588 
589  if (message != "SCHEDULE_CHANGE")
590  return;
591 
592  m_needFill = true;
593 
594  if (m_inEvent)
595  return;
596 
597  m_inEvent = true;
598 
599  LoadList();
600 
601  m_inEvent = false;
602  }
603  else if (event->type() == DialogCompletionEvent::kEventType)
604  {
606 
607  QString resultid = dce->GetId();
608  QString resulttext = dce->GetResultText();
609  int buttonnum = dce->GetResult();
610 
611  if (resultid == "deleterule")
612  {
613  RecordingRule *record =
614  dce->GetData().value<RecordingRule *>();
615  if (record)
616  {
617  if (buttonnum > 0)
618  {
619  if (!record->Delete())
620  LOG(VB_GENERAL, LOG_ERR,
621  "Failed to delete recording rule");
622  }
623  delete record;
624  }
625 
626  EmbedTVWindow();
627  }
628  else if (resultid == "menu")
629  {
630  if (resulttext == tr("Show Important"))
631  {
632  setShowAll(false);
633  }
634  else if (resulttext == tr("Show All"))
635  {
636  setShowAll(true);
637  }
638  else if (resulttext == tr("Program Details"))
639  {
640  ShowDetails();
641  }
642  else if (resulttext == tr("Program Guide"))
643  {
644  ShowGuide();
645  }
646  else if (resulttext == tr("Channel Search"))
647  {
649  }
650  else if (resulttext == tr("Upcoming by title"))
651  {
652  ShowUpcoming();
653  }
654  else if (resulttext == tr("Upcoming scheduled"))
655  {
657  }
658  else if (resulttext == tr("Previously Recorded"))
659  {
660  ShowPrevious();
661  }
662  else if (resulttext == tr("Custom Edit"))
663  {
664  EditCustom();
665  }
666  else if (resulttext == tr("Delete Rule"))
667  {
668  deleteRule();
669  }
670  else if (resulttext == tr("Show Inputs"))
671  {
672  viewInputs();
673  }
674 
675  if (m_needFill)
676  LoadList();
677  }
678  else
680  }
681 }
682 
684 {
686  return item ? item->GetData().value<ProgramInfo*>() : nullptr;
687 }
This widget is used for grouping other widgets for display when a particular named state is called.
iterator erase(iterator it)
float GetStars(void) const
Definition: programinfo.h:434
MythScreenStack * GetScreenStack() const
void ChangeGroup(MythUIButtonListItem *item)
uint GetInputID(void) const
Definition: programinfo.h:455
bool StartEmbedding(const QRect &)
Definition: tv_play.cpp:8534
virtual void ToMap(InfoMap &progMap, bool showrerecord=false, uint star_range=10) const
Converts ProgramInfo into QString QHash containing each field in ProgramInfo converted into localized...
bool LoadByProgram(const ProgramInfo *proginfo)
Dialog asking for user confirmation.
void ShowMenu(void) override
virtual void ShowUpcomingScheduled(void) const
Show the upcoming recordings for this recording rule.
QDate m_conflictDate
Definition: viewscheduled.h:63
void LoadList(bool useExistingData=false)
bool TranslateKeyPress(const QString &context, QKeyEvent *e, QStringList &actions, bool allowJumps=true)
Get a list of actions for a keypress in the given context.
bool Delete(bool sendSig=true)
All purpose text widget, displays a text string.
Definition: mythuitext.h:28
QString toString(MarkTypes type)
void setShowAll(bool all)
virtual void ShowUpcoming(void) const
Show the upcoming recordings for this title.
static Type MythEventMessage
Definition: mythevent.h:66
ProgramInfo * GetCurrentProgram(void) const override
void removeListener(QObject *listener)
Remove a listener to the observable.
Basic menu dialog, message and a list of options.
virtual void SetText(const QString &text)
Definition: mythuitext.cpp:136
MythScreenStack * GetStack(const QString &stackname)
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
AutoDeleteDeque< ProgramInfo * > ProgramList
Definition: programinfo.h:29
size_t size(void) const
MythScreenStack * GetMainStack()
virtual void ShowDetails(void) const
Show the Program Details screen.
void addListener(QObject *listener)
Add a listener to the observable.
void FillList(void)
iterator begin(void)
void BuildFocusList(void)
static Type kEventType
Definition: mythdialogbox.h:50
void SwitchList(void)
QDateTime GetScheduledStartTime(void) const
The scheduled start time of program.
Definition: programinfo.h:382
void AddButton(const QString &title, QVariant data=0, bool newMenu=false, bool setCurrent=false)
Holds information on recordings and videos.
Definition: programinfo.h:66
static void * RunViewScheduled(void *player, bool)
virtual void SetVisible(bool visible)
void Init(void) override
Used after calling Load() to assign data to widgets and other UI initilisation which is prohibited in...
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
void viewInputs(void)
This class is used as a container for messages.
Definition: mythevent.h:16
def rating(profile, smoonURL, gate)
Definition: scan.py:25
virtual void ShowGuide(void) const
Show the program guide.
VERBOSE_PREAMBLE false
Definition: verbosedefs.h:85
virtual void ShowPrevious(void) const
Show the previous recordings for this recording rule.
QString GetChannelSchedulingID(void) const
This is the unique programming identifier of a channel.
Definition: programinfo.h:375
bool empty(void) const
QMap< int, int > m_inputref
Definition: viewscheduled.h:83
QHash< QString, QString > InfoMap
Definition: mythtypes.h:15
Screen for viewing and managing upcoming and conflicted recordings.
Definition: viewscheduled.h:27
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:10
Default local time.
Definition: mythdate.h:16
void SetReturnEvent(QObject *retobject, const QString &resultid)
virtual void SetTextFromMap(const InfoMap &infoMap)
Control TV playback.
Definition: tv_play.h:284
Do Today/Yesterday/Tomorrow transform.
Definition: mythdate.h:23
Internal representation of a recording rule, mirrors the record table.
Definition: recordingrule.h:32
QDateTime GetScheduledEndTime(void) const
The scheduled end time of the program.
Definition: programinfo.h:389
virtual void EditCustom(void)
Creates a dialog for creating a custom recording rule.
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
Definition: mythdate.cpp:101
void customEvent(QEvent *) override
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
QDate m_defaultGroup
Definition: viewscheduled.h:81
MythUIType * GetFocusWidget(void) const
void EmbedTVWindow(void)
void Reset() override
Reset the widget to it's original state, should not reset changes made by the theme.
MythMainWindow * GetMythMainWindow(void)
virtual void ShowChannelSearch(void) const
Show the channel search.
bool keyPressEvent(QKeyEvent *) override
Key event handler.
#define LOG(_MASK_, _LEVEL_, _STRING_)
Definition: mythlogging.h:41
QDate m_currentGroup
Definition: viewscheduled.h:80
QString m_title
Definition: recordingrule.h:79
RecStatus::Type GetRecordingStatus(void) const
Definition: programinfo.h:439
MythUIButtonList * m_schedulesList
Definition: viewscheduled.h:67
void SetLCDTitles(const QString &title, const QString &columnList="")
int GetRecordingPriority2(void) const
Definition: programinfo.h:433
MythUIButtonList * m_groupList
Definition: viewscheduled.h:68
virtual void PopScreen(MythScreenType *screen=nullptr, bool allowFade=true, bool deleteScreen=true)
bool Create(void) override
virtual void EditScheduled(void)
Creates a dialog for editing the recording schedule.
RecordingType GetRecordingRuleType(void) const
Definition: programinfo.h:443
void SetReturnEvent(QObject *retobject, const QString &resultid)
iterator end(void)
uint GetRecordingRuleID(void) const
Definition: programinfo.h:441
bool LoadFromScheduler(AutoDeleteDeque< TYPE * > &destination, bool &hasConflicts, QString altTable="", int recordid=-1)
Definition: programinfo.h:876
bool DisplayState(const QString &name)
QDateTime GetRecordingStartTime(void) const
Approximate time the recording started.
Definition: programinfo.h:396
QDateTime GetRecordingEndTime(void) const
Approximate time the recording should have ended, did end, or is intended to end.
Definition: programinfo.h:404
void customEvent(QEvent *) override
void SetItemCurrent(MythUIButtonListItem *item)
bool SetFocusWidget(MythUIType *widget=nullptr)
#define ACTION_CHANNELSEARCH
Definition: tv_actions.h:28
void Load(void) override
Load data which will ultimately be displayed on-screen or used to determine what appears on-screen (S...
ViewScheduled(MythScreenStack *parent, TV *player=nullptr, bool showTV=false)
QMap< QDate, ProgramList > m_recgroupList
Definition: viewscheduled.h:78
void SaveBoolSetting(const QString &key, bool newValue)
const QString & Message() const
Definition: mythevent.h:58
List::const_iterator const_iterator
ProgramList m_recList
Definition: viewscheduled.h:77
void updateInfo(MythUIButtonListItem *)
bool Create(void) override
void SetSearchFields(const QString &fields)
Event dispatched from MythUI modal dialogs to a listening class containing a result of some form.
Definition: mythdialogbox.h:37
MythUIType * GetChild(const QString &name) const
Get a named child of this UIType.
Definition: mythuitype.cpp:132
bool keyPressEvent(QKeyEvent *) override
Key event handler.
void DisplayState(const QString &state, const QString &name)
void SetTextFromMap(const InfoMap &infoMap, const QString &state="")
void SetData(QVariant data)
virtual void EditRecording(bool may_watch_now=false)
Creates a dialog for editing the recording status, blocking until user leaves dialog.
void Close(void) override
void SetValueByData(const QVariant &data)
MythUIButtonListItem * GetItemCurrent() const
void LoadInBackground(QString message="")
bool Create(void) override