WaffleProgramPage.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  1. #include "WaffleProgramPage.h"
  2. #include <QGroupBox>
  3. #include <QLineEdit>
  4. #include "Src/RewriteControl/Controls/SpinBox.h"
  5. #include "Src/RewriteControl/Controls/DoubleSpinBox.h"
  6. #include <View/die-bonder-ui/Src/MatrixDialogs/NoBondPtEditDialog.h>
  7. #include <QLabel>
  8. #include <QPushButton>
  9. #include <QHBoxLayout>
  10. #include <QVBoxLayout>
  11. #include <algorithm>
  12. WaffleProgramPage::WaffleProgramPage(QWidget* parent)
  13. :QWidget(parent)
  14. {
  15. ui.setupUi(this);
  16. ui.pushButtonSave->setProperty("type", "save");
  17. setStyleSheet("QGroupBox { border: 2px solid #A9B4FF;border-radius: 10px; }");
  18. //setStyleSheet(
  19. // "QPushButton{background-color: #A9B4FF;border-radius: 5px;height: 30px;}"
  20. // "QDoubleSpinBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
  21. // "QSpinBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
  22. // "QLineEdit{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
  23. // "QCheckBox::indicator{width: 20px;height: 20px;}"
  24. // "QCheckBox::indicator:unchecked{background - color: #FFFFFF;border-radius: 2px;}"
  25. // "QComboBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
  26. // "QComboBox::drop - down{width: 20px;}"
  27. // "QGroupBox{ border: 2px solid red}"
  28. // //"QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top center; padding: 0 3px; }"
  29. //);
  30. m_manageDB = CManageDB::GetInstance();
  31. if (m_manageDB == nullptr) return;
  32. m_pProduct = m_manageDB->GetCProduct();
  33. if (m_pProduct == nullptr) return;
  34. initPage();
  35. connect(ui.pushButtonSave, &QPushButton::clicked, this, [=]() {
  36. m_pProduct->SetAllWaffleMatrix(m_vecWaffleMatrix);
  37. m_pProduct->SetAllWaffleDieMatrix(m_vecSubWaffleMatrix);
  38. });
  39. }
  40. WaffleProgramPage::~WaffleProgramPage()
  41. {
  42. }
  43. void WaffleProgramPage::AddMatrixPage(int vectorIndex, PROGRAM_WAFFLE_MATRIX_STRUCT matrixData, std::vector<PROGRAM_DIE_MATRIX_STRUCT> vecSubMatrix)
  44. {
  45. int matrixNum = m_mapSubMatrixControls.size();
  46. int newMatrixID = ++matrixNum;
  47. QVector<QObject*> vecControls;
  48. QWidget* outWidget = new QWidget();
  49. QGridLayout* outMatrixGridLayout = new QGridLayout();
  50. outMatrixGridLayout->setSpacing(6);
  51. outMatrixGridLayout->setObjectName(QString::fromUtf8("Out GridLayout"));
  52. QGridLayout* boxGridLayout = new QGridLayout();
  53. boxGridLayout->setSpacing(6);
  54. boxGridLayout->setObjectName(QString::fromUtf8("Box GridLayout"));
  55. QHBoxLayout* buttonLayout = new QHBoxLayout();
  56. QSpacerItem* item = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
  57. buttonLayout->addSpacerItem(item);
  58. QPushButton* pushButtonAddOutMatrix = new QPushButton();
  59. pushButtonAddOutMatrix->setObjectName(QString::fromUtf8("button Add"));
  60. pushButtonAddOutMatrix->setText(tr("add out Matrix"));
  61. buttonLayout->addWidget(pushButtonAddOutMatrix);
  62. connect(pushButtonAddOutMatrix, &QPushButton::clicked, this, [=]() {
  63. PROGRAM_WAFFLE_MATRIX_STRUCT newMatrix;
  64. //排序
  65. std::sort(m_vecWaffleMatrix.begin(), m_vecWaffleMatrix.end(),
  66. [](const PROGRAM_WAFFLE_MATRIX_STRUCT& a, const PROGRAM_WAFFLE_MATRIX_STRUCT& b) {
  67. return a.MatrixId < b.MatrixId;
  68. });
  69. //找Id
  70. int newId = 1;
  71. for (const auto& matrix : m_vecWaffleMatrix)
  72. {
  73. if (matrix.MatrixId == newId)
  74. {
  75. newId++;
  76. } else if (matrix.MatrixId > newId)
  77. {
  78. break;
  79. }
  80. }
  81. newMatrix.MatrixId = newId;
  82. int newVectorIndex = m_vecWaffleMatrix.size();
  83. std::vector<PROGRAM_DIE_MATRIX_STRUCT> newVecSubMatrix;
  84. m_vecWaffleMatrix.push_back(newMatrix);
  85. AddMatrixPage(newVectorIndex, newMatrix, newVecSubMatrix);
  86. });
  87. //ui.verticalLayout->addLayout(buttonLayout);
  88. QGroupBox* groupBox = new QGroupBox(outWidget);
  89. groupBox->setLayout(boxGridLayout);
  90. QGridLayout* matrixGridLayout = new QGridLayout();
  91. matrixGridLayout->setSpacing(6);
  92. matrixGridLayout->setObjectName(QString::fromUtf8("matrixGridLayout"));
  93. QLabel* labelTitle = new QLabel(outWidget);
  94. labelTitle->setObjectName(QString::fromUtf8("labelTitle"));
  95. labelTitle->setText(tr("Matrix ") + QString::number(vectorIndex));
  96. labelTitle->setStyleSheet("color: #6A78FF;height: 30px");
  97. matrixGridLayout->addWidget(labelTitle, 0, 1, 1, 3);
  98. vecControls.push_back(labelTitle);
  99. QPushButton* pushButtonAdd = new QPushButton(outWidget);
  100. pushButtonAdd->setObjectName(QString::fromUtf8("button Add"));
  101. pushButtonAdd->setText(tr("add sub Matrix"));
  102. matrixGridLayout->addWidget(pushButtonAdd, 1, 1, 1, 1);
  103. pushButtonAdd->setProperty("type", "default");
  104. connect(pushButtonAdd, &QPushButton::clicked, this, [=]() {
  105. int newIndex = m_vecSubWaffleMatrix.size();
  106. PROGRAM_DIE_MATRIX_STRUCT dieMatrix;
  107. //排序
  108. std::sort(m_vecSubWaffleMatrix.begin(), m_vecSubWaffleMatrix.end(),
  109. [](const PROGRAM_DIE_MATRIX_STRUCT& a, const PROGRAM_DIE_MATRIX_STRUCT& b) {
  110. return a.MatrixId < b.MatrixId;
  111. });
  112. //找Id
  113. int newId = 1;
  114. for (const auto& matrix : m_vecSubWaffleMatrix)
  115. {
  116. if (matrix.MatrixId == newId)
  117. {
  118. newId++;
  119. } else if (matrix.MatrixId > newId)
  120. {
  121. break;
  122. }
  123. }
  124. dieMatrix.MatrixId = newId;
  125. dieMatrix.strModuleName = "WaffleHead";
  126. dieMatrix.iModuleId = MODULE_LIST::WaffleHead;
  127. m_vecSubWaffleMatrix.push_back(dieMatrix);
  128. //找大矩阵ID/Index
  129. auto currentIt = m_mapOutWidgetIndex.find(outWidget);
  130. int index = currentIt.value(); //迭代器 erase后currentIt被删除了
  131. m_vecWaffleMatrix[index].VecDieMatrixId.push_back(newId);
  132. AddSubMatrixPage(newIndex, dieMatrix, boxGridLayout);
  133. });
  134. QPushButton* pushButtonDelete = new QPushButton(outWidget);
  135. pushButtonDelete->setObjectName(QString::fromUtf8("button delete"));
  136. pushButtonDelete->setText(tr("delete Matrix"));
  137. matrixGridLayout->addWidget(pushButtonDelete, 1, 2, 1, 1);
  138. connect(pushButtonDelete, &QPushButton::clicked, this, [=]() {
  139. //处理index
  140. auto currentIt = m_mapOutWidgetIndex.find(outWidget);
  141. int index = currentIt.value(); //迭代器 erase后currentIt被删除了
  142. m_mapOutWidgetIndex.erase(currentIt);
  143. for (auto it = m_mapOutWidgetIndex.begin(); it != m_mapOutWidgetIndex.end(); it++)
  144. {
  145. if (it.value() > index)
  146. {
  147. int newIndex = it.value() - 1;
  148. m_mapOutWidgetIndex.insert(it.key(), newIndex);
  149. }
  150. }
  151. //删除缓存数据
  152. m_vecWaffleMatrix.erase(m_vecWaffleMatrix.begin() + index);
  153. delete outWidget;
  154. });
  155. QLabel* labelRow = new QLabel(outWidget);
  156. labelRow->setObjectName(QString::fromUtf8("labelRow"));
  157. labelRow->setText(tr("Row "));
  158. matrixGridLayout->addWidget(labelRow, 2, 0, 1, 1);
  159. vecControls.push_back(labelRow);
  160. SpinBox* spinBoxRow = new SpinBox(outWidget);
  161. spinBoxRow->setObjectName(QString::fromUtf8("spinBoxRow"));
  162. matrixGridLayout->addWidget(spinBoxRow, 2, 1, 1, 1);
  163. vecControls.push_back(spinBoxRow);
  164. QLabel* labelCol = new QLabel(outWidget);
  165. labelCol->setObjectName(QString::fromUtf8("labelCol"));
  166. labelCol->setText(tr("Cow "));
  167. matrixGridLayout->addWidget(labelCol, 3, 0, 1, 1);
  168. vecControls.push_back(labelCol);
  169. SpinBox* spinBoxCol = new SpinBox(outWidget);
  170. spinBoxCol->setObjectName(QString::fromUtf8("spinBoxCol"));
  171. matrixGridLayout->addWidget(spinBoxCol, 3, 1, 1, 1);
  172. vecControls.push_back(spinBoxCol);
  173. QLabel* labelLeftTop = new QLabel(outWidget);
  174. labelLeftTop->setObjectName(QString::fromUtf8("labelLeftTop"));
  175. labelLeftTop->setText(tr("Left Top Pos "));
  176. matrixGridLayout->addWidget(labelLeftTop, 4, 0, 1, 1);
  177. vecControls.push_back(labelLeftTop);
  178. DoubleSpinBox* doubleSpinBoxLeftTopX = new DoubleSpinBox(outWidget);
  179. doubleSpinBoxLeftTopX->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopX"));
  180. matrixGridLayout->addWidget(doubleSpinBoxLeftTopX, 4, 1, 1, 1);
  181. vecControls.push_back(doubleSpinBoxLeftTopX);
  182. DoubleSpinBox* doubleSpinBoxLeftTopY = new DoubleSpinBox(outWidget);
  183. doubleSpinBoxLeftTopY->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopY"));
  184. matrixGridLayout->addWidget(doubleSpinBoxLeftTopY, 4, 2, 1, 1);
  185. vecControls.push_back(doubleSpinBoxLeftTopY);
  186. QLabel* labelRightTopPos = new QLabel(outWidget);
  187. labelRightTopPos->setObjectName(QString::fromUtf8("labelRightTopPos"));
  188. labelRightTopPos->setText(tr("Right Top Pos "));
  189. matrixGridLayout->addWidget(labelRightTopPos, 5, 0, 1, 1);
  190. vecControls.push_back(labelRightTopPos);
  191. DoubleSpinBox* doubleSpinBoxRightTopX = new DoubleSpinBox(outWidget);
  192. doubleSpinBoxRightTopX->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopX"));
  193. matrixGridLayout->addWidget(doubleSpinBoxRightTopX, 5, 1, 1, 1);
  194. vecControls.push_back(doubleSpinBoxRightTopX);
  195. DoubleSpinBox* doubleSpinBoxRightTopY = new DoubleSpinBox(outWidget);
  196. doubleSpinBoxRightTopY->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopY"));
  197. matrixGridLayout->addWidget(doubleSpinBoxRightTopY, 5, 2, 1, 1);
  198. vecControls.push_back(doubleSpinBoxRightTopY);
  199. QLabel* labelRightButtomPos = new QLabel(outWidget);
  200. labelRightButtomPos->setObjectName(QString::fromUtf8("labelRightButtomPos"));
  201. labelRightButtomPos->setText(tr("Right Buttom pos"));
  202. matrixGridLayout->addWidget(labelRightButtomPos, 6, 0, 1, 1);
  203. vecControls.push_back(labelRightButtomPos);
  204. DoubleSpinBox* doubleSpinBoxRightButtomX = new DoubleSpinBox(outWidget);
  205. doubleSpinBoxRightButtomX->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomX"));
  206. matrixGridLayout->addWidget(doubleSpinBoxRightButtomX, 6, 1, 1, 1);
  207. vecControls.push_back(doubleSpinBoxRightButtomX);
  208. DoubleSpinBox* doubleSpinBoxRightButtomY = new DoubleSpinBox(outWidget);
  209. doubleSpinBoxRightButtomY->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomY"));
  210. matrixGridLayout->addWidget(doubleSpinBoxRightButtomY, 6, 2, 1, 1);
  211. vecControls.push_back(doubleSpinBoxRightTopX);
  212. QLabel* labelNoBondPts = new QLabel(outWidget);
  213. labelNoBondPts->setObjectName(QString::fromUtf8("labelNoBondPts"));
  214. labelNoBondPts->setText(tr("No Bond Points"));
  215. matrixGridLayout->addWidget(labelNoBondPts, 7, 0, 1, 1);
  216. vecControls.push_back(labelNoBondPts);
  217. QLineEdit* lineEditNoBondPts = new QLineEdit(outWidget);
  218. lineEditNoBondPts->setObjectName(QString::fromUtf8("lineEditNoBondPts"));
  219. matrixGridLayout->addWidget(lineEditNoBondPts, 7, 1, 1, 2);
  220. vecControls.push_back(lineEditNoBondPts);
  221. lineEditNoBondPts->setReadOnly(true);
  222. lineEditNoBondPts->setCursor(Qt::PointingHandCursor);
  223. lineEditNoBondPts->setProperty("subVectorIndex", vectorIndex); // 存储索引
  224. lineEditNoBondPts->installEventFilter(this);
  225. QFrame* line = new QFrame(outWidget);
  226. line->setFrameShape(QFrame::NoFrame); // 移除默认框架
  227. line->setFixedHeight(2); // 设置固定高度
  228. line->setStyleSheet("background-color: #C7CAEB;");
  229. boxGridLayout->addLayout(matrixGridLayout, 2, 0);
  230. boxGridLayout->addWidget(line);
  231. outMatrixGridLayout->addLayout(buttonLayout, 1, 0);
  232. outMatrixGridLayout->addWidget(groupBox);
  233. outWidget->setLayout(outMatrixGridLayout);
  234. ui.verticalLayout->addWidget(outWidget);
  235. m_mapOutWidgetIndex.insert(outWidget, vectorIndex);
  236. for (int j = 0; j < matrixData.VecDieMatrixId.size(); j++)
  237. {
  238. for (int i = 0; i < m_vecSubWaffleMatrix.size(); i++)
  239. {
  240. if (matrixData.VecDieMatrixId[j] == m_vecSubWaffleMatrix[i].MatrixId)
  241. {
  242. AddSubMatrixPage(i, m_vecSubWaffleMatrix[i], boxGridLayout);
  243. }
  244. }
  245. }
  246. QSpacerItem* vSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
  247. ui.verticalLayout->addItem(vSpacer);
  248. //for (int i = 0; i = vecSubMatrix.size(); i++)
  249. //{
  250. // AddSubMatrixPage(i, vecSubMatrix[i], outMatrixGridLayout);
  251. //}
  252. spinBoxRow->setValue(matrixData.PackRow);
  253. spinBoxCol->setValue(matrixData.PackCol);
  254. doubleSpinBoxLeftTopX->setValue(matrixData.LeftTopPoint.x);
  255. doubleSpinBoxLeftTopY->setValue(matrixData.LeftTopPoint.y);
  256. doubleSpinBoxRightTopX->setValue(matrixData.RightTopPoint.x);
  257. doubleSpinBoxRightTopY->setValue(matrixData.RightTopPoint.y);
  258. doubleSpinBoxRightButtomX->setValue(matrixData.RightBottomPoint.x);
  259. doubleSpinBoxRightButtomY->setValue(matrixData.RightBottomPoint.y);
  260. connect(spinBoxRow, &SpinBox::editDone, this, [=]() {
  261. m_vecWaffleMatrix[vectorIndex].PackRow = spinBoxRow->value();
  262. });
  263. connect(spinBoxCol, &SpinBox::editDone, this, [=]() {
  264. m_vecWaffleMatrix[vectorIndex].PackCol = spinBoxCol->value();
  265. });
  266. connect(doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() {
  267. m_vecWaffleMatrix[vectorIndex].LeftTopPoint.x = doubleSpinBoxLeftTopX->value();
  268. });
  269. connect(doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() {
  270. m_vecWaffleMatrix[vectorIndex].LeftTopPoint.y = doubleSpinBoxLeftTopY->value();
  271. });
  272. connect(doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() {
  273. m_vecWaffleMatrix[vectorIndex].RightTopPoint.x = doubleSpinBoxRightTopX->value();
  274. });
  275. connect(doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() {
  276. m_vecWaffleMatrix[vectorIndex].RightTopPoint.y = doubleSpinBoxRightTopY->value();
  277. });
  278. connect(doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() {
  279. m_vecWaffleMatrix[vectorIndex].RightBottomPoint.x = doubleSpinBoxRightButtomX->value();
  280. });
  281. connect(doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() {
  282. m_vecWaffleMatrix[vectorIndex].RightBottomPoint.y = doubleSpinBoxRightButtomY->value();
  283. });
  284. connect(lineEditNoBondPts, &QLineEdit::textChanged, this, [=]() {
  285. });
  286. }
  287. void WaffleProgramPage::AddSubMatrixPage(int subVectorIndex, PROGRAM_DIE_MATRIX_STRUCT subMatrix, QGridLayout* layout)
  288. {
  289. QVector<QObject*> vecControls;
  290. QWidget* subWidget = new QWidget();
  291. QGridLayout* subGridLayout = new QGridLayout(subWidget);
  292. subGridLayout->setSpacing(6);
  293. subGridLayout->setObjectName(QString::fromUtf8("subGridLayout"));
  294. //groupBox->setLayout(subGridLayout);
  295. QLabel* labelTitle = new QLabel(subWidget);
  296. labelTitle->setObjectName(QString::fromUtf8("labelTitle"));
  297. labelTitle->setText(tr("Sub Matrix ") + QString::number(subVectorIndex));
  298. labelTitle->setStyleSheet("color: #808BFF;height: 30px");
  299. subGridLayout->addWidget(labelTitle, 0, 1, 1, 3);
  300. vecControls.push_back(labelTitle);
  301. QPushButton* pushButtonDelete = new QPushButton(subWidget);
  302. pushButtonDelete->setObjectName(QString::fromUtf8("button delete"));
  303. pushButtonDelete->setText(tr("delete Matrix"));
  304. subGridLayout->addWidget(pushButtonDelete, 1, 2, 1, 1);
  305. connect(pushButtonDelete, &QPushButton::clicked, this, [=]() {
  306. //处理index
  307. auto currentIt = m_mapSubWidgetIndex.find(subWidget);
  308. int index = currentIt.value(); //迭代器 erase后currentIt被删除了
  309. m_mapSubWidgetIndex.erase(currentIt);
  310. for (auto it = m_mapSubWidgetIndex.begin(); it != m_mapSubWidgetIndex.end(); ++it)
  311. {
  312. if (it.value() > index)
  313. {
  314. //value() 返回的是副本不是引用
  315. int newIndex = it.value() - 1;
  316. m_mapSubWidgetIndex.insert(it.key(), newIndex);
  317. }
  318. }
  319. // 子矩阵ID
  320. int subMatrixId = m_vecSubWaffleMatrix[index].MatrixId;
  321. //删除缓存
  322. m_vecSubWaffleMatrix.erase(m_vecSubWaffleMatrix.begin() + index);
  323. //删除大矩阵子ID数据(遍历删除)
  324. for (PROGRAM_WAFFLE_MATRIX_STRUCT& matrix : m_vecWaffleMatrix)
  325. {
  326. auto it = std::find(matrix.VecDieMatrixId.begin(), matrix.VecDieMatrixId.end(), subMatrixId);
  327. if (it != matrix.VecDieMatrixId.end())
  328. {
  329. matrix.VecDieMatrixId.erase(it);
  330. }
  331. }
  332. delete subWidget;
  333. });
  334. QLabel* labelRow = new QLabel(subWidget);
  335. labelRow->setObjectName(QString::fromUtf8("labelRow"));
  336. labelRow->setText(tr("Row "));
  337. subGridLayout->addWidget(labelRow, 2, 0, 1, 1);
  338. vecControls.push_back(labelRow);
  339. SpinBox* spinBoxRow = new SpinBox(subWidget);
  340. spinBoxRow->setObjectName(QString::fromUtf8("spinBoxRow"));
  341. subGridLayout->addWidget(spinBoxRow, 2, 1, 1, 1);
  342. vecControls.push_back(spinBoxRow);
  343. QLabel* labelCol = new QLabel(subWidget);
  344. labelCol->setObjectName(QString::fromUtf8("labelCol"));
  345. labelCol->setText(tr("Cow "));
  346. subGridLayout->addWidget(labelCol, 3, 0, 1, 1);
  347. vecControls.push_back(labelCol);
  348. SpinBox* spinBoxCol = new SpinBox(subWidget);
  349. spinBoxCol->setObjectName(QString::fromUtf8("spinBoxCol"));
  350. subGridLayout->addWidget(spinBoxCol, 3, 1, 1, 1);
  351. vecControls.push_back(spinBoxCol);
  352. QLabel* labelLeftTop = new QLabel(subWidget);
  353. labelLeftTop->setObjectName(QString::fromUtf8("labelLeftTop"));
  354. labelLeftTop->setText(tr("Left Top Pos "));
  355. subGridLayout->addWidget(labelLeftTop, 4, 0, 1, 1);
  356. vecControls.push_back(labelLeftTop);
  357. DoubleSpinBox* doubleSpinBoxLeftTopX = new DoubleSpinBox(subWidget);
  358. doubleSpinBoxLeftTopX->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopX"));
  359. subGridLayout->addWidget(doubleSpinBoxLeftTopX, 4, 1, 1, 1);
  360. vecControls.push_back(doubleSpinBoxLeftTopX);
  361. DoubleSpinBox* doubleSpinBoxLeftTopY = new DoubleSpinBox(subWidget);
  362. doubleSpinBoxLeftTopY->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopY"));
  363. subGridLayout->addWidget(doubleSpinBoxLeftTopY, 4, 2, 1, 1);
  364. vecControls.push_back(doubleSpinBoxLeftTopY);
  365. QLabel* labelRightTopPos = new QLabel(subWidget);
  366. labelRightTopPos->setObjectName(QString::fromUtf8("labelRightTopPos"));
  367. labelRightTopPos->setText(tr("Right Top Pos "));
  368. subGridLayout->addWidget(labelRightTopPos, 5, 0, 1, 1);
  369. vecControls.push_back(labelRightTopPos);
  370. DoubleSpinBox* doubleSpinBoxRightTopX = new DoubleSpinBox(subWidget);
  371. doubleSpinBoxRightTopX->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopX"));
  372. subGridLayout->addWidget(doubleSpinBoxRightTopX, 5, 1, 1, 1);
  373. vecControls.push_back(doubleSpinBoxRightTopX);
  374. DoubleSpinBox* doubleSpinBoxRightTopY = new DoubleSpinBox(subWidget);
  375. doubleSpinBoxRightTopY->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopY"));
  376. subGridLayout->addWidget(doubleSpinBoxRightTopY, 5, 2, 1, 1);
  377. vecControls.push_back(doubleSpinBoxRightTopY);
  378. QLabel* labelRightButtomPos = new QLabel(subWidget);
  379. labelRightButtomPos->setObjectName(QString::fromUtf8("labelRightButtomPos"));
  380. labelRightButtomPos->setText(tr("Right Buttom pos"));
  381. subGridLayout->addWidget(labelRightButtomPos, 6, 0, 1, 1);
  382. vecControls.push_back(labelRightButtomPos);
  383. DoubleSpinBox* doubleSpinBoxRightButtomX = new DoubleSpinBox(subWidget);
  384. doubleSpinBoxRightButtomX->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomX"));
  385. subGridLayout->addWidget(doubleSpinBoxRightButtomX, 6, 1, 1, 1);
  386. vecControls.push_back(doubleSpinBoxRightButtomX);
  387. DoubleSpinBox* doubleSpinBoxRightButtomY = new DoubleSpinBox(subWidget);
  388. doubleSpinBoxRightButtomY->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomY"));
  389. subGridLayout->addWidget(doubleSpinBoxRightButtomY, 6, 2, 1, 1);
  390. vecControls.push_back(doubleSpinBoxRightTopX);
  391. QLabel* labelNoBondPts = new QLabel(subWidget);
  392. labelNoBondPts->setObjectName(QString::fromUtf8("labelNoBondPts"));
  393. labelNoBondPts->setText(tr("No Bond Points"));
  394. subGridLayout->addWidget(labelNoBondPts, 7, 0, 1, 1);
  395. vecControls.push_back(labelNoBondPts);
  396. QLineEdit* lineEditNoBondPts = new QLineEdit(subWidget);
  397. lineEditNoBondPts->setObjectName(QString::fromUtf8("lineEditNoBondPts"));
  398. lineEditNoBondPts->setReadOnly(true);
  399. lineEditNoBondPts->setCursor(Qt::PointingHandCursor);
  400. lineEditNoBondPts->setProperty("vectorIndex", subVectorIndex); // 存储索引
  401. lineEditNoBondPts->installEventFilter(this);
  402. subGridLayout->addWidget(lineEditNoBondPts, 7, 1, 1, 2);
  403. vecControls.push_back(lineEditNoBondPts);
  404. //layout->addLayout(subGridLayout, 11, 0);
  405. QFrame* line = new QFrame(subWidget);
  406. line->setFrameShape(QFrame::NoFrame); // 移除默认框架
  407. line->setFixedHeight(2); // 设置固定高度
  408. line->setStyleSheet("background-color: #C7CAEB;");
  409. subGridLayout->addWidget(line, 10, 0, 1, 3);
  410. layout->addWidget(subWidget);
  411. m_mapSubWidgetIndex.insert(subWidget, subVectorIndex);
  412. spinBoxRow->setValue(subMatrix.MatrixRow);
  413. spinBoxCol->setValue(subMatrix.MatrixCol);
  414. doubleSpinBoxLeftTopX->setValue(subMatrix.LeftTopPoint.x);
  415. doubleSpinBoxLeftTopY->setValue(subMatrix.LeftTopPoint.y);
  416. doubleSpinBoxRightTopX->setValue(subMatrix.RightTopPoint.x);
  417. doubleSpinBoxRightTopY->setValue(subMatrix.RightTopPoint.y);
  418. doubleSpinBoxRightButtomX->setValue(subMatrix.RightBottomPoint.x);
  419. doubleSpinBoxRightButtomY->setValue(subMatrix.RightBottomPoint.y);
  420. connect(spinBoxRow, &SpinBox::editDone, this, [=]() {
  421. auto it = m_mapSubWidgetIndex.find(subWidget);
  422. m_vecSubWaffleMatrix[it.value()].MatrixRow = spinBoxRow->value();
  423. });
  424. connect(spinBoxCol, &SpinBox::editDone, this, [=]() {
  425. auto it = m_mapSubWidgetIndex.find(subWidget);
  426. m_vecSubWaffleMatrix[it.value()].MatrixCol = spinBoxCol->value();
  427. });
  428. connect(doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() {
  429. auto it = m_mapSubWidgetIndex.find(subWidget);
  430. m_vecSubWaffleMatrix[it.value()].LeftTopPoint.x = doubleSpinBoxLeftTopX->value();
  431. });
  432. connect(doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() {
  433. auto it = m_mapSubWidgetIndex.find(subWidget);
  434. m_vecSubWaffleMatrix[it.value()].LeftTopPoint.y = doubleSpinBoxLeftTopY->value();
  435. });
  436. connect(doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() {
  437. auto it = m_mapSubWidgetIndex.find(subWidget);
  438. m_vecSubWaffleMatrix[it.value()].RightTopPoint.x = doubleSpinBoxRightTopX->value();
  439. });
  440. connect(doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() {
  441. auto it = m_mapSubWidgetIndex.find(subWidget);
  442. m_vecSubWaffleMatrix[it.value()].RightTopPoint.y = doubleSpinBoxRightTopY->value();
  443. });
  444. connect(doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() {
  445. auto it = m_mapSubWidgetIndex.find(subWidget);
  446. m_vecSubWaffleMatrix[it.value()].RightBottomPoint.x = doubleSpinBoxRightButtomX->value();
  447. });
  448. connect(doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() {
  449. auto it = m_mapSubWidgetIndex.find(subWidget);
  450. m_vecSubWaffleMatrix[it.value()].RightBottomPoint.y = doubleSpinBoxRightButtomY->value();
  451. });
  452. connect(lineEditNoBondPts, &QLineEdit::textChanged, this, [=]() {
  453. auto it = m_mapSubWidgetIndex.find(subWidget);
  454. });
  455. }
  456. bool WaffleProgramPage::eventFilter(QObject* obj, QEvent* event) {
  457. if (event->type() == QEvent::MouseButtonPress)
  458. {
  459. auto* lineEdit = qobject_cast<QLineEdit*>(obj);
  460. if (lineEdit)
  461. {
  462. int index = lineEdit->property("vectorIndex").toInt();
  463. onNoBondPtsClicked(lineEdit, index);
  464. return true; // 拦截事件
  465. }
  466. }
  467. return QWidget::eventFilter(obj, event);
  468. }
  469. void WaffleProgramPage::onNoBondPtsClicked(QLineEdit* lineEdit, int index) {
  470. if (index < 0 || index >= m_vecWaffleMatrix.size()) return;
  471. const auto& waffle = m_vecWaffleMatrix[index];
  472. NoBondPtEditDialog dlg(waffle.PackRow, waffle.PackCol, waffle.VecNoBondDie, this);
  473. if (dlg.exec() == QDialog::Accepted)
  474. {
  475. QVector<XY_LONG_STRUCT> selected = dlg.getSelectedPoints();
  476. m_vecWaffleMatrix[index].VecNoBondDie = std::vector<XY_LONG_STRUCT>(selected.begin(), selected.end());
  477. QStringList ptList;
  478. for (const auto& pt : selected)
  479. ptList << QString("(%1,%2)").arg(pt.x).arg(pt.y);
  480. lineEdit->setText(ptList.join(" "));
  481. }
  482. }
  483. void WaffleProgramPage::SaveAllParam()
  484. {
  485. }
  486. void WaffleProgramPage::MatrixChangeEvent()
  487. {
  488. for (PROGRAM_WAFFLE_MATRIX_STRUCT& waffleMatrix : m_vecWaffleMatrix)
  489. {
  490. m_pProduct->SetWaffleMatrix(waffleMatrix.MatrixId, waffleMatrix);
  491. }
  492. m_pProduct->SetDieMatrix(m_vecSubWaffleMatrix, true);
  493. //for (PROGRAM_BOND_MATRIX_STRUCT& bondMatrix : m_vecWaffleMatrix)
  494. //{
  495. // m_manageDB->GetCProduct()->SetBondMatrix(bondMatrix.BondMatrixId, bondMatrix);
  496. //}
  497. //for (PROGRAM_POINT_MATRIX_STRUCT& pointMatrix : m_vecSubMatrixs)
  498. //{
  499. // m_manageDB->GetCProduct()->SetPointMatrix(pointMatrix.MatrixId, pointMatrix);
  500. //}
  501. }
  502. void WaffleProgramPage::initPage()
  503. {
  504. m_vecWaffleMatrix = m_pProduct->GetWaffleMatrix();
  505. for (int i = 0; i < m_vecWaffleMatrix.size(); i++)
  506. {
  507. for (int j = 0; j < m_vecWaffleMatrix[i].VecDieMatrixId.size(); j++)
  508. {
  509. PROGRAM_DIE_MATRIX_STRUCT subMatrix;
  510. m_pProduct->GetDieMatrix(m_vecWaffleMatrix[i].VecDieMatrixId[j], subMatrix);
  511. m_vecSubWaffleMatrix.push_back(subMatrix);
  512. //AddMatrixPage(i, j, subMatrix);
  513. }
  514. AddMatrixPage(i, m_vecWaffleMatrix[i], m_vecSubWaffleMatrix);
  515. //for (int j = 0; j < m_vecWaffleMatrix[i].VecDieMatrixId.size(); j++)
  516. //{
  517. // for (int k = 0; k < m_vecSubWaffleMatrix.size(); k++)
  518. // {
  519. // if (m_vecWaffleMatrix[i].VecDieMatrixId[j] == m_vecSubWaffleMatrix[k].MatrixId)
  520. // {
  521. // AddSubMatrixPage(i, m_vecSubWaffleMatrix[k],nullptr);
  522. // }
  523. // }
  524. //}
  525. }
  526. }