LightJoystickSwitchPage.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. #include "LightJoystickSwitchPage.h"
  2. #include "ui_LightJoystickSwitchPage.h"
  3. #include "../common/JMessageTip.h"
  4. #include "../common/JQCommon.h"
  5. #include <QHash>
  6. LightJoystickSwitchPage::LightJoystickSwitchPage(QWidget *parent)
  7. : QWidget(parent)
  8. , ui(new Ui::LightJoystickSwitchPage)
  9. {
  10. ui->setupUi(this);
  11. InitForm();
  12. }
  13. LightJoystickSwitchPage::~LightJoystickSwitchPage()
  14. {
  15. delete ui;
  16. }
  17. void LightJoystickSwitchPage::InitForm()
  18. {
  19. m_nTimeShowPos = startTimer(900);
  20. InitLineEdits();
  21. SliderBind();
  22. // JQCommon::SetQLineEditLimit(ui->valLineEdit);
  23. }
  24. void LightJoystickSwitchPage::SliderBind()
  25. {
  26. connect(ui->RedLightverticalSlider, &QSlider::valueChanged, ui->RedLightprogressBar, &QProgressBar::setValue);
  27. connect(ui->BlueLightverticalSlider, &QSlider::valueChanged, ui->BlueLightprogressBar, &QProgressBar::setValue);
  28. connect(ui->GreenLightverticalSlider, &QSlider::valueChanged, ui->GreenLightprogressBar, &QProgressBar::setValue);
  29. connect(ui->DotLightverticalSlider, &QSlider::valueChanged, ui->DotLightprogressBar, &QProgressBar::setValue);
  30. BondSliderAndLineEdit(ui->RedLightverticalSlider, ui->RedLightlineEdit);
  31. BondSliderAndLineEdit(ui->GreenLightverticalSlider, ui->GreenLightlineEdit);
  32. BondSliderAndLineEdit(ui->BlueLightverticalSlider, ui->BlueLightlineEdit);
  33. BondSliderAndLineEdit(ui->DotLightverticalSlider, ui->DotLightlineEdit);
  34. }
  35. void LightJoystickSwitchPage::InitLineEdits()
  36. {
  37. ui->switchTabWidget->tabBar()->hide();
  38. QList<QLineEdit*> lineEdits = {
  39. ui->RedLightlineEdit, ui->GreenLightlineEdit,
  40. ui->BlueLightlineEdit, ui->DotLightlineEdit,
  41. };
  42. for (QLineEdit* lineEdit : lineEdits)
  43. {
  44. QRegExp regExp("^(0|([1-9]\\d?)|(1\\d{2})|(2[0-5]\\d))$");
  45. QRegExpValidator* validator = new QRegExpValidator(regExp, lineEdit);
  46. lineEdit->setValidator(validator);
  47. lineEdit->setAlignment(Qt::AlignCenter);
  48. }
  49. }
  50. void LightJoystickSwitchPage::MoveModule(const QString strAxis, const QString pos)
  51. {
  52. if (m_pCameraBind)
  53. {
  54. // 目前没有测试多轴,多轴在用
  55. std::vector<ns_module::MODULE_COORD_MOVE> vecPos;
  56. vecPos.push_back({ strAxis.toStdString() ,pos.toDouble() });
  57. m_pCameraBind->JModuleMove(ui->modeComboBox->currentText().toStdString(), vecPos, false);
  58. }
  59. }
  60. void LightJoystickSwitchPage::DisableLayoutWidgets(QLayout* layout, bool isShow /*= false*/)
  61. {
  62. for (int i = 0; i < layout->count(); ++i)
  63. {
  64. QLayoutItem* item = layout->itemAt(i);
  65. if (item->widget())
  66. {
  67. item->widget()->setEnabled(isShow);
  68. }
  69. else if (item->layout())
  70. {
  71. DisableLayoutWidgets(item->layout());
  72. }
  73. }
  74. }
  75. template<class T>
  76. void LightJoystickSwitchPage::DeduplicationBox(QComboBox* pCom, const T& veTemp, int nIndex)
  77. {
  78. for (auto& a : veTemp)
  79. {
  80. QString strName;
  81. if (nIndex == 0)
  82. {
  83. strName = a->GetModuleType().c_str();
  84. }
  85. else if (nIndex == 1)
  86. {
  87. strName = a->GetStringAxisType().c_str();
  88. }
  89. QStringList items;
  90. for (int i = 0; i < pCom->count(); ++i)
  91. {
  92. items << pCom->itemText(i);
  93. }
  94. bool bMa = false; // 是否匹配
  95. for (auto b : items)
  96. {
  97. if (b == strName)
  98. {
  99. bMa = true;
  100. break;
  101. }
  102. }
  103. if (!bMa)
  104. {
  105. pCom->addItem(strName);
  106. }
  107. }
  108. }
  109. void LightJoystickSwitchPage::BondSliderAndLineEdit(QSlider* slider, QLineEdit* lineEdit)
  110. {
  111. QIntValidator* validator = new QIntValidator(slider->minimum(), slider->maximum(), lineEdit);
  112. lineEdit->setValidator(validator);
  113. connect(slider, &QSlider::valueChanged, [lineEdit](int value) {
  114. lineEdit->setText(QString::number(value));
  115. });
  116. connect(lineEdit, &QLineEdit::textChanged, [&, slider, lineEdit](const QString& text)
  117. {
  118. bool ok;
  119. int value = text.toInt(&ok);
  120. if (ok && value >= slider->minimum() && value <= slider->maximum())
  121. {
  122. slider->setValue(value);
  123. }
  124. else if (!text.isEmpty())
  125. {
  126. int closestValue = qMin(qMax(text.toInt(&ok), slider->minimum()), slider->maximum());
  127. slider->setValue(closestValue);
  128. }
  129. if (m_pPageSwitchGroup)
  130. {
  131. // 执行匹配灯光
  132. int niD = m_pPageSwitchGroup->m_nGroupId;
  133. //if (niD == 1)
  134. {
  135. // 相机窗口
  136. if (m_pCameraBind)
  137. {
  138. m_pCameraBind->JSetRedLight(niD, MatchSelectedLightIndex(lineEdit), value);
  139. }
  140. }
  141. }
  142. });
  143. }
  144. void LightJoystickSwitchPage::setLigthValue(int redLight,int greenLight,int blueLight,int dotLight)
  145. {
  146. setLightWidget(redLight, ui->RedLight, ui->RedLightlineEdit, ui->RedLightverticalSlider, ui->RedLightprogressBar, ui->RedLightlabel);
  147. setLightWidget(greenLight, ui->GreenLight, ui->GreenLightlineEdit, ui->GreenLightverticalSlider, ui->GreenLightprogressBar, ui->GreenLightlabel);
  148. setLightWidget(blueLight, ui->BlueLight, ui->BlueLightlineEdit, ui->BlueLightverticalSlider, ui->BlueLightprogressBar, ui->BlueLightlabel);
  149. setLightWidget(dotLight, ui->DotLight, ui->DotLightlineEdit, ui->DotLightverticalSlider, ui->DotLightprogressBar, ui->DotLightlabel);
  150. }
  151. void LightJoystickSwitchPage::setLightWidget(int value, QWidget *lightWidget, QLineEdit *lineEdit, QSlider *slider, QProgressBar *progressBar, QLabel *label)
  152. {
  153. if (0 <= value && value <= 100)
  154. {
  155. lightWidget->show();
  156. lineEdit->show();
  157. slider->show();
  158. progressBar->show();
  159. label->show();
  160. lineEdit->setText(QString::number(value));
  161. progressBar->setValue(value);
  162. slider->setValue(value);
  163. }
  164. else if (value == -1)
  165. {
  166. lightWidget->hide();
  167. lineEdit->hide();
  168. slider->hide();
  169. progressBar->hide();
  170. label->hide();
  171. }
  172. }
  173. void LightJoystickSwitchPage::on_move_Button_clicked()
  174. {
  175. RunMoveOrMoveTo(false);
  176. }
  177. void LightJoystickSwitchPage::on_moveTo_Button_clicked()
  178. {
  179. RunMoveOrMoveTo(true);
  180. }
  181. void LightJoystickSwitchPage::on_left_Button_clicked()
  182. {
  183. m_moveAxisInfo.AxisType = "X";
  184. MoveJoystick();
  185. }
  186. void LightJoystickSwitchPage::on_up_Button_clicked()
  187. {
  188. m_moveAxisInfo.AxisType = "Y";
  189. MoveJoystick();
  190. }
  191. void LightJoystickSwitchPage::on_right_Button_clicked()
  192. {
  193. m_moveAxisInfo.AxisType = "X";
  194. MoveJoystick();
  195. }
  196. void LightJoystickSwitchPage::on_down_Button_clicked()
  197. {
  198. m_moveAxisInfo.AxisType = "Y";
  199. MoveJoystick();
  200. }
  201. void LightJoystickSwitchPage::GetModuleTypeSlots(const ST_MOVE_AXIS& _module)
  202. {
  203. m_isSlots = true;
  204. SetMoveJoystickInfo(_module);
  205. }
  206. void LightJoystickSwitchPage::InitMainCameraBind(CameraBind* pCameraBind, bool bUpdate /*= true*/)
  207. {
  208. m_pCameraBind = pCameraBind;
  209. if (bUpdate)
  210. {
  211. UpdataLightVal();
  212. }
  213. if (m_pCameraBind)
  214. {
  215. DeduplicationBox(ui->modeComboBox, m_pCameraBind->m_vecCAxis, 0);
  216. }
  217. }
  218. void LightJoystickSwitchPage::UpdatemPageGroup(Group* pGroup)
  219. {
  220. m_pPageSwitchGroup = pGroup;
  221. }
  222. void LightJoystickSwitchPage::SwitchJoystickPage(bool bSwitch)
  223. {
  224. ResetIdleTimer(bSwitch);
  225. //int newIndex = (ui->switchTabWidget->currentIndex() + 1) % ui->switchTabWidget->count();
  226. if (m_isSlots)
  227. {
  228. ui->switchTabWidget->setCurrentIndex(1);
  229. }
  230. else
  231. {
  232. ui->switchTabWidget->setCurrentIndex(0);
  233. }
  234. m_isSlots = false;
  235. }
  236. void LightJoystickSwitchPage::HideOrShowPage(bool isHide)
  237. {
  238. ui->switchTabWidget->setVisible(isHide);
  239. }
  240. void LightJoystickSwitchPage::SetMoveJoystickInfo(const ST_MOVE_AXIS& movInfo)
  241. {
  242. //m_moveAxisInfo.ModuleType = movInfo.ModuleType;
  243. //m_moveAxisInfo.AxisType = movInfo.AxisType;
  244. //m_moveAxisInfo.pos = movInfo.pos; // 这个距离可能会变动// 根据摇杆区分等级
  245. m_moveAxisInfo = movInfo;
  246. if (m_moveAxisInfo.isSwitch)
  247. {
  248. // 点击摇杆的时候开启定时器,然后3秒关闭
  249. SwitchJoystickPage(true);
  250. }
  251. }
  252. void LightJoystickSwitchPage::timerEvent(QTimerEvent* event)
  253. {
  254. int nID = event->timerId();
  255. if (m_nTimeShowPos == nID)
  256. {
  257. RealTimeUpdatesToU();
  258. }
  259. else if (m_idleTimer == nID)
  260. {
  261. SwitchJoystickPage(false);
  262. }
  263. }
  264. QString LightJoystickSwitchPage::CombiningStr(bool isUpdate /*= false*/)
  265. {
  266. double pos = m_moveAxisInfo.pos;
  267. QString strShow = tr("Currently selected mode:", "当前选中模式:");
  268. if (isUpdate)
  269. {
  270. strShow = tr("Move Pos:","移动点:");
  271. if (m_pCameraBind)
  272. {
  273. m_pCameraBind->YGetAxisPosition(m_moveAxisInfo.ModuleType, m_moveAxisInfo.AxisType, pos);
  274. }
  275. }
  276. strShow += m_moveAxisInfo.ModuleType.c_str();
  277. strShow += " ";
  278. strShow += m_moveAxisInfo.AxisType.c_str();
  279. strShow += " ";
  280. strShow += QString::number(pos, 'f', 2);
  281. return strShow;
  282. }
  283. void LightJoystickSwitchPage::RealTimeUpdatesToU()
  284. {
  285. if (m_pCameraBind)
  286. {
  287. // ui->JTabShowLableLoop->setText(CombiningStr(true));
  288. }
  289. }
  290. void LightJoystickSwitchPage::ResetIdleTimer(bool bStart /*= false*/)
  291. {
  292. if (bStart)
  293. {
  294. if (m_idleTimer != -1)
  295. {
  296. // 计时器没关,关闭重新打开
  297. ResetIdleTimer(false);
  298. ResetIdleTimer(true);
  299. }
  300. if (isActiveWindow())
  301. {
  302. m_idleTimer = startTimer(g_unnSuspensionWaitingTime);
  303. }
  304. }
  305. else
  306. {
  307. killTimer(m_idleTimer);
  308. m_idleTimer = -1;
  309. }
  310. }
  311. void LightJoystickSwitchPage::MoveJoystick()
  312. {
  313. if (m_pCameraBind)
  314. {
  315. m_pCameraBind->YGetAxisPosition(m_moveAxisInfo.ModuleType, m_moveAxisInfo.AxisType, m_moveAxisInfo.pos);
  316. }
  317. }
  318. void LightJoystickSwitchPage::RunMoveOrMoveTo(bool isMoveTo)
  319. {
  320. QString strErrInfo = {};
  321. QString strNum = "1";//ui->valLineEdit->text().trimmed();
  322. if (strNum.isEmpty())
  323. {
  324. strErrInfo = tr("please input value","请输入值");
  325. }
  326. else
  327. {
  328. double doNum = strNum.toDouble();
  329. if (m_moveAxisInfo.ModuleType != "")
  330. {
  331. if (m_moveAxisInfo.AxisType != "")
  332. {
  333. m_pCameraBind->SetModuleMove(m_moveAxisInfo.ModuleType, m_moveAxisInfo.AxisType, doNum, isMoveTo);
  334. }
  335. else
  336. {
  337. strErrInfo = tr("AxisType is Empty", "AxisType 为空");
  338. }
  339. }
  340. else
  341. {
  342. strErrInfo = tr("ModuleType is Empty", "ModuleType 为空");
  343. }
  344. }
  345. if (!strErrInfo.isEmpty())
  346. {
  347. JMessageTip::Message_question(strErrInfo);
  348. }
  349. }
  350. void LightJoystickSwitchPage::UpdataLightVal()
  351. {
  352. if (m_pCameraBind->m_pCViewInterface == nullptr)
  353. {
  354. return;
  355. }
  356. if (m_pPageSwitchGroup)
  357. {
  358. int niD = m_pPageSwitchGroup->m_nGroupId;
  359. //if (niD == 1)
  360. {
  361. // 切换灯光
  362. ST_LIGHT_VAL _val = m_pCameraBind->JGetLight(niD);
  363. setLigthValue(_val.redLightValue, _val.greenLightValue, _val.blueLightValue, _val.pointLightValue);
  364. }
  365. }
  366. }
  367. EN_LIGHT_INDEX LightJoystickSwitchPage::MatchSelectedLightIndex(QLineEdit* lineEdit)
  368. {
  369. EN_LIGHT_INDEX nIndex = EN_LIGHT_INDEX::Red;
  370. if (lineEdit == ui->RedLightlineEdit)
  371. {
  372. nIndex = EN_LIGHT_INDEX::Red;
  373. }
  374. else if (lineEdit == ui->GreenLightlineEdit)
  375. {
  376. nIndex = EN_LIGHT_INDEX::Green;
  377. }
  378. else if (lineEdit == ui->BlueLightlineEdit)
  379. {
  380. nIndex = EN_LIGHT_INDEX::Blue;
  381. }
  382. else if (lineEdit == ui->DotLightlineEdit)
  383. {
  384. nIndex = EN_LIGHT_INDEX::Point;
  385. }
  386. return nIndex;
  387. }
  388. void LightJoystickSwitchPage::resizeSingleUI() {
  389. //ui->resize(265, 240)
  390. ui->switchTabWidget->setGeometry(QRect(0, 0, 265, 240));
  391. ui->GreenLightTab->setGeometry(QRect(0, 0, 60, 32));
  392. ui->JoystickTab->setGeometry(QRect(0, 0, 259, 215));
  393. ui->RedLight->setGeometry(QRect(0, 0, 61, 114));
  394. ui->RedLightlineEdit->setGeometry(QRect(10, 78, 40, 24));
  395. ui->RedLightprogressBar->setGeometry(QRect(32, 15, 18, 51));
  396. ui->RedLightverticalSlider->setGeometry(QRect(10, 12, 18, 56));
  397. ui->RedLightlabel->setGeometry(QRect(39, 22, 10, 34));
  398. ui->GreenLight->setGeometry(QRect(70, 0, 61, 114));
  399. ui->GreenLightlineEdit->setGeometry(QRect(10, 78, 40, 24));
  400. ui->GreenLightprogressBar->setGeometry(QRect(32, 15, 18, 51));
  401. ui->GreenLightverticalSlider->setGeometry(QRect(10, 12, 18, 56));
  402. ui->GreenLightlabel->setGeometry(QRect(36, 22, 10, 34));
  403. ui->BlueLight->setGeometry(QRect(140, 0, 61, 114));
  404. ui->BlueLightlineEdit->setGeometry(QRect(10, 78, 40, 24));
  405. ui->BlueLightprogressBar->setGeometry(QRect(32, 15, 18, 51));
  406. ui->BlueLightverticalSlider->setGeometry(QRect(10, 12, 18, 56));
  407. ui->BlueLightlabel->setGeometry(QRect(32, 22, 19, 34));
  408. ui->DotLight->setGeometry(QRect(200, 0, 61, 114));
  409. ui->DotLightlineEdit->setGeometry(QRect(10, 78, 40, 24));
  410. ui->DotLightprogressBar->setGeometry(QRect(32, 15, 18, 51));
  411. ui->DotLightverticalSlider->setGeometry(QRect(10, 12, 18, 56));
  412. ui->DotLightlabel->setGeometry(QRect(32, 22, 19, 34));
  413. ui->groupBox->setGeometry(QRect(0, 100, 141, 111));
  414. ui->left_Button->setGeometry(QRect(10, 40, 41, 31));
  415. ui->right_Button->setGeometry(QRect(90, 40, 41, 31));
  416. ui->up_Button->setGeometry(QRect(50, 10, 41, 31));
  417. ui->down_Button->setGeometry(QRect(50, 70, 41, 31));
  418. //ui->move_Button->setGeometry(QRect(170, 130, 60, 23));
  419. //ui->JTabShowLableLoop->setGeometry(QRect(10, 50, 200, 41));
  420. //ui->moveTo_Button->setGeometry(QRect(170, 170, 60, 23));
  421. //ui->valLineEdit->setGeometry(QRect(160, 100, 71, 21));
  422. }
  423. void LightJoystickSwitchPage::on_xLineEdit_textChanged(const QString &arg1)
  424. {
  425. MoveModule("X", arg1);
  426. }
  427. void LightJoystickSwitchPage::on_yLineEdit_textChanged(const QString &arg1)
  428. {
  429. MoveModule("Y", arg1);
  430. }
  431. void LightJoystickSwitchPage::on_zLineEdit_textChanged(const QString &arg1)
  432. {
  433. MoveModule("Z", arg1);
  434. }
  435. void LightJoystickSwitchPage::on_rLineEdit_textChanged(const QString &arg1)
  436. {
  437. MoveModule("R", arg1);
  438. }
  439. void LightJoystickSwitchPage::on_forceLineEdit_textChanged(const QString &arg1)
  440. {
  441. MoveModule("FORCE", arg1);
  442. }
  443. void LightJoystickSwitchPage::on_modeComboBox_currentIndexChanged(int index)
  444. {
  445. QString strMod = ui->modeComboBox->itemText(index);
  446. // 先禁用所有相关布局
  447. const QList<QLayout*> allLayouts = {
  448. ui->forceLayout,
  449. ui->xLayout,
  450. ui->yLayout,
  451. ui->rLayout,
  452. ui->zLayout,
  453. };
  454. for (auto* layout : allLayouts)
  455. {
  456. DisableLayoutWidgets(layout, false);
  457. }
  458. // 收集当前模块支持的轴类型
  459. QSet<QString> supportedAxes;
  460. for (const auto& axis : m_pCameraBind->m_vecCAxis)
  461. {
  462. if (strMod == axis->GetModuleType().c_str())
  463. {
  464. supportedAxes.insert(axis->GetStringAxisType().c_str());
  465. }
  466. }
  467. // 根据支持的轴启用对应布局
  468. const QHash<QString, QLayout*> axisToLayout = {
  469. {"FORCE", ui->forceLayout},
  470. {"X", ui->xLayout},
  471. {"Y", ui->yLayout},
  472. {"R", ui->rLayout},
  473. {"Z", ui->zLayout},
  474. {"Z1", ui->zLayout}
  475. };
  476. for (auto it = axisToLayout.constBegin(); it != axisToLayout.constEnd(); ++it)
  477. {
  478. if (supportedAxes.contains(it.key()))
  479. {
  480. DisableLayoutWidgets(it.value(), true);
  481. }
  482. }
  483. }