chenluhua1980
2026-01-13 155cb7fe0dcb564729c6aecdb65815f3f0ed24e2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "stdafx.h"
#include "CEventEditDlg.h"
#include "Servo.h"
#include "resource.h"
#include <algorithm>
 
IMPLEMENT_DYNAMIC(CEventEditDlg, CDialogEx)
 
CEventEditDlg::CEventEditDlg(const CString& title, int eventId, const CString& name, const CString& desc, const std::vector<unsigned int>& rptIds, CWnd* pParent)
    : CDialogEx(IDD_DIALOG_EVENT_EDIT, pParent)
    , m_strTitle(title)
    , m_eventId(eventId)
    , m_strName(name)
    , m_strDesc(desc)
    , m_rptIds(rptIds)
{
}
 
CEventEditDlg::~CEventEditDlg()
{
}
 
void CEventEditDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_EDIT_EVT_ID, m_editId);
    DDX_Control(pDX, IDC_EDIT_EVT_NAME, m_editName);
    DDX_Control(pDX, IDC_EDIT_EVT_DESC, m_editDesc);
    DDX_Control(pDX, IDC_LIST_EVT_RPTS, m_listRpt);
}
 
BEGIN_MESSAGE_MAP(CEventEditDlg, CDialogEx)
END_MESSAGE_MAP()
 
BOOL CEventEditDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    SetWindowText(m_strTitle);
 
    CString strId;
    strId.Format(_T("%d"), m_eventId);
    m_editId.SetWindowText(strId);
    m_editId.SetReadOnly(TRUE);
    m_editName.SetWindowText(m_strName);
    m_editDesc.SetWindowText(m_strDesc);
 
    m_listRpt.SetExtendedStyle(m_listRpt.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);
    m_listRpt.InsertColumn(0, _T("RPT ID"), LVCFMT_LEFT, 120);
    m_listRpt.InsertColumn(1, _T("VIDs"), LVCFMT_LEFT, 240);
 
    auto& reports = theApp.m_model.m_hsmsPassive.getReports();
    for (int i = 0; i < (int)reports.size(); ++i) {
        auto rpt = reports[i];
        if (rpt == nullptr) continue;
        int idx = m_listRpt.InsertItem(m_listRpt.GetItemCount(), std::to_string(rpt->getReportId()).c_str());
        m_listRpt.SetItemText(idx, 1, rpt->getVariablesIdsText().c_str());
        m_listRpt.SetItemData(idx, (DWORD_PTR)rpt->getReportId());
        if (std::find(m_rptIds.begin(), m_rptIds.end(), rpt->getReportId()) != m_rptIds.end()) {
            m_listRpt.SetCheck(idx, TRUE);
        }
    }
 
    return TRUE;
}
 
void CEventEditDlg::OnOK()
{
    CString name, desc;
    m_editName.GetWindowText(name);
    m_editDesc.GetWindowText(desc);
    name.Trim();
    desc.Trim();
    if (name.IsEmpty()) {
        AfxMessageBox(_T("名称不能为空"));
        return;
    }
 
    std::vector<unsigned int> selected;
    int count = m_listRpt.GetItemCount();
    for (int i = 0; i < count; ++i) {
        if (m_listRpt.GetCheck(i)) {
            selected.push_back((unsigned int)m_listRpt.GetItemData(i));
        }
    }
    if (selected.empty()) {
        AfxMessageBox(_T("至少选择一个Report"));
        return;
    }
 
    m_strName = name;
    m_strDesc = desc;
    m_rptIds.swap(selected);
    CDialogEx::OnOK();
}