Rabbit Remote Control 0.1.0-bate16
Loading...
Searching...
No Matches
OperatePlayer.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QLoggingCategory>
4#include "OperatePlayer.h"
5#include "BackendPlayer.h"
6#include "DlgPlayer.h"
7#include "Plugin.h"
8
9static Q_LOGGING_CATEGORY(log, "Player.Operate")
10
12 : COperateDesktop(plugin)
13{
14 qDebug(log) << Q_FUNC_INFO;
15}
16
17COperatePlayer::~COperatePlayer()
18{
19 qDebug(log) << Q_FUNC_INFO;
20}
21
22const qint16 COperatePlayer::Version() const
23{
24 return 0;
25}
26
28{
29 qDebug(log) << Q_FUNC_INFO;
30 int nRet = 0;
31
32 nRet = SetParameter(&m_Parameters);
33 if(nRet) return nRet;
34
35 bool check = false;
36#if HAVE_QVideoWidget
37 m_Player.SetParameter(&m_Parameters);
38 check = connect(&m_Player, SIGNAL(sigViewerFocusIn(QWidget*)),
39 this, SIGNAL(sigViewerFocusIn(QWidget*)));
40 Q_ASSERT(check);
41#endif
43
44 return nRet;
45}
46
47int COperatePlayer::InitialMenu()
48{
49 bool check = false;
50 int nRet = 0;
51
52#if HAVE_QT6_RECORD
53 m_pRecord = new QAction(
54 QIcon::fromTheme("media-record"), tr("Record"), &m_Menu);
55 m_pRecord->setCheckable(true);
56 check = connect(m_pRecord, SIGNAL(toggled(bool)),
57 this, SLOT(slotRecord(bool)));
58 Q_ASSERT(check);
59
60 m_pRecordPause = new QAction(
61 QIcon::fromTheme("media-playback-pause"), tr("Record pause"), &m_Menu);
62 m_pRecordPause->setCheckable(true);
63 m_pRecordPause->setEnabled(false);
64 check = connect(m_pRecordPause, SIGNAL(toggled(bool)),
65 this, SIGNAL(sigRecordPause(bool)));
66 Q_ASSERT(check);
67#endif
68
69 m_pScreenShot = new QAction(QIcon::fromTheme("camera-photo"),
70 tr("ScreenShot"), &m_Menu);
71 check = connect(m_pScreenShot, SIGNAL(triggered()),
72 this, SLOT(slotScreenShot()));
73 Q_ASSERT(check);
74
75#ifdef HAVE_QVideoWidget
76 m_Menu.addAction(m_Player.m_paStart);
77 check = connect(this, &COperatePlayer::sigRunning,
78 m_Player.m_paStart, &QAction::toggle);
79 Q_ASSERT(check);
80 check = connect(m_Player.m_paStart, SIGNAL(toggled(bool)),
81 this, SIGNAL(sigStart(bool)));
82 Q_ASSERT(check);
83
84 m_Menu.addAction(m_Player.m_paPause);
85 check = connect(m_Player.m_paPause, SIGNAL(toggled(bool)),
86 this, SIGNAL(sigPause(bool)));
87 Q_ASSERT(check);
88
89#if HAVE_QT6_RECORD
90 m_Menu.addAction(m_Player.m_paRecord);
91 check = connect(m_Player.m_paRecord, SIGNAL(toggled(bool)),
92 m_pRecord ,SIGNAL(toggled(bool)));
93 Q_ASSERT(check);
94
95 m_Menu.addAction(m_Player.m_paRecordPause);
96 check = connect(m_Player.m_paRecordPause, SIGNAL(toggled(bool)),
97 m_pRecordPause, SIGNAL(toggled(bool)));
98 Q_ASSERT(check);
99#endif
100
101 m_Menu.addAction(m_Player.m_paScreenShot);
102 check = connect(m_Player.m_paScreenShot, &QAction::triggered,
103 m_pScreenShot, &QAction::triggered);
104 Q_ASSERT(check);
105
106 m_Menu.addSeparator();
107
108 m_Menu.addAction(m_Player.m_paSettings);
109 check = connect(m_Player.m_paSettings, &QAction::triggered,
110 m_pActionSettings, &QAction::triggered);
111 Q_ASSERT(check);
112
113 check = connect(this, &COperatePlayer::sigRunning,
114 this, [&](){
115 m_Player.SetParameter(&m_Parameters);
116 });
117 Q_ASSERT(check);
118 check = connect(&m_Player, SIGNAL(sigChangePosition(qint64)),
119 this, SIGNAL(sigChangePosition(qint64)));
120 Q_ASSERT(check);
121#else
122 QAction* pStart = m_Menu.addAction(
123 QIcon::fromTheme("media-playback-start"), tr("Start"));
124 pStart->setCheckable(true);
125 check = connect(this, &COperatePlayer::sigRunning,
126 pStart, &QAction::toggle);
127 Q_ASSERT(check);
128 check = connect(pStart, &QAction::toggled,
129 this, [&](bool checked){
130 QAction* p = qobject_cast<QAction*>(sender());
131 if(!p) return;
132 if(p->isChecked()) {
133 p->setIcon(QIcon::fromTheme("media-playback-stop"));
134 p->setText(tr("Stop"));
135 m_pPause->setEnabled(true);
136 m_pPause->setChecked(false);
137 m_pScreenShot->setEnabled(true);
138#if HAVE_QT6_RECORD
139 m_pRecord->setEnabled(true);
140 m_pRecord->setChecked(false);
141 m_pRecordPause->setEnabled(true);
142 m_pRecordPause->setChecked(false);
143#endif
144 } else {
145 p->setIcon(QIcon::fromTheme("media-playback-start"));
146 p->setText(tr("Start"));
147 m_pPause->setEnabled(false);
148 m_pPause->setChecked(false);
149 m_pScreenShot->setEnabled(false);
150#if HAVE_QT6_RECORD
151 m_pRecord->setEnabled(false);
152 m_pRecord->setChecked(false);
153 m_pRecordPause->setEnabled(false);
154 m_pRecordPause->setChecked(false);
155#endif
156 }
157 emit sigStart(checked);
158 });
159 Q_ASSERT(check);
160 m_pPause = m_Menu.addAction(
161 QIcon::fromTheme("media-playback-pause"), tr("pause"));
162 m_pPause->setCheckable(true);
163 check = connect(m_pPause, SIGNAL(toggled(bool)),
164 this, SIGNAL(sigPause(bool)));
165 Q_ASSERT(check);
166#if HAVE_QT6_RECORD
167 m_Menu.addAction(m_pRecord);
168 m_Menu.addAction(m_pRecordPause);
169#endif
170 m_Menu.addAction(m_pScreenShot);
171 m_Menu.addSeparator();
172 m_Menu.addAction(GetActionSettings());
173#endif
174 return nRet;
175}
176
178{
179 qDebug(log) << Q_FUNC_INFO;
180 int nRet = 0;
181 nRet = COperateDesktop::Clean();
182 return nRet;
183}
184
186{
187 QDialog* pDlg = new CDlgPlayer(&m_Parameters, parent);
188 return pDlg;
189}
190
192{
193 CBackend* p = new CBackendPlayer(this);
194 return p;
195}
196
197void COperatePlayer::slotScreenShot()
198{
199 emit sigScreenShot();
200}
201
202#if HAVE_QVideoWidget
204{
205 return &m_Player;
206}
207
208QVideoSink *COperatePlayer::GetVideoSink()
209{
210 return m_Player.videoSink();
211}
212
213void COperatePlayer::slotPositionChanged(qint64 pos, qint64 duration)
214{
215 m_Player.slotPositionChanged(pos, duration);
216}
217
218void COperatePlayer::slotPlaybackError(
219 QMediaPlayer::Error error, const QString &errorString)
220{
221 if(m_Player.m_paStart->isChecked())
222 m_Player.m_paStart->setChecked(false);
223}
224
225void COperatePlayer::slotPlaybackStateChanged(QMediaPlayer::PlaybackState state)
226{
227 if(QMediaPlayer::StoppedState == state
228 && m_Player.m_paStart->isChecked())
229 m_Player.m_paStart->setChecked(false);
230}
231
232#if HAVE_QT6_RECORD
233void COperatePlayer::slotRecordStateChanged(QMediaRecorder::RecorderState state)
234{
235 if(QMediaRecorder::StoppedState == state
236 && m_Player.m_paRecord->isCheckable())
237 m_Player.m_paRecord->setChecked(false);
238}
239#endif // HAVE_QT6_RECORD
240
241#endif // HAVE_QVideoWidget
242
244{
245 return COperate::Description();
246}
Backend interface.
Definition Backend.h:52
Remote desktop operate interface.
virtual int SetParameter(CParameterDesktop *p)
Set parameter pointer.
virtual int Initial() override
Initial parameters and resource.
virtual int Clean() override
Clean parameters and resource.
virtual int Clean() override
Clean parameters and resource.
virtual const QString Description() override
[The name of the desktop operate]
virtual CBackend * InstanceBackend() override
New CBackend.
virtual int Initial() override
Initial parameters and resource.
virtual const qint16 Version() const override
[The description of the desktop operate]
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
Open settgins dialog.
void sigRunning()
Start success signal.
virtual QWidget * GetViewer()=0
Get Viewer.
void sigViewerFocusIn(QWidget *pView)
The view is focus.
virtual const QString Description()
Description.
Definition Operate.cpp:51
Plugin interface.
Definition Plugin.h:15