feat: keymap support script

dev
rankun 6 years ago
parent cb65678402
commit 950ae0ee35

@ -7,12 +7,12 @@
#include "receiver.h" #include "receiver.h"
#include "inputconvertgame.h" #include "inputconvertgame.h"
Controller::Controller(bool supportGame, QObject* parent) : QObject(parent) Controller::Controller(QString gameScript, QObject* parent) : QObject(parent)
{ {
m_receiver = new Receiver(this); m_receiver = new Receiver(this);
Q_ASSERT(m_receiver); Q_ASSERT(m_receiver);
if (supportGame) { if (!gameScript.isEmpty()) {
m_inputConvert = new InputConvertGame(this); m_inputConvert = new InputConvertGame(this);
} else { } else {
m_inputConvert = new InputConvertNormal(this); m_inputConvert = new InputConvertNormal(this);

@ -13,7 +13,7 @@ class Controller : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
Controller(bool supportGame = false, QObject* parent = Q_NULLPTR); Controller(QString gameScript = "", QObject* parent = Q_NULLPTR);
virtual ~Controller(); virtual ~Controller();
void setControlSocket(QTcpSocket* controlSocket); void setControlSocket(QTcpSocket* controlSocket);

@ -9,10 +9,7 @@
InputConvertGame::InputConvertGame(Controller* controller) InputConvertGame::InputConvertGame(Controller* controller)
: InputConvertNormal(controller) : InputConvertNormal(controller)
{ {
m_keyMap.loadKeyMap("");
if (m_keyMap.enableMouseMoveMap()) {
m_mouseMoveLastConverPos = m_keyMap.getMouseMoveMap().startPos;
}
} }
InputConvertGame::~InputConvertGame() InputConvertGame::~InputConvertGame()
@ -102,6 +99,14 @@ void InputConvertGame::keyEvent(const QKeyEvent *from, const QSize& frameSize, c
} }
} }
void InputConvertGame::loadKeyMap(const QString &json)
{
m_keyMap.loadKeyMap(json);
if (m_keyMap.enableMouseMoveMap()) {
m_mouseMoveLastConverPos = m_keyMap.getMouseMoveMap().startPos;
}
}
void InputConvertGame::updateSize(const QSize &frameSize, const QSize &showSize) void InputConvertGame::updateSize(const QSize &frameSize, const QSize &showSize)
{ {
m_frameSize = frameSize; m_frameSize = frameSize;

@ -18,6 +18,8 @@ public:
virtual void wheelEvent(const QWheelEvent* from, const QSize& frameSize, const QSize& showSize); virtual void wheelEvent(const QWheelEvent* from, const QSize& frameSize, const QSize& showSize);
virtual void keyEvent(const QKeyEvent* from, const QSize& frameSize, const QSize& showSize); virtual void keyEvent(const QKeyEvent* from, const QSize& frameSize, const QSize& showSize);
void loadKeyMap(const QString& json);
protected: protected:
void updateSize(const QSize& frameSize, const QSize& showSize); void updateSize(const QSize& frameSize, const QSize& showSize);
void sendTouchDownEvent(int id, QPointF pos); void sendTouchDownEvent(int id, QPointF pos);

@ -46,17 +46,6 @@ void KeyMap::loadKeyMap(const QString &json)
QMetaEnum metaEnumMouseButtons = QMetaEnum::fromType<Qt::MouseButtons>(); QMetaEnum metaEnumMouseButtons = QMetaEnum::fromType<Qt::MouseButtons>();
QMetaEnum metaEnumKeyMapType = QMetaEnum::fromType<KeyMap::KeyMapType>(); QMetaEnum metaEnumKeyMapType = QMetaEnum::fromType<KeyMap::KeyMapType>();
QFile loadFile(getKeyMapPath() + "/gameforpeace.json");
if(!loadFile.open(QIODevice::ReadOnly))
{
errorString = "json error: open file failed";
goto parseError;
}
allData = loadFile.readAll();
loadFile.close();
jsonDoc = QJsonDocument::fromJson(allData, &jsonError); jsonDoc = QJsonDocument::fromJson(allData, &jsonError);
if(jsonError.error != QJsonParseError::NoError) if(jsonError.error != QJsonParseError::NoError)

@ -79,8 +79,7 @@ public:
MouseMoveMap getMouseMoveMap(); MouseMoveMap getMouseMoveMap();
bool enableMouseMoveMap(); bool enableMouseMoveMap();
protected: static const QString& getKeyMapPath();
const QString& getKeyMapPath();
private: private:
QVector<KeyMapNode> m_keyMapNodes; QVector<KeyMapNode> m_keyMapNodes;

@ -26,7 +26,7 @@ Device::Device(DeviceParams params, QObject *parent)
m_vb->init(); m_vb->init();
m_decoder = new Decoder(m_vb, this); m_decoder = new Decoder(m_vb, this);
m_fileHandler = new FileHandler(this); m_fileHandler = new FileHandler(this);
m_controller = new Controller(params.supportGame, this); m_controller = new Controller(params.gameScript, this);
m_videoForm = new VideoForm(); m_videoForm = new VideoForm();
m_videoForm->setSerial(m_params.serial); m_videoForm->setSerial(m_params.serial);
if (m_controller) { if (m_controller) {

@ -25,7 +25,7 @@ public:
bool closeScreen = false; // 启动时自动息屏 bool closeScreen = false; // 启动时自动息屏
bool useReverse = true; // true:先使用adb reverse失败后自动使用adb forwardfalse:直接使用adb forward bool useReverse = true; // true:先使用adb reverse失败后自动使用adb forwardfalse:直接使用adb forward
bool display = true; // 是否显示画面(或者仅仅后台录制) bool display = true; // 是否显示画面(或者仅仅后台录制)
bool supportGame = false; // 是否支持游戏映射 QString gameScript = ""; // 游戏映射脚本
}; };
explicit Device(DeviceParams params, QObject *parent = nullptr); explicit Device(DeviceParams params, QObject *parent = nullptr);
virtual ~Device(); virtual ~Device();

@ -8,6 +8,7 @@
#include "ui_dialog.h" #include "ui_dialog.h"
#include "device.h" #include "device.h"
#include "videoform.h" #include "videoform.h"
#include "keymap.h"
Dialog::Dialog(QWidget *parent) : Dialog::Dialog(QWidget *parent) :
QDialog(parent), QDialog(parent),
@ -89,7 +90,7 @@ void Dialog::initUI()
#ifndef Q_OS_WIN32 #ifndef Q_OS_WIN32
// game only windows // game only windows
ui->gameForPeaceCheck->setEnabled(false); ui->gameCheck->setEnabled(false);
#endif #endif
} }
@ -103,6 +104,20 @@ void Dialog::execAdbCmd()
m_adb.execute("", cmd.split(" ", QString::SkipEmptyParts)); m_adb.execute("", cmd.split(" ", QString::SkipEmptyParts));
} }
QString Dialog::getGameScript(const QString& fileName)
{
QFile loadFile(KeyMap::getKeyMapPath() + "/" + fileName);
if(!loadFile.open(QIODevice::ReadOnly))
{
outLog("open file failed:" + fileName, true);
return "";
}
QString ret = loadFile.readAll();
loadFile.close();
return ret;
}
void Dialog::on_updateDevice_clicked() void Dialog::on_updateDevice_clicked()
{ {
if (checkAdbRun()) { if (checkAdbRun()) {
@ -138,7 +153,13 @@ void Dialog::on_startServerBtn_clicked()
params.closeScreen = ui->closeScreenCheck->isChecked(); params.closeScreen = ui->closeScreenCheck->isChecked();
params.useReverse = ui->useReverseCheck->isChecked(); params.useReverse = ui->useReverseCheck->isChecked();
params.display = !ui->notDisplayCheck->isChecked(); params.display = !ui->notDisplayCheck->isChecked();
params.supportGame = ui->gameForPeaceCheck->isChecked(); if (ui->gameCheck->isChecked()) {
if (ui->gameBox->currentText().isEmpty()) {
outLog("no keymap script selected", true);
} else {
params.gameScript = getGameScript(ui->gameBox->currentText());
}
}
m_deviceManage.connectDevice(params); m_deviceManage.connectDevice(params);
/* /*
@ -284,3 +305,28 @@ void Dialog::on_stopAllServerBtn_clicked()
{ {
m_deviceManage.disconnectAllDevice(); m_deviceManage.disconnectAllDevice();
} }
void Dialog::on_updateGameScriptBtn_clicked()
{
ui->gameBox->clear();
QDir dir(KeyMap::getKeyMapPath());
if (!dir.exists()) {
outLog("keymap directory not find", true);
return;
}
dir.setFilter(QDir::Files | QDir::NoSymLinks);
QFileInfoList list = dir.entryInfoList();
QFileInfo fileInfo;
int size = list.size();
for (int i = 0; i < size; ++i) {
fileInfo = list.at(i);
ui->gameBox->addItem(fileInfo.fileName());
}
}
void Dialog::on_gameCheck_clicked(bool checked)
{
if (checked) {
on_updateGameScriptBtn_clicked();
}
}

@ -49,10 +49,14 @@ private slots:
void on_stopAllServerBtn_clicked(); void on_stopAllServerBtn_clicked();
void on_updateGameScriptBtn_clicked();
void on_gameCheck_clicked(bool checked);
private: private:
bool checkAdbRun(); bool checkAdbRun();
void initUI(); void initUI();
void execAdbCmd(); void execAdbCmd();
QString getGameScript(const QString& fileName);
private: private:
Ui::Dialog *ui; Ui::Dialog *ui;

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>533</width> <width>600</width>
<height>608</height> <height>637</height>
</rect> </rect>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
@ -21,6 +21,82 @@
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="2" column="0"> <item row="2" column="0">
<widget class="QGroupBox" name="usbGroupBox">
<property name="title">
<string>USB line</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="2">
<widget class="QPushButton" name="getIPBtn">
<property name="text">
<string>get device ip</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="stopServerBtn">
<property name="text">
<string>stop server</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="updateDevice">
<property name="text">
<string>update device</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QPushButton" name="startAdbdBtn">
<property name="text">
<string>start adbd</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>device serial:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="serialBox"/>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="startServerBtn">
<property name="text">
<string>start server</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="stopAllServerBtn">
<property name="text">
<string>stop all server</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0">
<widget class="QGroupBox" name="wirelessGroupBox"> <widget class="QGroupBox" name="wirelessGroupBox">
<property name="title"> <property name="title">
<string>Wireless</string> <string>Wireless</string>
@ -88,7 +164,7 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="5" column="0">
<widget class="QTextEdit" name="outEdit"> <widget class="QTextEdit" name="outEdit">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@ -107,63 +183,59 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="4" column="0">
<widget class="QGroupBox" name="configGroupBox"> <widget class="QGroupBox" name="adbGroupBox">
<property name="title"> <property name="title">
<string>Start Config</string> <string notr="true">adb</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_5">
<item row="2" column="9" colspan="2"> <item row="0" column="0">
<widget class="QCheckBox" name="useReverseCheck"> <widget class="QLabel" name="label_7">
<property name="text"> <property name="text">
<string>use reverse</string> <string>adb command:</string>
</property>
<property name="checked">
<bool>true</bool>
</property> </property>
</widget> <property name="buddy">
</item> <cstring>adbCommandEdt</cstring>
<item row="0" column="8">
<widget class="QComboBox" name="videoSizeBox">
<property name="toolTip">
<string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="9" colspan="2"> <item row="0" column="3">
<widget class="QPushButton" name="selectRecordPathBtn"> <widget class="QPushButton" name="stopAdbBtn">
<property name="text"> <property name="text">
<string>select path</string> <string>terminate</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="9"> <item row="0" column="2">
<widget class="QLabel" name="label_6"> <widget class="QPushButton" name="adbCommandBtn">
<property name="text"> <property name="text">
<string>record format</string> <string>execute</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="6" colspan="2"> <item row="0" column="1">
<widget class="QLabel" name="label_4"> <widget class="QLineEdit" name="adbCommandEdt">
<property name="text"> <property name="text">
<string>video size:</string> <string notr="true">devices</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="10"> <item row="0" column="4">
<widget class="QComboBox" name="formatBox"/> <widget class="QPushButton" name="clearOut">
</item>
<item row="2" column="7" colspan="2">
<widget class="QCheckBox" name="closeScreenCheck">
<property name="text"> <property name="text">
<string>close screen</string> <string>clear</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout>
</widget>
</item>
<item row="0" column="0">
<widget class="QGroupBox" name="configGroupBox">
<property name="title">
<string>Start Config</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0" colspan="2"> <item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
@ -171,17 +243,17 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0" colspan="2"> <item row="2" column="3" colspan="2">
<widget class="QLabel" name="label_5"> <widget class="QCheckBox" name="notDisplayCheck">
<property name="text"> <property name="text">
<string>record save path:</string> <string>not display</string>
</property> </property>
<property name="buddy"> <property name="checkable">
<cstring>recordPathEdt</cstring> <bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="2" colspan="4"> <item row="0" column="3" colspan="2">
<widget class="QComboBox" name="bitRateBox"> <widget class="QComboBox" name="bitRateBox">
<property name="toolTip"> <property name="toolTip">
<string/> <string/>
@ -191,21 +263,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2" colspan="7"> <item row="2" column="6" colspan="2">
<widget class="QLineEdit" name="recordPathEdt">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="gameForPeaceCheck">
<property name="text">
<string>Game for Peace</string>
</property>
</widget>
</item>
<item row="2" column="5" colspan="2">
<widget class="QCheckBox" name="alwaysTopCheck"> <widget class="QCheckBox" name="alwaysTopCheck">
<property name="text"> <property name="text">
<string>always top</string> <string>always top</string>
@ -215,136 +273,101 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="2" colspan="2"> <item row="2" column="11" colspan="2">
<widget class="QCheckBox" name="notDisplayCheck"> <widget class="QCheckBox" name="useReverseCheck">
<property name="text"> <property name="text">
<string>not display</string> <string>use reverse</string>
</property> </property>
<property name="checkable"> <property name="checked">
<bool>false</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
</layout> <item row="0" column="12">
</widget> <widget class="QComboBox" name="formatBox"/>
</item> </item>
<item row="1" column="0"> <item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="usbGroupBox"> <widget class="QLabel" name="label_5">
<property name="title">
<string>USB line</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="2">
<widget class="QPushButton" name="getIPBtn">
<property name="text"> <property name="text">
<string>get device ip</string> <string>record save path:</string>
</property> </property>
<property name="autoDefault"> <property name="buddy">
<bool>false</bool> <cstring>recordPathEdt</cstring>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="3"> <item row="0" column="6">
<widget class="QPushButton" name="stopServerBtn"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>stop server</string> <string>video size:</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="2" column="9" colspan="2">
<widget class="QPushButton" name="updateDevice"> <widget class="QCheckBox" name="closeScreenCheck">
<property name="text"> <property name="text">
<string>update device</string> <string>close screen</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="3"> <item row="1" column="3" colspan="8">
<widget class="QPushButton" name="startAdbdBtn"> <widget class="QLineEdit" name="recordPathEdt">
<property name="text"> <property name="readOnly">
<string>start adbd</string> <bool>true</bool>
</property>
<property name="autoDefault">
<bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="0" column="7">
<widget class="QLabel" name="label_2"> <widget class="QComboBox" name="videoSizeBox">
<property name="text"> <property name="toolTip">
<string>device serial:</string> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="1" column="11" colspan="2">
<widget class="QComboBox" name="serialBox"/> <widget class="QPushButton" name="selectRecordPathBtn">
</item>
<item row="0" column="2">
<widget class="QPushButton" name="startServerBtn">
<property name="text"> <property name="text">
<string>start server</string> <string>select path</string>
</property> </property>
<property name="autoDefault"> <property name="autoDefault">
<bool>false</bool> <bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="0" column="10">
<widget class="QPushButton" name="stopAllServerBtn"> <widget class="QLabel" name="label_6">
<property name="text"> <property name="text">
<string>stop all server</string> <string>record format</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> <item row="0" column="8" colspan="2">
</widget> <spacer name="horizontalSpacer">
</item> <property name="orientation">
<item row="3" column="0"> <enum>Qt::Horizontal</enum>
<widget class="QGroupBox" name="adbGroupBox">
<property name="title">
<string notr="true">adb</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>adb command:</string>
</property> </property>
<property name="buddy"> <property name="sizeHint" stdset="0">
<cstring>adbCommandEdt</cstring> <size>
</property> <width>40</width>
</widget> <height>20</height>
</item> </size>
<item row="0" column="3">
<widget class="QPushButton" name="stopAdbBtn">
<property name="text">
<string>terminate</string>
</property> </property>
</widget> </spacer>
</item> </item>
<item row="0" column="2"> <item row="3" column="0" colspan="5">
<widget class="QPushButton" name="adbCommandBtn"> <widget class="QComboBox" name="gameBox"/>
<property name="text">
<string>execute</string>
</property>
</widget>
</item> </item>
<item row="0" column="1"> <item row="3" column="6" colspan="2">
<widget class="QLineEdit" name="adbCommandEdt"> <widget class="QPushButton" name="updateGameScriptBtn">
<property name="text"> <property name="text">
<string notr="true">devices</string> <string>update script</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="4"> <item row="3" column="10" colspan="2">
<widget class="QPushButton" name="clearOut"> <widget class="QCheckBox" name="gameCheck">
<property name="text"> <property name="text">
<string>clear</string> <string>Game for Peace</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -364,8 +387,6 @@
<tabstop>wirelessDisConnectBtn</tabstop> <tabstop>wirelessDisConnectBtn</tabstop>
<tabstop>adbCommandEdt</tabstop> <tabstop>adbCommandEdt</tabstop>
<tabstop>adbCommandBtn</tabstop> <tabstop>adbCommandBtn</tabstop>
<tabstop>bitRateBox</tabstop>
<tabstop>videoSizeBox</tabstop>
<tabstop>formatBox</tabstop> <tabstop>formatBox</tabstop>
<tabstop>recordPathEdt</tabstop> <tabstop>recordPathEdt</tabstop>
<tabstop>selectRecordPathBtn</tabstop> <tabstop>selectRecordPathBtn</tabstop>

Loading…
Cancel
Save