Rabbit Remote Control 0.1.0-bate16
Loading...
Searching...
No Matches
DlgPlayer.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QCamera>
4#include <QCameraDevice>
5#include <QMediaDevices>
6#include <QAudioDevice>
7#include <QFileDialog>
8#include <QStandardPaths>
9#include <QMediaRecorder>
10#include <QMediaFormat>
11#include <QLoggingCategory>
12#include <QScreen>
13#include <QGuiApplication>
14#include <QMessageBox>
15
16#include "DlgPlayer.h"
17#include "ui_DlgPlayer.h"
18
19static Q_LOGGING_CATEGORY(log, "Player.Connect")
20CDlgPlayer::CDlgPlayer(CParameterPlayer *pPara, QWidget *parent)
21 : QDialog(parent)
22 , ui(new Ui::CDlgPlayer)
23 , m_pParameters(pPara)
24{
25 ui->setupUi(this);
26
27 if(!m_pParameters->GetName().isEmpty())
28 ui->leName->setText(m_pParameters->GetName());
29
30 if(QMediaDevices::videoInputs().size() > 0)
31 {
32 ui->cmbType->addItem(tr("Camera"), (int)CParameterPlayer::TYPE::Camera);
33 foreach(const QCameraDevice &cameraDevice, QMediaDevices::videoInputs()) {
34 ui->cmbCamera->addItem(cameraDevice.description());
35 }
36 if(m_pParameters->GetCamera() > -1)
37 ui->cmbCamera->setCurrentIndex(m_pParameters->GetCamera());
38 }
39
40 ui->cmbType->addItem(tr("Url"), (int)CParameterPlayer::TYPE::Url);
41 ui->leUrl->setText(m_pParameters->GetUrl());
42
43 int nIndex = ui->cmbType->findData((int)m_pParameters->GetType());
44 if(-1 < nIndex) {
45 ui->cmbType->setCurrentIndex(nIndex);
46 on_cmbType_currentIndexChanged(nIndex);
47 }
48
49 foreach(auto ai, QMediaDevices::audioInputs())
50 {
51 ui->cmbAudioInput->addItem(ai.description());
52 }
53 ui->gbAudioInput->setCheckable(true);
54 if(QMediaDevices::audioInputs().size() > 0)
55 ui->gbAudioInput->setChecked(m_pParameters->GetEnableAudioInput());
56 else {
57 ui->gbAudioInput->setEnabled(false);
58 ui->gbAudioInput->setChecked(false);
59 }
60 if(m_pParameters->GetAudioInput() != -1)
61 ui->cmbAudioInput->setCurrentIndex(m_pParameters->GetAudioInput());
62 ui->cbAudioInputMuted->setChecked(m_pParameters->GetAudioInputMuted());
63 ui->dsAudioInputVolume->setValue(m_pParameters->GetAudioInputVolume());
64
65 foreach(auto ao, QMediaDevices::audioOutputs())
66 ui->cmbAudioOutput->addItem(ao.description());
67 ui->gbAudioOutput->setCheckable(true);
68 if(QMediaDevices::audioOutputs().size() > 0)
69 ui->gbAudioOutput->setChecked(m_pParameters->GetEnableAudioOutput());
70 else {
71 ui->gbAudioOutput->setEnabled(false);
72 ui->gbAudioOutput->setChecked(false);
73 }
74 if(m_pParameters->GetAudioOutput() != -1)
75 ui->cmbAudioOutput->setCurrentIndex(m_pParameters->GetAudioOutput());
76 ui->cbAudioOutputMuted->setCheckable(true);
77 ui->cbAudioOutputMuted->setChecked(m_pParameters->GetAudioOutputMuted());
78 ui->dsAudioOutputVolume->setValue(m_pParameters->GetAudioOutputVolume());
79
80 ui->cbEnableSubtitle->setCheckable(true);
81 ui->cbEnableSubtitle->setChecked(m_pParameters->GetSubtitle());
82
83 m_pRecordUI = new CParameterRecordUI(ui->tabWidget);
84 m_pRecordUI->SetParameter(&m_pParameters->m_Record);
85 ui->tabWidget->addTab(m_pRecordUI, m_pRecordUI->windowIcon(), m_pRecordUI->windowTitle());
86
87#ifndef HAVE_QVideoWidget
88 ui->lbHideToolBar->hide();
89 ui->spHideToolBar->hide();
90#endif
91 ui->spHideToolBar->setValue(m_pParameters->GetHideToolBar());
92}
93
94CDlgPlayer::~CDlgPlayer()
95{
96 delete ui;
97}
98
99void CDlgPlayer::accept()
100{
101 int nRet = 0;
102
103 if(!ui->leName->text().isEmpty())
104 m_pParameters->SetName(ui->leName->text());
105 if((ui->cmbType->currentData().value<CParameterPlayer::TYPE>()
106 == CParameterPlayer::TYPE::Url) && ui->leUrl->text().isEmpty()) {
107 ui->leUrl->setFocus();
108 ui->tabWidget->setCurrentIndex(0);
109 QString szErr = tr("The url is empty. please set!");
110 QMessageBox::critical(this, tr("Error"), szErr);
111 qCritical(log) << szErr;
112 return;
113 }
114
115 if(!m_pRecordUI->CheckValidity(true)) {
116 ui->tabWidget->setCurrentWidget(m_pRecordUI);
117 return;
118 }
119
120 m_pParameters->SetType(
121 ui->cmbType->currentData().value<CParameterPlayer::TYPE>());
122 m_pParameters->SetUrl(ui->leUrl->text());
123 m_pParameters->SetCamera(ui->cmbCamera->currentIndex());
124 switch(m_pParameters->GetType()) {
125 case CParameterPlayer::TYPE::Camera: {
126 int nIndex = m_pParameters->GetCamera();
127 if(-1 < nIndex && nIndex < QMediaDevices::videoInputs().size())
128 if(ui->leName->text().isEmpty())
129 m_pParameters->SetName(
130 tr("Camera: ")
131 + QMediaDevices::videoInputs().at(nIndex).description());
132 break;
133 }
134 case CParameterPlayer::TYPE::Url:
135 QFileInfo fi(m_pParameters->GetUrl());
136 if(ui->leName->text().isEmpty())
137 m_pParameters->SetName(tr("Url: ") + fi.fileName());
138 break;
139 }
140
141 m_pParameters->SetHideToolBar(ui->spHideToolBar->value());
142
143 m_pParameters->SetSubtitle(ui->cbEnableSubtitle->isChecked());
144 m_pParameters->SetEnableAudioInput(ui->gbAudioInput->isChecked());
145 m_pParameters->SetAudioInput(ui->cmbAudioInput->currentIndex());
146 m_pParameters->SetAudioInputMuted(ui->cbAudioInputMuted->isChecked());
147 m_pParameters->SetAudioInputVolume(ui->dsAudioInputVolume->value());
148 m_pParameters->SetEnableAudioOutput(ui->gbAudioOutput->isChecked());
149 m_pParameters->SetAudioOutput(ui->cmbAudioOutput->currentIndex());
150 m_pParameters->SetAudioOutputMuted(ui->cbAudioOutputMuted->isChecked());
151 m_pParameters->SetAudioOutputVolume(ui->dsAudioOutputVolume->value());
152
153 nRet = m_pRecordUI->Accept();
154 if(nRet)
155 return;
156
157 QDialog::accept();
158}
159
160void CDlgPlayer::on_cmbType_currentIndexChanged(int index)
161{
162 ui->cmbCamera->setVisible(false);
163 ui->leUrl->setVisible(false);
164 ui->pbUrlBrowse->setVisible(false);
165
166 CParameterPlayer::TYPE type
167 = (CParameterPlayer::TYPE)ui->cmbType->itemData(index).toInt();
168 switch(type) {
169 case CParameterPlayer::TYPE::Camera:
170 ui->cmbCamera->setVisible(true);
171 ui->gbAudioInput->setChecked(true);
172 ui->cbEnableSubtitle->hide();
173 break;
174 case CParameterPlayer::TYPE::Url:
175 ui->leUrl->setVisible(true);
176 ui->pbUrlBrowse->setVisible(true);
177 ui->gbAudioInput->setChecked(false);
178 ui->cbEnableSubtitle->show();
179 break;
180 default:
181 break;
182 }
183}
184
185void CDlgPlayer::on_pbUrlBrowse_clicked()
186{
187 /*
188 QMediaRecorder recorder;
189 auto formats = recorder.mediaFormat().supportedFileFormats(QMediaFormat::Decode);
190 qDebug(log) << "Support file formats:" << formats;
191 foreach(auto f, formats) {
192 qDebug(log) << "File format name:" << QMediaFormat::fileFormatName(f);
193 } //*/
194 QString szFilter(tr("Media files(* wmv *.aac *.WebM *.mtk *.ogg *.mp4 *.mov *.avi);;All files(*.*)"));
195 QString szFile = QFileDialog::getOpenFileName(
196 this, tr("Open file"),
197 QStandardPaths::writableLocation(QStandardPaths::MoviesLocation),
198 szFilter);
199 if(!szFile.isEmpty())
200 ui->leUrl->setText(szFile);
201}