LAPTOP-SNT8I5JK\Boounion
2025-09-17 62bec5118f5e5fe750017cf2f12d4a428ab092df
1.继续CControlJobManagerDlg的功能实现;
已修改4个文件
74 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CCjPage2.cpp 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCjPage2.h 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CControlJobManagerDlg.cpp 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CControlJobManagerDlg.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCjPage2.cpp
@@ -47,9 +47,9 @@
    UpdatePjData();
}
void CCjPage2::SetExclusionNames(std::vector<std::string>& names)
void CCjPage2::SetPjWarps(std::vector<PJWarp>& pjs)
{
    m_exclusionNames = names;
    m_pjWarps = pjs;
}
BOOL CCjPage2::OnInitDialog()
@@ -108,16 +108,20 @@
{
    //SERVO::CProcessJob*
    if (m_pContext == nullptr) return;
    SERVO::CProcessJob* pProcessJob = (SERVO::CProcessJob*)m_pContext;
    PJWarp* pPjWarp = (PJWarp*)m_pContext;
    SERVO::CProcessJob* pProcessJob = (SERVO::CProcessJob*)pPjWarp->pj;
    // 更新名称
    BOOL bOkName = TRUE;
    char szBuffer[256];
    GetDlgItemText(IDC_EDIT_PJ_ID, szBuffer, 256);
    for (auto item : m_exclusionNames) {
        if (item.compare(std::string(szBuffer)) == 0) {
            bOkName = FALSE;
            break;
    for (auto item : m_pjWarps) {
        if (item.pj != m_pContext) {
            SERVO::CProcessJob* temp = (SERVO::CProcessJob*)item.pj;
            if (temp->id().compare(std::string(szBuffer)) == 0) {
                bOkName = FALSE;
                break;
            }
        }
    }
    if (!bOkName) {
@@ -160,7 +164,8 @@
    }
    if (m_pContext) {
        SERVO::CProcessJob* pProcessJob = (SERVO::CProcessJob*)m_pContext;
        PJWarp* pPjWarp = (PJWarp*)m_pContext;
        SERVO::CProcessJob* pProcessJob = (SERVO::CProcessJob*)pPjWarp->pj;
        SetDlgItemText(IDC_EDIT_PJ_ID, pProcessJob->id().c_str());
        int idx = pComboBox->FindStringExact(-1, pProcessJob->recipeSpec().c_str());
        if (idx != CB_ERR) pComboBox->SetCurSel(idx);
SourceCode/Bond/Servo/CCjPage2.h
@@ -4,6 +4,13 @@
#include "CCarrierSlotGrid.h"
struct PJWarp {
    void* pj;
    int port;
    bool checkSlot[8];
};
// CPjPage1 对话框
class CCjPage2 : public CCjPageBase
@@ -15,7 +22,7 @@
    virtual ~CCjPage2();
public:
    void SetExclusionNames(std::vector<std::string>& names);
    void SetPjWarps(std::vector<PJWarp>& pjs);
protected:
    void Resize();
@@ -27,7 +34,7 @@
private:
    CCarrierSlotGrid m_grid;
    std::vector<std::string> m_exclusionNames;
    std::vector<PJWarp> m_pjWarps;
// 对话框数据
#ifdef AFX_DESIGN_TIME
SourceCode/Bond/Servo/CControlJobManagerDlg.cpp
@@ -20,10 +20,10 @@
CControlJobManagerDlg::~CControlJobManagerDlg()
{
    for (auto pj : m_processJobs) {
        delete pj;
    for (auto item : m_pjWarps) {
        delete (SERVO::CProcessJob*)item.pj;
    }
    m_processJobs.clear();
    m_pjWarps.clear();
    if (m_pControlJob != nullptr) {
        delete m_pControlJob;
@@ -60,7 +60,7 @@
        }
        else if (1 == code) {
            if (contextType == 1) {
                UpProcessJobId((SERVO::CProcessJob*)pContext);
                UpProcessJobId((PJWarp*)pContext);
            }
        }
    };
@@ -186,9 +186,9 @@
    HTREEITEM hRoot = m_tree.InsertItem(m_pControlJob->id().c_str(), 0, 0);
    m_tree.SetItemData(hRoot, (DWORD_PTR)m_pControlJob);
    m_tree.SetItemState(hRoot, 0, TVIS_STATEIMAGEMASK);
    for (auto pj : m_processJobs) {
        HTREEITEM hItem = m_tree.InsertItem(pj->id().c_str(), 0, 0, hRoot);
        m_tree.SetItemData(hItem, (DWORD_PTR)pj);
    for (auto& item : m_pjWarps) {
        HTREEITEM hItem = m_tree.InsertItem(((SERVO::CProcessJob*)item.pj)->id().c_str(), 0, 0, hRoot);
        m_tree.SetItemData(hItem, (DWORD_PTR)&item);
        m_tree.SetItemState(hItem, INDEXTOSTATEIMAGEMASK(false ? 2 : 1), TVIS_STATEIMAGEMASK);
    }
    m_tree.Expand(hRoot, TVE_EXPAND);
@@ -221,19 +221,13 @@
            m_pages[2]->ShowWindow(SW_SHOW);
        }
        else if (m_tree.GetParentItem(hParent) == nullptr) {
            SERVO::CProcessJob* pj = (SERVO::CProcessJob*)m_tree.GetItemData(hSel);
            PJWarp* pjWarp = (PJWarp*)m_tree.GetItemData(hSel);
            m_pages[0]->ShowWindow(SW_HIDE);
            m_pages[1]->ShowWindow(SW_SHOW);
            m_pages[2]->ShowWindow(SW_HIDE);
            m_pages[1]->SetContext(pj, 1);
            m_pages[1]->SetContext(pjWarp, 1);
            std::vector<std::string> names;
            for (auto item : m_processJobs) {
                if (item != pj) {
                    names.push_back(item->id());
                }
            }
            ((CCjPage2*)m_pages[1])->SetExclusionNames(names);
            ((CCjPage2*)m_pages[1])->SetPjWarps(m_pjWarps);
        }
        else {
            // 有祖先 → 第三层及以下 → Glass
@@ -262,7 +256,10 @@
    for (int i = 0; i < 4; i++) {
        sprintf_s(szBuffer, 256, "PJ%03d", i + 1);
        SERVO::CProcessJob* pj = new SERVO::CProcessJob(std::string(szBuffer));
        m_processJobs.push_back(pj);
        PJWarp pjWarp;
        pjWarp.pj = pj;
        pjWarp.port = -1;
        m_pjWarps.push_back(pjWarp);
    }
}
@@ -274,7 +271,7 @@
    GetDlgItem(IDC_BUTTON_APPLY)->EnableWindow(FALSE);
}
void CControlJobManagerDlg::UpProcessJobId(SERVO::CProcessJob* pJob)
void CControlJobManagerDlg::UpProcessJobId(PJWarp* pjWarp)
{
    // 更新树控件
    // 遍历根节点
@@ -284,8 +281,9 @@
        HTREEITEM hChild = m_tree.GetChildItem(hRoot);
        while (hChild) {
            DWORD_PTR data = m_tree.GetItemData(hChild);
            if ((void*)data == pJob) {
                m_tree.SetItemText(hChild, pJob->id().c_str());
            if ((void*)data == pjWarp) {
                SERVO::CProcessJob* pj = (SERVO::CProcessJob*)pjWarp->pj;
                m_tree.SetItemText(hChild, pj->id().c_str());
                return; // 找到就返回
            }
            hChild = m_tree.GetNextSiblingItem(hChild);
SourceCode/Bond/Servo/CControlJobManagerDlg.h
@@ -21,13 +21,13 @@
    void UpdateControlJob();
    bool AddPorcessJob(SERVO::CProcessJob* pj);
    bool RemovePorcessJob(SERVO::CProcessJob* pj);
    void UpProcessJobId(SERVO::CProcessJob* pJob);
    void UpProcessJobId(PJWarp* pjWarp);
    void InitData();
private:
    std::vector<CCjPageBase*> m_pages;
    SERVO::CControlJob* m_pControlJob;
    std::vector<SERVO::CProcessJob*> m_processJobs;
    std::vector<PJWarp> m_pjWarps;
    CApredTreeCtrl2 m_tree;