MythTV master
guidegrid.h
Go to the documentation of this file.
1// -*- Mode: c++ -*-
2#ifndef GUIDEGRID_H_
3#define GUIDEGRID_H_
4
5// C++
6#include <list>
7#include <utility>
8#include <vector>
9
10// Qt
11#include <QString>
12#include <QDateTime>
13#include <QEvent>
14
15// MythTV
20#include "libmythtv/tv_play.h"
23
24// MythFrontend
25#include "schedulecommon.h"
26
27class ProgramInfo;
28class QTimer;
30class MythUIGuideGrid;
31
32using db_chan_list_t = std::vector<ChannelInfo> ;
33using db_chan_list_list_t = std::vector<db_chan_list_t>;
34using ProgInfoGuideArray = std::array<std::array<ProgramInfo *,MAX_DISPLAY_TIMES>,MAX_DISPLAY_CHANS>;
35
36class JumpToChannel;
38{
39 public:
40 virtual ~JumpToChannelListener() = default;
41 virtual void GoTo(int start, int cur_row) = 0;
42 virtual void SetJumpToChannel(JumpToChannel *ptr) = 0;
43 virtual int FindChannel(uint chanid, const QString &channum,
44 bool exact = true) const = 0;
45};
46
47class JumpToChannel : public QObject
48{
49 Q_OBJECT
50
51 public:
53 JumpToChannelListener *parent, QString start_entry,
54 int start_chan_idx, int cur_chan_idx, uint rows_disp);
55
56 bool ProcessEntry(const QStringList &actions, const QKeyEvent *e);
57
58 QString GetEntry(void) const { return m_entry; }
59
60 public slots:
61 virtual void deleteLater(void);
62
63 private:
64 ~JumpToChannel() override = default;
65 bool Update(void);
66
67 private:
69 QString m_entry;
73 QTimer *m_timer {nullptr}; // audited ref #5318
74
75 static const uint kJumpToChannelTimeout = 3500; // ms
76};
77
78// GuideUIElement encapsulates the arguments to
79// MythUIGuideGrid::SetProgramInfo(). The elements are prepared in a
80// background thread and then sent via an event to the UI thread for
81// rendering.
83public:
84 GuideUIElement(int row, int col, const QRect area,
85 QString title, QString category,
86 int arrow, int recType, int recStat, bool selected)
87 : m_row(row), m_col(col), m_area(area), m_title(std::move(title)),
88 m_category(std::move(category)), m_arrow(arrow), m_recType(recType),
89 m_recStat(recStat), m_selected(selected) {}
90 const int m_row;
91 const int m_col;
92 const QRect m_area;
93 const QString m_title;
94 const QString m_category;
95 const int m_arrow;
96 const int m_recType;
97 const int m_recStat;
98 const bool m_selected;
99};
100
102{
103 Q_OBJECT;
104
105 public:
106 // Use this function to instantiate a guidegrid instance.
107 static void RunProgramGuide(uint startChanId,
108 const QString &startChanNum,
109 const QDateTime &startTime,
110 TV *player = nullptr,
111 bool embedVideo = false,
112 bool allowFinder = true,
113 int changrpid = -1);
114
115 ChannelInfoList GetSelection(void) const;
116
117 void GoTo(int start, int cur_row) override; // JumpToChannelListener
118 void SetJumpToChannel(JumpToChannel *ptr) override; // JumpToChannelListener
119
120 bool Create(void) override; // MythScreenType
121 bool keyPressEvent(QKeyEvent *event) override; // MythScreenType
122 bool gestureEvent(MythGestureEvent *event) override; // MythScreenType
123
124 void ShowMenu(void) override; // MythScreenType
125 void aboutToShow() override; // MythScreenType
126 void aboutToHide() override; // MythScreenType
127 // Allow class GuideUpdateProgramRow to figure out whether the
128 // current start time/channel coordinates are the same, so that it can
129 // skip the work if not.
131 QDateTime GetCurrentStartTime(void) const { return m_currentStartTime; }
132 int FindChannel(uint chanid, const QString &channum,
133 bool exact = true) const override; // JumpToChannelListener
134
135 public slots:
136 void Close() override; // MythScreenType
137 void PlayerExiting(TV* Player);
138
139 signals:
140 void ChangeVolume(bool Up, int NewVolume = -1);
141 void ToggleMute(bool CycleChannels);
142
143 protected slots:
144 void cursorLeft();
145 void cursorRight();
146 void cursorDown();
147 void cursorUp();
148
149 void toggleGuideListing();
150 void toggleChannelFavorite(int grpid = -1);
151 void ChannelGroupMenu(int mode = 0);
152 void generateListings();
153
154 void enter();
155
156 void showProgFinder();
157 void channelUpdate();
158
159 void deleteRule();
160
161 protected:
162 void customEvent(QEvent *event) override; // ScheduleCommon
163 void Load(void) override; // MythScreenType
164 void Init(void) override; // MythScreenType
165
166 GuideGrid(MythScreenStack *parentStack,
167 uint chanid, QString channum,
168 const QDateTime &startTime,
169 TV *player = nullptr,
170 bool embedVideo = false,
171 bool allowFinder = true,
172 int changrpid = -1);
173 ~GuideGrid() override;
174 ProgramInfo *GetCurrentProgram(void) const override // ScheduleCommon
175 //cppcheck-suppress CastIntegerToAddressAtReturn
177
178 private slots:
179 void updateTimeout(void);
180 void updateInfo(void);
181 void updateChannels(void);
182 void updateJumpToChannel(void);
183
184 private:
185
187
188 enum MoveVector : std::uint8_t {
199 };
200
201 void moveLeftRight(MoveVector movement);
202 void moveUpDown(MoveVector movement);
203 void moveToTime(const QDateTime& datetime);
204
205 void ShowRecordingMenu(void);
206 void ShowJumpToTime(void);
207
208 void fillChannelInfos(bool gotostartchannel = true);
209 void fillTimeInfos(void);
210 void fillProgramInfos(bool useExistingData = false);
211 // Set row=-1 to fill all rows.
212 void fillProgramRowInfos(int row, bool useExistingData);
213public:
214 // These need to be public so that the helper classes can operate.
216 void updateProgramsUI(unsigned int firstRow, unsigned int numRows,
217 int progPast,
218 const QVector<ProgramList*> &proglists,
219 const ProgInfoGuideArray &programInfos,
220 const std::list<GuideUIElement> &elements);
221 void updateChannelsNonUI(QVector<ChannelInfo *> &chinfos,
222 QVector<bool> &unavailables);
223 void updateChannelsUI(const QVector<ChannelInfo *> &chinfos,
224 const QVector<bool> &unavailables);
225private:
226
227 void setStartChannel(int newStartChannel);
228
229 ChannelInfo *GetChannelInfo(uint chan_idx, int sel = -1);
230 const ChannelInfo *GetChannelInfo(uint chan_idx, int sel = -1) const;
231 uint GetChannelCount(void) const;
232 int GetStartChannelOffset(int row = -1) const;
233
234 ProgramList GetProgramList(uint chanid) const;
235 uint GetAlternateChannelIndex(uint chan_idx, bool with_same_channum) const;
236 void updateDateText(void);
237
238 private:
239 std::chrono::minutes m_selectRecThreshold {16min};
240
241 bool m_allowFinder {false};
243 QMap<uint,uint> m_channelInfoIdx;
244
245 std::vector<ProgramList*> m_programs;
248
255
258
259 bool m_sortReverse {false};
260
262 int m_timeCount {30};
263 bool m_verticalLayout {false};
264
265 QDateTime m_firstTime;
266 QDateTime m_lastTime;
267
268 TV *m_player {nullptr};
269 bool m_embedVideo {false};
270 void EmbedTVWindow(void);
271 static void HideTVWindow(void);
273
275
276 QTimer *m_updateTimer {nullptr}; // audited ref #5318
277
279
280 int m_changrpid {-1};
283
284 QRecursiveMutex m_jumpToChannelLock;
286
295};
296
297#endif
std::vector< ChannelGroupItem > ChannelGroupList
Definition: channelgroup.h:31
std::vector< ChannelInfo > ChannelInfoList
Definition: channelinfo.h:130
void Init(void) override
Used after calling Load() to assign data to widgets and other UI initilisation which is prohibited in...
Definition: guidegrid.cpp:608
void moveToTime(const QDateTime &datetime)
Definition: guidegrid.cpp:2543
bool m_sortReverse
Definition: guidegrid.h:259
void moveUpDown(MoveVector movement)
Definition: guidegrid.cpp:2519
ProgramInfo * GetCurrentProgram(void) const override
Definition: guidegrid.h:174
MythUIText * m_jumpToText
Definition: guidegrid.h:292
ChannelGroupList m_changrplist
Definition: guidegrid.h:281
db_chan_list_list_t m_channelInfos
Definition: guidegrid.h:242
QDateTime m_lastTime
Definition: guidegrid.h:266
MythUIText * m_dateText
Definition: guidegrid.h:290
ProgInfoGuideArray m_programInfos
Definition: guidegrid.h:246
void Close() override
Definition: guidegrid.cpp:2586
void PlayerExiting(TV *Player)
Definition: guidegrid.cpp:528
void cursorUp()
Definition: guidegrid.cpp:2473
@ kScrollLeft
Definition: guidegrid.h:191
@ kPageRight
Definition: guidegrid.h:196
@ kScrollRight
Definition: guidegrid.h:192
@ kScrollDown
Definition: guidegrid.h:190
QString m_startChanNum
Definition: guidegrid.h:254
MythUIImage * m_channelImage
Definition: guidegrid.h:294
MythUIButtonList * m_channelList
Definition: guidegrid.h:288
void GoTo(int start, int cur_row) override
Definition: guidegrid.cpp:2649
void Load(void) override
Load data which will ultimately be displayed on-screen or used to determine what appears on-screen (S...
Definition: guidegrid.cpp:584
MythUIButtonList * m_timeList
Definition: guidegrid.h:287
QDateTime m_firstTime
Definition: guidegrid.h:265
ChannelGroupList m_channelGroupListManual
Definition: guidegrid.h:282
QRect m_videoRect
Definition: guidegrid.h:272
bool gestureEvent(MythGestureEvent *event) override
Mouse click/movement handler, receives mouse gesture events from the QCoreApplication event loop.
Definition: guidegrid.cpp:897
ProgramList GetProgramList(uint chanid) const
Definition: guidegrid.cpp:1213
void generateListings()
Definition: guidegrid.cpp:2290
ProgramList * getProgramListFromProgram(int chanNum)
Definition: guidegrid.cpp:1568
ProgramList m_recList
Definition: guidegrid.h:247
void updateChannelsUI(const QVector< ChannelInfo * > &chinfos, const QVector< bool > &unavailables)
Definition: guidegrid.cpp:2178
QRecursiveMutex m_jumpToChannelLock
Definition: guidegrid.h:284
QDateTime GetCurrentStartTime(void) const
Definition: guidegrid.h:131
void ShowMenu(void) override
Definition: guidegrid.cpp:1103
MythUIText * m_changroupname
Definition: guidegrid.h:293
~GuideGrid() override
Definition: guidegrid.cpp:631
void EmbedTVWindow(void)
Definition: guidegrid.cpp:2693
void deleteRule()
Definition: guidegrid.cpp:2604
int GetStartChannelOffset(int row=-1) const
Definition: guidegrid.cpp:1203
void updateChannelsNonUI(QVector< ChannelInfo * > &chinfos, QVector< bool > &unavailables)
Definition: guidegrid.cpp:2125
void updateProgramsUI(unsigned int firstRow, unsigned int numRows, int progPast, const QVector< ProgramList * > &proglists, const ProgInfoGuideArray &programInfos, const std::list< GuideUIElement > &elements)
Definition: guidegrid.cpp:2086
void setStartChannel(int newStartChannel)
Definition: guidegrid.cpp:2555
void cursorRight()
Definition: guidegrid.cpp:2432
QMap< uint, uint > m_channelInfoIdx
Definition: guidegrid.h:243
void SetJumpToChannel(JumpToChannel *ptr) override
Definition: guidegrid.cpp:2674
uint m_startChanID
Definition: guidegrid.h:253
JumpToChannel * m_jumpToChannel
Definition: guidegrid.h:285
uint GetCurrentStartChannel(void) const
Definition: guidegrid.h:130
int m_currentCol
Definition: guidegrid.h:257
uint m_currentStartChannel
Definition: guidegrid.h:252
bool Create(void) override
Definition: guidegrid.cpp:539
std::vector< ProgramList * > m_programs
Definition: guidegrid.h:245
int FindChannel(uint chanid, const QString &channum, bool exact=true) const override
Definition: guidegrid.cpp:1469
void updateJumpToChannel(void)
Definition: guidegrid.cpp:2658
void updateChannels(void)
Definition: guidegrid.cpp:2119
void showProgFinder()
Definition: guidegrid.cpp:2565
GuideGrid(MythScreenStack *parentStack, uint chanid, QString channum, const QDateTime &startTime, TV *player=nullptr, bool embedVideo=false, bool allowFinder=true, int changrpid=-1)
Definition: guidegrid.cpp:485
int m_currentRow
Definition: guidegrid.h:256
QString m_channelOrdering
Definition: guidegrid.h:274
void aboutToShow() override
Definition: guidegrid.cpp:2709
Q_DISABLE_COPY(GuideGrid)
void enter()
Definition: guidegrid.cpp:2571
bool m_embedVideo
Definition: guidegrid.h:269
uint GetChannelCount(void) const
Definition: guidegrid.cpp:1198
void fillChannelInfos(bool gotostartchannel=true)
Definition: guidegrid.cpp:1392
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: guidegrid.cpp:668
bool m_allowFinder
Definition: guidegrid.h:241
ChannelInfo * GetChannelInfo(uint chan_idx, int sel=-1)
Definition: guidegrid.cpp:1180
void updateInfo(void)
Definition: guidegrid.cpp:2216
int m_channelCount
Definition: guidegrid.h:261
void toggleGuideListing()
Definition: guidegrid.cpp:2272
void ToggleMute(bool CycleChannels)
QDateTime m_currentEndTime
Definition: guidegrid.h:251
bool m_verticalLayout
Definition: guidegrid.h:263
void ShowJumpToTime(void)
Definition: guidegrid.cpp:2717
int m_changrpid
Definition: guidegrid.h:280
void ShowRecordingMenu(void)
Definition: guidegrid.cpp:1149
uint GetAlternateChannelIndex(uint chan_idx, bool with_same_channum) const
Definition: guidegrid.cpp:1246
static void HideTVWindow(void)
Definition: guidegrid.cpp:2688
void fillProgramRowInfos(int row, bool useExistingData)
Definition: guidegrid.cpp:1593
void ChannelGroupMenu(int mode=0)
Definition: guidegrid.cpp:2307
void fillProgramInfos(bool useExistingData=false)
Definition: guidegrid.cpp:1563
QTimer * m_updateTimer
Definition: guidegrid.h:276
int m_timeCount
Definition: guidegrid.h:262
void updateDateText(void)
Definition: guidegrid.cpp:2077
TV * m_player
Definition: guidegrid.h:268
ChannelInfoList GetSelection(void) const
Definition: guidegrid.cpp:1308
void customEvent(QEvent *event) override
Definition: guidegrid.cpp:1897
void cursorDown()
Definition: guidegrid.cpp:2458
MThreadPool m_threadPool
Definition: guidegrid.h:278
void cursorLeft()
Definition: guidegrid.cpp:2408
MythUIText * m_longdateText
Definition: guidegrid.h:291
QDateTime m_originalStartTime
Definition: guidegrid.h:249
void channelUpdate()
Definition: guidegrid.cpp:2634
QDateTime m_currentStartTime
Definition: guidegrid.h:250
void toggleChannelFavorite(int grpid=-1)
Definition: guidegrid.cpp:2362
void aboutToHide() override
Definition: guidegrid.cpp:2701
void ChangeVolume(bool Up, int NewVolume=-1)
static void RunProgramGuide(uint startChanId, const QString &startChanNum, const QDateTime &startTime, TV *player=nullptr, bool embedVideo=false, bool allowFinder=true, int changrpid=-1)
Definition: guidegrid.cpp:410
void updateTimeout(void)
Definition: guidegrid.cpp:1385
void fillTimeInfos(void)
Definition: guidegrid.cpp:1529
std::chrono::minutes m_selectRecThreshold
Definition: guidegrid.h:239
void moveLeftRight(MoveVector movement)
Definition: guidegrid.cpp:2488
MythUIGuideGrid * m_guideGrid
Definition: guidegrid.h:289
const int m_arrow
Definition: guidegrid.h:95
const int m_recType
Definition: guidegrid.h:96
GuideUIElement(int row, int col, const QRect area, QString title, QString category, int arrow, int recType, int recStat, bool selected)
Definition: guidegrid.h:84
const int m_row
Definition: guidegrid.h:90
const bool m_selected
Definition: guidegrid.h:98
const QRect m_area
Definition: guidegrid.h:92
const int m_col
Definition: guidegrid.h:91
const QString m_category
Definition: guidegrid.h:94
const int m_recStat
Definition: guidegrid.h:97
const QString m_title
Definition: guidegrid.h:93
virtual void SetJumpToChannel(JumpToChannel *ptr)=0
virtual ~JumpToChannelListener()=default
virtual void GoTo(int start, int cur_row)=0
virtual int FindChannel(uint chanid, const QString &channum, bool exact=true) const =0
virtual void deleteLater(void)
Definition: guidegrid.cpp:83
JumpToChannel(JumpToChannelListener *parent, QString start_entry, int start_chan_idx, int cur_chan_idx, uint rows_disp)
Definition: guidegrid.cpp:64
JumpToChannelListener * m_listener
Definition: guidegrid.h:68
int m_previousStartChannelIndex
Definition: guidegrid.h:70
int m_previousCurrentChannelIndex
Definition: guidegrid.h:71
static const uint kJumpToChannelTimeout
Definition: guidegrid.h:75
QString m_entry
Definition: guidegrid.h:69
uint m_rowsDisplayed
Definition: guidegrid.h:72
bool ProcessEntry(const QStringList &actions, const QKeyEvent *e)
Definition: guidegrid.cpp:112
bool Update(void)
Definition: guidegrid.cpp:161
QTimer * m_timer
Definition: guidegrid.h:73
~JumpToChannel() override=default
QString GetEntry(void) const
Definition: guidegrid.h:58
A custom event that represents a mouse gesture.
Definition: mythgesture.h:40
List widget, displays list items in a variety of themeable arrangements and can trigger signals when ...
A narrow purpose widget used to show television programs and the timeslots they occupy on channels.
Image widget, displays a single image or multiple images in sequence.
Definition: mythuiimage.h:98
All purpose text widget, displays a text string.
Definition: mythuitext.h:29
Holds information on recordings and videos.
Definition: programinfo.h:74
Control TV playback.
Definition: tv_play.h:157
unsigned int uint
Definition: compat.h:60
std::vector< db_chan_list_t > db_chan_list_list_t
Definition: guidegrid.h:33
std::array< std::array< ProgramInfo *, MAX_DISPLAY_TIMES >, MAX_DISPLAY_CHANS > ProgInfoGuideArray
Definition: guidegrid.h:34
std::vector< ChannelInfo > db_chan_list_t
Definition: guidegrid.h:32
static constexpr int MAX_DISPLAY_CHANS