SourceCode/Bond/Servo/CPageVarialbles.cpp
@@ -5,6 +5,7 @@
#include "Servo.h"
#include "CPageVarialbles.h"
#include "afxdialogex.h"
#include "CVariableEditDlg2.h"
// CPageVarialbles 对话框
@@ -32,6 +33,7 @@
   ON_WM_CTLCOLOR()
   ON_WM_DESTROY()
   ON_WM_SIZE()
   ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CPageVarialbles::OnLvnItemchangedList1)
END_MESSAGE_MAP()
@@ -108,7 +110,6 @@
   if (GetDlgItem(IDC_LIST1) == nullptr) return;
   CWnd* pItem;
   CRect rcClient, rcItem;
   GetClientRect(&rcClient);
   m_listCtrl.MoveWindow(12, 12, rcClient.Width() - 24, rcClient.Height() - 24);
@@ -131,3 +132,112 @@
      m_listCtrl.SetItemText(index, 4, item->getRemark().c_str());
   }
}
void CPageVarialbles::OnCreateBtns()
{
   const int BTN_W = 80;
   const int BTN_H = 28;
   CreateBtn(_T("新增"), BTN_W, BTN_H, 1001);
   CreateBtn(_T("删除"), BTN_W, BTN_H, 1002)->EnableWindow(FALSE);
   CreateBtn(_T("编辑"), BTN_W, BTN_H, 1003)->EnableWindow(FALSE);
}
void CPageVarialbles::OnLvnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
{
   LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
   int nSelCount = m_listCtrl.GetSelectedCount();
   // 根据选中状态启用/禁用按钮
   if (CButton* pDel = GetBtnByName("删除")) {
      pDel->EnableWindow(nSelCount > 0);
   }
   if (CButton* pEdit = GetBtnByName("编辑")) {
      pEdit->EnableWindow(nSelCount > 0);
   }
   *pResult = 0;
}
void CPageVarialbles::OnClickedBtn(const char* btnName)
{
   ASSERT(btnName);
   if (_strcmpi(btnName, "新增") == 0) {
      int rc = UX_CanExecute(L"addVarialbles");
      if (rc != 1) {
         AfxMessageBox("操作权限不足,请联系管理人员!");
         return;
      }
      unsigned int newId = theApp.m_model.m_hsmsPassive.getMaxVariableId();
      int newIdInt = static_cast<int>(newId + 1);
      CVariableEditDlg2 dlg(_T("新增变量"), newIdInt, _T("U1"), _T(""), _T(""), this);
      if (dlg.DoModal() != IDOK) return;
      CString name = dlg.GetNameText();
      CString fmt = dlg.GetTypeText();
      CString remark = dlg.GetRemark();
      int ret = theApp.m_model.m_hsmsPassive.addVariable(CT2A(name), CT2A(fmt), CT2A(remark), newIdInt);
      if (ret == 0) {
         UX_RecordAction(L"addVarialbles");
         m_listCtrl.DeleteAllItems();
         loadVariables();
      }
      else {
         AfxMessageBox(_T("新增变量失败,格式是否正确?(U1/U2/I2/A20/A50/L)"));
      }
   }
   else if (_strcmpi(btnName, "删除") == 0) {
      POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
      if (pos == nullptr) return;
      int nItem = m_listCtrl.GetNextSelectedItem(pos);
      auto pVar = reinterpret_cast<SERVO::CVariable*>(m_listCtrl.GetItemData(nItem));
      if (pVar == nullptr) return;
      int rc = UX_CanExecute(L"delVarialbles");
      if (rc != 1) {
         AfxMessageBox("操作权限不足,请联系管理人员!");
         return;
      }
      int ret = theApp.m_model.m_hsmsPassive.deleteVariable(pVar->getVarialbleId());
      if (ret == 0) {
         UX_RecordAction(L"delVarialbles");
         m_listCtrl.DeleteAllItems();
         loadVariables();
         if (CButton* pDel = GetBtnByName("删除")) pDel->EnableWindow(FALSE);
         if (CButton* pEdit = GetBtnByName("编辑")) pEdit->EnableWindow(FALSE);
      }
   }
   else if (_strcmpi(btnName, "编辑") == 0) {
      POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
      if (pos == nullptr) return;
      int nItem = m_listCtrl.GetNextSelectedItem(pos);
      auto pVar = reinterpret_cast<SERVO::CVariable*>(m_listCtrl.GetItemData(nItem));
      if (pVar == nullptr) return;
      int rc = UX_CanExecute(L"editVarialbles");
      if (rc != 1) {
         AfxMessageBox("操作权限不足,请联系管理人员!");
         return;
      }
      CVariableEditDlg2 dlg(_T("编辑变量"),
         pVar->getVarialbleId(),
         CString(CA2T(SERVO::CVariable::formatToString(pVar->getFormat()).c_str())),
         CString(CA2T(pVar->getName().c_str())),
         CString(CA2T(pVar->getRemark().c_str())),
         this);
      if (dlg.DoModal() != IDOK) return;
      CString name = dlg.GetNameText();
      CString fmt = dlg.GetTypeText();
      CString remark = dlg.GetRemark();
      int ret = theApp.m_model.m_hsmsPassive.updateVariable(pVar->getVarialbleId(), CT2A(name), CT2A(fmt), CT2A(remark));
      if (ret == 0) {
         UX_RecordAction(L"editVarialbles");
         m_listCtrl.DeleteAllItems();
         loadVariables();
      }
      else {
         AfxMessageBox(_T("编辑变量失败,格式是否正确?(U1/U2/I2/A20/A50/L)"));
      }
   }
}