Explorar o código

方案页面优化

lsw hai 23 horas
pai
achega
a871b150d1

+ 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>

+ 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