Browse Source

Merge branch 'master' of http://47.116.26.105:10880/JonYang/JSBTDieBondH

yun 1 day ago
parent
commit
79f93fc753

+ 10 - 10
View/die-bonder-ui/MainWnd.ui

@@ -62,7 +62,7 @@
       </font>
      </property>
      <property name="text">
-      <string extracomment="焊接">Home</string>
+      <string extracomment="主页面">Home</string>
      </property>
      <property name="iconSize">
       <size>
@@ -158,7 +158,7 @@
       </font>
      </property>
      <property name="text">
-      <string extracomment="焊接">Prod. Assist</string>
+      <string extracomment="产品协助">Prod. Assist</string>
      </property>
      <property name="iconSize">
       <size>
@@ -209,7 +209,7 @@
       </font>
      </property>
      <property name="text">
-      <string extracomment="焊接">Programme</string>
+      <string extracomment="方案">Programme</string>
      </property>
      <property name="iconSize">
       <size>
@@ -260,7 +260,7 @@
       </font>
      </property>
      <property name="text">
-      <string extracomment="焊接">Message</string>
+      <string extracomment="消息">Message</string>
      </property>
      <property name="iconSize">
       <size>
@@ -311,7 +311,7 @@
       </font>
      </property>
      <property name="text">
-      <string extracomment="焊接">Calibration</string>
+      <string extracomment="校准">Calibration</string>
      </property>
      <property name="iconSize">
       <size>
@@ -362,7 +362,7 @@
       </font>
      </property>
      <property name="text">
-      <string extracomment="焊接">Module Config.</string>
+      <string extracomment="模块配置">Module Config.</string>
      </property>
      <property name="iconSize">
       <size>
@@ -413,7 +413,7 @@
       </font>
      </property>
      <property name="text">
-      <string extracomment="焊接">Diagnosis</string>
+      <string extracomment="诊断">Diagnosis</string>
      </property>
      <property name="iconSize">
       <size>
@@ -464,7 +464,7 @@
       </font>
      </property>
      <property name="text">
-      <string extracomment="焊接">System Info.</string>
+      <string extracomment="系统信息">System Info.</string>
      </property>
      <property name="iconSize">
       <size>
@@ -515,7 +515,7 @@
       </font>
      </property>
      <property name="text">
-      <string extracomment="焊接">Help</string>
+      <string extracomment="帮助">Help</string>
      </property>
      <property name="iconSize">
       <size>
@@ -546,7 +546,7 @@
       </rect>
      </property>
      <property name="text">
-      <string>CLOSE</string>
+      <string extracomment="关闭">CLOSE</string>
      </property>
     </widget>
    </widget>

+ 82 - 33
View/die-bonder-ui/OriginalWnd/DbTreeViewManager.cpp

@@ -2171,27 +2171,25 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                         }
                         else
                         {
-                            nMin = fieldUpLimit.toInt();
-                            nMax = fieldDownLimit.toInt();
+                            nMin = fieldDownLimit.toInt();
+                            nMax = fieldUpLimit.toInt();
 
-                            doMin = fieldUpLimit.toDouble();
-                            doMan = fieldDownLimit.toDouble();
+                            doMin = fieldDownLimit.toDouble();
+                            doMan = fieldUpLimit.toDouble();
                         }
 
-                        if (fieldType == "input")
+                        if (fieldType == "LONG")
                         {
                             //int 类型
                             QIntValidator* validator = new QIntValidator(nMin, nMax, lineEdit);
                             lineEdit->setValidator(validator);
                         }
-                        else if (fieldType == "LONG")
+                        else if (fieldType =="input")
                         {
                             QDoubleValidator* validator = new QDoubleValidator(doMin, doMan, 4, lineEdit);
                             validator->setNotation(QDoubleValidator::StandardNotation);
                             lineEdit->setValidator(validator);
                         }
-                        
-
 
                         lineEdit->setAlignment(Qt::AlignLeft);
                     
@@ -2264,25 +2262,76 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                         //    }
 
                         //    });
-						connect(lineEdit, &QLineEdit::textChanged, [this, lineEdit, fieldUpLimit, fieldDownLimit, pFieldDescribeLabel]() {
+						connect(lineEdit, &QLineEdit::textChanged, [this, fieldType,lineEdit, fieldUpLimit, fieldDownLimit, pFieldDescribeLabel]() {
 							if ((fieldUpLimit != "") && (fieldDownLimit != ""))
 							{
-								int uplimit = fieldUpLimit.toInt();
-								int downlimit = fieldDownLimit.toInt();
-								int inputvalue = (lineEdit->text()).toInt();
-								if ((inputvalue <= uplimit) && (inputvalue >= downlimit))
-								{
-									pFieldDescribeLabel->setProperty("value", lineEdit->text());
-                                    pFieldDescribeLabel->setDisabled(true);
-									//label->setStyleSheet("color: #5c63be;");
-									modifiedLabels.insert(pFieldDescribeLabel);
-									// m_sqlOper->updateControlData(fieldTableName, fieldName, lineEdit->text());
-									//updateDb(fieldTableName, fieldId, lineEdit->text());
-								}
-								else
-								{
-									lineEdit->setPlaceholderText(tr("out of range,please input again","超出设定范围,请重新输入"));
-								}
+                                if (fieldType == "LONG")
+                                {
+                                    int uplimit = fieldUpLimit.toInt();
+                                    int downlimit = fieldDownLimit.toInt();
+                                    int inputvalue = lineEdit->text().toInt();
+                                    if ((inputvalue <= uplimit) && (inputvalue >= downlimit))
+                                    {
+                                        pFieldDescribeLabel->setProperty("value", lineEdit->text());
+                                        pFieldDescribeLabel->setDisabled(true);
+                                        //label->setStyleSheet("color: #5c63be;");
+                                        modifiedLabels.insert(pFieldDescribeLabel);
+                                        // m_sqlOper->updateControlData(fieldTableName, fieldName, lineEdit->text());
+                                        //updateDb(fieldTableName, fieldId, lineEdit->text());
+                                    }
+                                    else
+                                    {
+                                        lineEdit->undo();
+                                        QString strErr = QString(tr("Current Limit Range:%1~%2", "当前限定范围:%1~%2").
+                                            arg(downlimit).
+                                            arg(uplimit));
+                                        JMessageTip::Message_information(strErr);
+                                        //lineEdit->setPlaceholderText(tr("out of range,please input again","超出设定范围,请重新输入"));
+                                    }
+                                }
+                                else if (fieldType == "input")
+                                {
+                                    double uplimit = fieldUpLimit.toDouble();
+                                    double downlimit = fieldDownLimit.toDouble();
+
+                                    //auto isDoubleFun = [](const QString& str)
+                                    //{
+                                    //    QRegExp regExp("^-?\\d*\\.?\\d+$");  // 匹配浮点数(包括负数)
+                                    //    return regExp.exactMatch(str);
+                                    //};
+
+                                    //double inputvalue = 0.0;
+                                    //QString isDouble = lineEdit->text();
+                                    //if (isDoubleFun(isDouble))
+                                    //{
+                                    //    inputvalue = isDouble.toDouble();
+                                    //}
+                                    //else
+                                    //{
+                                    //    inputvalue = isDouble.toInt();
+                                    //}
+                                    double inputvalue = lineEdit->text().toDouble();
+                                    if ((inputvalue <= uplimit) && (inputvalue >= downlimit))
+                                    {
+                                        pFieldDescribeLabel->setProperty("value", lineEdit->text());
+                                        pFieldDescribeLabel->setDisabled(true);
+                                        //label->setStyleSheet("color: #5c63be;");
+                                        modifiedLabels.insert(pFieldDescribeLabel);
+                                        // m_sqlOper->updateControlData(fieldTableName, fieldName, lineEdit->text());
+                                        //updateDb(fieldTableName, fieldId, lineEdit->text());
+                                    }
+                                    else
+                                    {
+                                        lineEdit->undo();
+                                        QString strErr = QString(tr("Current Limit Range:%1~%2", "当前限定范围:%1~%2").
+                                            arg(downlimit).
+                                            arg(uplimit));
+                                        JMessageTip::Message_information(strErr);
+                                        //lineEdit->setPlaceholderText(tr("out of range,please input again","超出设定范围,请重新输入"));
+                                    }
+                                }
+
+								
 							}
 							else if (fieldDownLimit != "")
 							{
@@ -2428,19 +2477,19 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                     QStringList optionList = fieldUnits.split(QRegExp("[,,]"), Qt::SkipEmptyParts);
                     QHBoxLayout* radioLayout = new QHBoxLayout;
                     radioLayout->setSpacing(5);
+
+                    QList<ST_DATA_ITEM> dataList = JIoMapPage::parseJsonToDataList(fieldUnits);
+
+
                     QButtonGroup* radioGroup = new QButtonGroup(rightWidget);
-                    for (const QString& optionText : optionList)
+                    for (const ST_DATA_ITEM& optionText : dataList)
                     {
-                        QString trimmedOpt = optionText.trimmed();
-                        if (trimmedOpt.isEmpty())
-                        {
-                            continue;
-                        }
-                        QRadioButton* radioButton = new QRadioButton(trimmedOpt);
+                        
+                        QRadioButton* radioButton = new QRadioButton(optionText.key);
                         radioGroup->addButton(radioButton);
                         radioLayout->addWidget(radioButton);
                         m_fieldWidgets.append(radioButton);
-                        if (fieldValue == trimmedOpt)
+                        if (fieldValue == optionText.key)
                         {
                             radioButton->setChecked(true);
                         }

+ 41 - 0
View/die-bonder-ui/OriginalWnd/TreeViewManager/JCustomLabelControls.h

@@ -218,4 +218,45 @@ private:
 };
 
 
+class YourClass : public QWidget
+{
+private:
+    QLineEdit* lineEdit;
+    QString lastValidText;  // 保存上一次的有效值
+
+public:
+    void setupLineEdit()
+    {
+        lineEdit = new QLineEdit(this);
+        QIntValidator* validator = new QIntValidator(0, 3, this);
+        lineEdit->setValidator(validator);
+
+        // 保存初始值
+        lastValidText = "0";
+
+        // 连接信号
+        connect(lineEdit, &QLineEdit::textChanged, this, &YourClass::onTextChanged);
+    }
+
+private:
+    void onTextChanged(const QString& text)
+    {
+        bool ok;
+        int value = text.toInt(&ok);
+
+        if (ok && value >= 0 && value <= 3)
+        {
+            lastValidText = text;  // 保存有效值
+        }
+        else
+        {
+            // 恢复上一次的有效值
+            lineEdit->setText(lastValidText);
+            // 将光标移到末尾
+            lineEdit->setCursorPosition(lineEdit->text().length());
+        }
+    }
+};
+
+
 #endif  //__CUSTOMLABELCONTROLS_H__

+ 955 - 8
View/die-bonder-ui/Src/BondMatrixProgramPage.cpp

@@ -10,24 +10,971 @@ BondMatrixProgramPage::BondMatrixProgramPage(QWidget* parent) :
 	ui.setupUi(this);
 
 	setStyleSheet(
-		"QDoubleSpinBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
-		"QSpinBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
-		"QLineEdit{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
-		"QCheckBox::indicator{width: 20px;height: 20px;}"
-		"QCheckBox::indicator:unchecked{background - color: #FFFFFF;border-radius: 2px;}"
-		"QComboBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
-		"QComboBox::drop - down{width: 20px;}"
+		"QWidget { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F1F4FD, stop: 1 #E5E4F6); }"
+		"QDoubleSpinBox { background: #FFFFFF; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }"
+		"QSpinBox { background: #FFFFFF; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }"
+		"QLineEdit { background: #FFFFFF; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }"
+		"QCheckBox::indicator { width: 20px; height: 20px; }"
+		"QCheckBox::indicator:unchecked { background-color: #FFFFFF; border-radius: 2px; }"
+		"QComboBox { background: #FFFFFF; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }"
+		"QComboBox::drop-down { width: 20px; }"
 	);
 
+
 	m_manageDB = CManageDB::GetInstance();
 	if (m_manageDB == nullptr) return;
 	m_pProduct = m_manageDB->GetCProduct();
 	if (m_pProduct == nullptr) return;
 
-	//initPage();
+
+	ui.spinBoxRow->setVisible(false);
+	ui.spinBoxCol->setVisible(false);
+	ui.doubleSpinBoxLeftTopX->setVisible(false);
+	ui.doubleSpinBoxLeftTopY->setVisible(false);
+	ui.doubleSpinBoxRightTopX->setVisible(false);
+	ui.doubleSpinBoxRightTopY->setVisible(false);
+	ui.doubleSpinBoxRightButtomX->setVisible(false);
+	ui.doubleSpinBoxRightButtomY->setVisible(false);
+	ui.lineEditNoBondPts->setVisible(false);
+	ui.label->setVisible(false);
+	ui.label_18->setVisible(false);
+	ui.label_2->setVisible(false);
+	ui.label_79->setVisible(false);
+	ui.label_80->setVisible(false);
+	ui.label_81->setVisible(false);
+	ui.label_82->setVisible(false);
+
+	ui.frame->setFrameShape(QFrame::NoFrame); // 盧뇜칵훰움솥
+	ui.frame->setFixedHeight(2);         // �零미땍멕똑
+	ui.frame->setStyleSheet("background-color: #C7CAEB;");
+
+	//ui.tab->setStyleSheet("background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F1F4FD, stop: 1 #E5E4F6)");
+
+	initPage();
+
+	connect(ui.pushButtonSave, &QPushButton::clicked, this, [=] {
+		ParamChangeEvent();
+		MatrixChangeEvent();
+		});
+
+	//앤黎鑒앴
+	connect(ui.spinBoxRow, &SpinBox::editingFinished, this, [=]() {
+		});
+
+	connect(ui.spinBoxCol, &SpinBox::editingFinished, this, [=]() {
+		});
+
+	connect(ui.doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() {
+		});
+
+	connect(ui.doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() {
+		});
+
+	connect(ui.doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() {
+		});
+
+	connect(ui.doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() {
+		});
+
+	connect(ui.doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() {
+		});
+
+	connect(ui.doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() {
+		});
+
+	//꽝鑒
+	connect(ui.comboBoxDieSource, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [=](int index) {
+		if (index == 0)
+		{
+			m_curBondInfo.eDieSource = DIE_SOURCE::BY_WAFFLE;
+		}
+		else if (index == 1)
+		{
+			m_curBondInfo.eDieSource = DIE_SOURCE::BY_WAFER;
+		}
+		ParamChangeEvent();
+		});
+
+	connect(ui.checkBoxIsCalib, &QCheckBox::clicked, this, [=](bool isChecked) {
+
+		});
+
+	connect(ui.spinBoxPickTempID, &SpinBox::editDone, this, [=]() {
+		m_curBondInfo.iPickPRStrategyId = ui.spinBoxPickTempID->value();
+		ParamChangeEvent();
+		});
+
+	connect(ui.spinBoxPickNozzleID, &SpinBox::editDone, this, [=]() {
+		m_curBondInfo.iPickHeadId = ui.spinBoxPickNozzleID->value();
+		ParamChangeEvent();
+		});
+
+	connect(ui.spinBoxPreBondTemp, &SpinBox::editDone, this, [=]() {
+		m_curBondInfo.iBondFrontPRStrategyId = ui.spinBoxPreBondTemp->value();
+		ParamChangeEvent();
+		});
+
+	connect(ui.spinBoxPostBondTemp, &SpinBox::editDone, this, [=]() {
+		m_curBondInfo.iBondBackPRStrategyId = ui.spinBoxPostBondTemp->value();
+		ParamChangeEvent();
+		});
+
+	connect(ui.spinBoxBondTemp, &SpinBox::editDone, this, [=]() {
+		m_curBondInfo.iBondPRStrategyId = ui.spinBoxBondTemp->value();
+		ParamChangeEvent();
+		});
+
+	connect(ui.spinBoxLookUpTemp, &SpinBox::editDone, this, [=]() {
+		m_curBondInfo.iLookUpPRStrategyId = ui.spinBoxLookUpTemp->value();
+		ParamChangeEvent();
+		});
+
+	connect(ui.spinBoxCalibPickTemp, &SpinBox::editDone, this, [=]() {
+		m_curBondInfo.iCalibPRStrategyId = ui.spinBoxCalibPickTemp->value();
+		ParamChangeEvent();
+		});
+
+	connect(ui.spinBoxBondNozzleID, &SpinBox::editDone, this, [=]() {
+		m_curBondInfo.iBondHeadId = ui.spinBoxBondNozzleID->value();
+		ParamChangeEvent();
+		});
+	connect(ui.doubleSpinBoxBondOffsetX, &DoubleSpinBox::editDone, this, [=]() {
+		m_curBondInfo.stOffset.x = ui.doubleSpinBoxBondOffsetX->value();
+		ParamChangeEvent();
+		});
+	connect(ui.doubleSpinBoxBondOffsetY, &DoubleSpinBox::editDone, this, [=]() {
+		m_curBondInfo.stOffset.y = ui.doubleSpinBoxBondOffsetY->value();
+		ParamChangeEvent();
+		});
+	connect(ui.doubleSpinBoxBondOffsetAngle, &DoubleSpinBox::editDone, this, [=]() {
+		m_curBondInfo.stOffset.a = ui.doubleSpinBoxBondOffsetAngle->value();
+		ParamChangeEvent();
+		});
+
+	connect(ui.comboBoxPickParamType, &QComboBox::currentTextChanged, this, [=]() {
+		UpdatePagePickParam();
+		});
+	connect(ui.checkBoxPickBlockCheck, &QCheckBox::clicked, this, [=](bool isChecked) {
+
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.bCheckBlock = ui.checkBoxPickBlockCheck->isChecked();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.bCheckBlock = ui.checkBoxPickBlockCheck->isChecked();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.checkBoxPickLoseCheck, &QCheckBox::clicked, this, [=](bool isChecked) {
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.bCheckLose = ui.checkBoxPickLoseCheck->isChecked();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.bCheckLose = ui.checkBoxPickLoseCheck->isChecked();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.checkBoxPickFindForceCheck, &QCheckBox::clicked, this, [=](bool isChecked) {
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.bFindForce = ui.checkBoxPickFindForceCheck->isChecked();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.bFindForce = ui.checkBoxPickFindForceCheck->isChecked();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.doubleSpinBoxPrePickZ, &DoubleSpinBox::editDone, this, [=]() {
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.dPreLev = ui.doubleSpinBoxPrePickZ->value();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.dPreLev = ui.doubleSpinBoxPrePickZ->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.doubleSpinBoxPickForce, &DoubleSpinBox::editDone, this, [=]() {
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.dForce = ui.doubleSpinBoxPickForce->value();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.dForce = ui.doubleSpinBoxPickForce->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.doubleSpinBoxPickPosZ, &DoubleSpinBox::editDone, this, [=]() {
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.dPickOrBondLev = ui.doubleSpinBoxPickPosZ->value();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.dPickOrBondLev = ui.doubleSpinBoxPickPosZ->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.spinBoxPickGrabDelay, &SpinBox::editDone, this, [=]() {
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.iGrabDelay = ui.spinBoxPickGrabDelay->value();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.iGrabDelay = ui.spinBoxPickGrabDelay->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.spinBox_PickDelay, &SpinBox::editDone, this, [=]() {
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.iPickOrBondDelay = ui.spinBox_PickDelay->value();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.iPickOrBondDelay = ui.spinBox_PickDelay->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.spinBoxPickBlockCheckDelay, &SpinBox::editDone, this, [=]() {
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.iBlockOrLoseDelay = ui.spinBoxPickBlockCheckDelay->value();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.iBlockOrLoseDelay = ui.spinBoxPickBlockCheckDelay->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.spinBoxPickVacDelay, &SpinBox::editDone, this, [=]() {
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.iVacuumDelay = ui.spinBoxPickVacDelay->value();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.iVacuumDelay = ui.spinBoxPickVacDelay->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.spinBoxPickBlowDelay, &SpinBox::editDone, this, [=]() {
+		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
+		{
+			m_curWaferPickParam.iBlowDelay = ui.spinBoxPickBlowDelay->value();
+		}
+		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
+		{
+			m_curCalibPickParam.iBlowDelay = ui.spinBoxPickBlowDelay->value();
+		}
+		ParamChangeEvent();
+		});
+
+
+	connect(ui.comboBoxBondParamType, &QComboBox::currentTextChanged, this, [=]() {
+		UpdatePageBondParam();
+		});
+	connect(ui.checkBoxBondBlockCheck, &QCheckBox::clicked, this, [=](bool isChecked) {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.bCheckBlock = ui.checkBoxBondBlockCheck->isChecked();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.bCheckBlock = ui.checkBoxBondBlockCheck->isChecked();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.checkBoxBondLoseCheck, &QCheckBox::clicked, this, [=](bool isChecked) {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.bCheckLose = ui.checkBoxBondLoseCheck->isChecked();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.bCheckLose = ui.checkBoxBondLoseCheck->isChecked();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.checkBoxBondFindForce, &QCheckBox::clicked, this, [=](bool isChecked) {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.bFindForce = ui.checkBoxBondFindForce->isChecked();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.bFindForce = ui.checkBoxBondFindForce->isChecked();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.doubleSpinBoxPreBondPosZ, &DoubleSpinBox::editDone, this, [=]() {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.dPreLev = ui.doubleSpinBoxPreBondPosZ->value();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.dPreLev = ui.doubleSpinBoxPreBondPosZ->value();
+		}
+		ParamChangeEvent();
+		});
+
+	connect(ui.doubleSpinBoxBondForce, &DoubleSpinBox::editDone, this, [=]() {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.dForce = ui.doubleSpinBoxBondForce->value();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.dForce = ui.doubleSpinBoxBondForce->value();
+		}
+		ParamChangeEvent();
+		});
+
+	connect(ui.doubleSpinBoxBondPosZ, &DoubleSpinBox::editDone, this, [=]() {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.dPickOrBondLev = ui.doubleSpinBoxBondPosZ->value();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.dPickOrBondLev = ui.doubleSpinBoxBondPosZ->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.spinBoxBondGrabDelay, &SpinBox::editDone, this, [=]() {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.iGrabDelay = ui.spinBoxBondGrabDelay->value();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.iGrabDelay = ui.spinBoxBondGrabDelay->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.spinBoxBondBlockCheckDelay, &SpinBox::editDone, this, [=]() {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.iBlockOrLoseDelay = ui.spinBoxBondBlockCheckDelay->value();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.iBlockOrLoseDelay = ui.spinBoxBondBlockCheckDelay->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.spinBoxBondDelay, &SpinBox::editDone, this, [=]() {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.iPickOrBondDelay = ui.spinBoxBondDelay->value();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.iPickOrBondDelay = ui.spinBoxBondDelay->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.spinBoxBondVacDelay, &SpinBox::editDone, this, [=]() {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.iVacuumDelay = ui.spinBoxBondVacDelay->value();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.iVacuumDelay = ui.spinBoxBondVacDelay->value();
+		}
+		ParamChangeEvent();
+		});
+	connect(ui.spinBoxBondBlowDelay, &SpinBox::editDone, this, [=]() {
+		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
+		{
+			m_curCalibPlaceParam.iBlowDelay = ui.spinBoxBondBlowDelay->value();
+		}
+		else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
+		{
+			m_curBondParam.iBlowDelay = ui.spinBoxBondBlowDelay->value();
+		}
+		ParamChangeEvent();
+		});
 }
 
 
 BondMatrixProgramPage::~BondMatrixProgramPage()
 {
 }
+
+
+
+
+void BondMatrixProgramPage::AddMatrixPage(int bondMatrixVectorIndex, int vectorIndex, PROGRAM_POINT_MATRIX_STRUCT matrixData)
+{
+	int matrixNum = m_mapSubMatrixControls.size();
+	int newMatrixID = ++matrixNum;
+	QVector<QObject*> vecControls;
+
+	QGridLayout* subGridLayout = new QGridLayout();
+	subGridLayout->setSpacing(6);
+	subGridLayout->setObjectName(QString::fromUtf8("subGridLayout"));
+
+	QFrame* line = new QFrame();
+	line->setFrameShape(QFrame::NoFrame); // 盧뇜칵훰움솥
+	line->setFixedHeight(2);         // �零미땍멕똑
+	line->setStyleSheet("background-color: #C7CAEB;");
+	ui.verticalLayout_2->addWidget(line);
+
+	QLabel* labelTitle = new QLabel(this);
+	labelTitle->setObjectName(QString::fromUtf8("labelTitle"));
+	labelTitle->setText(tr("Sub Matrix ") + QString::number(vectorIndex));
+	subGridLayout->addWidget(labelTitle, 0, 0, 1, 1);
+	vecControls.push_back(labelTitle);
+
+	QLabel* labelRow = new QLabel(this);
+	labelRow->setObjectName(QString::fromUtf8("labelRow"));
+	labelRow->setText(tr("Row "));
+	subGridLayout->addWidget(labelRow, 1, 0, 1, 1);
+	vecControls.push_back(labelRow);
+
+	SpinBox* spinBoxRow = new SpinBox(this);
+	spinBoxRow->setObjectName(QString::fromUtf8("spinBoxRow"));
+	subGridLayout->addWidget(spinBoxRow, 1, 1, 1, 1);
+	vecControls.push_back(spinBoxRow);
+
+	QLabel* labelCol = new QLabel(this);
+	labelCol->setObjectName(QString::fromUtf8("labelCol"));
+	labelCol->setText(tr("Cow "));
+	subGridLayout->addWidget(labelCol, 2, 0, 1, 1);
+	vecControls.push_back(labelCol);
+
+	SpinBox* spinBoxCol = new SpinBox(this);
+	spinBoxCol->setObjectName(QString::fromUtf8("spinBoxCol"));
+	subGridLayout->addWidget(spinBoxCol, 2, 1, 1, 1);
+	vecControls.push_back(spinBoxCol);
+
+	QLabel* labelLeftTop = new QLabel(this);
+	labelLeftTop->setObjectName(QString::fromUtf8("labelLeftTop"));
+	labelLeftTop->setText(tr("Left Top Pos "));
+	subGridLayout->addWidget(labelLeftTop, 4, 0, 1, 1);
+	vecControls.push_back(labelLeftTop);
+
+	DoubleSpinBox* doubleSpinBoxLeftTopX = new DoubleSpinBox(this);
+	doubleSpinBoxLeftTopX->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopX"));
+	subGridLayout->addWidget(doubleSpinBoxLeftTopX, 4, 1, 1, 1);
+	vecControls.push_back(doubleSpinBoxLeftTopX);
+
+	DoubleSpinBox* doubleSpinBoxLeftTopY = new DoubleSpinBox(this);
+	doubleSpinBoxLeftTopY->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopY"));
+	subGridLayout->addWidget(doubleSpinBoxLeftTopY, 4, 2, 1, 1);
+	vecControls.push_back(doubleSpinBoxLeftTopY);
+
+	QLabel* labelRightTopPos = new QLabel(this);
+	labelRightTopPos->setObjectName(QString::fromUtf8("labelRightTopPos"));
+	labelRightTopPos->setText(tr("Right Top Pos "));
+	subGridLayout->addWidget(labelRightTopPos, 5, 0, 1, 1);
+	vecControls.push_back(labelRightTopPos);
+
+	DoubleSpinBox* doubleSpinBoxRightTopX = new DoubleSpinBox(this);
+	doubleSpinBoxRightTopX->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopX"));
+	subGridLayout->addWidget(doubleSpinBoxRightTopX, 5, 1, 1, 1);
+	vecControls.push_back(doubleSpinBoxRightTopX);
+
+	DoubleSpinBox* doubleSpinBoxRightTopY = new DoubleSpinBox(this);
+	doubleSpinBoxRightTopY->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopY"));
+	subGridLayout->addWidget(doubleSpinBoxRightTopY, 5, 2, 1, 1);
+	vecControls.push_back(doubleSpinBoxRightTopY);
+
+	QLabel* labelRightButtomPos = new QLabel(this);
+	labelRightButtomPos->setObjectName(QString::fromUtf8("labelRightButtomPos"));
+	labelRightButtomPos->setText(tr("Right Buttom pos"));
+	subGridLayout->addWidget(labelRightButtomPos, 6, 0, 1, 1);
+	vecControls.push_back(labelRightButtomPos);
+
+	DoubleSpinBox* doubleSpinBoxRightButtomX = new DoubleSpinBox(this);
+	doubleSpinBoxRightButtomX->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomX"));
+	subGridLayout->addWidget(doubleSpinBoxRightButtomX, 6, 1, 1, 1);
+	vecControls.push_back(doubleSpinBoxRightButtomX);
+
+	DoubleSpinBox* doubleSpinBoxRightButtomY = new DoubleSpinBox(this);
+	doubleSpinBoxRightButtomY->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomY"));
+	subGridLayout->addWidget(doubleSpinBoxRightButtomY, 6, 2, 1, 1);
+	vecControls.push_back(doubleSpinBoxRightTopX);
+
+	QLabel* labelNoBondPts = new QLabel(this);
+	labelNoBondPts->setObjectName(QString::fromUtf8("labelNoBondPts"));
+	labelNoBondPts->setText(tr("No Bond Points"));
+	subGridLayout->addWidget(labelNoBondPts, 7, 0, 1, 1);
+	vecControls.push_back(labelNoBondPts);
+
+	QLineEdit* lineEditNoBondPts = new QLineEdit(this);
+	lineEditNoBondPts->setObjectName(QString::fromUtf8("lineEditNoBondPts"));
+	subGridLayout->addWidget(lineEditNoBondPts, 7, 1, 1, 2);
+	vecControls.push_back(lineEditNoBondPts);
+
+	m_mapSubMatrixControls.insert(newMatrixID, vecControls);
+
+	ui.verticalLayout_2->addLayout(subGridLayout);
+
+	spinBoxRow->setValue(matrixData.MatrixRow);
+	spinBoxCol->setValue(matrixData.MatrixCol);
+	doubleSpinBoxLeftTopX->setValue(matrixData.LeftTopPoint.x);
+	doubleSpinBoxLeftTopY->setValue(matrixData.LeftTopPoint.y);
+	doubleSpinBoxRightTopX->setValue(matrixData.RightTopPoint.x);
+	doubleSpinBoxRightTopY->setValue(matrixData.RightTopPoint.y);
+	doubleSpinBoxRightButtomX->setValue(matrixData.RightBottomPoint.x);
+	doubleSpinBoxRightButtomY->setValue(matrixData.RightBottomPoint.y);
+
+	QString noBondPts = "";
+	bool firstTime = false;
+	for (XY_LONG_STRUCT pt : matrixData.VecNoBondPt)
+	{
+		if (!firstTime)
+		{
+			noBondPts += "(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
+			firstTime = true;
+			continue;
+		}
+		noBondPts += ";(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
+	}
+	lineEditNoBondPts->setText(noBondPts);
+
+
+	connect(spinBoxRow, &SpinBox::editDone, this, [=]() {
+		m_vecSubMatrixs[vectorIndex].MatrixRow = spinBoxRow->value();
+		MatrixChangeEvent();
+		});
+
+	connect(spinBoxCol, &SpinBox::editDone, this, [=]() {
+		m_vecSubMatrixs[vectorIndex].MatrixCol = spinBoxCol->value();
+		MatrixChangeEvent();
+		});
+
+	connect(doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() {
+		m_vecSubMatrixs[vectorIndex].LeftTopPoint.x = doubleSpinBoxLeftTopX->value();
+		MatrixChangeEvent();
+		});
+	connect(doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() {
+		m_vecSubMatrixs[vectorIndex].LeftTopPoint.y = doubleSpinBoxLeftTopY->value();
+		MatrixChangeEvent();
+		});
+	connect(doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() {
+		m_vecSubMatrixs[vectorIndex].RightTopPoint.x = doubleSpinBoxRightTopX->value();
+		MatrixChangeEvent();
+		});
+	connect(doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() {
+		m_vecSubMatrixs[vectorIndex].RightTopPoint.y = doubleSpinBoxRightTopY->value();
+		MatrixChangeEvent();
+		});
+	connect(doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() {
+		m_vecSubMatrixs[vectorIndex].RightBottomPoint.x = doubleSpinBoxRightButtomX->value();
+		MatrixChangeEvent();
+		});
+	connect(doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() {
+		m_vecSubMatrixs[vectorIndex].RightBottomPoint.y = doubleSpinBoxRightButtomY->value();
+		MatrixChangeEvent();
+		});
+
+
+	connect(lineEditNoBondPts, &QLineEdit::textChanged, this, [=]() {
+
+		});
+
+
+
+}
+
+void BondMatrixProgramPage::AddOutMatrixPage(int vectorIndex, PROGRAM_BOND_MATRIX_STRUCT matrixData)
+{
+	int matrixNum = m_mapSubMatrixControls.size();
+	int newMatrixID = ++matrixNum;
+	QVector<QObject*> vecControls;
+
+	QFrame* line = new QFrame();
+	line->setFrameShape(QFrame::NoFrame); // 盧뇜칵훰움솥
+	line->setFixedHeight(4);         // �零미땍멕똑
+	line->setStyleSheet("background-color: #C7CAEB;");
+
+	ui.verticalLayout_2->addWidget(line);
+
+	QGridLayout* matrixGridLayout = new QGridLayout();
+	matrixGridLayout->setSpacing(6);
+	matrixGridLayout->setObjectName(QString::fromUtf8("matrixGridLayout"));
+
+	QLabel* labelTitle = new QLabel(this);
+	labelTitle->setObjectName(QString::fromUtf8("labelRow"));
+	labelTitle->setText(tr("Matrix_") + QString::number(vectorIndex));
+	matrixGridLayout->addWidget(labelTitle, 0, 0, 1, 1);
+	vecControls.push_back(labelTitle);
+
+
+	QLabel* labelRow = new QLabel(this);
+	labelRow->setObjectName(QString::fromUtf8("labelRow"));
+	labelRow->setText(tr("Row "));
+	matrixGridLayout->addWidget(labelRow, 1, 0, 1, 1);
+	vecControls.push_back(labelRow);
+
+	SpinBox* spinBoxRow = new SpinBox(this);
+	spinBoxRow->setObjectName(QString::fromUtf8("spinBoxRow"));
+	matrixGridLayout->addWidget(spinBoxRow, 1, 1, 1, 1);
+	vecControls.push_back(spinBoxRow);
+
+	QLabel* labelCol = new QLabel(this);
+	labelCol->setObjectName(QString::fromUtf8("labelCol"));
+	labelCol->setText(tr("Cow "));
+	matrixGridLayout->addWidget(labelCol, 2, 0, 1, 1);
+	vecControls.push_back(labelCol);
+
+	SpinBox* spinBoxCol = new SpinBox(this);
+	spinBoxCol->setObjectName(QString::fromUtf8("spinBoxCol"));
+	matrixGridLayout->addWidget(spinBoxCol, 2, 1, 1, 1);
+	vecControls.push_back(spinBoxCol);
+
+	QLabel* labelLeftTop = new QLabel(this);
+	labelLeftTop->setObjectName(QString::fromUtf8("labelLeftTop"));
+	labelLeftTop->setText(tr("Left Top Pos "));
+	matrixGridLayout->addWidget(labelLeftTop, 4, 0, 1, 1);
+	vecControls.push_back(labelLeftTop);
+
+	DoubleSpinBox* doubleSpinBoxLeftTopX = new DoubleSpinBox(this);
+	doubleSpinBoxLeftTopX->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopX"));
+	matrixGridLayout->addWidget(doubleSpinBoxLeftTopX, 4, 1, 1, 1);
+	vecControls.push_back(doubleSpinBoxLeftTopX);
+
+	DoubleSpinBox* doubleSpinBoxLeftTopY = new DoubleSpinBox(this);
+	doubleSpinBoxLeftTopY->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopY"));
+	matrixGridLayout->addWidget(doubleSpinBoxLeftTopY, 4, 2, 1, 1);
+	vecControls.push_back(doubleSpinBoxLeftTopY);
+
+	QLabel* labelRightTopPos = new QLabel(this);
+	labelRightTopPos->setObjectName(QString::fromUtf8("labelRightTopPos"));
+	labelRightTopPos->setText(tr("Right Top Pos "));
+	matrixGridLayout->addWidget(labelRightTopPos, 5, 0, 1, 1);
+	vecControls.push_back(labelRightTopPos);
+
+	DoubleSpinBox* doubleSpinBoxRightTopX = new DoubleSpinBox(this);
+	doubleSpinBoxRightTopX->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopX"));
+	matrixGridLayout->addWidget(doubleSpinBoxRightTopX, 5, 1, 1, 1);
+	vecControls.push_back(doubleSpinBoxRightTopX);
+
+	DoubleSpinBox* doubleSpinBoxRightTopY = new DoubleSpinBox(this);
+	doubleSpinBoxRightTopY->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopY"));
+	matrixGridLayout->addWidget(doubleSpinBoxRightTopY, 5, 2, 1, 1);
+	vecControls.push_back(doubleSpinBoxRightTopY);
+
+	QLabel* labelRightButtomPos = new QLabel(this);
+	labelRightButtomPos->setObjectName(QString::fromUtf8("labelRightButtomPos"));
+	labelRightButtomPos->setText(tr("Right Buttom pos"));
+	matrixGridLayout->addWidget(labelRightButtomPos, 6, 0, 1, 1);
+	vecControls.push_back(labelRightButtomPos);
+
+	DoubleSpinBox* doubleSpinBoxRightButtomX = new DoubleSpinBox(this);
+	doubleSpinBoxRightButtomX->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomX"));
+	matrixGridLayout->addWidget(doubleSpinBoxRightButtomX, 6, 1, 1, 1);
+	vecControls.push_back(doubleSpinBoxRightButtomX);
+
+	DoubleSpinBox* doubleSpinBoxRightButtomY = new DoubleSpinBox(this);
+	doubleSpinBoxRightButtomY->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomY"));
+	matrixGridLayout->addWidget(doubleSpinBoxRightButtomY, 6, 2, 1, 1);
+	vecControls.push_back(doubleSpinBoxRightTopX);
+
+	QLabel* labelNoBondPts = new QLabel(this);
+	labelNoBondPts->setObjectName(QString::fromUtf8("labelNoBondPts"));
+	labelNoBondPts->setText(tr("No Bond Points"));
+	matrixGridLayout->addWidget(labelNoBondPts, 7, 0, 1, 1);
+	vecControls.push_back(labelNoBondPts);
+
+	QLineEdit* lineEditNoBondPts = new QLineEdit(this);
+	lineEditNoBondPts->setObjectName(QString::fromUtf8("lineEditNoBondPts"));
+	matrixGridLayout->addWidget(lineEditNoBondPts, 7, 1, 1, 2);
+	vecControls.push_back(lineEditNoBondPts);
+
+	m_mapSubMatrixControls.insert(newMatrixID, vecControls);
+
+	ui.verticalLayout_2->addLayout(matrixGridLayout);
+
+	spinBoxRow->setValue(matrixData.BondMatrixRow);
+	spinBoxCol->setValue(matrixData.BondMatrixCol);
+	doubleSpinBoxLeftTopX->setValue(matrixData.LeftTopPoint.x);
+	doubleSpinBoxLeftTopY->setValue(matrixData.LeftTopPoint.y);
+	doubleSpinBoxRightTopX->setValue(matrixData.RightTopPoint.x);
+	doubleSpinBoxRightTopY->setValue(matrixData.RightTopPoint.y);
+	doubleSpinBoxRightButtomX->setValue(matrixData.RightBottomPoint.x);
+	doubleSpinBoxRightButtomY->setValue(matrixData.RightBottomPoint.y);
+
+	QString noBondPts = "";
+	bool firstTime = false;
+	for (XY_LONG_STRUCT pt : m_vectBondMatrixs[0].VecNoBondPt)
+	{
+		if (firstTime)
+		{
+			noBondPts += "(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
+			firstTime = true;
+			continue;
+		}
+		noBondPts += ";(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
+	}
+	lineEditNoBondPts->setText(noBondPts);
+
+	connect(spinBoxRow, &SpinBox::editDone, this, [=]() {
+		m_vectBondMatrixs[vectorIndex].BondMatrixRow = spinBoxRow->value();
+		MatrixChangeEvent();
+		});
+
+	connect(spinBoxCol, &SpinBox::editDone, this, [=]() {
+		m_vectBondMatrixs[vectorIndex].BondMatrixCol = spinBoxCol->value();
+		MatrixChangeEvent();
+		});
+
+	connect(doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() {
+		m_vectBondMatrixs[vectorIndex].LeftTopPoint.x = doubleSpinBoxLeftTopX->value();
+		MatrixChangeEvent();
+		});
+	connect(doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() {
+		m_vectBondMatrixs[vectorIndex].LeftTopPoint.y = doubleSpinBoxLeftTopY->value();
+		MatrixChangeEvent();
+		});
+	connect(doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() {
+		m_vectBondMatrixs[vectorIndex].RightTopPoint.x = doubleSpinBoxRightTopX->value();
+		MatrixChangeEvent();
+		});
+	connect(doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() {
+		m_vectBondMatrixs[vectorIndex].RightTopPoint.y = doubleSpinBoxRightTopY->value();
+		MatrixChangeEvent();
+		});
+	connect(doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() {
+		m_vectBondMatrixs[vectorIndex].RightBottomPoint.x = doubleSpinBoxRightButtomX->value();
+		MatrixChangeEvent();
+		});
+	connect(doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() {
+		m_vectBondMatrixs[vectorIndex].RightBottomPoint.y = doubleSpinBoxRightButtomY->value();
+		MatrixChangeEvent();
+		});
+
+
+	connect(lineEditNoBondPts, &QLineEdit::textChanged, this, [=]() {
+
+		});
+
+}
+
+void BondMatrixProgramPage::AddMatrixParam()
+{
+
+}
+
+void BondMatrixProgramPage::UpdatePageParam()
+{
+	int dieSourceIndex = 0;
+	if (m_curBondInfo.eDieSource == DIE_SOURCE::BY_WAFER)
+	{
+		dieSourceIndex = 1;
+	}
+	else if (m_curBondInfo.eDieSource == DIE_SOURCE::BY_WAFFLE)
+	{
+		dieSourceIndex = 0;
+	}
+	ui.comboBoxDieSource->setCurrentIndex(dieSourceIndex);
+	ui.spinBoxPickTempID->setValue(m_curBondInfo.iPickPRStrategyId);
+	ui.spinBoxPickNozzleID->setValue(m_curBondInfo.iPickHeadId);
+	ui.spinBoxPreBondTemp->setValue(m_curBondInfo.iBondFrontPRStrategyId);
+	ui.spinBoxPostBondTemp->setValue(m_curBondInfo.iBondBackPRStrategyId);
+	ui.spinBoxBondTemp->setValue(m_curBondInfo.iBondPRStrategyId);
+	ui.spinBoxLookUpTemp->setValue(m_curBondInfo.iLookUpPRStrategyId);
+	ui.spinBoxCalibPickTemp->setValue(m_curBondInfo.iCalibPRStrategyId);
+	ui.doubleSpinBoxBondOffsetX->setValue(m_curBondInfo.stOffset.x);
+	ui.doubleSpinBoxBondOffsetY->setValue(m_curBondInfo.stOffset.y);
+	ui.doubleSpinBoxBondOffsetAngle->setValue(m_curBondInfo.stOffset.a);
+
+	UpdatePagePickParam();
+
+	UpdatePageBondParam();
+
+}
+
+void BondMatrixProgramPage::ParamChangeEvent()
+{
+	m_manageDB->GetCProduct()->SetBondInfoData(m_curBondInfo.iInfoId, m_curBondInfo);
+	m_manageDB->GetCProduct()->SetBondParam(m_curWaferPickParam.iId, m_curWaferPickParam);
+	m_manageDB->GetCProduct()->SetBondParam(m_curCalibPlaceParam.iId, m_curCalibPlaceParam);
+	m_manageDB->GetCProduct()->SetBondParam(m_curCalibPickParam.iId, m_curCalibPickParam);
+	m_manageDB->GetCProduct()->SetBondParam(m_curBondParam.iId, m_curBondParam);
+
+}
+
+void BondMatrixProgramPage::MatrixChangeEvent()
+{
+	for (PROGRAM_BOND_MATRIX_STRUCT& bondMatrix : m_vectBondMatrixs)
+	{
+		m_manageDB->GetCProduct()->SetBondMatrix(bondMatrix.BondMatrixId, bondMatrix);
+	}
+
+	for (PROGRAM_POINT_MATRIX_STRUCT& pointMatrix : m_vecSubMatrixs)
+	{
+		m_manageDB->GetCProduct()->SetPointMatrix(pointMatrix.MatrixId, pointMatrix);
+	}
+
+}
+
+void BondMatrixProgramPage::UpdatePagePickParam()
+{
+	//"혤쑨庫혤쑨"
+	if (ui.comboBoxPickParamType->currentIndex() == 0)
+	{
+		ui.checkBoxPickBlockCheck->setChecked(m_curWaferPickParam.bCheckBlock);
+		ui.checkBoxPickLoseCheck->setChecked(m_curWaferPickParam.bCheckLose);
+		ui.checkBoxPickFindForceCheck->setChecked(m_curWaferPickParam.bFindForce);
+		ui.doubleSpinBoxPrePickZ->setValue(m_curWaferPickParam.dPreLev);
+		ui.doubleSpinBoxPickForce->setValue(m_curWaferPickParam.dForce);
+		ui.doubleSpinBoxPickPosZ->setValue(m_curWaferPickParam.dPickOrBondLev);
+		ui.spinBoxPickGrabDelay->setValue(m_curWaferPickParam.iGrabDelay);
+		ui.spinBox_PickDelay->setValue(m_curWaferPickParam.iPickOrBondDelay);
+		ui.spinBoxPickBlockCheckDelay->setValue(m_curWaferPickParam.iBlockOrLoseDelay);
+		ui.spinBoxPickVacDelay->setValue(m_curWaferPickParam.iVacuumDelay);
+		ui.spinBoxPickBlowDelay->setValue(m_curWaferPickParam.iBlowDelay);
+	}
+	//"櫓瘻憩혤쑨"
+	else if (ui.comboBoxPickParamType->currentIndex() == 1)
+	{
+		ui.checkBoxPickBlockCheck->setChecked(m_curCalibPickParam.bCheckBlock);
+		ui.checkBoxPickLoseCheck->setChecked(m_curCalibPickParam.bCheckLose);
+		ui.checkBoxPickFindForceCheck->setChecked(m_curCalibPickParam.bFindForce);
+		ui.doubleSpinBoxPrePickZ->setValue(m_curCalibPickParam.dPreLev);
+		ui.doubleSpinBoxPickForce->setValue(m_curCalibPickParam.dForce);
+		ui.doubleSpinBoxPickPosZ->setValue(m_curCalibPickParam.dPickOrBondLev);
+		ui.spinBoxPickGrabDelay->setValue(m_curCalibPickParam.iGrabDelay);
+		ui.spinBox_PickDelay->setValue(m_curCalibPickParam.iPickOrBondDelay);
+		ui.spinBoxPickBlockCheckDelay->setValue(m_curCalibPickParam.iBlockOrLoseDelay);
+		ui.spinBoxPickVacDelay->setValue(m_curCalibPickParam.iVacuumDelay);
+		ui.spinBoxPickBlowDelay->setValue(m_curCalibPickParam.iBlowDelay);
+	}
+}
+
+void BondMatrixProgramPage::UpdatePageBondParam()
+{
+	//"櫓瘻憩렴쑨"
+	if (ui.comboBoxBondParamType->currentIndex() == 0)
+	{
+		ui.checkBoxBondBlockCheck->setChecked(m_curCalibPlaceParam.bCheckBlock);
+		ui.checkBoxBondLoseCheck->setChecked(m_curCalibPlaceParam.bCheckLose);
+		ui.checkBoxBondFindForce->setChecked(m_curCalibPlaceParam.bFindForce);
+		ui.doubleSpinBoxPreBondPosZ->setValue(m_curCalibPlaceParam.dPreLev);
+		ui.doubleSpinBoxBondForce->setValue(m_curCalibPlaceParam.dForce);
+		ui.doubleSpinBoxBondPosZ->setValue(m_curCalibPlaceParam.dPickOrBondLev);
+		ui.spinBoxBondGrabDelay->setValue(m_curCalibPlaceParam.iGrabDelay);
+		ui.spinBoxBondDelay->setValue(m_curCalibPlaceParam.iPickOrBondDelay);
+		ui.spinBoxBondBlockCheckDelay->setValue(m_curCalibPlaceParam.iBlockOrLoseDelay);
+		ui.spinBoxBondVacDelay->setValue(m_curCalibPlaceParam.iVacuumDelay);
+		ui.spinBoxBondBlowDelay->setValue(m_curCalibPlaceParam.iBlowDelay);
+
+	}
+	//"미쑨憩미쑨"
+	else if (ui.comboBoxBondParamType->currentIndex() == 1)
+	{
+		ui.checkBoxBondBlockCheck->setChecked(m_curBondParam.bCheckBlock);
+		ui.checkBoxBondLoseCheck->setChecked(m_curBondParam.bCheckLose);
+		ui.checkBoxBondFindForce->setChecked(m_curBondParam.bFindForce);
+		ui.doubleSpinBoxPreBondPosZ->setValue(m_curBondParam.dPreLev);
+		ui.doubleSpinBoxBondForce->setValue(m_curBondParam.dForce);
+		ui.doubleSpinBoxBondPosZ->setValue(m_curBondParam.dPickOrBondLev);
+		ui.spinBoxBondGrabDelay->setValue(m_curBondParam.iGrabDelay);
+		ui.spinBoxBondDelay->setValue(m_curBondParam.iPickOrBondDelay);
+		ui.spinBoxBondBlockCheckDelay->setValue(m_curBondParam.iBlockOrLoseDelay);
+		ui.spinBoxBondVacDelay->setValue(m_curBondParam.iVacuumDelay);
+		ui.spinBoxBondBlowDelay->setValue(m_curBondParam.iBlowDelay);
+	}
+}
+
+void BondMatrixProgramPage::initPage()
+{
+	if (m_manageDB == nullptr)
+	{
+		return;
+	}
+	//닒빈똥삿혤鑒앴
+	m_vectBondMatrixs = m_manageDB->GetCProduct()->GetBondMatrix();
+	if (m_vectBondMatrixs.size() == 0)
+	{
+		return;
+	}
+
+	for (int i = 0; i < m_vectBondMatrixs.size(); i++)
+	{
+		AddOutMatrixPage(i, m_vectBondMatrixs[i]);
+		for (int j = 0; j < m_vectBondMatrixs[i].VecPointMatrixId.size(); j++)
+		{
+			PROGRAM_POINT_MATRIX_STRUCT subMatrix;
+			m_manageDB->GetCProduct()->GetPointMatrix(m_vectBondMatrixs[i].VecPointMatrixId[j], subMatrix);
+			m_vecSubMatrixs.push_back(subMatrix);
+			AddMatrixPage(i, j, subMatrix);
+
+		}
+	}
+
+
+	//for (int i = 0; i < m_vectBondMatrixs[0].VecPointMatrixId.size(); ++i)
+	//{
+	//	PROGRAM_POINT_MATRIX_STRUCT subMatrix;
+	//	m_manageDB->GetCProduct()->GetPointMatrix(m_vectBondMatrixs[0].VecPointMatrixId[i], subMatrix);
+	//	m_vecSubMatrixs.push_back(subMatrix);
+	//}
+
+	//m_manageDB->GetCProduct()->GetDieMatrix(m_vectBondMatrixs[0].VecPointMatrixId[0], m_vecSubMatrixs);
+
+	//鞫刻앤黎鑒앴
+	ui.spinBoxRow->setValue(m_vectBondMatrixs[0].BondMatrixRow);
+	ui.spinBoxCol->setValue(m_vectBondMatrixs[0].BondMatrixCol);
+	ui.doubleSpinBoxLeftTopX->setValue(m_vectBondMatrixs[0].LeftTopPoint.x);
+	ui.doubleSpinBoxLeftTopY->setValue(m_vectBondMatrixs[0].LeftTopPoint.y);
+	ui.doubleSpinBoxRightTopX->setValue(m_vectBondMatrixs[0].RightTopPoint.x);
+	ui.doubleSpinBoxRightTopY->setValue(m_vectBondMatrixs[0].RightTopPoint.y);
+	ui.doubleSpinBoxRightButtomX->setValue(m_vectBondMatrixs[0].RightBottomPoint.x);
+	ui.doubleSpinBoxRightButtomY->setValue(m_vectBondMatrixs[0].RightBottomPoint.y);
+	QString noBondPts = "";
+	bool firstTime = false;
+	for (XY_LONG_STRUCT& pt : m_vectBondMatrixs[0].VecNoBondPt)
+	{
+		if (firstTime)
+		{
+			noBondPts += "(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
+			firstTime = true;
+
+		}
+		noBondPts += ";(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
+
+	}
+	ui.lineEditNoBondPts->setText(noBondPts);
+
+	//鞫刻綾앤黎섟鑒앴
+	//for (PROGRAM_POINT_MATRIX_STRUCT& subMatrix : m_vecSubMatrixs)
+	//{
+	//	AddMatrixPage(subMatrix);
+	//}
+
+	//닒빈똥삿혤꽝鑒, 寧敬鑒앴
+	CResources* pResources = CResources::GetInstance();
+	if (pResources == nullptr)
+	{
+		return;
+	}
+	CBondMatrix* pBondMatrix = pResources->GetBondMatrix();
+	if (pBondMatrix == nullptr)
+	{
+		return;
+	}
+
+	//pBondMatrix->GetPintInfoByIndex(0, m_curPointInfo);
+	m_manageDB->GetCProduct()->GetBondInfoData(m_vectBondMatrixs[0].BondInfoId, m_curBondInfo);
+	m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iPickParamId, m_curWaferPickParam);
+	m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iCalibBondParamId, m_curCalibPlaceParam);
+	m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iCalibPickParamId, m_curCalibPickParam);
+	m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iBondParamId, m_curBondParam);
+
+	//鞫刻썹충꽝鑒
+	UpdatePageParam();
+}

+ 0 - 5
View/die-bonder-ui/Src/BondMatrixProgramPage.h

@@ -70,9 +70,4 @@ private:
 	QMap<int, QVector<QObject*>> m_mapSubMatrixControls;
 
 	int m_curPtIndex = 0;
-
-
-
-
-
 };

+ 840 - 15
View/die-bonder-ui/Src/BondMatrixProgramPage.ui

@@ -1,22 +1,847 @@
-<UI version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>BondMatrixProgramPageClass</class>
- <widget class="QWidget" name="BondMatrixProgramPageClass" >
-  <property name="objectName" >
-   <string notr="true">BondMatrixProgramPageClass</string>
-  </property>
-  <property name="geometry" >
+ <widget class="QWidget" name="BondMatrixProgramPageClass">
+  <property name="geometry">
    <rect>
-	<x>0</x>
-	<y>0</y>
-	<width>600</width>
-	<height>400</height>
+    <x>0</x>
+    <y>0</y>
+    <width>442</width>
+    <height>943</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>BondMatrixProgramPage</string>
-  </property>$centralwidget$
+  </property>
+  <widget class="QScrollArea" name="scrollArea_2">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>60</y>
+     <width>421</width>
+     <height>231</height>
+    </rect>
+   </property>
+   <property name="sizePolicy">
+    <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+     <horstretch>0</horstretch>
+     <verstretch>0</verstretch>
+    </sizepolicy>
+   </property>
+   <property name="widgetResizable">
+    <bool>true</bool>
+   </property>
+   <widget class="QWidget" name="scrollAreaWidgetMatrix">
+    <property name="geometry">
+     <rect>
+      <x>0</x>
+      <y>0</y>
+      <width>402</width>
+      <height>242</height>
+     </rect>
+    </property>
+    <layout class="QVBoxLayout" name="verticalLayout_2">
+     <item>
+      <layout class="QGridLayout" name="gridLayout">
+       <property name="spacing">
+        <number>10</number>
+       </property>
+       <item row="5" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxRightTopX">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="2">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxRightButtomY">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="0">
+        <widget class="QLabel" name="label_79">
+         <property name="text">
+          <string>右上角</string>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="2">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxRightTopY">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxLeftTopX">
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>行数</string>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="0">
+        <widget class="QLabel" name="label_80">
+         <property name="text">
+          <string>右下角</string>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxRightButtomX">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="7" column="0">
+        <widget class="QLabel" name="label_81">
+         <property name="text">
+          <string>不固晶点</string>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="2">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxLeftTopY">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1">
+        <widget class="SpinBox" name="spinBoxCol"/>
+       </item>
+       <item row="1" column="1">
+        <widget class="SpinBox" name="spinBoxRow"/>
+       </item>
+       <item row="4" column="0">
+        <widget class="QLabel" name="label_18">
+         <property name="text">
+          <string>左上角</string>
+         </property>
+        </widget>
+       </item>
+       <item row="7" column="1" colspan="2">
+        <widget class="QLineEdit" name="lineEditNoBondPts"/>
+       </item>
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>列数</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0" colspan="3">
+        <widget class="QLabel" name="label_82">
+         <property name="text">
+          <string>一维矩阵:</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </widget>
+  </widget>
+  <widget class="QFrame" name="frame">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>290</y>
+     <width>0</width>
+     <height>0</height>
+    </rect>
+   </property>
+   <property name="frameShape">
+    <enum>QFrame::StyledPanel</enum>
+   </property>
+   <property name="frameShadow">
+    <enum>QFrame::Raised</enum>
+   </property>
+  </widget>
+  <widget class="QFrame" name="frame_2">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>297</y>
+     <width>0</width>
+     <height>0</height>
+    </rect>
+   </property>
+   <property name="frameShape">
+    <enum>QFrame::StyledPanel</enum>
+   </property>
+   <property name="frameShadow">
+    <enum>QFrame::Raised</enum>
+   </property>
+  </widget>
+  <widget class="QScrollArea" name="scrollArea_3">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>320</y>
+     <width>421</width>
+     <height>611</height>
+    </rect>
+   </property>
+   <property name="sizePolicy">
+    <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+     <horstretch>0</horstretch>
+     <verstretch>0</verstretch>
+    </sizepolicy>
+   </property>
+   <property name="widgetResizable">
+    <bool>true</bool>
+   </property>
+   <widget class="QWidget" name="scrollAreaWidgetParam">
+    <property name="geometry">
+     <rect>
+      <x>0</x>
+      <y>0</y>
+      <width>398</width>
+      <height>1282</height>
+     </rect>
+    </property>
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QGridLayout" name="gridLayout_2">
+       <property name="spacing">
+        <number>10</number>
+       </property>
+       <item row="8" column="1">
+        <widget class="SpinBox" name="spinBoxCalibPickTemp"/>
+       </item>
+       <item row="36" column="0">
+        <widget class="QLabel" name="label_38">
+         <property name="text">
+          <string>固晶高度</string>
+         </property>
+        </widget>
+       </item>
+       <item row="35" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxBondForce">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="17" column="0">
+        <widget class="QLabel" name="label_13">
+         <property name="text">
+          <string>取晶参数:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="23" column="0">
+        <widget class="QLabel" name="label_75">
+         <property name="text">
+          <string>取晶高度</string>
+         </property>
+        </widget>
+       </item>
+       <item row="9" column="1">
+        <widget class="SpinBox" name="spinBoxBondNozzleID"/>
+       </item>
+       <item row="20" column="1">
+        <widget class="QCheckBox" name="checkBoxPickFindForceCheck">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_77">
+         <property name="text">
+          <string>取晶模板ID</string>
+         </property>
+        </widget>
+       </item>
+       <item row="31" column="1">
+        <widget class="QCheckBox" name="checkBoxBondBlockCheck">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item row="25" column="1">
+        <widget class="SpinBox" name="spinBox_PickDelay"/>
+       </item>
+       <item row="3" column="1">
+        <widget class="SpinBox" name="spinBoxPickNozzleID"/>
+       </item>
+       <item row="24" column="0">
+        <widget class="QLabel" name="label_20">
+         <property name="text">
+          <string>拍照延时</string>
+         </property>
+        </widget>
+       </item>
+       <item row="33" column="1">
+        <widget class="QCheckBox" name="checkBoxBondFindForce">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item row="18" column="0">
+        <widget class="QLabel" name="label_14">
+         <property name="text">
+          <string>阻塞检测</string>
+         </property>
+        </widget>
+       </item>
+       <item row="22" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxPickForce">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="11" column="0">
+        <widget class="QLabel" name="label_11">
+         <property name="text">
+          <string>固晶点补偿Y</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="label_76">
+         <property name="text">
+          <string>是否中转</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QCheckBox" name="checkBoxIsCalib">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item row="41" column="0">
+        <widget class="QLabel" name="label_37">
+         <property name="text">
+          <string>吹气延时</string>
+         </property>
+        </widget>
+       </item>
+       <item row="34" column="0">
+        <widget class="QLabel" name="label_31">
+         <property name="text">
+          <string>预固晶高度</string>
+         </property>
+        </widget>
+       </item>
+       <item row="24" column="1">
+        <widget class="SpinBox" name="spinBoxPickGrabDelay"/>
+       </item>
+       <item row="25" column="0">
+        <widget class="QLabel" name="label_21">
+         <property name="text">
+          <string>取晶延时</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0">
+        <widget class="QLabel" name="label_3">
+         <property name="text">
+          <string>晶粒来源</string>
+         </property>
+        </widget>
+       </item>
+       <item row="29" column="1">
+        <widget class="QLabel" name="label_73">
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="17" column="1">
+        <widget class="QComboBox" name="comboBoxPickParamType">
+         <item>
+          <property name="text">
+           <string>取晶头取晶</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>中转台取晶</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+       <item row="29" column="0">
+        <widget class="QLabel" name="label_29">
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="36" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxBondPosZ">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="39" column="1">
+        <widget class="SpinBox" name="spinBoxBondBlockCheckDelay"/>
+       </item>
+       <item row="38" column="1">
+        <widget class="SpinBox" name="spinBoxBondDelay"/>
+       </item>
+       <item row="34" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxPreBondPosZ">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="13" column="1">
+        <widget class="QLabel" name="label_74">
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="35" column="0">
+        <widget class="QLabel" name="label_32">
+         <property name="text">
+          <string>固晶压力</string>
+         </property>
+        </widget>
+       </item>
+       <item row="41" column="1">
+        <widget class="SpinBox" name="spinBoxBondBlowDelay"/>
+       </item>
+       <item row="27" column="1">
+        <widget class="SpinBox" name="spinBoxPickVacDelay"/>
+       </item>
+       <item row="38" column="0">
+        <widget class="QLabel" name="label_34">
+         <property name="text">
+          <string>固晶延时</string>
+         </property>
+        </widget>
+       </item>
+       <item row="7" column="0">
+        <widget class="QLabel" name="label_7">
+         <property name="text">
+          <string>上视对点模板ID</string>
+         </property>
+        </widget>
+       </item>
+       <item row="23" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxPickPosZ">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="10" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetX">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="27" column="0">
+        <widget class="QLabel" name="label_23">
+         <property name="text">
+          <string>真空延时</string>
+         </property>
+        </widget>
+       </item>
+       <item row="39" column="0">
+        <widget class="QLabel" name="label_35">
+         <property name="text">
+          <string>阻塞/漏晶检测延时</string>
+         </property>
+        </widget>
+       </item>
+       <item row="13" column="0">
+        <widget class="QLabel" name="label_30">
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="8" column="0">
+        <widget class="QLabel" name="label_8">
+         <property name="text">
+          <string>中转台取晶模板ID</string>
+         </property>
+        </widget>
+       </item>
+       <item row="12" column="0">
+        <widget class="QLabel" name="label_12">
+         <property name="text">
+          <string>固晶点补偿角度</string>
+         </property>
+        </widget>
+       </item>
+       <item row="33" column="0">
+        <widget class="QLabel" name="label_28">
+         <property name="text">
+          <string>是否寻压</string>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="0">
+        <widget class="QLabel" name="label_6">
+         <property name="text">
+          <string>固晶对点模板ID</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0">
+        <widget class="QLabel" name="label_78">
+         <property name="text">
+          <string>取晶吸嘴号</string>
+         </property>
+        </widget>
+       </item>
+       <item row="26" column="1">
+        <widget class="SpinBox" name="spinBoxPickBlockCheckDelay"/>
+       </item>
+       <item row="30" column="0">
+        <widget class="QLabel" name="label_25">
+         <property name="text">
+          <string>固晶台固晶参数:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="37" column="0">
+        <widget class="QLabel" name="label_33">
+         <property name="text">
+          <string>拍照延时</string>
+         </property>
+        </widget>
+       </item>
+       <item row="28" column="0">
+        <widget class="QLabel" name="label_24">
+         <property name="text">
+          <string>吹气延时</string>
+         </property>
+        </widget>
+       </item>
+       <item row="37" column="1">
+        <widget class="SpinBox" name="spinBoxBondGrabDelay"/>
+       </item>
+       <item row="11" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetY">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="0">
+        <widget class="QLabel" name="label_5">
+         <property name="text">
+          <string>固后检测模板ID</string>
+         </property>
+        </widget>
+       </item>
+       <item row="21" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxPrePickZ">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="22" column="0">
+        <widget class="QLabel" name="label_19">
+         <property name="text">
+          <string>取晶压力</string>
+         </property>
+        </widget>
+       </item>
+       <item row="12" column="1">
+        <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetAngle">
+         <property name="minimum">
+          <double>-1000000000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1000000000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="32" column="0">
+        <widget class="QLabel" name="label_27">
+         <property name="text">
+          <string>漏晶检测</string>
+         </property>
+        </widget>
+       </item>
+       <item row="32" column="1">
+        <widget class="QCheckBox" name="checkBoxBondLoseCheck">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="0">
+        <widget class="QLabel" name="label_4">
+         <property name="text">
+          <string>固前检测模板ID</string>
+         </property>
+        </widget>
+       </item>
+       <item row="21" column="0">
+        <widget class="QLabel" name="label_17">
+         <property name="text">
+          <string>预拾取高度</string>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="1">
+        <widget class="SpinBox" name="spinBoxBondTemp"/>
+       </item>
+       <item row="30" column="1">
+        <widget class="QComboBox" name="comboBoxBondParamType">
+         <item>
+          <property name="text">
+           <string>中转台放晶</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>固晶台固晶</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+       <item row="9" column="0">
+        <widget class="QLabel" name="label_9">
+         <property name="text">
+          <string>固晶吸嘴号</string>
+         </property>
+        </widget>
+       </item>
+       <item row="40" column="1">
+        <widget class="SpinBox" name="spinBoxBondVacDelay"/>
+       </item>
+       <item row="0" column="1">
+        <widget class="QComboBox" name="comboBoxDieSource">
+         <item>
+          <property name="text">
+           <string>华夫盒</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>晶圆台</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+       <item row="5" column="1">
+        <widget class="SpinBox" name="spinBoxPostBondTemp"/>
+       </item>
+       <item row="26" column="0">
+        <widget class="QLabel" name="label_22">
+         <property name="text">
+          <string>阻塞/漏晶检测延时</string>
+         </property>
+        </widget>
+       </item>
+       <item row="31" column="0">
+        <widget class="QLabel" name="label_26">
+         <property name="text">
+          <string>阻塞检测</string>
+         </property>
+        </widget>
+       </item>
+       <item row="18" column="1">
+        <widget class="QCheckBox" name="checkBoxPickBlockCheck">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item row="28" column="1">
+        <widget class="SpinBox" name="spinBoxPickBlowDelay"/>
+       </item>
+       <item row="20" column="0">
+        <widget class="QLabel" name="label_16">
+         <property name="text">
+          <string>是否寻压</string>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="1">
+        <widget class="SpinBox" name="spinBoxPreBondTemp"/>
+       </item>
+       <item row="40" column="0">
+        <widget class="QLabel" name="label_36">
+         <property name="text">
+          <string>真空延时</string>
+         </property>
+        </widget>
+       </item>
+       <item row="7" column="1">
+        <widget class="SpinBox" name="spinBoxLookUpTemp"/>
+       </item>
+       <item row="2" column="1">
+        <widget class="SpinBox" name="spinBoxPickTempID"/>
+       </item>
+       <item row="10" column="0">
+        <widget class="QLabel" name="label_10">
+         <property name="text">
+          <string>固晶点补偿X</string>
+         </property>
+        </widget>
+       </item>
+       <item row="19" column="1">
+        <widget class="QCheckBox" name="checkBoxPickLoseCheck">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item row="19" column="0">
+        <widget class="QLabel" name="label_15">
+         <property name="text">
+          <string>漏晶检测</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </widget>
+  </widget>
+  <widget class="QFrame" name="frame_3">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>40</y>
+     <width>431</width>
+     <height>16</height>
+    </rect>
+   </property>
+   <property name="frameShape">
+    <enum>QFrame::StyledPanel</enum>
+   </property>
+   <property name="frameShadow">
+    <enum>QFrame::Raised</enum>
+   </property>
+  </widget>
+  <widget class="QWidget" name="layoutWidget">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>10</y>
+     <width>421</width>
+     <height>30</height>
+    </rect>
+   </property>
+   <layout class="QHBoxLayout" name="horizontalLayout">
+    <item>
+     <spacer name="horizontalSpacer">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item>
+     <widget class="QPushButton" name="pushButtonSave">
+      <property name="minimumSize">
+       <size>
+        <width>150</width>
+        <height>0</height>
+       </size>
+      </property>
+      <property name="text">
+       <string>Save</string>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QFrame" name="frame_4">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>300</y>
+     <width>431</width>
+     <height>16</height>
+    </rect>
+   </property>
+   <property name="frameShape">
+    <enum>QFrame::StyledPanel</enum>
+   </property>
+   <property name="frameShadow">
+    <enum>QFrame::Raised</enum>
+   </property>
+  </widget>
  </widget>
- <layoutDefault spacing="6" margin="11" />
- <pixmapfunction></pixmapfunction>
+ <layoutdefault spacing="6" margin="11"/>
+ <customwidgets>
+  <customwidget>
+   <class>SpinBox</class>
+   <extends>QSpinBox</extends>
+   <header>Src/RewriteControl/Controls/SpinBox.h</header>
+  </customwidget>
+  <customwidget>
+   <class>DoubleSpinBox</class>
+   <extends>QDoubleSpinBox</extends>
+   <header>Src/RewriteControl/Controls/doublespinbox.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
  <connections/>
-</UI>
+</ui>

+ 4 - 930
View/die-bonder-ui/Src/ProgrammPage.cpp

@@ -8,946 +8,20 @@ ProgrammPage::ProgrammPage(QWidget *parent)
 {
 	ui.setupUi(this);
 
-
-	ui.spinBoxRow->setVisible(false);
-	ui.spinBoxCol->setVisible(false);
-	ui.doubleSpinBoxLeftTopX->setVisible(false);
-	ui.doubleSpinBoxLeftTopY->setVisible(false);
-	ui.doubleSpinBoxRightTopX->setVisible(false);
-	ui.doubleSpinBoxRightTopY->setVisible(false);
-	ui.doubleSpinBoxRightButtomX->setVisible(false);
-	ui.doubleSpinBoxRightButtomY->setVisible(false);
-	ui.lineEditNoBondPts->setVisible(false);
-	ui.label->setVisible(false);
-	ui.label_18->setVisible(false);
-	ui.label_2->setVisible(false);
-	ui.label_79->setVisible(false);
-	ui.label_80->setVisible(false);
-	ui.label_81->setVisible(false);
-	ui.label_82->setVisible(false);
-
-	ui.frame->setFrameShape(QFrame::NoFrame); // 盧뇜칵훰움솥
-	ui.frame->setFixedHeight(2);         // �零미땍멕똑
-	ui.frame->setStyleSheet("background-color: #C7CAEB;");
-
-	setStyleSheet(
-		"QDoubleSpinBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
-		"QSpinBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
-		"QLineEdit{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
-		"QCheckBox::indicator{width: 20px;height: 20px;}"
-		"QCheckBox::indicator:unchecked{background - color: #FFFFFF;border-radius: 2px;}"
-		"QComboBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}"
-		"QComboBox::drop - down{width: 20px;}"
-	);
-
-
-	ui.tab->setStyleSheet("background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F1F4FD, stop: 1 #E5E4F6)");
-
-	m_pWaffleProgrammPage = new WaffleProgramPage(this);
-	m_WaferProgramPage = new WaferProgramPage(this);
-	m_manageDB = CManageDB::GetInstance();
-
 	initPage();
-
-	connect(ui.pushButtonSave, &QPushButton::clicked, this, [=] {
-		ParamChangeEvent();
-		MatrixChangeEvent();
-		});
-
-	//앤黎鑒앴
-	connect(ui.spinBoxRow, &SpinBox::editingFinished, this, [=]() {
-		});
-
-	connect(ui.spinBoxCol, &SpinBox::editingFinished, this, [=]() {
-		});
-
-	connect(ui.doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() {
-		});
-
-	connect(ui.doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() {
-		});
-
-	connect(ui.doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() {
-		});
-
-	connect(ui.doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() {
-		});
-
-	connect(ui.doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() {
-		});
-
-	connect(ui.doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() {
-		});
-
-	//꽝鑒
-	connect(ui.comboBoxDieSource, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [=](int index) {
-		if (index == 0)
-		{
-			m_curBondInfo.eDieSource = DIE_SOURCE::BY_WAFFLE;
-		} else if (index == 1)
-		{
-			m_curBondInfo.eDieSource = DIE_SOURCE::BY_WAFER;
-		}
-		ParamChangeEvent();
-		});
-
-	connect(ui.checkBoxIsCalib, &QCheckBox::clicked, this, [=](bool isChecked) {
-
-		});
-
-	connect(ui.spinBoxPickTempID, &SpinBox::editDone, this, [=]() {
-		m_curBondInfo.iPickPRStrategyId = ui.spinBoxPickTempID->value();
-		ParamChangeEvent();
-		});
-
-	connect(ui.spinBoxPickNozzleID, &SpinBox::editDone, this, [=]() {
-		m_curBondInfo.iPickHeadId = ui.spinBoxPickNozzleID->value();
-		ParamChangeEvent();
-		});
-
-	connect(ui.spinBoxPreBondTemp, &SpinBox::editDone, this, [=]() {
-		m_curBondInfo.iBondFrontPRStrategyId = ui.spinBoxPreBondTemp->value();
-		ParamChangeEvent();
-		});
-
-	connect(ui.spinBoxPostBondTemp, &SpinBox::editDone, this, [=]() {
-		m_curBondInfo.iBondBackPRStrategyId = ui.spinBoxPostBondTemp->value();
-		ParamChangeEvent();
-		});
-
-	connect(ui.spinBoxBondTemp, &SpinBox::editDone, this, [=]() {
-		m_curBondInfo.iBondPRStrategyId = ui.spinBoxBondTemp->value();
-		ParamChangeEvent();
-		});
-
-	connect(ui.spinBoxLookUpTemp, &SpinBox::editDone, this, [=]() {
-		m_curBondInfo.iLookUpPRStrategyId = ui.spinBoxLookUpTemp->value();
-		ParamChangeEvent();
-		});
-
-	connect(ui.spinBoxCalibPickTemp, &SpinBox::editDone, this, [=]() {
-		m_curBondInfo.iCalibPRStrategyId = ui.spinBoxCalibPickTemp->value();
-		ParamChangeEvent();
-		});
-
-	connect(ui.spinBoxBondNozzleID, &SpinBox::editDone, this, [=]() {
-		m_curBondInfo.iBondHeadId = ui.spinBoxBondNozzleID->value();
-		ParamChangeEvent();
-		});
-	connect(ui.doubleSpinBoxBondOffsetX, &DoubleSpinBox::editDone, this, [=]() {
-		m_curBondInfo.stOffset.x = ui.doubleSpinBoxBondOffsetX->value();
-		ParamChangeEvent();
-		});
-	connect(ui.doubleSpinBoxBondOffsetY, &DoubleSpinBox::editDone, this, [=]() {
-		m_curBondInfo.stOffset.y = ui.doubleSpinBoxBondOffsetY->value();
-		ParamChangeEvent();
-		});
-	connect(ui.doubleSpinBoxBondOffsetAngle, &DoubleSpinBox::editDone, this, [=]() {
-		m_curBondInfo.stOffset.a = ui.doubleSpinBoxBondOffsetAngle->value();
-		ParamChangeEvent();
-		});
-
-	connect(ui.comboBoxPickParamType, &QComboBox::currentTextChanged, this, [=]() {
-		UpdatePagePickParam();
-		});
-	connect(ui.checkBoxPickBlockCheck, &QCheckBox::clicked, this, [=](bool isChecked) {
-
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.bCheckBlock = ui.checkBoxPickBlockCheck->isChecked();
-		}
-		else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.bCheckBlock = ui.checkBoxPickBlockCheck->isChecked();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.checkBoxPickLoseCheck, &QCheckBox::clicked, this, [=](bool isChecked) {
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.bCheckLose = ui.checkBoxPickLoseCheck->isChecked();
-		} else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.bCheckLose = ui.checkBoxPickLoseCheck->isChecked();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.checkBoxPickFindForceCheck, &QCheckBox::clicked, this, [=](bool isChecked) {
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.bFindForce = ui.checkBoxPickFindForceCheck->isChecked();
-		} else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.bFindForce = ui.checkBoxPickFindForceCheck->isChecked();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.doubleSpinBoxPrePickZ, &DoubleSpinBox::editDone, this, [=]() {
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.dPreLev = ui.doubleSpinBoxPrePickZ->value();
-		} else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.dPreLev = ui.doubleSpinBoxPrePickZ->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.doubleSpinBoxPickForce, &DoubleSpinBox::editDone, this, [=]() {
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.dForce = ui.doubleSpinBoxPickForce->value();
-		} else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.dForce = ui.doubleSpinBoxPickForce->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.doubleSpinBoxPickPosZ, &DoubleSpinBox::editDone, this, [=]() {
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.dPickOrBondLev = ui.doubleSpinBoxPickPosZ->value();
-		} else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.dPickOrBondLev = ui.doubleSpinBoxPickPosZ->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.spinBoxPickGrabDelay, &SpinBox::editDone, this, [=]() {
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.iGrabDelay = ui.spinBoxPickGrabDelay->value();
-		} else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.iGrabDelay = ui.spinBoxPickGrabDelay->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.spinBox_PickDelay, &SpinBox::editDone, this, [=]() {
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.iPickOrBondDelay = ui.spinBox_PickDelay->value();
-		} else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.iPickOrBondDelay = ui.spinBox_PickDelay->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.spinBoxPickBlockCheckDelay, &SpinBox::editDone, this, [=]() {
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.iBlockOrLoseDelay = ui.spinBoxPickBlockCheckDelay->value();
-		} else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.iBlockOrLoseDelay = ui.spinBoxPickBlockCheckDelay->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.spinBoxPickVacDelay, &SpinBox::editDone, this, [=]() {
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.iVacuumDelay = ui.spinBoxPickVacDelay->value();
-		} else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.iVacuumDelay = ui.spinBoxPickVacDelay->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.spinBoxPickBlowDelay, &SpinBox::editDone, this, [=]() {
-		if (ui.comboBoxPickParamType->currentIndex() == 0)//빽뤼분
-		{
-			m_curWaferPickParam.iBlowDelay = ui.spinBoxPickBlowDelay->value();
-		} else if (ui.comboBoxPickParamType->currentIndex() == 1)//쑨途憩
-		{
-			m_curCalibPickParam.iBlowDelay = ui.spinBoxPickBlowDelay->value();
-		}
-		ParamChangeEvent();
-		});
-
-
-	connect(ui.comboBoxBondParamType, &QComboBox::currentTextChanged, this, [=]() {
-		UpdatePageBondParam();
-		});
-	connect(ui.checkBoxBondBlockCheck, &QCheckBox::clicked, this, [=](bool isChecked) {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.bCheckBlock = ui.checkBoxBondBlockCheck->isChecked();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.bCheckBlock = ui.checkBoxBondBlockCheck->isChecked();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.checkBoxBondLoseCheck, &QCheckBox::clicked, this, [=](bool isChecked) {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.bCheckLose = ui.checkBoxBondLoseCheck->isChecked();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.bCheckLose = ui.checkBoxBondLoseCheck->isChecked();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.checkBoxBondFindForce, &QCheckBox::clicked, this, [=](bool isChecked) {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.bFindForce = ui.checkBoxBondFindForce->isChecked();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.bFindForce = ui.checkBoxBondFindForce->isChecked();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.doubleSpinBoxPreBondPosZ, &DoubleSpinBox::editDone, this, [=]() {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.dPreLev = ui.doubleSpinBoxPreBondPosZ->value();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.dPreLev = ui.doubleSpinBoxPreBondPosZ->value();
-		}
-		ParamChangeEvent();
-		});
-
-	connect(ui.doubleSpinBoxBondForce, &DoubleSpinBox::editDone, this, [=]() {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.dForce = ui.doubleSpinBoxBondForce->value();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.dForce = ui.doubleSpinBoxBondForce->value();
-		}
-		ParamChangeEvent();
-		});
-
-	connect(ui.doubleSpinBoxBondPosZ, &DoubleSpinBox::editDone, this, [=]() {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.dPickOrBondLev = ui.doubleSpinBoxBondPosZ->value();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.dPickOrBondLev = ui.doubleSpinBoxBondPosZ->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.spinBoxBondGrabDelay, &SpinBox::editDone, this, [=]() {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.iGrabDelay = ui.spinBoxBondGrabDelay->value();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.iGrabDelay = ui.spinBoxBondGrabDelay->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.spinBoxBondBlockCheckDelay, &SpinBox::editDone, this, [=]() {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.iBlockOrLoseDelay = ui.spinBoxBondBlockCheckDelay->value();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.iBlockOrLoseDelay = ui.spinBoxBondBlockCheckDelay->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.spinBoxBondDelay, &SpinBox::editDone, this, [=]() {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.iPickOrBondDelay = ui.spinBoxBondDelay->value();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.iPickOrBondDelay = ui.spinBoxBondDelay->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.spinBoxBondVacDelay, &SpinBox::editDone, this, [=]() {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.iVacuumDelay = ui.spinBoxBondVacDelay->value();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.iVacuumDelay = ui.spinBoxBondVacDelay->value();
-		}
-		ParamChangeEvent();
-		});
-	connect(ui.spinBoxBondBlowDelay, &SpinBox::editDone, this, [=]() {
-		if (ui.comboBoxBondParamType->currentIndex() == 0)//櫓瘻憩렴쑨
-		{
-			m_curCalibPlaceParam.iBlowDelay = ui.spinBoxBondBlowDelay->value();
-		} else if (ui.comboBoxBondParamType->currentIndex() == 1)//미쑨憩미쑨
-		{
-			m_curBondParam.iBlowDelay = ui.spinBoxBondBlowDelay->value();
-		}
-		ParamChangeEvent();
-		});
 }
 
 ProgrammPage::~ProgrammPage()
 {}
 
-void ProgrammPage::AddMatrixPage(int bondMatrixVectorIndex, int vectorIndex, PROGRAM_POINT_MATRIX_STRUCT matrixData)
-{
-	int matrixNum = m_mapSubMatrixControls.size();
-	int newMatrixID = ++matrixNum;
-	QVector<QObject*> vecControls;
-
-	QGridLayout* subGridLayout = new QGridLayout();
-	subGridLayout->setSpacing(6);
-	subGridLayout->setObjectName(QString::fromUtf8("subGridLayout"));
-
-	QFrame* line = new QFrame();
-	line->setFrameShape(QFrame::NoFrame); // 盧뇜칵훰움솥
-	line->setFixedHeight(2);         // �零미땍멕똑
-	line->setStyleSheet("background-color: #C7CAEB;");
-	ui.verticalLayout_2->addWidget(line);
-
-	QLabel* labelTitle = new QLabel(this);
-	labelTitle->setObjectName(QString::fromUtf8("labelTitle"));
-	labelTitle->setText(tr("Sub Matrix ")+ QString::number(vectorIndex));
-	subGridLayout->addWidget(labelTitle, 0, 0, 1, 1);
-	vecControls.push_back(labelTitle);
-
-	QLabel* labelRow = new QLabel(this);
-	labelRow->setObjectName(QString::fromUtf8("labelRow"));
-	labelRow->setText(tr("Row "));
-	subGridLayout->addWidget(labelRow, 1, 0, 1, 1);
-	vecControls.push_back(labelRow);
-
-	SpinBox* spinBoxRow = new SpinBox(this);
-	spinBoxRow->setObjectName(QString::fromUtf8("spinBoxRow"));
-	subGridLayout->addWidget(spinBoxRow, 1, 1, 1, 1);
-	vecControls.push_back(spinBoxRow);
-
-	QLabel* labelCol = new QLabel(this);
-	labelCol->setObjectName(QString::fromUtf8("labelCol"));
-	labelCol->setText(tr("Cow "));
-	subGridLayout->addWidget(labelCol, 2, 0, 1, 1);
-	vecControls.push_back(labelCol);
-
-	SpinBox* spinBoxCol = new SpinBox(this);
-	spinBoxCol->setObjectName(QString::fromUtf8("spinBoxCol"));
-	subGridLayout->addWidget(spinBoxCol, 2, 1, 1, 1);
-	vecControls.push_back(spinBoxCol);
-
-	QLabel* labelLeftTop = new QLabel(this);
-	labelLeftTop->setObjectName(QString::fromUtf8("labelLeftTop"));
-	labelLeftTop->setText(tr("Left Top Pos "));
-	subGridLayout->addWidget(labelLeftTop, 4, 0, 1, 1);
-	vecControls.push_back(labelLeftTop);
-
-	DoubleSpinBox* doubleSpinBoxLeftTopX = new DoubleSpinBox(this);
-	doubleSpinBoxLeftTopX->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopX"));
-	subGridLayout->addWidget(doubleSpinBoxLeftTopX, 4, 1, 1, 1);
-	vecControls.push_back(doubleSpinBoxLeftTopX);
-
-	DoubleSpinBox* doubleSpinBoxLeftTopY = new DoubleSpinBox(this);
-	doubleSpinBoxLeftTopY->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopY"));
-	subGridLayout->addWidget(doubleSpinBoxLeftTopY, 4, 2, 1, 1);
-	vecControls.push_back(doubleSpinBoxLeftTopY);
-
-	QLabel* labelRightTopPos = new QLabel(this);
-	labelRightTopPos->setObjectName(QString::fromUtf8("labelRightTopPos"));
-	labelRightTopPos->setText(tr("Right Top Pos "));
-	subGridLayout->addWidget(labelRightTopPos, 5, 0, 1, 1);
-	vecControls.push_back(labelRightTopPos);
-
-	DoubleSpinBox* doubleSpinBoxRightTopX = new DoubleSpinBox(this);
-	doubleSpinBoxRightTopX->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopX"));
-	subGridLayout->addWidget(doubleSpinBoxRightTopX, 5, 1, 1, 1);
-	vecControls.push_back(doubleSpinBoxRightTopX);
-
-	DoubleSpinBox* doubleSpinBoxRightTopY = new DoubleSpinBox(this);
-	doubleSpinBoxRightTopY->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopY"));
-	subGridLayout->addWidget(doubleSpinBoxRightTopY, 5, 2, 1, 1);
-	vecControls.push_back(doubleSpinBoxRightTopY);
-
-	QLabel* labelRightButtomPos = new QLabel(this);
-	labelRightButtomPos->setObjectName(QString::fromUtf8("labelRightButtomPos"));
-	labelRightButtomPos->setText(tr("Right Buttom pos"));
-	subGridLayout->addWidget(labelRightButtomPos, 6, 0, 1, 1);
-	vecControls.push_back(labelRightButtomPos);
-
-	DoubleSpinBox* doubleSpinBoxRightButtomX = new DoubleSpinBox(this);
-	doubleSpinBoxRightButtomX->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomX"));
-	subGridLayout->addWidget(doubleSpinBoxRightButtomX, 6, 1, 1, 1);
-	vecControls.push_back(doubleSpinBoxRightButtomX);
-
-	DoubleSpinBox* doubleSpinBoxRightButtomY = new DoubleSpinBox(this);
-	doubleSpinBoxRightButtomY->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomY"));
-	subGridLayout->addWidget(doubleSpinBoxRightButtomY, 6, 2, 1, 1);
-	vecControls.push_back(doubleSpinBoxRightTopX);
-
-	QLabel* labelNoBondPts = new QLabel(this);
-	labelNoBondPts->setObjectName(QString::fromUtf8("labelNoBondPts"));
-	labelNoBondPts->setText(tr("No Bond Points"));
-	subGridLayout->addWidget(labelNoBondPts, 7, 0, 1, 1);
-	vecControls.push_back(labelNoBondPts);
-
-	QLineEdit* lineEditNoBondPts = new QLineEdit(this);
-	lineEditNoBondPts->setObjectName(QString::fromUtf8("lineEditNoBondPts"));
-	subGridLayout->addWidget(lineEditNoBondPts, 7, 1, 1, 2);
-	vecControls.push_back(lineEditNoBondPts);
-
-	m_mapSubMatrixControls.insert(newMatrixID, vecControls);
-
-	ui.verticalLayout_2->addLayout(subGridLayout);
-
-	spinBoxRow->setValue(matrixData.MatrixRow);
-	spinBoxCol->setValue(matrixData.MatrixCol);
-	doubleSpinBoxLeftTopX->setValue(matrixData.LeftTopPoint.x);
-	doubleSpinBoxLeftTopY->setValue(matrixData.LeftTopPoint.y);
-	doubleSpinBoxRightTopX->setValue(matrixData.RightTopPoint.x);
-	doubleSpinBoxRightTopY->setValue(matrixData.RightTopPoint.y);
-	doubleSpinBoxRightButtomX->setValue(matrixData.RightBottomPoint.x);
-	doubleSpinBoxRightButtomY->setValue(matrixData.RightBottomPoint.y);
-
-	QString noBondPts = "";
-	bool firstTime = false;
-	for (XY_LONG_STRUCT pt : matrixData.VecNoBondPt)
-	{
-		if (!firstTime)
-		{
-			noBondPts += "(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
-			firstTime = true;
-			continue;
-		}
-		noBondPts += ";(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
-	}
-	lineEditNoBondPts->setText(noBondPts);
-
-
-	connect(spinBoxRow, &SpinBox::editDone, this, [=]() {
-		m_vecSubMatrixs[vectorIndex].MatrixRow = spinBoxRow->value();
-		MatrixChangeEvent();
-		});
-
-	connect(spinBoxCol, &SpinBox::editDone, this, [=]() {
-		m_vecSubMatrixs[vectorIndex].MatrixCol = spinBoxCol->value();
-		MatrixChangeEvent();
-		});
-
-	connect(doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() {
-		m_vecSubMatrixs[vectorIndex].LeftTopPoint.x = doubleSpinBoxLeftTopX->value();
-		MatrixChangeEvent();
-		});
-	connect(doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() {
-		m_vecSubMatrixs[vectorIndex].LeftTopPoint.y = doubleSpinBoxLeftTopY->value();
-		MatrixChangeEvent();
-		});
-	connect(doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() {
-		m_vecSubMatrixs[vectorIndex].RightTopPoint.x = doubleSpinBoxRightTopX->value();
-		MatrixChangeEvent();
-		});
-	connect(doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() {
-		m_vecSubMatrixs[vectorIndex].RightTopPoint.y = doubleSpinBoxRightTopY->value();
-		MatrixChangeEvent();
-		});
-	connect(doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() {
-		m_vecSubMatrixs[vectorIndex].RightBottomPoint.x = doubleSpinBoxRightButtomX->value();
-		MatrixChangeEvent();
-		});
-	connect(doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() {
-		m_vecSubMatrixs[vectorIndex].RightBottomPoint.y = doubleSpinBoxRightButtomY->value();
-		MatrixChangeEvent();
-		});
-
-
-	connect(lineEditNoBondPts, &QLineEdit::textChanged, this, [=]() {
-
-		});
-
-
-
-}
-
-void ProgrammPage::AddOutMatrixPage(int vectorIndex, PROGRAM_BOND_MATRIX_STRUCT matrixData)
-{
-	int matrixNum = m_mapSubMatrixControls.size();
-	int newMatrixID = ++matrixNum;
-	QVector<QObject*> vecControls;
-
-	QFrame* line = new QFrame();
-	line->setFrameShape(QFrame::NoFrame); // 盧뇜칵훰움솥
-	line->setFixedHeight(4);         // �零미땍멕똑
-	line->setStyleSheet("background-color: #C7CAEB;");
-
-	ui.verticalLayout_2->addWidget(line);
-
-	QGridLayout* matrixGridLayout = new QGridLayout();
-	matrixGridLayout->setSpacing(6);
-	matrixGridLayout->setObjectName(QString::fromUtf8("matrixGridLayout"));
-
-	QLabel* labelTitle = new QLabel(this);
-	labelTitle->setObjectName(QString::fromUtf8("labelRow"));
-	labelTitle->setText(tr("Matrix_")+ QString::number(vectorIndex));
-	matrixGridLayout->addWidget(labelTitle, 0, 0, 1, 1);
-	vecControls.push_back(labelTitle);
-
-
-	QLabel* labelRow = new QLabel(this);
-	labelRow->setObjectName(QString::fromUtf8("labelRow"));
-	labelRow->setText(tr("Row "));
-	matrixGridLayout->addWidget(labelRow, 1, 0, 1, 1);
-	vecControls.push_back(labelRow);
-
-	SpinBox* spinBoxRow = new SpinBox(this);
-	spinBoxRow->setObjectName(QString::fromUtf8("spinBoxRow"));
-	matrixGridLayout->addWidget(spinBoxRow, 1, 1, 1, 1);
-	vecControls.push_back(spinBoxRow);
-
-	QLabel* labelCol = new QLabel(this);
-	labelCol->setObjectName(QString::fromUtf8("labelCol"));
-	labelCol->setText(tr("Cow "));
-	matrixGridLayout->addWidget(labelCol, 2, 0, 1, 1);
-	vecControls.push_back(labelCol);
-
-	SpinBox* spinBoxCol = new SpinBox(this);
-	spinBoxCol->setObjectName(QString::fromUtf8("spinBoxCol"));
-	matrixGridLayout->addWidget(spinBoxCol, 2, 1, 1, 1);
-	vecControls.push_back(spinBoxCol);
-
-	QLabel* labelLeftTop = new QLabel(this);
-	labelLeftTop->setObjectName(QString::fromUtf8("labelLeftTop"));
-	labelLeftTop->setText(tr("Left Top Pos "));
-	matrixGridLayout->addWidget(labelLeftTop, 4, 0, 1, 1);
-	vecControls.push_back(labelLeftTop);
-
-	DoubleSpinBox* doubleSpinBoxLeftTopX = new DoubleSpinBox(this);
-	doubleSpinBoxLeftTopX->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopX"));
-	matrixGridLayout->addWidget(doubleSpinBoxLeftTopX, 4, 1, 1, 1);
-	vecControls.push_back(doubleSpinBoxLeftTopX);
-
-	DoubleSpinBox* doubleSpinBoxLeftTopY = new DoubleSpinBox(this);
-	doubleSpinBoxLeftTopY->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopY"));
-	matrixGridLayout->addWidget(doubleSpinBoxLeftTopY, 4, 2, 1, 1);
-	vecControls.push_back(doubleSpinBoxLeftTopY);
-
-	QLabel* labelRightTopPos = new QLabel(this);
-	labelRightTopPos->setObjectName(QString::fromUtf8("labelRightTopPos"));
-	labelRightTopPos->setText(tr("Right Top Pos "));
-	matrixGridLayout->addWidget(labelRightTopPos, 5, 0, 1, 1);
-	vecControls.push_back(labelRightTopPos);
-
-	DoubleSpinBox* doubleSpinBoxRightTopX = new DoubleSpinBox(this);
-	doubleSpinBoxRightTopX->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopX"));
-	matrixGridLayout->addWidget(doubleSpinBoxRightTopX, 5, 1, 1, 1);
-	vecControls.push_back(doubleSpinBoxRightTopX);
-
-	DoubleSpinBox* doubleSpinBoxRightTopY = new DoubleSpinBox(this);
-	doubleSpinBoxRightTopY->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopY"));
-	matrixGridLayout->addWidget(doubleSpinBoxRightTopY, 5, 2, 1, 1);
-	vecControls.push_back(doubleSpinBoxRightTopY);
-
-	QLabel* labelRightButtomPos = new QLabel(this);
-	labelRightButtomPos->setObjectName(QString::fromUtf8("labelRightButtomPos"));
-	labelRightButtomPos->setText(tr("Right Buttom pos"));
-	matrixGridLayout->addWidget(labelRightButtomPos, 6, 0, 1, 1);
-	vecControls.push_back(labelRightButtomPos);
-
-	DoubleSpinBox* doubleSpinBoxRightButtomX = new DoubleSpinBox(this);
-	doubleSpinBoxRightButtomX->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomX"));
-	matrixGridLayout->addWidget(doubleSpinBoxRightButtomX, 6, 1, 1, 1);
-	vecControls.push_back(doubleSpinBoxRightButtomX);
-
-	DoubleSpinBox* doubleSpinBoxRightButtomY = new DoubleSpinBox(this);
-	doubleSpinBoxRightButtomY->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomY"));
-	matrixGridLayout->addWidget(doubleSpinBoxRightButtomY, 6, 2, 1, 1);
-	vecControls.push_back(doubleSpinBoxRightTopX);
-
-	QLabel* labelNoBondPts = new QLabel(this);
-	labelNoBondPts->setObjectName(QString::fromUtf8("labelNoBondPts"));
-	labelNoBondPts->setText(tr("No Bond Points"));
-	matrixGridLayout->addWidget(labelNoBondPts, 7, 0, 1, 1);
-	vecControls.push_back(labelNoBondPts);
-
-	QLineEdit* lineEditNoBondPts = new QLineEdit(this);
-	lineEditNoBondPts->setObjectName(QString::fromUtf8("lineEditNoBondPts"));
-	matrixGridLayout->addWidget(lineEditNoBondPts, 7, 1, 1, 2);
-	vecControls.push_back(lineEditNoBondPts);
-
-	m_mapSubMatrixControls.insert(newMatrixID, vecControls);
-
-	ui.verticalLayout_2->addLayout(matrixGridLayout);
-
-	spinBoxRow->setValue(matrixData.BondMatrixRow);
-	spinBoxCol->setValue(matrixData.BondMatrixCol);
-	doubleSpinBoxLeftTopX->setValue(matrixData.LeftTopPoint.x);
-	doubleSpinBoxLeftTopY->setValue(matrixData.LeftTopPoint.y);
-	doubleSpinBoxRightTopX->setValue(matrixData.RightTopPoint.x);
-	doubleSpinBoxRightTopY->setValue(matrixData.RightTopPoint.y);
-	doubleSpinBoxRightButtomX->setValue(matrixData.RightBottomPoint.x);
-	doubleSpinBoxRightButtomY->setValue(matrixData.RightBottomPoint.y);
-
-	QString noBondPts = "";
-	bool firstTime = false;
-	for (XY_LONG_STRUCT pt : m_vectBondMatrixs[0].VecNoBondPt)
-	{
-		if (firstTime)
-		{
-			noBondPts += "(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
-			firstTime = true;
-			continue;
-		}
-		noBondPts += ";(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
-	}
-	lineEditNoBondPts->setText(noBondPts);
-
-	connect(spinBoxRow, &SpinBox::editDone, this, [=]() {
-		m_vectBondMatrixs[vectorIndex].BondMatrixRow = spinBoxRow->value();
-		MatrixChangeEvent();
-		});
-
-	connect(spinBoxCol, &SpinBox::editDone, this, [=]() {
-		m_vectBondMatrixs[vectorIndex].BondMatrixCol = spinBoxCol->value();
-		MatrixChangeEvent();
-		});
-
-	connect(doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() {
-		m_vectBondMatrixs[vectorIndex].LeftTopPoint.x = doubleSpinBoxLeftTopX->value();
-		MatrixChangeEvent();
-		});
-	connect(doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() {
-		m_vectBondMatrixs[vectorIndex].LeftTopPoint.y = doubleSpinBoxLeftTopY->value();
-		MatrixChangeEvent();
-		});
-	connect(doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() {
-		m_vectBondMatrixs[vectorIndex].RightTopPoint.x = doubleSpinBoxRightTopX->value();
-		MatrixChangeEvent();
-		});
-	connect(doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() {
-		m_vectBondMatrixs[vectorIndex].RightTopPoint.y = doubleSpinBoxRightTopY->value();
-		MatrixChangeEvent();
-		});
-	connect(doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() {
-		m_vectBondMatrixs[vectorIndex].RightBottomPoint.x = doubleSpinBoxRightButtomX->value();
-		MatrixChangeEvent();
-		});
-	connect(doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() {
-		m_vectBondMatrixs[vectorIndex].RightBottomPoint.y = doubleSpinBoxRightButtomY->value();
-		MatrixChangeEvent();
-		});
-
-
-	connect(lineEditNoBondPts, &QLineEdit::textChanged, this, [=]() {
-
-		});
-
-}
-
-void ProgrammPage::AddMatrixParam()
-{
-
-}
-
-void ProgrammPage::UpdatePageParam()
-{
-	int dieSourceIndex = 0;
-	if (m_curBondInfo.eDieSource == DIE_SOURCE::BY_WAFER)
-	{
-		dieSourceIndex = 1;
-	} else if (m_curBondInfo.eDieSource == DIE_SOURCE::BY_WAFFLE)
-	{
-		dieSourceIndex = 0;
-	}
-	ui.comboBoxDieSource->setCurrentIndex(dieSourceIndex);
-	ui.spinBoxPickTempID->setValue(m_curBondInfo.iPickPRStrategyId);
-	ui.spinBoxPickNozzleID->setValue(m_curBondInfo.iPickHeadId);
-	ui.spinBoxPreBondTemp->setValue(m_curBondInfo.iBondFrontPRStrategyId);
-	ui.spinBoxPostBondTemp->setValue(m_curBondInfo.iBondBackPRStrategyId);
-	ui.spinBoxBondTemp->setValue(m_curBondInfo.iBondPRStrategyId);
-	ui.spinBoxLookUpTemp->setValue(m_curBondInfo.iLookUpPRStrategyId);
-	ui.spinBoxCalibPickTemp->setValue(m_curBondInfo.iCalibPRStrategyId);
-	ui.doubleSpinBoxBondOffsetX->setValue(m_curBondInfo.stOffset.x);
-	ui.doubleSpinBoxBondOffsetY->setValue(m_curBondInfo.stOffset.y);
-	ui.doubleSpinBoxBondOffsetAngle->setValue(m_curBondInfo.stOffset.a);
-
-	UpdatePagePickParam();
-
-	UpdatePageBondParam();
-
-}
-
-void ProgrammPage::ParamChangeEvent()
-{
-	m_manageDB->GetCProduct()->SetBondInfoData(m_curBondInfo.iInfoId, m_curBondInfo);
-	m_manageDB->GetCProduct()->SetBondParam(m_curWaferPickParam.iId, m_curWaferPickParam);
-	m_manageDB->GetCProduct()->SetBondParam(m_curCalibPlaceParam.iId, m_curCalibPlaceParam);
-	m_manageDB->GetCProduct()->SetBondParam(m_curCalibPickParam.iId, m_curCalibPickParam);
-	m_manageDB->GetCProduct()->SetBondParam(m_curBondParam.iId, m_curBondParam);
-
-}
-
-void ProgrammPage::MatrixChangeEvent()
-{
-	for (PROGRAM_BOND_MATRIX_STRUCT& bondMatrix : m_vectBondMatrixs)
-	{
-		m_manageDB->GetCProduct()->SetBondMatrix(bondMatrix.BondMatrixId, bondMatrix);
-	}
-
-	for (PROGRAM_POINT_MATRIX_STRUCT& pointMatrix : m_vecSubMatrixs)
-	{
-		m_manageDB->GetCProduct()->SetPointMatrix(pointMatrix.MatrixId, pointMatrix);
-	}
-
-}
-
-void ProgrammPage::UpdatePagePickParam()
-{
-	//"혤쑨庫혤쑨"
-	if (ui.comboBoxPickParamType->currentIndex() == 0)
-	{
-		ui.checkBoxPickBlockCheck->setChecked(m_curWaferPickParam.bCheckBlock);
-		ui.checkBoxPickLoseCheck->setChecked(m_curWaferPickParam.bCheckLose);
-		ui.checkBoxPickFindForceCheck->setChecked(m_curWaferPickParam.bFindForce);
-		ui.doubleSpinBoxPrePickZ->setValue(m_curWaferPickParam.dPreLev);
-		ui.doubleSpinBoxPickForce->setValue(m_curWaferPickParam.dForce);
-		ui.doubleSpinBoxPickPosZ->setValue(m_curWaferPickParam.dPickOrBondLev);
-		ui.spinBoxPickGrabDelay->setValue(m_curWaferPickParam.iGrabDelay);
-		ui.spinBox_PickDelay->setValue(m_curWaferPickParam.iPickOrBondDelay);
-		ui.spinBoxPickBlockCheckDelay->setValue(m_curWaferPickParam.iBlockOrLoseDelay);
-		ui.spinBoxPickVacDelay->setValue(m_curWaferPickParam.iVacuumDelay);
-		ui.spinBoxPickBlowDelay->setValue(m_curWaferPickParam.iBlowDelay);
-	}
-	//"櫓瘻憩혤쑨"
-	else if (ui.comboBoxPickParamType->currentIndex() == 1)
-	{
-		ui.checkBoxPickBlockCheck->setChecked(m_curCalibPickParam.bCheckBlock);
-		ui.checkBoxPickLoseCheck->setChecked(m_curCalibPickParam.bCheckLose);
-		ui.checkBoxPickFindForceCheck->setChecked(m_curCalibPickParam.bFindForce);
-		ui.doubleSpinBoxPrePickZ->setValue(m_curCalibPickParam.dPreLev);
-		ui.doubleSpinBoxPickForce->setValue(m_curCalibPickParam.dForce);
-		ui.doubleSpinBoxPickPosZ->setValue(m_curCalibPickParam.dPickOrBondLev);
-		ui.spinBoxPickGrabDelay->setValue(m_curCalibPickParam.iGrabDelay);
-		ui.spinBox_PickDelay->setValue(m_curCalibPickParam.iPickOrBondDelay);
-		ui.spinBoxPickBlockCheckDelay->setValue(m_curCalibPickParam.iBlockOrLoseDelay);
-		ui.spinBoxPickVacDelay->setValue(m_curCalibPickParam.iVacuumDelay);
-		ui.spinBoxPickBlowDelay->setValue(m_curCalibPickParam.iBlowDelay);
-	}
-}
-
-void ProgrammPage::UpdatePageBondParam()
-{
-	//"櫓瘻憩렴쑨"
-	if (ui.comboBoxBondParamType->currentIndex() == 0)
-	{
-		ui.checkBoxBondBlockCheck->setChecked(m_curCalibPlaceParam.bCheckBlock);
-		ui.checkBoxBondLoseCheck->setChecked(m_curCalibPlaceParam.bCheckLose);
-		ui.checkBoxBondFindForce->setChecked(m_curCalibPlaceParam.bFindForce);
-		ui.doubleSpinBoxPreBondPosZ->setValue(m_curCalibPlaceParam.dPreLev);
-		ui.doubleSpinBoxBondForce->setValue(m_curCalibPlaceParam.dForce);
-		ui.doubleSpinBoxBondPosZ->setValue(m_curCalibPlaceParam.dPickOrBondLev);
-		ui.spinBoxBondGrabDelay->setValue(m_curCalibPlaceParam.iGrabDelay);
-		ui.spinBoxBondDelay->setValue(m_curCalibPlaceParam.iPickOrBondDelay);
-		ui.spinBoxBondBlockCheckDelay->setValue(m_curCalibPlaceParam.iBlockOrLoseDelay);
-		ui.spinBoxBondVacDelay->setValue(m_curCalibPlaceParam.iVacuumDelay);
-		ui.spinBoxBondBlowDelay->setValue(m_curCalibPlaceParam.iBlowDelay);
-		
-	} 
-	//"미쑨憩미쑨"
-	else if (ui.comboBoxBondParamType->currentIndex() == 1)
-	{
-		ui.checkBoxBondBlockCheck->setChecked(m_curBondParam.bCheckBlock);
-		ui.checkBoxBondLoseCheck->setChecked(m_curBondParam.bCheckLose);
-		ui.checkBoxBondFindForce->setChecked(m_curBondParam.bFindForce);
-		ui.doubleSpinBoxPreBondPosZ->setValue(m_curBondParam.dPreLev);
-		ui.doubleSpinBoxBondForce->setValue(m_curBondParam.dForce);
-		ui.doubleSpinBoxBondPosZ->setValue(m_curBondParam.dPickOrBondLev);
-		ui.spinBoxBondGrabDelay->setValue(m_curBondParam.iGrabDelay);
-		ui.spinBoxBondDelay->setValue(m_curBondParam.iPickOrBondDelay);
-		ui.spinBoxBondBlockCheckDelay->setValue(m_curBondParam.iBlockOrLoseDelay);
-		ui.spinBoxBondVacDelay->setValue(m_curBondParam.iVacuumDelay);
-		ui.spinBoxBondBlowDelay->setValue(m_curBondParam.iBlowDelay);
-	}
-}
 
 void ProgrammPage::initPage()
 {
-	if (m_manageDB == nullptr)
-	{
-		return;
-	}
-	//닒빈똥삿혤鑒앴
-	m_vectBondMatrixs = m_manageDB->GetCProduct()->GetBondMatrix();
-	if (m_vectBondMatrixs.size() == 0)
-	{		
-		return;
-	}
-
-	for (int i = 0; i < m_vectBondMatrixs.size(); i++)
-	{
-		AddOutMatrixPage(i, m_vectBondMatrixs[i]);
-		for (int j = 0; j < m_vectBondMatrixs[i].VecPointMatrixId.size(); j++)
-		{
-			PROGRAM_POINT_MATRIX_STRUCT subMatrix;
-			m_manageDB->GetCProduct()->GetPointMatrix(m_vectBondMatrixs[i].VecPointMatrixId[j], subMatrix);
-			m_vecSubMatrixs.push_back(subMatrix);
-			AddMatrixPage(i, j, subMatrix);
-
-		}
-	}
-
-
-	//for (int i = 0; i < m_vectBondMatrixs[0].VecPointMatrixId.size(); ++i)
-	//{
-	//	PROGRAM_POINT_MATRIX_STRUCT subMatrix;
-	//	m_manageDB->GetCProduct()->GetPointMatrix(m_vectBondMatrixs[0].VecPointMatrixId[i], subMatrix);
-	//	m_vecSubMatrixs.push_back(subMatrix);
-	//}
-
-	//m_manageDB->GetCProduct()->GetDieMatrix(m_vectBondMatrixs[0].VecPointMatrixId[0], m_vecSubMatrixs);
-
-	//鞫刻앤黎鑒앴
-	ui.spinBoxRow->setValue(m_vectBondMatrixs[0].BondMatrixRow);
-	ui.spinBoxCol->setValue(m_vectBondMatrixs[0].BondMatrixCol);
-	ui.doubleSpinBoxLeftTopX->setValue(m_vectBondMatrixs[0].LeftTopPoint.x);
-	ui.doubleSpinBoxLeftTopY->setValue(m_vectBondMatrixs[0].LeftTopPoint.y);
-	ui.doubleSpinBoxRightTopX->setValue(m_vectBondMatrixs[0].RightTopPoint.x);
-	ui.doubleSpinBoxRightTopY->setValue(m_vectBondMatrixs[0].RightTopPoint.y);
-	ui.doubleSpinBoxRightButtomX->setValue(m_vectBondMatrixs[0].RightBottomPoint.x);
-	ui.doubleSpinBoxRightButtomY->setValue(m_vectBondMatrixs[0].RightBottomPoint.y);
-	QString noBondPts = "";
-	bool firstTime = false;
-	for (XY_LONG_STRUCT& pt : m_vectBondMatrixs[0].VecNoBondPt)
-	{
-		if (firstTime)
-		{
-			noBondPts += "(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
-			firstTime = true;
-
-		}
-		noBondPts += ";(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")";
-
-	}
-	ui.lineEditNoBondPts->setText(noBondPts);
-
-	//鞫刻綾앤黎섟鑒앴
-	//for (PROGRAM_POINT_MATRIX_STRUCT& subMatrix : m_vecSubMatrixs)
-	//{
-	//	AddMatrixPage(subMatrix);
-	//}
-
-	//닒빈똥삿혤꽝鑒, 寧敬鑒앴
-	CResources* pResources = CResources::GetInstance();
-	if (pResources == nullptr)
-	{
-		return ;
-	}
-	CBondMatrix* pBondMatrix = pResources->GetBondMatrix();
-	if (pBondMatrix == nullptr)
-	{
-		return ;
-	}
-	
-	//pBondMatrix->GetPintInfoByIndex(0, m_curPointInfo);
-	m_manageDB->GetCProduct()->GetBondInfoData(m_vectBondMatrixs[0].BondInfoId, m_curBondInfo);
-	m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iPickParamId, m_curWaferPickParam);
-	m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iCalibBondParamId, m_curCalibPlaceParam);
-	m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iCalibPickParamId, m_curCalibPickParam);
-	m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iBondParamId, m_curBondParam);
-
-	//鞫刻썹충꽝鑒
-	UpdatePageParam();
+	m_BondMatrixProgramPage = new BondMatrixProgramPage(this);
+	m_pWaffleProgrammPage = new WaffleProgramPage(this);
+	m_WaferProgramPage = new WaferProgramPage(this);
 
+	ui.verticalLayoutBondMatrix->addWidget(m_BondMatrixProgramPage);
 	ui.verticalLayoutWaffleMatrix->addWidget(m_pWaffleProgrammPage);
 	ui.verticalLayoutWaferMatrix->addWidget(m_WaferProgramPage);
-
 }

+ 2 - 48
View/die-bonder-ui/Src/ProgrammPage.h

@@ -5,6 +5,7 @@
 #include "CViewInterface.h"
 #include "WaffleProgramPage.h"
 #include <View/die-bonder-ui/Src/WaferProgramPage.h>
+#include <View/die-bonder-ui/Src/BondMatrixProgramPage.h>
 
 class ProgrammPage : public QWidget
 {
@@ -15,60 +16,13 @@ public:
 	~ProgrammPage();
 
 private:
-	//新增矩阵界面
-	void AddMatrixPage(int bondMatrixVectorIndex, int vectorIndex, PROGRAM_POINT_MATRIX_STRUCT matrixData);
-
-	void AddOutMatrixPage(int vectorIndex, PROGRAM_BOND_MATRIX_STRUCT matrixData);
-
-	//往后端新增矩阵数据
-	void AddMatrixParam();
-
-	//更新参数,根据选择的点更新界面参数显示
-	void UpdatePageParam();
-
-	//参数被修改后发送给后端
-	void ParamChangeEvent();
-
-	//参数被修改后发送给后端
-	void MatrixChangeEvent();
-
-	//更新取晶参数
-	void UpdatePagePickParam();
-
-	//更新固晶参数
-	void UpdatePageBondParam();
 
 	void initPage();
 
 private:
 	Ui::ProgrammPageClass ui;
 
-	CManageDB* m_manageDB = nullptr;
-
-	//当前界面显示的参数
-	ns_db::BOND_INFO_STRUCT m_curBondInfo;
-
-	ns_db::PICKBOND_PARAM_STRUCT m_curWaferPickParam;
-
-	ns_db::PICKBOND_PARAM_STRUCT m_curCalibPlaceParam;
-
-	ns_db::PICKBOND_PARAM_STRUCT m_curCalibPickParam;
-
-	ns_db::PICKBOND_PARAM_STRUCT m_curBondParam;
-
-	ns_mat::POINT_INFO_STRUCT m_curPointInfo;
-
-	std::vector<ns_db::PICKBOND_PARAM_STRUCT> m_vecParam;
-
-	std::vector<ns_db::PROGRAM_BOND_MATRIX_STRUCT> m_vectBondMatrixs;
-
-	std::vector<ns_db::PROGRAM_POINT_MATRIX_STRUCT> m_vecSubMatrixs;
-
-	//子矩阵控件,ID从1开始
-	QMap<int, QVector<QObject*>> m_mapSubMatrixControls;
-
-	int m_curPtIndex = 0;
-
+	BondMatrixProgramPage* m_BondMatrixProgramPage = nullptr;
 	WaffleProgramPage* m_pWaffleProgrammPage = nullptr;
 	WaferProgramPage* m_WaferProgramPage = nullptr;
 

+ 3 - 763
View/die-bonder-ui/Src/ProgrammPage.ui

@@ -17,763 +17,15 @@
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
-      <number>1</number>
+      <number>0</number>
      </property>
-     <widget class="QWidget" name="tab">
+     <widget class="QWidget" name="tabBondMatrix">
       <attribute name="title">
        <string>固晶点编程</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_4">
        <item>
-        <layout class="QHBoxLayout" name="horizontalLayout">
-         <item>
-          <spacer name="horizontalSpacer">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>40</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-         <item>
-          <widget class="QPushButton" name="pushButtonSave">
-           <property name="minimumSize">
-            <size>
-             <width>150</width>
-             <height>0</height>
-            </size>
-           </property>
-           <property name="text">
-            <string>Save</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <widget class="QFrame" name="frame_2">
-         <property name="frameShape">
-          <enum>QFrame::StyledPanel</enum>
-         </property>
-         <property name="frameShadow">
-          <enum>QFrame::Raised</enum>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QScrollArea" name="scrollArea_2">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="widgetResizable">
-          <bool>true</bool>
-         </property>
-         <widget class="QWidget" name="scrollAreaWidgetMatrix">
-          <property name="geometry">
-           <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>745</width>
-            <height>243</height>
-           </rect>
-          </property>
-          <layout class="QVBoxLayout" name="verticalLayout_2">
-           <item>
-            <layout class="QGridLayout" name="gridLayout">
-             <property name="spacing">
-              <number>10</number>
-             </property>
-             <item row="5" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxRightTopX">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="6" column="2">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxRightButtomY">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="5" column="0">
-              <widget class="QLabel" name="label_79">
-               <property name="text">
-                <string>右上角</string>
-               </property>
-              </widget>
-             </item>
-             <item row="5" column="2">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxRightTopY">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="4" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxLeftTopX">
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="1" column="0">
-              <widget class="QLabel" name="label">
-               <property name="text">
-                <string>行数</string>
-               </property>
-              </widget>
-             </item>
-             <item row="6" column="0">
-              <widget class="QLabel" name="label_80">
-               <property name="text">
-                <string>右下角</string>
-               </property>
-              </widget>
-             </item>
-             <item row="6" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxRightButtomX">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="7" column="0">
-              <widget class="QLabel" name="label_81">
-               <property name="text">
-                <string>不固晶点</string>
-               </property>
-              </widget>
-             </item>
-             <item row="4" column="2">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxLeftTopY">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="2" column="1">
-              <widget class="SpinBox" name="spinBoxCol"/>
-             </item>
-             <item row="1" column="1">
-              <widget class="SpinBox" name="spinBoxRow"/>
-             </item>
-             <item row="4" column="0">
-              <widget class="QLabel" name="label_18">
-               <property name="text">
-                <string>左上角</string>
-               </property>
-              </widget>
-             </item>
-             <item row="7" column="1" colspan="2">
-              <widget class="QLineEdit" name="lineEditNoBondPts"/>
-             </item>
-             <item row="2" column="0">
-              <widget class="QLabel" name="label_2">
-               <property name="text">
-                <string>列数</string>
-               </property>
-              </widget>
-             </item>
-             <item row="0" column="0" colspan="3">
-              <widget class="QLabel" name="label_82">
-               <property name="text">
-                <string>一维矩阵:</string>
-               </property>
-              </widget>
-             </item>
-            </layout>
-           </item>
-          </layout>
-         </widget>
-        </widget>
-       </item>
-       <item>
-        <widget class="QFrame" name="frame">
-         <property name="frameShape">
-          <enum>QFrame::StyledPanel</enum>
-         </property>
-         <property name="frameShadow">
-          <enum>QFrame::Raised</enum>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QScrollArea" name="scrollArea">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="widgetResizable">
-          <bool>true</bool>
-         </property>
-         <widget class="QWidget" name="scrollAreaWidgetParam">
-          <property name="geometry">
-           <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>724</width>
-            <height>1282</height>
-           </rect>
-          </property>
-          <layout class="QVBoxLayout" name="verticalLayout">
-           <item>
-            <layout class="QGridLayout" name="gridLayout_2">
-             <property name="spacing">
-              <number>10</number>
-             </property>
-             <item row="8" column="1">
-              <widget class="SpinBox" name="spinBoxCalibPickTemp"/>
-             </item>
-             <item row="36" column="0">
-              <widget class="QLabel" name="label_38">
-               <property name="text">
-                <string>固晶高度</string>
-               </property>
-              </widget>
-             </item>
-             <item row="35" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxBondForce">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="17" column="0">
-              <widget class="QLabel" name="label_13">
-               <property name="text">
-                <string>取晶参数:</string>
-               </property>
-              </widget>
-             </item>
-             <item row="23" column="0">
-              <widget class="QLabel" name="label_75">
-               <property name="text">
-                <string>取晶高度</string>
-               </property>
-              </widget>
-             </item>
-             <item row="9" column="1">
-              <widget class="SpinBox" name="spinBoxBondNozzleID"/>
-             </item>
-             <item row="20" column="1">
-              <widget class="QCheckBox" name="checkBoxPickFindForceCheck">
-               <property name="text">
-                <string>CheckBox</string>
-               </property>
-              </widget>
-             </item>
-             <item row="2" column="0">
-              <widget class="QLabel" name="label_77">
-               <property name="text">
-                <string>取晶模板ID</string>
-               </property>
-              </widget>
-             </item>
-             <item row="31" column="1">
-              <widget class="QCheckBox" name="checkBoxBondBlockCheck">
-               <property name="text">
-                <string>CheckBox</string>
-               </property>
-              </widget>
-             </item>
-             <item row="25" column="1">
-              <widget class="SpinBox" name="spinBox_PickDelay"/>
-             </item>
-             <item row="3" column="1">
-              <widget class="SpinBox" name="spinBoxPickNozzleID"/>
-             </item>
-             <item row="24" column="0">
-              <widget class="QLabel" name="label_20">
-               <property name="text">
-                <string>拍照延时</string>
-               </property>
-              </widget>
-             </item>
-             <item row="33" column="1">
-              <widget class="QCheckBox" name="checkBoxBondFindForce">
-               <property name="text">
-                <string>CheckBox</string>
-               </property>
-              </widget>
-             </item>
-             <item row="18" column="0">
-              <widget class="QLabel" name="label_14">
-               <property name="text">
-                <string>阻塞检测</string>
-               </property>
-              </widget>
-             </item>
-             <item row="22" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxPickForce">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="11" column="0">
-              <widget class="QLabel" name="label_11">
-               <property name="text">
-                <string>固晶点补偿Y</string>
-               </property>
-              </widget>
-             </item>
-             <item row="1" column="0">
-              <widget class="QLabel" name="label_76">
-               <property name="text">
-                <string>是否中转</string>
-               </property>
-              </widget>
-             </item>
-             <item row="1" column="1">
-              <widget class="QCheckBox" name="checkBoxIsCalib">
-               <property name="text">
-                <string>CheckBox</string>
-               </property>
-              </widget>
-             </item>
-             <item row="41" column="0">
-              <widget class="QLabel" name="label_37">
-               <property name="text">
-                <string>吹气延时</string>
-               </property>
-              </widget>
-             </item>
-             <item row="34" column="0">
-              <widget class="QLabel" name="label_31">
-               <property name="text">
-                <string>预固晶高度</string>
-               </property>
-              </widget>
-             </item>
-             <item row="24" column="1">
-              <widget class="SpinBox" name="spinBoxPickGrabDelay"/>
-             </item>
-             <item row="25" column="0">
-              <widget class="QLabel" name="label_21">
-               <property name="text">
-                <string>取晶延时</string>
-               </property>
-              </widget>
-             </item>
-             <item row="0" column="0">
-              <widget class="QLabel" name="label_3">
-               <property name="text">
-                <string>晶粒来源</string>
-               </property>
-              </widget>
-             </item>
-             <item row="29" column="1">
-              <widget class="QLabel" name="label_73">
-               <property name="text">
-                <string/>
-               </property>
-              </widget>
-             </item>
-             <item row="17" column="1">
-              <widget class="QComboBox" name="comboBoxPickParamType">
-               <item>
-                <property name="text">
-                 <string>取晶头取晶</string>
-                </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>中转台取晶</string>
-                </property>
-               </item>
-              </widget>
-             </item>
-             <item row="29" column="0">
-              <widget class="QLabel" name="label_29">
-               <property name="text">
-                <string/>
-               </property>
-              </widget>
-             </item>
-             <item row="36" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxBondPosZ">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="39" column="1">
-              <widget class="SpinBox" name="spinBoxBondBlockCheckDelay"/>
-             </item>
-             <item row="38" column="1">
-              <widget class="SpinBox" name="spinBoxBondDelay"/>
-             </item>
-             <item row="34" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxPreBondPosZ">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="13" column="1">
-              <widget class="QLabel" name="label_74">
-               <property name="text">
-                <string/>
-               </property>
-              </widget>
-             </item>
-             <item row="35" column="0">
-              <widget class="QLabel" name="label_32">
-               <property name="text">
-                <string>固晶压力</string>
-               </property>
-              </widget>
-             </item>
-             <item row="41" column="1">
-              <widget class="SpinBox" name="spinBoxBondBlowDelay"/>
-             </item>
-             <item row="27" column="1">
-              <widget class="SpinBox" name="spinBoxPickVacDelay"/>
-             </item>
-             <item row="38" column="0">
-              <widget class="QLabel" name="label_34">
-               <property name="text">
-                <string>固晶延时</string>
-               </property>
-              </widget>
-             </item>
-             <item row="7" column="0">
-              <widget class="QLabel" name="label_7">
-               <property name="text">
-                <string>上视对点模板ID</string>
-               </property>
-              </widget>
-             </item>
-             <item row="23" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxPickPosZ">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="10" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetX">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="27" column="0">
-              <widget class="QLabel" name="label_23">
-               <property name="text">
-                <string>真空延时</string>
-               </property>
-              </widget>
-             </item>
-             <item row="39" column="0">
-              <widget class="QLabel" name="label_35">
-               <property name="text">
-                <string>阻塞/漏晶检测延时</string>
-               </property>
-              </widget>
-             </item>
-             <item row="13" column="0">
-              <widget class="QLabel" name="label_30">
-               <property name="text">
-                <string/>
-               </property>
-              </widget>
-             </item>
-             <item row="8" column="0">
-              <widget class="QLabel" name="label_8">
-               <property name="text">
-                <string>中转台取晶模板ID</string>
-               </property>
-              </widget>
-             </item>
-             <item row="12" column="0">
-              <widget class="QLabel" name="label_12">
-               <property name="text">
-                <string>固晶点补偿角度</string>
-               </property>
-              </widget>
-             </item>
-             <item row="33" column="0">
-              <widget class="QLabel" name="label_28">
-               <property name="text">
-                <string>是否寻压</string>
-               </property>
-              </widget>
-             </item>
-             <item row="6" column="0">
-              <widget class="QLabel" name="label_6">
-               <property name="text">
-                <string>固晶对点模板ID</string>
-               </property>
-              </widget>
-             </item>
-             <item row="3" column="0">
-              <widget class="QLabel" name="label_78">
-               <property name="text">
-                <string>取晶吸嘴号</string>
-               </property>
-              </widget>
-             </item>
-             <item row="26" column="1">
-              <widget class="SpinBox" name="spinBoxPickBlockCheckDelay"/>
-             </item>
-             <item row="30" column="0">
-              <widget class="QLabel" name="label_25">
-               <property name="text">
-                <string>固晶台固晶参数:</string>
-               </property>
-              </widget>
-             </item>
-             <item row="37" column="0">
-              <widget class="QLabel" name="label_33">
-               <property name="text">
-                <string>拍照延时</string>
-               </property>
-              </widget>
-             </item>
-             <item row="28" column="0">
-              <widget class="QLabel" name="label_24">
-               <property name="text">
-                <string>吹气延时</string>
-               </property>
-              </widget>
-             </item>
-             <item row="37" column="1">
-              <widget class="SpinBox" name="spinBoxBondGrabDelay"/>
-             </item>
-             <item row="11" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetY">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="5" column="0">
-              <widget class="QLabel" name="label_5">
-               <property name="text">
-                <string>固后检测模板ID</string>
-               </property>
-              </widget>
-             </item>
-             <item row="21" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxPrePickZ">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="22" column="0">
-              <widget class="QLabel" name="label_19">
-               <property name="text">
-                <string>取晶压力</string>
-               </property>
-              </widget>
-             </item>
-             <item row="12" column="1">
-              <widget class="DoubleSpinBox" name="doubleSpinBoxBondOffsetAngle">
-               <property name="minimum">
-                <double>-1000000000.000000000000000</double>
-               </property>
-               <property name="maximum">
-                <double>1000000000.000000000000000</double>
-               </property>
-              </widget>
-             </item>
-             <item row="32" column="0">
-              <widget class="QLabel" name="label_27">
-               <property name="text">
-                <string>漏晶检测</string>
-               </property>
-              </widget>
-             </item>
-             <item row="32" column="1">
-              <widget class="QCheckBox" name="checkBoxBondLoseCheck">
-               <property name="text">
-                <string>CheckBox</string>
-               </property>
-              </widget>
-             </item>
-             <item row="4" column="0">
-              <widget class="QLabel" name="label_4">
-               <property name="text">
-                <string>固前检测模板ID</string>
-               </property>
-              </widget>
-             </item>
-             <item row="21" column="0">
-              <widget class="QLabel" name="label_17">
-               <property name="text">
-                <string>预拾取高度</string>
-               </property>
-              </widget>
-             </item>
-             <item row="6" column="1">
-              <widget class="SpinBox" name="spinBoxBondTemp"/>
-             </item>
-             <item row="30" column="1">
-              <widget class="QComboBox" name="comboBoxBondParamType">
-               <item>
-                <property name="text">
-                 <string>中转台放晶</string>
-                </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>固晶台固晶</string>
-                </property>
-               </item>
-              </widget>
-             </item>
-             <item row="9" column="0">
-              <widget class="QLabel" name="label_9">
-               <property name="text">
-                <string>固晶吸嘴号</string>
-               </property>
-              </widget>
-             </item>
-             <item row="40" column="1">
-              <widget class="SpinBox" name="spinBoxBondVacDelay"/>
-             </item>
-             <item row="0" column="1">
-              <widget class="QComboBox" name="comboBoxDieSource">
-               <item>
-                <property name="text">
-                 <string>华夫盒</string>
-                </property>
-               </item>
-               <item>
-                <property name="text">
-                 <string>晶圆台</string>
-                </property>
-               </item>
-              </widget>
-             </item>
-             <item row="5" column="1">
-              <widget class="SpinBox" name="spinBoxPostBondTemp"/>
-             </item>
-             <item row="26" column="0">
-              <widget class="QLabel" name="label_22">
-               <property name="text">
-                <string>阻塞/漏晶检测延时</string>
-               </property>
-              </widget>
-             </item>
-             <item row="31" column="0">
-              <widget class="QLabel" name="label_26">
-               <property name="text">
-                <string>阻塞检测</string>
-               </property>
-              </widget>
-             </item>
-             <item row="18" column="1">
-              <widget class="QCheckBox" name="checkBoxPickBlockCheck">
-               <property name="text">
-                <string>CheckBox</string>
-               </property>
-              </widget>
-             </item>
-             <item row="28" column="1">
-              <widget class="SpinBox" name="spinBoxPickBlowDelay"/>
-             </item>
-             <item row="20" column="0">
-              <widget class="QLabel" name="label_16">
-               <property name="text">
-                <string>是否寻压</string>
-               </property>
-              </widget>
-             </item>
-             <item row="4" column="1">
-              <widget class="SpinBox" name="spinBoxPreBondTemp"/>
-             </item>
-             <item row="40" column="0">
-              <widget class="QLabel" name="label_36">
-               <property name="text">
-                <string>真空延时</string>
-               </property>
-              </widget>
-             </item>
-             <item row="7" column="1">
-              <widget class="SpinBox" name="spinBoxLookUpTemp"/>
-             </item>
-             <item row="2" column="1">
-              <widget class="SpinBox" name="spinBoxPickTempID"/>
-             </item>
-             <item row="10" column="0">
-              <widget class="QLabel" name="label_10">
-               <property name="text">
-                <string>固晶点补偿X</string>
-               </property>
-              </widget>
-             </item>
-             <item row="19" column="1">
-              <widget class="QCheckBox" name="checkBoxPickLoseCheck">
-               <property name="text">
-                <string>CheckBox</string>
-               </property>
-              </widget>
-             </item>
-             <item row="19" column="0">
-              <widget class="QLabel" name="label_15">
-               <property name="text">
-                <string>漏晶检测</string>
-               </property>
-              </widget>
-             </item>
-            </layout>
-           </item>
-          </layout>
-         </widget>
-        </widget>
+        <layout class="QVBoxLayout" name="verticalLayoutBondMatrix"/>
        </item>
       </layout>
      </widget>
@@ -802,18 +54,6 @@
   </layout>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
- <customwidgets>
-  <customwidget>
-   <class>SpinBox</class>
-   <extends>QSpinBox</extends>
-   <header>Src/RewriteControl/Controls/SpinBox.h</header>
-  </customwidget>
-  <customwidget>
-   <class>DoubleSpinBox</class>
-   <extends>QDoubleSpinBox</extends>
-   <header>Src/RewriteControl/Controls/doublespinbox.h</header>
-  </customwidget>
- </customwidgets>
  <resources/>
  <connections/>
 </ui>

+ 32 - 25
View/die-bonder-ui/Src/Res/Translate/SBT_en.ts

@@ -389,44 +389,50 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2284"/>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2302"/>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2320"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2285"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2326"/>
+        <source>Current Limit Range:%1~%2</source>
+        <comment>当前限定范围:%1~%2</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2351"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2369"/>
         <source>out of range,please input again</source>
         <comment>超出设定范围,请重新输入</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2868"/>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2887"/>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2928"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2917"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2936"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2977"/>
         <source>Open</source>
         <comment>开</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2868"/>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2897"/>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2933"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2917"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2946"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="2982"/>
         <source>Close</source>
         <comment>关</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="4163"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="4210"/>
         <source>Save</source>
         <comment>保存</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="4187"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="4234"/>
         <source>No components were modified!</source>
         <comment>没有任何组件被修改!</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="4191"/>
-        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="4204"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="4238"/>
+        <location filename="../../../OriginalWnd/DbTreeViewManager.cpp" line="4251"/>
         <source>Modifications detected, do you want to save?</source>
         <comment>检测到修改内容,是否保存?</comment>
         <translation type="unfinished"></translation>
@@ -572,7 +578,7 @@
     <message>
         <location filename="../../common/JMessageTip.cpp" line="11"/>
         <source>hint</source>
-        <comment>��ʾ</comment>
+        <comment>提示</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -583,13 +589,13 @@
     <message>
         <location filename="../../common/JMessageTip.cpp" line="21"/>
         <source>Currently exiting.....</source>
-        <comment>��ǰ�����˳�.....</comment>
+        <comment>当前正在退出.....</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../common/JMessageTip.cpp" line="22"/>
         <source>The current camera initialization failed and no camera is available.</source>
-        <comment>��ǰ������ʼ��ʧ�ܣ�û�п�������</comment>
+        <comment>当前相机初始化失败,没有可用相机</comment>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -814,60 +820,61 @@
     <message>
         <location filename="../../../MainWnd.ui" line="65"/>
         <source>Home</source>
-        <extracomment>焊接</extracomment>
+        <extracomment>主页面</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../MainWnd.ui" line="161"/>
         <source>Prod. Assist</source>
-        <extracomment>焊接</extracomment>
+        <extracomment>产品协助</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../MainWnd.ui" line="212"/>
         <source>Programme</source>
-        <extracomment>焊接</extracomment>
+        <extracomment>方案</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../MainWnd.ui" line="263"/>
         <source>Message</source>
-        <extracomment>焊接</extracomment>
+        <extracomment>消息</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../MainWnd.ui" line="314"/>
         <source>Calibration</source>
-        <extracomment>焊接</extracomment>
+        <extracomment>校准</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../MainWnd.ui" line="365"/>
         <source>Module Config.</source>
-        <extracomment>焊接</extracomment>
+        <extracomment>模块配置</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../MainWnd.ui" line="416"/>
         <source>Diagnosis</source>
-        <extracomment>焊接</extracomment>
+        <extracomment>诊断</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../MainWnd.ui" line="467"/>
         <source>System Info.</source>
-        <extracomment>焊接</extracomment>
+        <extracomment>系统信息</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../MainWnd.ui" line="518"/>
         <source>Help</source>
-        <extracomment>焊接</extracomment>
+        <extracomment>帮助</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../MainWnd.ui" line="549"/>
         <source>CLOSE</source>
+        <extracomment>关闭</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>

BIN
View/die-bonder-ui/Src/Res/Translate/SBT_zh_CN.qm


File diff suppressed because it is too large
+ 235 - 228
View/die-bonder-ui/Src/Res/Translate/SBT_zh_CN.ts


+ 2 - 0
View/die-bonder-ui/Src/RewriteControl/LightJoystickSwitchPage.cpp

@@ -641,5 +641,7 @@ void LightJoystickSwitchPage::on_modeComboBox_currentIndexChanged(int index)
             DisableLayoutWidgets(it.value(), true);
         }
     }   
+
+    m_moveAxisInfo.ModuleType = ui->modeComboBox->currentText().toStdString();
 }
 

+ 172 - 0
View/die-bonder-ui/Src/WaferProgramPage.cpp

@@ -90,6 +90,31 @@ WaferProgramPage::WaferProgramPage(QWidget* parent)
                 });
         }
         });
+    connect(mergedTable, &QTableWidget::cellDoubleClicked, this, [=](int row, int column) {
+        if (column == 10) { // NoBondPt 列
+            const auto& wafer = m_VecWaferMatrix[row];
+
+            NoBondPtEditDialog dlg(wafer.MatrixRow, wafer.MatrixCol, wafer.VecNoBondPt, this);
+            if (dlg.exec() == QDialog::Accepted) {
+                // 获取用户选择结果
+                QVector<XY_LONG_STRUCT> selected = dlg.getSelectedPoints();
+
+                // 更新数据结构
+                m_VecWaferMatrix[row].VecNoBondPt.clear();
+                for (const auto& pt : selected) {
+                    m_VecWaferMatrix[row].VecNoBondPt.push_back(pt);
+                }
+
+                // 转换为字符串填入表格
+                QStringList ptList;
+                for (const auto& pt : selected) {
+                    ptList << QString("(%1,%2)").arg(pt.x).arg(pt.y);
+                }
+                mergedTable->setItem(row, column, new QTableWidgetItem(ptList.join(" ")));
+            }
+        }
+        });
+
 
     // 初始化表格数据
     initMergedData();
@@ -103,6 +128,22 @@ WaferProgramPage::WaferProgramPage(QWidget* parent)
 QComboBox* WaferProgramPage::createDieMatrixIdComboBox(int defaultId, int row) {
     QComboBox* comboBox = new QComboBox(mergedTable);
 
+    // 设置样式,确保在暗色模式下也是白底黑字
+    comboBox->setStyleSheet(R"(
+        QComboBox {
+            background-color: white;
+            color: black;
+            border: 1px solid #BABBDC;
+            border-radius: 4px;
+            padding: 2px 5px;
+        }
+        QComboBox QAbstractItemView {
+            background-color: white;
+            color: black;
+            selection-background-color: #E5E5FF;
+            selection-color: black;
+        }
+    )");
     for (const auto& dieMatrix : m_VecDieMatrixt) {
         /*comboBox->addItem(
             QString("%1 - %2").arg(dieMatrix.MatrixId).arg(QString::fromStdString(dieMatrix.strModuleName)),
@@ -333,3 +374,134 @@ void WaferProgramPage::onCellChanged(int row, int column)
     default: break;
     }
 }
+
+
+// 构造函数实现
+NoBondPtEditDialog::NoBondPtEditDialog(int rows, int cols, const std::vector<XY_LONG_STRUCT>& selectedPts, QWidget* parent)
+    : QDialog(parent)
+{
+    this->setStyleSheet(R"(
+        QDialog {
+            background-color: #f0f0f0;
+            color: black;
+        }
+        QPushButton {
+            background-color: white;
+            color: black;
+            border: 1px solid gray;
+            border-radius: 4px;
+        }
+        QPushButton:hover {
+            background-color: #e0e0e0;
+        }
+    )");
+
+    QVBoxLayout* mainLayout = new QVBoxLayout(this);
+    QGridLayout* gridLayout = new QGridLayout();
+
+    // 初始化已选点集合
+    for (const auto& pt : selectedPts) {
+        selectedSet.insert({ pt.x, pt.y });
+    }
+
+    for (int r = 0; r < rows; ++r) {
+        for (int c = 0; c < cols; ++c) {
+            QPushButton* btn = new QPushButton(QString("%1,%2").arg(r).arg(c));
+            btn->setFixedSize(40, 30);
+
+            QPair<int, int> pos(r, c);
+            buttonMap[btn] = pos;
+
+            bool selected = selectedSet.contains(pos);
+            btn->setStyleSheet(selected ? "background-color: gray;" : "background-color: lightgreen;");
+
+            connect(btn, &QPushButton::clicked, this, [=]() {
+                if (selectedSet.contains(pos)) {
+                    selectedSet.remove(pos);
+                    btn->setStyleSheet("background-color: lightgreen;");
+                }
+                else {
+                    selectedSet.insert(pos);
+                    btn->setStyleSheet("background-color: gray;");
+                }
+                });
+
+            gridLayout->addWidget(btn, r, c);
+        }
+    }
+
+    mainLayout->addLayout(gridLayout);
+
+    // 底部按钮
+    QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+    connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
+    connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
+    mainLayout->addWidget(buttons);
+}
+
+// 获取选中的点
+QVector<XY_LONG_STRUCT> NoBondPtEditDialog::getSelectedPoints() const {
+    QVector<XY_LONG_STRUCT> result;
+    for (const auto& pos : selectedSet) {
+        XY_LONG_STRUCT pt;
+        pt.x = pos.first;
+        pt.y = pos.second;
+        result.append(pt);
+    }
+    return result;
+}
+
+void NoBondPtEditDialog::mousePressEvent(QMouseEvent* event) {
+    if (event->button() == Qt::LeftButton || event->button() == Qt::RightButton) {
+        dragStart = event->pos();
+        dragButton = event->button();  // 记录当前拖动按钮
+
+        if (!rubberBand)
+            rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
+        rubberBand->setGeometry(QRect(dragStart, QSize()));
+        rubberBand->show();
+        isDragging = true;
+    }
+}
+
+
+void NoBondPtEditDialog::mouseMoveEvent(QMouseEvent* event) {
+    if (isDragging && rubberBand) {
+        rubberBand->setGeometry(QRect(dragStart, event->pos()).normalized());
+    }
+}
+
+void NoBondPtEditDialog::mouseReleaseEvent(QMouseEvent* event) {
+    if (!rubberBand || !isDragging || event->button() != dragButton) return;
+
+    rubberBand->hide();
+    QRect selectionRect = rubberBand->geometry();
+
+    for (auto it = buttonMap.begin(); it != buttonMap.end(); ++it) {
+        QPushButton* btn = it.key();
+        QPair<int, int> pos = it.value();
+
+        if (btn->geometry().intersects(selectionRect)) {
+            if (dragButton == Qt::LeftButton) {
+                // toggle:如果选中就取消,否则加入
+                if (selectedSet.contains(pos)) {
+                    selectedSet.remove(pos);
+                    btn->setStyleSheet("background-color: lightgreen;");
+                }
+                else {
+                    selectedSet.insert(pos);
+                    btn->setStyleSheet("background-color: gray;");
+                }
+            }
+            else if (dragButton == Qt::RightButton) {
+                // 强制取消
+                selectedSet.remove(pos);
+                btn->setStyleSheet("background-color: lightgreen;");
+            }
+        }
+    }
+
+    isDragging = false;
+    dragButton = Qt::NoButton;
+}
+

+ 26 - 0
View/die-bonder-ui/Src/WaferProgramPage.h

@@ -17,6 +17,12 @@
 #include <unordered_map>
 #include <QtWidgets/qcombobox.h>
 
+#include <QGridLayout>
+#include <QDialogButtonBox>
+#include <QMouseEvent>
+#include <QRubberBand>
+
+
 class WaferProgramPage : public QWidget {
     Q_OBJECT
 
@@ -52,4 +58,24 @@ private:
     bool m_isInitializing = false;
 };
 
+class NoBondPtEditDialog : public QDialog {
+    Q_OBJECT
+public:
+    NoBondPtEditDialog(int rows, int cols, const std::vector<XY_LONG_STRUCT>& selectedPts, QWidget* parent = nullptr);
+    QVector<XY_LONG_STRUCT> getSelectedPoints() const;
+
+protected:
+    void mousePressEvent(QMouseEvent* event) override;
+    void mouseMoveEvent(QMouseEvent* event) override;
+    void mouseReleaseEvent(QMouseEvent* event) override;
+
+private:
+    QSet<QPair<int, int>> selectedSet; 
+    Qt::MouseButton dragButton = Qt::NoButton;
+    QMap<QPushButton*, QPair<int, int>> buttonMap;
+    QRubberBand* rubberBand = nullptr;
+    QPoint dragStart;
+    bool isDragging = false;
+};
+
 #endif // WAFER_PROGRAM_PAGE_H

+ 3 - 3
View/die-bonder-ui/Src/common/JMessageTip.cpp

@@ -8,7 +8,7 @@ JMessageTip::JMessageTip()
 
 void JMessageTip::Message_information(const QString& strTip, QWidget* parent /*= nullptr*/)
 {
-    QMessageBox::information(parent, tr("hint", "提示"), strTip);
+    QMessageBox::information(parent, tr("hint", "鎻愮ず"), strTip);
 }
 
 QMessageBox::StandardButton JMessageTip::Message_question(const QString& strMsg, QWidget* parent /*= nullptr*/)
@@ -18,8 +18,8 @@ QMessageBox::StandardButton JMessageTip::Message_question(const QString& strMsg,
 
 void JMessageTip::Message_warning(const QString& strMsg, QWidget* parent /*= nullptr*/)
 {
-    QMessageBox::warning(nullptr, tr("Currently exiting.....","当前正在退出....."),
-        tr("The current camera initialization failed and no camera is available.","当前相机初始化失败,没有可用相机"));
+    QMessageBox::warning(nullptr, tr("Currently exiting.....","褰撳墠姝e湪閫€鍑�....."),
+        tr("The current camera initialization failed and no camera is available.","褰撳墠鐩告満鍒濆�鍖栧け璐ワ紝娌℃湁鍙�敤鐩告満"));
 }
 
 void JMessageTip::Message_warning(const QString& title, const QString& text, QWidget* parent /*= nullptr*/)

+ 10 - 10
View/die-bonder-ui/Src/common/JMessageTip.h

@@ -1,11 +1,11 @@
 // *****************************************************************************
-// 版权所有(C)2023~2099 上海骄成超声波技术有限公司
-// 保留所有权利
+// 鐗堟潈鎵€鏈夛紙C锛�2023~2099 涓婃捣楠勬垚瓒呭0娉㈡妧鏈�湁闄愬叕鍙�
+// 淇濈暀鎵€鏈夋潈鍒�
 // *****************************************************************************
-// 作者 : 杨坚
-// 版本 : 1.0
-// 功能说明:
-//          这个是为了消息弹框做准备的,因为现在没有统一的样式
+// 浣滆€� : 鏉ㄥ潥
+// 鐗堟湰 : 1.0
+// 鍔熻兘璇存槑:
+//          杩欎釜鏄�负浜嗘秷鎭�脊妗嗗仛鍑嗗�鐨�,鍥犱负鐜板湪娌℃湁缁熶竴鐨勬牱寮�
 // *****************************************************************************
 
 #ifndef __JMESSAGETIP_H__
@@ -23,24 +23,24 @@ public:
 
     static void Message_information(const QString& strTip, QWidget* parent = nullptr);
 
-    /**询问
+    /**璇㈤棶
     */
     static QMessageBox::StandardButton Message_question(const QString& strMsg, QWidget* parent = nullptr);
 
-    /**警告消息
+    /**璀﹀憡娑堟伅
     */
     static void Message_warning(const QString& strMsg, QWidget* parent = nullptr);
 
     static void Message_warning(const QString& title, const QString& text, QWidget* parent = nullptr);
 
 
-    /**自定义
+    /**鑷�畾涔�
     */
     static void Message_critical(const QString& strTip, QWidget* parent = nullptr);
     static void Message_critical(const QString& title, const QString& text, QWidget* parent = nullptr);
 
 
-    /**先创建一个
+    /**鍏堝垱寤轰竴涓�
      */
     static void CreateCustomMessageDlg(const ns_module::ST_BUTTON_DONE& butDone);
 };

Some files were not shown because too many files changed in this diff