玉兔远程控制 0.1.0-bate16
载入中...
搜索中...
未找到
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}
后端接口。它由协议插件实现。 它默认启动一个定时器来开启一个非 Qt 事件循环(就是普通的循环处理)。 详见: Start()、 slotTimeOut()、 OnProcess() 。 当然,它仍然支...
远程桌面操作接口
virtual int SetParameter(CParameterDesktop *p)
设置参数指针
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
新建后端实例。它的所有者是调用者, 如果调用者不再使用它,调用者必须负责释放它。
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
得到设置对话框
void sigRunning()
开始成功信号。仅由插件触发。
virtual QWidget * GetViewer()=0
得到显示视图
void sigViewerFocusIn(QWidget *pView)
视图获得焦点
virtual const QString Description()
描述
插件接口