MythTV master
zmconsole.cpp
Go to the documentation of this file.
1/* ============================================================
2 * This program is free software; you can redistribute it
3 * and/or modify it under the terms of the GNU General
4 * Public License as published bythe Free Software Foundation;
5 * either version 2, or (at your option)
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * ============================================================ */
14
15// C++
16#include <chrono>
17#include <cstdlib>
18#include <iostream>
19#include <unistd.h>
20
21// qt
22#include <QTimer>
23
24// MythTV
31
32// zoneminder
33#include "zmclient.h"
34#include "zmconsole.h"
35
36constexpr std::chrono::milliseconds STATUS_UPDATE_TIME { 10s }; // update the status every 10 seconds
37constexpr std::chrono::milliseconds TIME_UPDATE_TIME { 1s }; // update the time every 1 second
38
40{
41 if (!LoadWindowFromXML("zoneminder-ui.xml", "functionpopup", this))
42 return false;
43
44 bool err = false;
45 UIUtilE::Assign(this, m_captionText, "caption_text", &err);
46 UIUtilE::Assign(this, m_functionList, "function_list", &err);
47 UIUtilE::Assign(this, m_enabledCheck, "enable_check", &err);
48 UIUtilE::Assign(this, m_notificationCheck, "notification_check", &err);
49 UIUtilE::Assign(this, m_okButton, "ok_button", &err);
50
51 if (err)
52 {
53 LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'functionpopup'");
54 return false;
55 }
56
63
65
67
69
70 if (m_monitor->enabled)
72 else
74
75
78 else
80
82
84
85 return true;
86}
87
89{
90 QString function = m_functionList->GetValue();
92 bool showNotifications = (m_notificationCheck->GetCheckState() == MythUIStateType::Full);
93
94 LOG(VB_GENERAL, LOG_INFO,
95 "Monitor id : " + QString::number(m_monitor->id) +
96 " function change " + m_monitor->function + " -> " + function +
97 ", enable value " + QString::number(m_monitor->enabled) + " -> " + QString::number(enabled) +
98 ", notification value " + QString::number(m_monitor->showNotifications) + " -> " + QString::number(showNotifications));
99
100 m_monitor->showNotifications = showNotifications;
102
103 if ((m_monitor->function == function) && (m_monitor->enabled == enabled))
104 {
105 LOG(VB_GENERAL, LOG_WARNING,
106 "Monitor Function/Enable values not changed so not updating.");
107 emit haveResult(false);
108 Close();
109 return;
110 }
111
112 ZMClient::get()->setMonitorFunction(m_monitor->id, function, enabled);
113
114 emit haveResult(true);
115
116 Close();
117}
118
120
122 :MythScreenType(parent, "zmconsole"),
123 m_popupStack(GetMythMainWindow()->GetStack("popup stack")),
124 m_timeTimer(new QTimer(this)),
125 m_timeFormat(gCoreContext->GetSetting("TimeFormat", "h:mm AP")),
126 m_updateTimer(new QTimer(this))
127{
128 connect(m_timeTimer, &QTimer::timeout, this,
130
131 connect(m_updateTimer, &QTimer::timeout, this,
133}
134
136{
137 delete m_timeTimer;
138}
139
141{
142 // Load the theme for this screen
143 bool foundtheme = LoadWindowFromXML("zoneminder-ui.xml", "zmconsole", this);
144 if (!foundtheme)
145 return false;
146
147 bool err = false;
148 UIUtilE::Assign(this, m_monitorList, "monitor_list", &err);
149 UIUtilE::Assign(this, m_statusText, "status_text", &err);
150 UIUtilE::Assign(this, m_timeText, "time_text", &err);
151 UIUtilE::Assign(this, m_dateText, "date_text", &err);
152 UIUtilE::Assign(this, m_loadText, "load_text", &err);
153 UIUtilE::Assign(this, m_diskText, "disk_text", &err);
154
155 if (err)
156 {
157 LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'zmconsole'");
158 return false;
159 }
160
162
164
166 m_updateTimer->start(100ms);
167
168 updateTime();
169
170 return true;
171}
172
174{
175 QString s = MythDate::current().toLocalTime().toString(m_timeFormat);
176
177 if (s != m_timeText->GetText())
179
180 s = MythDate::current().toLocalTime().toString("dddd\ndd MMM yyyy");
181
182 if (s != m_dateText->GetText())
184}
185
187{
188 m_updateTimer->stop();
192}
193
195{
197
198 if (m_daemonStatus.left(7) == "running")
199 {
200 m_statusText->SetFontState("running");
201 m_statusText->SetText(tr("Running"));
202 }
203 else
204 {
205 m_statusText->SetFontState("stopped");
206 m_statusText->SetText(tr("Stopped"));
207 }
208
209 m_loadText->SetText("Load: " + m_cpuStat);
210 m_diskText->SetText("Disk: " + m_diskStat);
211}
212
214{
216}
217
218bool ZMConsole::keyPressEvent(QKeyEvent *event)
219{
220 if (GetFocusWidget()->keyPressEvent(event))
221 return true;
222
223 QStringList actions;
224 bool handled = GetMythMainWindow()->TranslateKeyPress("Global", event, actions);
225
226 for (int i = 0; i < actions.size() && !handled; i++)
227 {
228 const QString& action = actions[i];
229 handled = true;
230
231 if (action == "MENU")
232 {
234 }
235 else
236 {
237 handled = false;
238 }
239 }
240
241 if (!handled && MythScreenType::keyPressEvent(event))
242 handled = true;
243
244 return handled;
245}
246
248{
249 auto *currentMonitor = m_monitorList->GetItemCurrent()->GetData().value<Monitor*>();
250 if (!currentMonitor)
251 return;
252
253 m_functionDialog = new FunctionDialog(m_popupStack, currentMonitor);
254
256 {
260 }
261}
262
264{
266
267 int pos = m_monitorList->GetCurrentPos();
269
270 for (int x = 0; x < ZMClient::get()->getMonitorCount(); x++)
271 {
272 Monitor *monitor = ZMClient::get()->getMonitorAt(x);
273
274 if (monitor)
275 {
276 auto *item = new MythUIButtonListItem(m_monitorList,
277 "", nullptr, true, MythUIButtonListItem::NotChecked);
278 item->SetData(QVariant::fromValue(monitor));
279 item->SetText(monitor->name, "name");
280 item->SetText(monitor->zmcStatus, "zmcstatus");
281 item->SetText(monitor->zmaStatus, "zmastatus");
282 item->SetText(QString("%1").arg(monitor->events), "eventcount");
283 }
284 }
285
287}
288
290{
291 if (changed)
292 updateStatus();
293}
MythUICheckBox * m_notificationCheck
Definition: zmconsole.h:52
void haveResult(bool)
MythUIButtonList * m_functionList
Definition: zmconsole.h:50
MythUIButton * m_okButton
Definition: zmconsole.h:53
void setMonitorFunction(void)
Definition: zmconsole.cpp:88
bool Create() override
Definition: zmconsole.cpp:39
MythUICheckBox * m_enabledCheck
Definition: zmconsole.h:51
Monitor * m_monitor
Definition: zmconsole.h:48
MythUIText * m_captionText
Definition: zmconsole.h:49
int events
Definition: zmdefines.h:123
QString function
Definition: zmdefines.h:118
int id
Definition: zmdefines.h:115
QString zmaStatus
Definition: zmdefines.h:122
bool enabled
Definition: zmdefines.h:119
bool showNotifications
Definition: zmdefines.h:130
QString name
Definition: zmdefines.h:116
QString zmcStatus
Definition: zmdefines.h:121
bool TranslateKeyPress(const QString &Context, QKeyEvent *Event, QStringList &Actions, bool AllowJumps=true)
Get a list of actions for a keypress in the given context.
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
Screen in which all other widgets are contained and rendered.
void BuildFocusList(void)
MythUIType * GetFocusWidget(void) const
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
bool SetFocusWidget(MythUIType *widget=nullptr)
virtual void Close()
virtual QString GetValue() const
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.
int GetCurrentPos() const
bool MoveToNamedPosition(const QString &position_name)
void Clicked()
void SetCheckState(MythUIStateType::StateType state)
MythUIStateType::StateType GetCheckState() const
QString GetText(void) const
Definition: mythuitext.h:45
void SetFontState(const QString &state)
Definition: mythuitext.cpp:202
virtual void SetText(const QString &text)
Definition: mythuitext.cpp:115
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
int getMonitorCount(void)
Definition: zmclient.cpp:846
void updateMonitorStatus(void)
Definition: zmclient.cpp:275
Monitor * getMonitorAt(int pos)
Definition: zmclient.cpp:852
void getServerStatus(QString &status, QString &cpuStat, QString &diskStat)
Definition: zmclient.cpp:255
static ZMClient * get(void)
Definition: zmclient.cpp:37
void saveNotificationMonitors(void)
Definition: zmclient.cpp:952
void setMonitorFunction(int monitorID, const QString &function, bool enabled)
Definition: zmclient.cpp:939
QString m_timeFormat
Definition: zmconsole.h:91
QString m_cpuStat
Definition: zmconsole.h:94
QString m_diskStat
Definition: zmconsole.h:95
QString m_daemonStatus
Definition: zmconsole.h:93
void updateMonitorList()
Definition: zmconsole.cpp:263
void getMonitorStatus(void)
Definition: zmconsole.cpp:213
MythUIText * m_statusText
Definition: zmconsole.h:81
void functionChanged(bool changed)
Definition: zmconsole.cpp:289
FunctionDialog * m_functionDialog
Definition: zmconsole.h:87
void updateTime()
Definition: zmconsole.cpp:173
MythUIButtonList * m_monitorList
Definition: zmconsole.h:79
void showEditFunctionPopup()
Definition: zmconsole.cpp:247
bool Create(void) override
Definition: zmconsole.cpp:140
QTimer * m_timeTimer
Definition: zmconsole.h:90
QTimer * m_updateTimer
Definition: zmconsole.h:97
ZMConsole(MythScreenStack *parent)
Definition: zmconsole.cpp:121
MythUIText * m_timeText
Definition: zmconsole.h:82
MythUIText * m_loadText
Definition: zmconsole.h:84
MythUIText * m_dateText
Definition: zmconsole.h:83
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: zmconsole.cpp:218
MythUIText * m_diskText
Definition: zmconsole.h:85
MythScreenStack * m_popupStack
Definition: zmconsole.h:88
void getDaemonStatus()
Definition: zmconsole.cpp:194
~ZMConsole() override
Definition: zmconsole.cpp:135
void updateStatus()
Definition: zmconsole.cpp:186
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
MythMainWindow * GetMythMainWindow(void)
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:15
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
Definition: mythuiutils.h:27
constexpr std::chrono::milliseconds TIME_UPDATE_TIME
Definition: zmconsole.cpp:37
constexpr std::chrono::milliseconds STATUS_UPDATE_TIME
Definition: zmconsole.cpp:36