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