| | |
| | | #include "Servo.h" |
| | | #include "afxdialogex.h" |
| | | #include "PageRecipe.h" |
| | | #include "MsgDlg.h" |
| | | |
| | | |
| | | // CPageRecipe 对话框 |
| | | |
| | |
| | | |
| | | void CPageRecipe::FillDataToListCtrl(const std::vector<RecipeInfo>& vecRecipe) { |
| | | CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_PPID); |
| | | if (pListCtrl == nullptr || pListCtrl->m_hWnd == nullptr) { |
| | | if (pListCtrl == nullptr || !::IsWindow(pListCtrl->m_hWnd)) { |
| | | return; |
| | | } |
| | | |
| | |
| | | m_listPPID.SetColumnWidth(nColCount - 1, LVSCW_AUTOSIZE_USEHEADER); |
| | | } |
| | | |
| | | void CPageRecipe::FillRecipeListToListCtrl(SERVO::CRecipeList* pList) |
| | | { |
| | | CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_PPID); |
| | | if (pListCtrl == nullptr || !::IsWindow(pListCtrl->m_hWnd)) { |
| | | return; |
| | | } |
| | | |
| | | // 清空当前CListCtrl中的所有项 |
| | | pListCtrl->DeleteAllItems(); |
| | | if (pList == nullptr) { |
| | | return; |
| | | } |
| | | |
| | | |
| | | // 遍历数据并插入到CListCtrl中 |
| | | std::map<int, short>& ids = pList->getIds(); |
| | | for (auto item : ids) { |
| | | int index = m_listPPID.InsertItem(m_listPPID.GetItemCount(), _T("")); |
| | | m_listPPID.SetItemText(index, 1, std::to_string(item.first).c_str()); |
| | | m_listPPID.SetItemText(index, 2, std::to_string(item.second).c_str()); |
| | | } |
| | | |
| | | // 获取列数 |
| | | int nColCount = m_listPPID.GetHeaderCtrl()->GetItemCount(); |
| | | m_listPPID.SetColumnWidth(nColCount - 1, LVSCW_AUTOSIZE_USEHEADER); |
| | | } |
| | | |
| | | void CPageRecipe::DoDataExchange(CDataExchange* pDX) |
| | | { |
| | | CDialogEx::DoDataExchange(pDX); |
| | |
| | | ON_BN_CLICKED(IDC_BUTTON_REFRESH, &CPageRecipe::OnBnClickedButtonRefresh) |
| | | ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_PPID, &CPageRecipe::OnLvnItemChangedListPPID) |
| | | ON_WM_DESTROY() |
| | | ON_CBN_SELCHANGE(IDC_COMBO_EQUIPMENT, &CPageRecipe::OnCbnSelchangeComboEquipment) |
| | | ON_WM_SHOWWINDOW() |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | |
| | | ListView_SetImageList(pListCtrl->GetSafeHwnd(), imageList, LVSIL_SMALL); |
| | | pListCtrl->InsertColumn(0, _T(""), LVCFMT_RIGHT, 0); // 隐藏列 |
| | | pListCtrl->InsertColumn(1, _T("No."), LVCFMT_LEFT, width[1]); |
| | | pListCtrl->InsertColumn(2, _T("PPID"), LVCFMT_LEFT, width[2]); |
| | | pListCtrl->InsertColumn(2, _T("PPID/Recipe ID"), LVCFMT_LEFT, width[2]); |
| | | pListCtrl->InsertColumn(3, _T("描述"), LVCFMT_LEFT, width[3]); |
| | | pListCtrl->InsertColumn(4, _T("创建时间"), LVCFMT_LEFT, width[4]); |
| | | pListCtrl->SetColumnWidth(4, LVSCW_AUTOSIZE_USEHEADER); |
| | | |
| | | |
| | | // 获取所有数据 |
| | | auto vecData = RecipeManager::getInstance().getAllRecipes(); |
| | |
| | | |
| | | // 按钮竖直排列在右侧 |
| | | CWnd* buttons[] = { |
| | | GetDlgItem(IDC_BUTTON_MODIFY), |
| | | GetDlgItem(IDC_BUTTON_REFRESH), |
| | | GetDlgItem(IDC_BUTTON_DELETE), |
| | | GetDlgItem(IDC_BUTTON_DELETE_ALL), |
| | | GetDlgItem(IDC_BUTTON_REFRESH) |
| | | GetDlgItem(IDC_BUTTON_MODIFY) |
| | | }; |
| | | |
| | | for (auto pBtn : buttons) { |
| | |
| | | |
| | | void CPageRecipe::OnBnClickedButtonRefresh() |
| | | { |
| | | // TODO: 在此添加控件通知处理程序代码 |
| | | CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_EQUIPMENT); |
| | | int nSel = pComboBox->GetCurSel(); |
| | | SERVO::CEquipment* pEq = (SERVO::CEquipment*)pComboBox->GetItemDataPtr(nSel); |
| | | |
| | | if (pEq == nullptr) { |
| | | // 获取master配方(本地) |
| | | auto vecData = RecipeManager::getInstance().getAllRecipes(); |
| | | FillDataToListCtrl(vecData); |
| | | } |
| | | else { |
| | | // enable port |
| | | CMsgDlg msgDlg("请等待", "正在获取配方..."); |
| | | pEq->masterRecipeListRequest(0, [&](int status) -> void { |
| | | if (status == SS_FAILED) { |
| | | CString strMsg; |
| | | strMsg.Format(_T("获取配方失败!")); |
| | | msgDlg.DelayClose(3000); |
| | | msgDlg.SetIcon(MSG_BOX_ERROR); |
| | | msgDlg.SetTitle(_T("操作失败")); |
| | | msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg); |
| | | msgDlg.SetMarquee(FALSE, 0); |
| | | msgDlg.SetCompleteCode(-1); |
| | | } |
| | | else if (status == SS_COMPLETE) { |
| | | CString strMsg; |
| | | strMsg.Format(_T("获取配方完成!")); |
| | | msgDlg.DelayClose(3000); |
| | | msgDlg.SetIcon(MSG_BOX_SUCCEED); |
| | | msgDlg.SetTitle(_T("操作成功")); |
| | | msgDlg.SetMessage((LPTSTR)(LPCTSTR)strMsg); |
| | | msgDlg.SetMarquee(FALSE, 0); |
| | | msgDlg.SetCompleteCode(0); |
| | | } |
| | | }); |
| | | msgDlg.DoModal(); |
| | | } |
| | | } |
| | | |
| | | void CPageRecipe::OnLvnItemChangedListPPID(NMHDR* pNMHDR, LRESULT* pResult) |
| | |
| | | LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); |
| | | *pResult = 0; |
| | | |
| | | CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_EQUIPMENT); |
| | | int nEqSel = pComboBox->GetCurSel(); |
| | | int selectedCount = ListView_GetSelectedCount(m_listPPID.GetSafeHwnd()); |
| | | GetDlgItem(IDC_BUTTON_MODIFY)->EnableWindow(selectedCount > 0); |
| | | GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(selectedCount > 0); |
| | | GetDlgItem(IDC_BUTTON_DELETE_ALL)->EnableWindow(selectedCount > 0); |
| | | |
| | | GetDlgItem(IDC_BUTTON_MODIFY)->EnableWindow(nEqSel == 0 && selectedCount > 0); |
| | | GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(nEqSel == 0 && selectedCount > 0); |
| | | GetDlgItem(IDC_BUTTON_DELETE_ALL)->EnableWindow(nEqSel == 0 && selectedCount > 0); |
| | | } |
| | | |
| | | void CPageRecipe::OnCbnSelchangeComboEquipment() |
| | | { |
| | | CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_EQUIPMENT); |
| | | int nEqSel = pComboBox->GetCurSel(); |
| | | int selectedCount = ListView_GetSelectedCount(m_listPPID.GetSafeHwnd()); |
| | | |
| | | GetDlgItem(IDC_BUTTON_MODIFY)->EnableWindow(nEqSel == 0 && selectedCount > 0); |
| | | GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(nEqSel == 0 && selectedCount > 0); |
| | | GetDlgItem(IDC_BUTTON_DELETE_ALL)->EnableWindow(nEqSel == 0 && selectedCount > 0); |
| | | GetDlgItem(IDC_EDIT_KEYWORD)->EnableWindow(nEqSel == 0); |
| | | GetDlgItem(IDC_BUTTON_SEARCH)->EnableWindow(nEqSel == 0); |
| | | |
| | | SERVO::CEquipment* pEq = (SERVO::CEquipment*)pComboBox->GetItemDataPtr(nEqSel); |
| | | if (pEq == nullptr) { |
| | | auto vecData = RecipeManager::getInstance().getAllRecipes(); |
| | | FillDataToListCtrl(vecData); |
| | | } |
| | | else { |
| | | SERVO::CRecipeList* pRecipeList = pEq->getRecipeList(0); |
| | | FillRecipeListToListCtrl(pRecipeList); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | void CPageRecipe::OnDestroy() |
| | | { |
| | |
| | | WritePrivateProfileString("PageRecipeListCtrl", strItem, strTemp, strIniFile); |
| | | } |
| | | } |
| | | |
| | | |
| | | void CPageRecipe::OnShowWindow(BOOL bShow, UINT nStatus) |
| | | { |
| | | CDialogEx::OnShowWindow(bShow, nStatus); |
| | | |
| | | if (bShow) { |
| | | CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_EQUIPMENT); |
| | | if (pComboBox->GetCount() == 0) { |
| | | SERVO::CMaster& master = theApp.m_model.getMaster(); |
| | | SERVO::CEquipment* pEq[] = { |
| | | nullptr, |
| | | master.getEquipment(EQ_ID_EFEM), |
| | | master.getEquipment(EQ_ID_Bonder1), |
| | | master.getEquipment(EQ_ID_Bonder2), |
| | | master.getEquipment(EQ_ID_BAKE_COOLING), |
| | | master.getEquipment(EQ_ID_VACUUMBAKE), |
| | | master.getEquipment(EQ_ID_MEASUREMENT), |
| | | }; |
| | | |
| | | CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_EQUIPMENT); |
| | | for (int i = 0; i < sizeof(pEq) / sizeof(pEq[0]); i++) { |
| | | pComboBox->InsertString(i, |
| | | pEq[i] == nullptr ? _T("Master") : pEq[i]->getName().c_str()); |
| | | pComboBox->SetItemDataPtr(i, pEq[i]); |
| | | } |
| | | pComboBox->SetCurSel(0); |
| | | } |
| | | } |
| | | } |