chenluhua1980
2026-01-21 2254c453025136727917601091f14da02af1b548
1.完善警告,软警告上抛和清除测试;
已修改6个文件
156 ■■■■ 文件已修改
SourceCode/Bond/Servo/AlarmPopupDlg.cpp 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/AlarmPopupDlg.h 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.rc 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ServoDlg.cpp 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ServoDlg.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/resource.h 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/AlarmPopupDlg.cpp
@@ -30,6 +30,8 @@
BEGIN_MESSAGE_MAP(CAlarmPopupDlg, CDialogEx)
    ON_BN_CLICKED(IDC_POPUP_BTN_CLOSE, &CAlarmPopupDlg::OnBnClickedClose)
    ON_BN_CLICKED(IDC_BUTTON_ALARM_OFF, &CAlarmPopupDlg::OnBnClickedAlarmOff)
    ON_BN_CLICKED(IDC_BUTTON_PREV, &CAlarmPopupDlg::OnBnClickedPrev)
    ON_BN_CLICKED(IDC_BUTTON_NEXT, &CAlarmPopupDlg::OnBnClickedNext)
    ON_WM_CTLCOLOR()
    ON_WM_DESTROY()
END_MESSAGE_MAP()
@@ -151,6 +153,7 @@
void CAlarmPopupDlg::ShowAlarmControls(bool bShow)
{
    const int ids[] = {
        IDC_BUTTON_PREV, IDC_BUTTON_NEXT,
        IDC_LABEL_TITLE, IDC_ICON_ALARM, IDC_ICON_TITLE,
        IDC_LABEL_LEVEL, IDC_LABEL_NAME,
        IDC_LINE1, IDC_BUTTON_SOUND_OFF, IDC_BUTTON_ALARM_OFF,
@@ -165,10 +168,65 @@
void CAlarmPopupDlg::RefreshContent()
{
    auto actives = AlarmManager::getInstance().getActiveAlarms();
    if (!actives.empty()) {
        m_activeAlarm = actives.front();
    m_activeAlarms = AlarmManager::getInstance().getActiveAlarms();
    m_activeIndex = 0;
    if (!m_activeAlarms.empty()) {
        m_hasActive = true;
        DisplayActiveAt(m_activeIndex);
        ShowAlarmControls(true);
        ShowNoAlarmControls(false);
    }
    else {
        m_hasActive = false;
        SetDlgItemText(IDC_LABEL_NO_ALARM, _T("当前无报警"));
        SetDlgItemText(IDC_LABEL_NAME, _T(""));
        SetDlgItemText(IDC_LABEL_LEVEL, _T(""));
        SetDlgItemText(IDC_LABEL_DESCRIPTION, _T(""));
        ShowAlarmControls(false);
        ShowNoAlarmControls(true);
    }
}
void CAlarmPopupDlg::OnBnClickedClose()
{
    ShowWindow(SW_HIDE);
}
void CAlarmPopupDlg::OnBnClickedAlarmOff()
{
    if (!m_hasActive) return;
    AlarmManager& alarmManager = AlarmManager::getInstance();
    alarmManager.clearAlarmByAttributes(
        m_activeAlarm.nId,
        m_activeAlarm.nDeviceId,
        m_activeAlarm.nUnitId,
        CToolUnits::getCurrentTimeString());
    RefreshContent();
}
void CAlarmPopupDlg::OnBnClickedPrev()
{
    if (m_activeIndex > 0) {
        --m_activeIndex;
        DisplayActiveAt(m_activeIndex);
    }
}
void CAlarmPopupDlg::OnBnClickedNext()
{
    if (m_activeIndex + 1 < static_cast<int>(m_activeAlarms.size())) {
        ++m_activeIndex;
        DisplayActiveAt(m_activeIndex);
    }
}
void CAlarmPopupDlg::DisplayActiveAt(int idx)
{
    if (idx < 0 || idx >= static_cast<int>(m_activeAlarms.size())) return;
    m_activeAlarm = m_activeAlarms[idx];
        AlarmManager& alarmManager = AlarmManager::getInstance();
        const AlarmInfo* info = alarmManager.getAlarmInfoByID(m_activeAlarm.nId);
@@ -201,37 +259,17 @@
        SetDlgItemText(IDC_LABEL_NAME, name);
        SetDlgItemText(IDC_LABEL_LEVEL, level);
        SetDlgItemText(IDC_LABEL_DESCRIPTION, desc);
        ShowAlarmControls(true);
        ShowNoAlarmControls(false);
    UpdateNavButtons();
        ShowWindow(SW_SHOW);
    }
    else {
        m_hasActive = false;
        SetDlgItemText(IDC_LABEL_NO_ALARM, _T("当前无报警"));
        SetDlgItemText(IDC_LABEL_NAME, _T(""));
        SetDlgItemText(IDC_LABEL_LEVEL, _T(""));
        SetDlgItemText(IDC_LABEL_DESCRIPTION, _T(""));
        ShowAlarmControls(false);
        ShowNoAlarmControls(true);
    }
}
void CAlarmPopupDlg::OnBnClickedClose()
void CAlarmPopupDlg::UpdateNavButtons()
{
    ShowWindow(SW_HIDE);
}
void CAlarmPopupDlg::OnBnClickedAlarmOff()
{
    if (!m_hasActive) return;
    AlarmManager& alarmManager = AlarmManager::getInstance();
    alarmManager.clearAlarmByAttributes(
        m_activeAlarm.nId,
        m_activeAlarm.nDeviceId,
        m_activeAlarm.nUnitId,
        CToolUnits::getCurrentTimeString());
    RefreshContent();
    auto* pPrev = GetDlgItem(IDC_BUTTON_PREV);
    auto* pNext = GetDlgItem(IDC_BUTTON_NEXT);
    if (pPrev) pPrev->EnableWindow(m_activeIndex > 0);
    if (pNext) pNext->EnableWindow(m_activeIndex + 1 < static_cast<int>(m_activeAlarms.size()));
}
HBRUSH CAlarmPopupDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
SourceCode/Bond/Servo/AlarmPopupDlg.h
@@ -43,11 +43,17 @@
    afx_msg void OnDestroy();
    afx_msg void OnBnClickedClose();
    afx_msg void OnBnClickedAlarmOff();
    afx_msg void OnBnClickedPrev();
    afx_msg void OnBnClickedNext();
private:
    bool m_hasActive;
    AlarmData m_activeAlarm;
    std::vector<AlarmData> m_activeAlarms;
    int m_activeIndex = 0;
    void SetButtonBackgroundColors(bool bMute);
    void ShowNoAlarmControls(bool bShow);
    void ShowAlarmControls(bool bShow);
    void UpdateNavButtons();
    void DisplayActiveAt(int idx);
};
SourceCode/Bond/Servo/Servo.rc
@@ -841,10 +841,10 @@
BEGIN
    PUSHBUTTON      "<< 上一条",IDC_BUTTON_PREV,8,224,50,14,NOT WS_VISIBLE
    PUSHBUTTON      "下一条 >>",IDC_BUTTON_NEXT,62,224,50,14,NOT WS_VISIBLE
    LTEXT           "警告",IDC_LABEL_TITLE,27,6,67,17,SS_CENTERIMAGE | NOT WS_VISIBLE
    LTEXT           "警告",IDC_LABEL_TITLE,27,6,212,17,SS_CENTERIMAGE | NOT WS_VISIBLE
    ICON            "",IDC_ICON_ALARM,29,28,20,20
    ICON            "",IDC_ICON_TITLE,7,8,20,20,NOT WS_VISIBLE
    LTEXT           "等级:--",IDC_LABEL_LEVEL,75,26,118,18
    LTEXT           "等级:--",IDC_LABEL_LEVEL,75,26,161,18
    LTEXT           "警告名称",IDC_LABEL_NAME,120,45,251,24
    PUSHBUTTON      "",IDC_POPUP_BTN_CLOSE,354,0,24,22
    CONTROL         "Custom1",IDC_LINE1,"BYHorizontalLine",WS_TABSTOP,7,78,364,8
@@ -852,7 +852,7 @@
    PUSHBUTTON      "异常解除",IDC_BUTTON_ALARM_OFF,304,216,68,22,WS_DISABLED
    CONTROL         "Custom1",IDC_LINE2,"BYHorizontalLine",WS_TABSTOP,7,202,364,8
    LTEXT           "警告描述:",IDC_LABEL_DESCRIPTION,18,98,329,89
    LTEXT           "当前没有警告", IDC_LABEL_NO_ALARM, 18, 98, 329, 89, SS_CENTER | SS_CENTERIMAGE | NOT WS_VISIBLE
    CTEXT           "当前没有警告",IDC_LABEL_NO_ALARM,18,98,329,89,SS_CENTERIMAGE | NOT WS_VISIBLE
END
@@ -1633,6 +1633,8 @@
    END
    POPUP "测试(&T)"
    BEGIN
        MENUITEM "Test1",                       ID_MENU_TEST_ALARM_ON
        MENUITEM "Test2",                       ID_MENU_TEST_ALARM_OFF
        MENUITEM "Message &Set",                ID_MENU_TEST_MESSAGE_SET
        MENUITEM "Message &Clear",              ID_MENU_TEST_MESSAGE_CLEAR
    END
SourceCode/Bond/Servo/ServoDlg.cpp
@@ -140,6 +140,10 @@
    ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SECSTEST, &CServoDlg::OnUpdateMenuFileSecsTest)
    ON_COMMAND(ID_MENU_PROJECT_VARIABLE_LIST, &CServoDlg::OnMenuProjectVarialbleList)
    ON_UPDATE_COMMAND_UI(ID_MENU_PROJECT_VARIABLE_LIST, &CServoDlg::OnUpdateMenuProjectVarialbleList)
    ON_COMMAND(ID_MENU_TEST_ALARM_ON, &CServoDlg::OnMenuTestAlarmOn)
    ON_UPDATE_COMMAND_UI(ID_MENU_TEST_ALARM_ON, &CServoDlg::OnUpdateMenuTestAlarmOn)
    ON_COMMAND(ID_MENU_TEST_ALARM_OFF, &CServoDlg::OnMenuTestAlarmOff)
    ON_UPDATE_COMMAND_UI(ID_MENU_TEST_ALARM_OFF, &CServoDlg::OnUpdateMenuTestAlarmOff)
    ON_COMMAND(ID_MENU_TEST_MESSAGE_SET, &CServoDlg::OnMenuTestMessageSet)
    ON_UPDATE_COMMAND_UI(ID_MENU_TEST_MESSAGE_SET, &CServoDlg::OnUpdateMenuTestMessageSet)
    ON_COMMAND(ID_MENU_TEST_MESSAGE_CLEAR, &CServoDlg::OnMenuTestMessageClear)
@@ -815,6 +819,26 @@
    pCmdUI->Enable(TRUE);
}
void CServoDlg::OnMenuTestAlarmOn()
{
    RaiseTestAlarm();
}
void CServoDlg::OnUpdateMenuTestAlarmOn(CCmdUI* pCmdUI)
{
    pCmdUI->Enable(TRUE);
}
void CServoDlg::OnMenuTestAlarmOff()
{
    ClearTestAlarm();
}
void CServoDlg::OnUpdateMenuTestAlarmOff(CCmdUI* pCmdUI)
{
    pCmdUI->Enable(TRUE);
}
void CServoDlg::OnMenuTestMessageSet()
{
    SERVO::CEquipment* pEquipment = m_pPanelMaster->GetActiveEquipment();
@@ -1464,18 +1488,6 @@
BOOL CServoDlg::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN) {
        const bool ctrl = (GetKeyState(VK_CONTROL) & 0x8000) != 0;
        const bool alt = (GetKeyState(VK_MENU) & 0x8000) != 0;
        if (ctrl && alt && pMsg->wParam == 'T') {
            RaiseTestAlarm();
            return TRUE;
        }
        if (ctrl && alt && pMsg->wParam == 'Y') {
            ClearTestAlarm();
            return TRUE;
        }
    }
    return CDialogEx::PreTranslateMessage(pMsg);
}
SourceCode/Bond/Servo/ServoDlg.h
@@ -113,6 +113,10 @@
    afx_msg void OnUpdateMenuFileExit(CCmdUI* pCmdUI);
    afx_msg void OnMenuProjectVarialbleList();
    afx_msg void OnUpdateMenuProjectVarialbleList(CCmdUI* pCmdUI);
    afx_msg void OnMenuTestAlarmOn();
    afx_msg void OnUpdateMenuTestAlarmOn(CCmdUI* pCmdUI);
    afx_msg void OnMenuTestAlarmOff();
    afx_msg void OnUpdateMenuTestAlarmOff(CCmdUI* pCmdUI);
    afx_msg void OnMenuTestMessageSet();
    afx_msg void OnUpdateMenuTestMessageSet(CCmdUI* pCmdUI);
    afx_msg void OnMenuTestMessageClear();
SourceCode/Bond/Servo/resource.h
@@ -381,13 +381,15 @@
#define ID_MENU_TOOLS_CLIENT_LIST       32801
#define ID_MENU_WND_TEST_PANEL          32802
#define ID_MENU_WND_PRO_PANEL           32803
#define ID_MENU_TEST_ALARM_ON           32804
#define ID_MENU_TEST_ALARM_OFF          32805
// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        192
#define _APS_NEXT_COMMAND_VALUE         32804
#define _APS_NEXT_COMMAND_VALUE         32806
#define _APS_NEXT_CONTROL_VALUE         1273
#define _APS_NEXT_SYMED_VALUE           101
#endif