mrDarker
2025-05-14 0d2da4a2507a5a8d34bf7f736727917d791df0d2
SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -22,6 +22,7 @@
   m_pEqsGraphWnd = nullptr;
   m_crBkgnd = PAGE_GRPAH2_BACKGROUND_COLOR;
   m_hbrBkgnd = nullptr;
   m_pObserver = nullptr;
}
CPageGraph2::~CPageGraph2()
@@ -45,9 +46,44 @@
// CPageGraph2 消息处理程序
void CPageGraph2::InitRxWindows()
{
   /* code */
   // 订阅数据
   IRxWindows* pRxWindows = RX_GetRxWindows();
   pRxWindows->enableLog(5);
   if (m_pObserver == NULL) {
      m_pObserver = pRxWindows->allocObserver([&](IAny* pAny) -> void {
         // onNext
         pAny->addRef();
         int code = pAny->getCode();
         if (RX_CODE_EQ_DATA_CHANGED == code) {
            // 通知设备状态
            SERVO::CEquipment* pEquipment = nullptr;
            if (pAny->getPtrValue("ptr", (void*&)pEquipment)) {
               if (pEquipment != nullptr) {
                  m_pEqsGraphWnd->ShowItemIndicator((DWORD_PTR)pEquipment, !pEquipment->isGlassListEmpty());
               }
            }
         }
         pAny->release();
         }, [&]() -> void {
            // onComplete
         }, [&](IThrowable* pThrowable) -> void {
            // onErrorm
            pThrowable->printf();
         });
      theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread())
         ->subscribe(m_pObserver);
   }
}
BOOL CPageGraph2::OnInitDialog()
{
   CDialogEx::OnInitDialog();
   InitRxWindows();
   SetTimer(1, 2000, nullptr);
@@ -154,11 +190,14 @@
      // 测试
      else if (nCmd == ID_EQSGRAPHITEM_TEST1) {
         SERVO::CEquipment* pEquipment = (SERVO::CEquipment*)pItem->pData;
         pEquipment->outputGlass(0);
         if (pEquipment->getID() == EQ_ID_LOADPORT1) {
            pEquipment->outputGlass(1);
         }
         pEquipment->fetchedOutJob("P20250320A1A2");
      }
      else if (nCmd == ID_EQSGRAPHITEM_TEST2) {
         SERVO::CEquipment* pEquipment = (SERVO::CEquipment*)pItem->pData;
         pEquipment->outputGlass(1);
         pEquipment->storedJob("P20250320A1A2");
      }
      else if (nCmd == ID_EQSGRAPHITEM_TEST3) {
         SERVO::CEquipment* pEquipment = (SERVO::CEquipment*)pItem->pData;
@@ -216,13 +255,13 @@
         }
         */
         
         /*
         if (pEquipment->getID() == EQ_ID_Bonder1
            || pEquipment->getID() == EQ_ID_Bonder2) {
            static int ii = 0; ii++;
            pEquipment->setEqMode((ii % 5) + 1);
         }
         */
         /*
         SERVO::CGlass* pGlass = pEquipment->getFrontGlass();
@@ -290,6 +329,11 @@
   if (m_hbrBkgnd != nullptr) {
      ::DeleteObject(m_hbrBkgnd);
   }
   if (m_pObserver != nullptr) {
      m_pObserver->unsubscribe();
      m_pObserver = NULL;
   }
}
@@ -325,6 +369,8 @@
   for (auto outPin : outPins) {
      m_pEqsGraphWnd->AddPin(pItem, OUTPIN, outPin->getName().c_str(), (DWORD_PTR)outPin);
   }
   m_pEqsGraphWnd->ShowItemIndicator((DWORD_PTR)pEquipment, !pEquipment->isGlassListEmpty());
}
void CPageGraph2::OnTimer(UINT_PTR nIDEvent)
@@ -358,6 +404,9 @@
   std::list<SERVO::CEquipment*>& eqs = theApp.m_model.m_master.getEquipmentList();
   for (auto item : eqs) {
      EQITEM* pEqItem = m_pEqsGraphWnd->GetItem((DWORD_PTR)item);
      if (nullptr == pEqItem) {
         continue;
      }
      strValue.Format(_T("%d"), pEqItem->rect.left);
      WritePrivateProfileString(item->getName().c_str(), _T("Left"),