Rabbit Remote Control 0.0.34
All Classes Namespaces Functions Variables Enumerations Enumerator Modules Pages
ConnecterPlayer.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QLoggingCategory>
4#include "ConnecterPlayer.h"
5#include "ConnectPlayer.h"
6#include "DlgPlayer.h"
7#include "PluginClient.h"
8
9static Q_LOGGING_CATEGORY(log, "Player.Connecter")
10
12 : CConnecterThread(plugin)
13{
14 qDebug(log) << Q_FUNC_INFO;
15}
16
17CConnecterPlayer::~CConnecterPlayer()
18{
19 qDebug(log) << Q_FUNC_INFO;
20}
21
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 check = connect(&m_Player, SIGNAL(sigViewerFocusIn(QWidget*)),
38 this, SIGNAL(sigViewerFocusIn(QWidget*)));
39 Q_ASSERT(check);
40#endif
42
43 return nRet;
44}
45
46int CConnecterPlayer::InitialMenu()
47{
48 bool check = false;
49 int nRet = 0;
50
51#if HAVE_QT6_RECORD
52 m_pRecord = new QAction(
53 QIcon::fromTheme("media-record"), tr("Record"), &m_Menu);
54 m_pRecord->setCheckable(true);
55 check = connect(m_pRecord, SIGNAL(toggled(bool)),
56 this, SLOT(slotRecord(bool)));
57 Q_ASSERT(check);
58
59 m_pRecordPause = new QAction(
60 QIcon::fromTheme("media-playback-pause"), tr("Record pause"), &m_Menu);
61 m_pRecordPause->setCheckable(true);
62 m_pRecordPause->setEnabled(false);
63 check = connect(m_pRecordPause, SIGNAL(toggled(bool)),
64 this, SIGNAL(sigRecordPause(bool)));
65 Q_ASSERT(check);
66#endif
67
68 m_pScreenShot = new QAction(QIcon::fromTheme("camera-photo"),
69 tr("ScreenShot"), &m_Menu);
70 check = connect(m_pScreenShot, SIGNAL(triggered()),
71 this, SLOT(slotScreenShot()));
72 Q_ASSERT(check);
73
74#ifdef HAVE_QVideoWidget
75 m_Menu.addAction(m_Player.m_paStart);
76 check = connect(this, &CConnecterPlayer::sigConnected,
77 m_Player.m_paStart, &QAction::toggle);
78 Q_ASSERT(check);
79 check = connect(m_Player.m_paStart, SIGNAL(toggled(bool)),
80 this, SIGNAL(sigStart(bool)));
81 Q_ASSERT(check);
82
83 m_Menu.addAction(m_Player.m_paPause);
84 check = connect(m_Player.m_paPause, SIGNAL(toggled(bool)),
85 this, SIGNAL(sigPause(bool)));
86 Q_ASSERT(check);
87
88#if HAVE_QT6_RECORD
89 m_Menu.addAction(m_Player.m_paRecord);
90 check = connect(m_Player.m_paRecord, SIGNAL(toggled(bool)),
91 m_pRecord ,SIGNAL(toggled(bool)));
92 Q_ASSERT(check);
93
94 m_Menu.addAction(m_Player.m_paRecordPause);
95 check = connect(m_Player.m_paRecordPause, SIGNAL(toggled(bool)),
96 m_pRecordPause, SIGNAL(toggled(bool)));
97 Q_ASSERT(check);
98#endif
99
100 m_Menu.addAction(m_Player.m_paScreenShot);
101 check = connect(m_Player.m_paScreenShot, &QAction::triggered,
102 m_pScreenShot, &QAction::triggered);
103 Q_ASSERT(check);
104
105 m_Menu.addSeparator();
106
107 m_Menu.addAction(m_Player.m_paSettings);
108 check = connect(m_Player.m_paSettings, &QAction::triggered,
109 m_pSettings, &QAction::triggered);
110 Q_ASSERT(check);
111
112 check = connect(this, &CConnecterPlayer::sigConnected,
113 this, [&](){
114 m_Player.SetParameter(&m_Parameters);
115 });
116 Q_ASSERT(check);
117 check = connect(&m_Player, SIGNAL(sigChangePosition(qint64)),
118 this, SIGNAL(sigChangePosition(qint64)));
119 Q_ASSERT(check);
120#else
121 QAction* pStart = m_Menu.addAction(
122 QIcon::fromTheme("media-playback-start"), tr("Start"));
123 pStart->setCheckable(true);
124 check = connect(this, &CConnecterPlayer::sigConnected,
125 pStart, &QAction::toggle);
126 Q_ASSERT(check);
127 check = connect(pStart, &QAction::toggled,
128 this, [&](bool checked){
129 QAction* p = qobject_cast<QAction*>(sender());
130 if(!p) return;
131 if(p->isChecked()) {
132 p->setIcon(QIcon::fromTheme("media-playback-stop"));
133 p->setText(tr("Stop"));
134 m_pPause->setEnabled(true);
135 m_pPause->setChecked(false);
136 m_pScreenShot->setEnabled(true);
137#if HAVE_QT6_RECORD
138 m_pRecord->setEnabled(true);
139 m_pRecord->setChecked(false);
140 m_pRecordPause->setEnabled(true);
141 m_pRecordPause->setChecked(false);
142#endif
143 } else {
144 p->setIcon(QIcon::fromTheme("media-playback-start"));
145 p->setText(tr("Start"));
146 m_pPause->setEnabled(false);
147 m_pPause->setChecked(false);
148 m_pScreenShot->setEnabled(false);
149#if HAVE_QT6_RECORD
150 m_pRecord->setEnabled(false);
151 m_pRecord->setChecked(false);
152 m_pRecordPause->setEnabled(false);
153 m_pRecordPause->setChecked(false);
154#endif
155 }
156 emit sigStart(checked);
157 });
158 Q_ASSERT(check);
159 m_pPause = m_Menu.addAction(
160 QIcon::fromTheme("media-playback-pause"), tr("pause"));
161 m_pPause->setCheckable(true);
162 check = connect(m_pPause, SIGNAL(toggled(bool)),
163 this, SIGNAL(sigPause(bool)));
164 Q_ASSERT(check);
165#if HAVE_QT6_RECORD
166 m_Menu.addAction(m_pRecord);
167 m_Menu.addAction(m_pRecordPause);
168#endif
169 m_Menu.addAction(m_pScreenShot);
170 m_Menu.addSeparator();
171 m_Menu.addAction(m_pSettings);
172#endif
173 return nRet;
174}
175
177{
178 qDebug(log) << Q_FUNC_INFO;
179 int nRet = 0;
181 return nRet;
182}
183
185{
186 QDialog* pDlg = new CDlgPlayer(&m_Parameters, parent);
187 return pDlg;
188}
189
191{
192 CConnect* p = new CConnectPlayer(this);
193 return p;
194}
195
196void CConnecterPlayer::slotScreenShot()
197{
198 emit sigScreenShot();
199}
200
201#if HAVE_QVideoWidget
203{
204 return &m_Player;
205}
206
207QVideoSink *CConnecterPlayer::GetVideoSink()
208{
209 return m_Player.videoSink();
210}
211
212void CConnecterPlayer::slotPositionChanged(qint64 pos, qint64 duration)
213{
214 m_Player.slotPositionChanged(pos, duration);
215}
216
217void CConnecterPlayer::slotPlaybackError(
218 QMediaPlayer::Error error, const QString &errorString)
219{
220 if(m_Player.m_paStart->isChecked())
221 m_Player.m_paStart->setChecked(false);
222}
223
224void CConnecterPlayer::slotPlaybackStateChanged(QMediaPlayer::PlaybackState state)
225{
226 if(QMediaPlayer::StoppedState == state
227 && m_Player.m_paStart->isChecked())
228 m_Player.m_paStart->setChecked(false);
229}
230
231#if HAVE_QT6_RECORD
232void CConnecterPlayer::slotRecordStateChanged(QMediaRecorder::RecorderState state)
233{
234 if(QMediaRecorder::StoppedState == state
235 && m_Player.m_paRecord->isCheckable())
236 m_Player.m_paRecord->setChecked(false);
237}
238#endif
239
240#endif
Connect interface.
Definition Connect.h:45
virtual qint16 Version() override
Version.
virtual int Clean() override
Clean parameters and resource.
virtual CConnect * InstanceConnect() override
New connect.
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
Open settgins dialog.
virtual int Initial() override
Initial parameters and resource.
It starts a background thread by default.
virtual int Initial() override
Initial parameters and resource.
virtual int Clean() override
Clean parameters and resource.
void sigConnected()
Successful connection signal.
virtual QWidget * GetViewer()=0
Get Viewer.
void sigViewerFocusIn(QWidget *pView)
The view is focus.
The plugin interface.