update:将控制功能移植到controller中

This commit is contained in:
Barry 2019-06-20 10:08:24 +08:00
commit b2c4da7243
6 changed files with 175 additions and 166 deletions

View file

@ -1,4 +1,5 @@
#include <QCoreApplication> #include <QApplication>
#include <QClipboard>
#include "controller.h" #include "controller.h"
#include "videosocket.h" #include "videosocket.h"
@ -43,6 +44,116 @@ void Controller::test(QRect rc)
postControlMsg(controlMsg); postControlMsg(controlMsg);
} }
void Controller::postTurnOn()
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_BACK_OR_SCREEN_ON);
if (!controlMsg) {
return;
}
postControlMsg(controlMsg);
}
void Controller::postGoHome()
{
postKeyCodeClick(AKEYCODE_HOME);
}
void Controller::postGoMenu()
{
postKeyCodeClick(AKEYCODE_MENU);
}
void Controller::postGoBack()
{
postKeyCodeClick(AKEYCODE_BACK);
}
void Controller::postAppSwitch()
{
postKeyCodeClick(AKEYCODE_APP_SWITCH);
}
void Controller::postPower()
{
postKeyCodeClick(AKEYCODE_POWER);
}
void Controller::postVolumeUp()
{
postKeyCodeClick(AKEYCODE_VOLUME_UP);
}
void Controller::postVolumeDown()
{
postKeyCodeClick(AKEYCODE_VOLUME_DOWN);
}
void Controller::expandNotificationPanel()
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_EXPAND_NOTIFICATION_PANEL);
if (!controlMsg) {
return;
}
postControlMsg(controlMsg);
}
void Controller::collapseNotificationPanel()
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_COLLAPSE_NOTIFICATION_PANEL);
if (!controlMsg) {
return;
}
postControlMsg(controlMsg);
}
void Controller::requestDeviceClipboard()
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_GET_CLIPBOARD);
if (!controlMsg) {
return;
}
postControlMsg(controlMsg);
}
void Controller::setDeviceClipboard()
{
QClipboard *board = QApplication::clipboard();
QString text = board->text();
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_SET_CLIPBOARD);
if (!controlMsg) {
return;
}
controlMsg->setSetClipboardMsgData(text);
postControlMsg(controlMsg);
}
void Controller::clipboardPaste()
{
QClipboard *board = QApplication::clipboard();
QString text = board->text();
postTextInput(text);
}
void Controller::postTextInput(QString& text)
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_INJECT_TEXT);
if (!controlMsg) {
return;
}
controlMsg->setInjectTextMsgData(text);
postControlMsg(controlMsg);
}
void Controller::setScreenPowerMode(ControlMsg::ScreenPowerMode mode)
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_SET_SCREEN_POWER_MODE);
if (!controlMsg) {
return;
}
controlMsg->setSetScreenPowerModeData(mode);
postControlMsg(controlMsg);
}
void Controller::mouseEvent(const QMouseEvent *from, const QSize &frameSize, const QSize &showSize) void Controller::mouseEvent(const QMouseEvent *from, const QSize &frameSize, const QSize &showSize)
{ {
if (m_inputConvert) { if (m_inputConvert) {
@ -87,3 +198,20 @@ bool Controller::sendControl(const QByteArray &buffer)
} }
return len == buffer.length() ? true : false; return len == buffer.length() ? true : false;
} }
void Controller::postKeyCodeClick(AndroidKeycode keycode)
{
ControlMsg* controlEventDown = new ControlMsg(ControlMsg::CMT_INJECT_KEYCODE);
if (!controlEventDown) {
return;
}
controlEventDown->setInjectKeycodeMsgData(AKEY_EVENT_ACTION_DOWN, keycode, AMETA_NONE);
postControlMsg(controlEventDown);
ControlMsg* controlEventUp = new ControlMsg(ControlMsg::CMT_INJECT_KEYCODE);
if (!controlEventUp) {
return;
}
controlEventUp->setInjectKeycodeMsgData(AKEY_EVENT_ACTION_UP, keycode, AMETA_NONE);
postControlMsg(controlEventUp);
}

View file

@ -15,10 +15,27 @@ public:
Controller(QObject* parent = Q_NULLPTR); Controller(QObject* parent = Q_NULLPTR);
virtual ~Controller(); virtual ~Controller();
void setControlSocket(QTcpSocket* controlSocket); void setControlSocket(QTcpSocket* controlSocket);
void postControlMsg(ControlMsg* controlMsg); void postControlMsg(ControlMsg* controlMsg);
void test(QRect rc); void test(QRect rc);
// turn the screen on if it was off, press BACK otherwise
void postTurnOn();
void postGoHome();
void postGoMenu();
void postGoBack();
void postAppSwitch();
void postPower();
void postVolumeUp();
void postVolumeDown();
void expandNotificationPanel();
void collapseNotificationPanel();
void requestDeviceClipboard();
void setDeviceClipboard();
void clipboardPaste();
void postTextInput(QString& text);
void setScreenPowerMode(ControlMsg::ScreenPowerMode mode);
// for input convert // for input convert
void mouseEvent(const QMouseEvent* from, const QSize& frameSize, const QSize& showSize); void mouseEvent(const QMouseEvent* from, const QSize& frameSize, const QSize& showSize);
void wheelEvent(const QWheelEvent* from, const QSize& frameSize, const QSize& showSize); void wheelEvent(const QWheelEvent* from, const QSize& frameSize, const QSize& showSize);
@ -32,6 +49,7 @@ protected:
private: private:
bool sendControl(const QByteArray& buffer); bool sendControl(const QByteArray& buffer);
void postKeyCodeClick(AndroidKeycode keycode);
private: private:
QPointer<QTcpSocket> m_controlSocket; QPointer<QTcpSocket> m_controlSocket;

View file

@ -242,12 +242,13 @@ void Dialog::on_alwaysTopCheck_stateChanged(int arg1)
void Dialog::on_closeScreenCheck_stateChanged(int arg1) void Dialog::on_closeScreenCheck_stateChanged(int arg1)
{ {
Q_UNUSED(arg1);
if (!m_videoForm) { if (!m_videoForm) {
return; return;
} }
if (ui->closeScreenCheck->isChecked()) { if (ui->closeScreenCheck->isChecked()) {
m_videoForm->setScreenPowerMode(ControlMsg::SPM_OFF); m_videoForm->getController()->setScreenPowerMode(ControlMsg::SPM_OFF);
} else { } else {
m_videoForm->setScreenPowerMode(ControlMsg::SPM_NORMAL); m_videoForm->getController()->setScreenPowerMode(ControlMsg::SPM_NORMAL);
} }
} }

View file

@ -82,62 +82,62 @@ void ToolForm::on_fullScreenBtn_clicked()
void ToolForm::on_returnBtn_clicked() void ToolForm::on_returnBtn_clicked()
{ {
if (m_videoForm) { if (m_videoForm) {
m_videoForm->postGoBack(); m_videoForm->getController()->postGoBack();
} }
} }
void ToolForm::on_homeBtn_clicked() void ToolForm::on_homeBtn_clicked()
{ {
if (m_videoForm) { if (m_videoForm) {
m_videoForm->postGoHome(); m_videoForm->getController()->postGoHome();
} }
} }
void ToolForm::on_menuBtn_clicked() void ToolForm::on_menuBtn_clicked()
{ {
if (m_videoForm) { if (m_videoForm) {
m_videoForm->postGoMenu(); m_videoForm->getController()->postGoMenu();
} }
} }
void ToolForm::on_appSwitchBtn_clicked() void ToolForm::on_appSwitchBtn_clicked()
{ {
if (m_videoForm) { if (m_videoForm) {
m_videoForm->postAppSwitch(); m_videoForm->getController()->postAppSwitch();
} }
} }
void ToolForm::on_powerBtn_clicked() void ToolForm::on_powerBtn_clicked()
{ {
if (m_videoForm) { if (m_videoForm) {
m_videoForm->postPower(); m_videoForm->getController()->postPower();
} }
} }
void ToolForm::on_volumeUpBtn_clicked() void ToolForm::on_volumeUpBtn_clicked()
{ {
if (m_videoForm) { if (m_videoForm) {
m_videoForm->postVolumeUp(); m_videoForm->getController()->postVolumeUp();
} }
} }
void ToolForm::on_volumeDownBtn_clicked() void ToolForm::on_volumeDownBtn_clicked()
{ {
if (m_videoForm) { if (m_videoForm) {
m_videoForm->postVolumeDown(); m_videoForm->getController()->postVolumeDown();
} }
} }
void ToolForm::on_closeScreenBtn_clicked() void ToolForm::on_closeScreenBtn_clicked()
{ {
if (m_videoForm) { if (m_videoForm) {
m_videoForm->setScreenPowerMode(ControlMsg::SPM_OFF); m_videoForm->getController()->setScreenPowerMode(ControlMsg::SPM_OFF);
} }
} }
void ToolForm::on_expandNotifyBtn_clicked() void ToolForm::on_expandNotifyBtn_clicked()
{ {
if (m_videoForm) { if (m_videoForm) {
m_videoForm->expandNotificationPanel(); m_videoForm->getController()->expandNotificationPanel();
} }
} }

View file

@ -11,7 +11,6 @@
#include <QMimeData> #include <QMimeData>
#include <QFileInfo> #include <QFileInfo>
#include <QMessageBox> #include <QMessageBox>
#include <QClipboard>
#include "videoform.h" #include "videoform.h"
#include "recorder.h" #include "recorder.h"
@ -191,7 +190,7 @@ void VideoForm::initSignals()
m_controller->setControlSocket(m_server->getControlSocket()); m_controller->setControlSocket(m_server->getControlSocket());
if (m_closeScreen) { if (m_closeScreen) {
setScreenPowerMode(ControlMsg::SPM_OFF); m_controller->setScreenPowerMode(ControlMsg::SPM_OFF);
} }
} }
}); });
@ -221,10 +220,10 @@ void VideoForm::initSignals()
ui->videoWidget->setFrameSize(QSize(frame->width, frame->height)); ui->videoWidget->setFrameSize(QSize(frame->width, frame->height));
ui->videoWidget->updateTextures(frame->data[0], frame->data[1], frame->data[2], frame->linesize[0], frame->linesize[1], frame->linesize[2]); ui->videoWidget->updateTextures(frame->data[0], frame->data[1], frame->data[2], frame->linesize[0], frame->linesize[1], frame->linesize[2]);
m_vb->unLock(); m_vb->unLock();
},Qt::QueuedConnection); },Qt::QueuedConnection);
} }
void VideoForm::showToolFrom(bool show) void VideoForm::showToolForm(bool show)
{ {
if (!m_toolForm) { if (!m_toolForm) {
m_toolForm = new ToolForm(this, ToolForm::AP_OUTSIDE_RIGHT); m_toolForm = new ToolForm(this, ToolForm::AP_OUTSIDE_RIGHT);
@ -304,7 +303,7 @@ void VideoForm::switchFullScreen()
//show(); //show();
#endif #endif
updateStyleSheet(height() > width()); updateStyleSheet(height() > width());
showToolFrom(true); showToolForm(true);
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
::SetThreadExecutionState(ES_CONTINUOUS); ::SetThreadExecutionState(ES_CONTINUOUS);
#endif #endif
@ -314,7 +313,7 @@ void VideoForm::switchFullScreen()
#ifdef Q_OS_OSX #ifdef Q_OS_OSX
//setWindowFlags(windowFlags() & ~Qt::FramelessWindowHint); //setWindowFlags(windowFlags() & ~Qt::FramelessWindowHint);
#endif #endif
showToolFrom(false); showToolForm(false);
layout()->setContentsMargins(0, 0, 0, 0); layout()->setContentsMargins(0, 0, 0, 0);
showFullScreen(); showFullScreen();
@ -325,110 +324,7 @@ void VideoForm::switchFullScreen()
} }
} }
void VideoForm::postGoMenu()
{
postKeyCodeClick(AKEYCODE_MENU);
}
void VideoForm::postGoBack()
{
postKeyCodeClick(AKEYCODE_BACK);
}
void VideoForm::postAppSwitch()
{
postKeyCodeClick(AKEYCODE_APP_SWITCH);
}
void VideoForm::postPower()
{
postKeyCodeClick(AKEYCODE_POWER);
}
void VideoForm::postVolumeUp()
{
postKeyCodeClick(AKEYCODE_VOLUME_UP);
}
void VideoForm::postVolumeDown()
{
postKeyCodeClick(AKEYCODE_VOLUME_DOWN);
}
void VideoForm::postTurnOn()
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_BACK_OR_SCREEN_ON);
if (!controlMsg) {
return;
}
m_controller->postControlMsg(controlMsg);
}
void VideoForm::expandNotificationPanel()
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_EXPAND_NOTIFICATION_PANEL);
if (!controlMsg) {
return;
}
m_controller->postControlMsg(controlMsg);
}
void VideoForm::collapseNotificationPanel()
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_COLLAPSE_NOTIFICATION_PANEL);
if (!controlMsg) {
return;
}
m_controller->postControlMsg(controlMsg);
}
void VideoForm::requestDeviceClipboard()
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_GET_CLIPBOARD);
if (!controlMsg) {
return;
}
m_controller->postControlMsg(controlMsg);
}
void VideoForm::setDeviceClipboard()
{
QClipboard *board = QApplication::clipboard();
QString text = board->text();
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_SET_CLIPBOARD);
if (!controlMsg) {
return;
}
controlMsg->setSetClipboardMsgData(text);
m_controller->postControlMsg(controlMsg);
}
void VideoForm::clipboardPaste()
{
QClipboard *board = QApplication::clipboard();
QString text = board->text();
postTextInput(text);
}
void VideoForm::postTextInput(QString& text)
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_INJECT_TEXT);
if (!controlMsg) {
return;
}
controlMsg->setInjectTextMsgData(text);
m_controller->postControlMsg(controlMsg);
}
void VideoForm::setScreenPowerMode(ControlMsg::ScreenPowerMode mode)
{
ControlMsg* controlMsg = new ControlMsg(ControlMsg::CMT_SET_SCREEN_POWER_MODE);
if (!controlMsg) {
return;
}
controlMsg->setSetScreenPowerModeData(mode);
m_controller->postControlMsg(controlMsg);
}
void VideoForm::staysOnTop(bool top) void VideoForm::staysOnTop(bool top)
{ {
@ -445,26 +341,9 @@ void VideoForm::staysOnTop(bool top)
} }
} }
void VideoForm::postGoHome() Controller *VideoForm::getController()
{ {
postKeyCodeClick(AKEYCODE_HOME); return m_controller;
}
void VideoForm::postKeyCodeClick(AndroidKeycode keycode)
{
ControlMsg* controlEventDown = new ControlMsg(ControlMsg::CMT_INJECT_KEYCODE);
if (!controlEventDown) {
return;
}
controlEventDown->setInjectKeycodeMsgData(AKEY_EVENT_ACTION_DOWN, keycode, AMETA_NONE);
m_controller->postControlMsg(controlEventDown);
ControlMsg* controlEventUp = new ControlMsg(ControlMsg::CMT_INJECT_KEYCODE);
if (!controlEventUp) {
return;
}
controlEventUp->setInjectKeycodeMsgData(AKEY_EVENT_ACTION_UP, keycode, AMETA_NONE);
m_controller->postControlMsg(controlEventUp);
} }
void VideoForm::mousePressEvent(QMouseEvent *event) void VideoForm::mousePressEvent(QMouseEvent *event)
@ -524,13 +403,13 @@ void VideoForm::keyPressEvent(QKeyEvent *event)
switchFullScreen(); switchFullScreen();
} }
if (event->key() == Qt::Key_C && (event->modifiers() & Qt::ControlModifier)) { if (event->key() == Qt::Key_C && (event->modifiers() & Qt::ControlModifier)) {
requestDeviceClipboard(); m_controller->requestDeviceClipboard();
} }
if (event->key() == Qt::Key_V && (event->modifiers() & Qt::ControlModifier)) { if (event->key() == Qt::Key_V && (event->modifiers() & Qt::ControlModifier)) {
if (event->modifiers() & Qt::ShiftModifier) { if (event->modifiers() & Qt::ShiftModifier) {
setDeviceClipboard(); m_controller->setDeviceClipboard();
} else { } else {
clipboardPaste(); m_controller->clipboardPaste();
} }
return; return;
} }
@ -558,7 +437,7 @@ void VideoForm::showEvent(QShowEvent *event)
{ {
Q_UNUSED(event); Q_UNUSED(event);
if (!isFullScreen()) { if (!isFullScreen()) {
showToolFrom(); showToolForm();
} }
} }

View file

@ -25,33 +25,16 @@ public:
explicit VideoForm(const QString& serial, quint16 maxSize = 720, quint32 bitRate = 8000000, const QString& fileName = "", bool closeScreen = false, QWidget *parent = 0); explicit VideoForm(const QString& serial, quint16 maxSize = 720, quint32 bitRate = 8000000, const QString& fileName = "", bool closeScreen = false, QWidget *parent = 0);
~VideoForm(); ~VideoForm();
void switchFullScreen(); void switchFullScreen();
void postGoMenu();
void postGoHome();
void postGoBack();
void postAppSwitch();
void postPower();
void postVolumeUp();
void postVolumeDown();
// turn the screen on if it was off, press BACK otherwise
void postTurnOn();
void expandNotificationPanel();
void collapseNotificationPanel();
void requestDeviceClipboard();
void setDeviceClipboard();
void clipboardPaste();
void postTextInput(QString& text);
void setScreenPowerMode(ControlMsg::ScreenPowerMode mode);
void staysOnTop(bool top = true); void staysOnTop(bool top = true);
Controller* getController();
private: private:
void updateShowSize(const QSize &newSize); void updateShowSize(const QSize &newSize);
void updateStyleSheet(bool vertical); void updateStyleSheet(bool vertical);
void initUI(); void initUI();
void initSignals(); void initSignals();
void showToolFrom(bool show = true); void showToolForm(bool show = true);
void postKeyCodeClick(AndroidKeycode keycode);
protected: protected:
void mousePressEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event);