| | |
| | | #include "CProcessDataListDlg.h" |
| | | #include "afxdialogex.h" |
| | | |
| | | namespace { |
| | | static const UINT IDC_CHECK_SHOW_ARM_STEPS = 0x5001; |
| | | static const UINT IDC_TAB_UNIFIED = 0x5002; |
| | | } |
| | | |
| | | // CProcessDataListDlg 对话框 |
| | | |
| | |
| | | |
| | | BEGIN_MESSAGE_MAP(CProcessDataListDlg, CDialogEx) |
| | | ON_BN_CLICKED(IDC_BUTTON1, &CProcessDataListDlg::OnBnClickedButton1) |
| | | ON_BN_CLICKED(IDC_CHECK_SHOW_ARM_STEPS, &CProcessDataListDlg::OnBnClickedCheckShowArm) |
| | | ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_UNIFIED, &CProcessDataListDlg::OnTcnSelchangeTabUnified) |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | |
| | | { |
| | | CDialogEx::OnInitDialog(); |
| | | |
| | | SetupListCtrlStyle(); |
| | | SetWindowText(_T("Glass数据详情")); |
| | | LoadArmStepOption(); |
| | | InitUnifiedLayout(); |
| | | RenderUnifiedTab(); |
| | | |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // 异常: OCX 属性页应返回 FALSE |
| | | } |
| | | |
| | | void CProcessDataListDlg::SetupListCtrlStyle() |
| | | { |
| | | DWORD dwStyle = m_listCtrl.GetExtendedStyle(); |
| | | dwStyle |= LVS_EX_FULLROWSELECT; |
| | | dwStyle |= LVS_EX_GRIDLINES; |
| | |
| | | |
| | | HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1); |
| | | ListView_SetImageList(m_listCtrl.GetSafeHwnd(), imageList, LVSIL_SMALL); |
| | | m_listCtrl.InsertColumn(0, _T("名称"), LVCFMT_RIGHT, 188); |
| | | m_listCtrl.InsertColumn(1, _T("值"), LVCFMT_LEFT, 128); |
| | | |
| | | |
| | | InsertParamsToListCtrl(m_listCtrl, m_strRawText); |
| | | |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // 异常: OCX 属性页应返回 FALSE |
| | | } |
| | | |
| | | void CProcessDataListDlg::setRawText(CString& strRawText) |
| | | { |
| | | m_strRawText = strRawText; |
| | | m_initialTab = 2; |
| | | } |
| | | |
| | | void CProcessDataListDlg::setPathRows(const std::vector<PathRow>& rows) |
| | | { |
| | | m_pathRows = rows; |
| | | m_initialTab = 1; |
| | | } |
| | | |
| | | void CProcessDataListDlg::setUnifiedData(const std::vector<std::pair<CString, CString>>& basicRows, |
| | | const std::vector<PathRow>& pathRows, |
| | | const std::vector<std::pair<CString, CString>>& processRows) |
| | | { |
| | | m_basicRows = basicRows; |
| | | m_pathRows = pathRows; |
| | | m_processRows = processRows; |
| | | } |
| | | |
| | | void CProcessDataListDlg::setInitialTab(int tabIndex) |
| | | { |
| | | if (tabIndex < 0) tabIndex = 0; |
| | | if (tabIndex > 2) tabIndex = 2; |
| | | m_initialTab = tabIndex; |
| | | } |
| | | |
| | | void CProcessDataListDlg::LoadArmStepOption() |
| | | { |
| | | CString iniPath; |
| | | iniPath.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); |
| | | m_showArmSteps = (GetPrivateProfileInt(_T("GlassPathDlg"), _T("ShowArmSteps"), 0, iniPath) != 0); |
| | | } |
| | | |
| | | void CProcessDataListDlg::SaveArmStepOption() const |
| | | { |
| | | CString iniPath, val; |
| | | iniPath.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); |
| | | val.Format(_T("%d"), m_showArmSteps ? 1 : 0); |
| | | WritePrivateProfileString(_T("GlassPathDlg"), _T("ShowArmSteps"), val, iniPath); |
| | | } |
| | | |
| | | void CProcessDataListDlg::BuildPathList() |
| | | { |
| | | m_listCtrl.DeleteAllItems(); |
| | | int stepNo = 1; |
| | | for (const auto& r : m_pathRows) |
| | | { |
| | | if (!m_showArmSteps && r.isArmStep) continue; |
| | | |
| | | CString step; |
| | | step.Format(_T("%d"), stepNo++); |
| | | int nItem = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), step); |
| | | m_listCtrl.SetItemText(nItem, 1, r.chamber); |
| | | m_listCtrl.SetItemText(nItem, 2, r.enterTime); |
| | | m_listCtrl.SetItemText(nItem, 3, r.leaveTime); |
| | | } |
| | | } |
| | | |
| | | void CProcessDataListDlg::BuildNameValueList(const std::vector<std::pair<CString, CString>>& rows) |
| | | { |
| | | m_listCtrl.DeleteAllItems(); |
| | | for (int i = 0; i < (int)rows.size(); ++i) { |
| | | int nItem = m_listCtrl.InsertItem(i, rows[i].first); |
| | | m_listCtrl.SetItemText(nItem, 1, rows[i].second); |
| | | } |
| | | } |
| | | |
| | | void CProcessDataListDlg::InitUnifiedLayout() |
| | | { |
| | | CRect rcList; |
| | | m_listCtrl.GetWindowRect(&rcList); |
| | | ScreenToClient(&rcList); |
| | | |
| | | CRect rcTab(rcList.left, rcList.top, rcList.right, rcList.top + 24); |
| | | m_tabCtrl.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP, rcTab, this, IDC_TAB_UNIFIED); |
| | | m_tabCtrl.SetFont(GetFont()); |
| | | m_tabCtrl.InsertItem(0, _T("基础信息")); |
| | | m_tabCtrl.InsertItem(1, _T("工艺Step")); |
| | | m_tabCtrl.InsertItem(2, _T("ProcessData")); |
| | | m_tabCtrl.SetCurSel(m_initialTab); |
| | | |
| | | CRect rcNewList(rcList.left, rcTab.bottom + 2, rcList.right, rcList.bottom); |
| | | m_listCtrl.MoveWindow(&rcNewList); |
| | | |
| | | CRect rcChk(rcNewList.left, rcNewList.bottom + 6, rcNewList.left + 200, rcNewList.bottom + 24); |
| | | m_chkShowArm.Create(_T("显示机械手相关Step"), |
| | | WS_CHILD | BS_AUTOCHECKBOX, |
| | | rcChk, this, IDC_CHECK_SHOW_ARM_STEPS); |
| | | m_chkShowArm.SetFont(GetFont()); |
| | | m_chkShowArm.SetCheck(m_showArmSteps ? BST_CHECKED : BST_UNCHECKED); |
| | | } |
| | | |
| | | void CProcessDataListDlg::RenderUnifiedTab() |
| | | { |
| | | const int tab = m_tabCtrl.GetCurSel(); |
| | | while (m_listCtrl.GetHeaderCtrl() && m_listCtrl.GetHeaderCtrl()->GetItemCount() > 0) { |
| | | m_listCtrl.DeleteColumn(0); |
| | | } |
| | | |
| | | if (tab == 0) { |
| | | m_chkShowArm.ShowWindow(SW_HIDE); |
| | | m_listCtrl.InsertColumn(0, _T("名称"), LVCFMT_RIGHT, 200); |
| | | m_listCtrl.InsertColumn(1, _T("值"), LVCFMT_LEFT, 320); |
| | | BuildNameValueList(m_basicRows); |
| | | } |
| | | else if (tab == 1) { |
| | | m_chkShowArm.ShowWindow(SW_SHOW); |
| | | m_listCtrl.InsertColumn(0, _T("Step"), LVCFMT_RIGHT, 56); |
| | | m_listCtrl.InsertColumn(1, _T("腔体名称"), LVCFMT_LEFT, 180); |
| | | m_listCtrl.InsertColumn(2, _T("进入时间"), LVCFMT_LEFT, 156); |
| | | m_listCtrl.InsertColumn(3, _T("离开时间"), LVCFMT_LEFT, 156); |
| | | |
| | | m_listCtrl.DeleteAllItems(); |
| | | int stepNo = 1; |
| | | for (const auto& r : m_pathRows) |
| | | { |
| | | if (!m_showArmSteps && r.isArmStep) continue; |
| | | CString step; |
| | | step.Format(_T("%d"), stepNo++); |
| | | int nItem = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), step); |
| | | m_listCtrl.SetItemText(nItem, 1, r.chamber); |
| | | m_listCtrl.SetItemText(nItem, 2, r.enterTime); |
| | | m_listCtrl.SetItemText(nItem, 3, r.leaveTime); |
| | | } |
| | | } |
| | | else { |
| | | m_chkShowArm.ShowWindow(SW_HIDE); |
| | | m_listCtrl.InsertColumn(0, _T("名称"), LVCFMT_RIGHT, 200); |
| | | m_listCtrl.InsertColumn(1, _T("值"), LVCFMT_LEFT, 320); |
| | | if (!m_processRows.empty()) { |
| | | BuildNameValueList(m_processRows); |
| | | } |
| | | else { |
| | | InsertParamsToListCtrl(m_listCtrl, m_strRawText); |
| | | } |
| | | } |
| | | } |
| | | |
| | | void CProcessDataListDlg::InsertParamsToListCtrl(CListCtrl& listCtrl, const CString& data) |
| | |
| | | AfxMessageBox(_T("复制失败!")); |
| | | } |
| | | } |
| | | |
| | | void CProcessDataListDlg::OnBnClickedCheckShowArm() |
| | | { |
| | | m_showArmSteps = (m_chkShowArm.GetCheck() == BST_CHECKED); |
| | | SaveArmStepOption(); |
| | | RenderUnifiedTab(); |
| | | } |
| | | |
| | | void CProcessDataListDlg::OnTcnSelchangeTabUnified(NMHDR* pNMHDR, LRESULT* pResult) |
| | | { |
| | | RenderUnifiedTab(); |
| | | *pResult = 0; |
| | | } |