// BondEqDlg.cpp : ʵÏÖÎļþ // #include "stdafx.h" #include "BondEq.h" #include "BondEqDlg.h" #include "afxdialogex.h" #include "Common.h" #include "CBonder.h" #include "ToolUnits.h" #include "SettingsDlg.h" #include "InputDialog.h" #include "LoginDlg.h" #include "ChangePasswordDlg.h" #include "UserManagerDlg.h" #include "SystemLogManagerDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // ÓÃÓÚÓ¦ÓóÌÐò¡°¹ØÓÚ¡±²Ëµ¥ÏîµÄ CAboutDlg ¶Ô»°¿ò class CAboutDlg : public CDialogEx { public: CAboutDlg(); // ¶Ô»°¿òÊý¾Ý #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Ö§³Ö // ʵÏÖ protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CBondEqDlg ¶Ô»°¿ò CBondEqDlg::CBondEqDlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_BONDEQ_DIALOG, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_pObserver = nullptr; m_pPanelProject = nullptr; m_crBkgnd = APPDLG_BACKGROUND_COLOR; m_hbrBkgnd = nullptr; m_pTopToolbar = nullptr; m_pMainContainer = nullptr; m_pHomeDialog = nullptr; m_pActiveView = nullptr; m_pActiveComponentDlg = nullptr; m_pAlarmWnd = nullptr; } void CBondEqDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CBondEqDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_CLOSE() ON_WM_CTLCOLOR() ON_WM_DESTROY() ON_WM_SIZE() ON_COMMAND(ID_MENU_FILE_EXIT, &CBondEqDlg::OnMenuFileExit) ON_UPDATE_COMMAND_UI(ID_MENU_FILE_EXIT, &CBondEqDlg::OnUpdateMenuFileExit) ON_COMMAND(ID_MENU_FILE_SETTINGS, &CBondEqDlg::OnMenuFileSettings) ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SETTINGS, &CBondEqDlg::OnUpdateMenuFileSettings) ON_COMMAND(ID_MENU_HELP_ABOUT, &CBondEqDlg::OnMenuHelpAbout) ON_WM_INITMENUPOPUP() ON_MESSAGE(ID_MSG_VIEW_ACTIVE, &CBondEqDlg::OnViewActive) ON_MESSAGE(ID_MSG_BTN_CLICKED, &CBondEqDlg::OnViewBtnClicked) ON_MESSAGE(ID_MSG_BTN_MENU_ITEM, &CBondEqDlg::OnViewBtnMenuItem) ON_MESSAGE(ID_MSG_TOOLBAR_BTN_CLICKED, &CBondEqDlg::OnToolbarBtnClicked) ON_WM_TIMER() END_MESSAGE_MAP() // CBondEqDlg ÏûÏ¢´¦Àí³ÌÐò void CBondEqDlg::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_SELECT_EQ == code) { BEQ::IRemoteEquipment* pEquipment; if (pAny->getPtrValue("ptr", (void*&)pEquipment)) { if (m_pMainContainer != nullptr) { if (m_pActiveView != nullptr) { if (m_pActiveView->GetContext() != (void*)pEquipment) { m_pActiveView->DestroyWindow(); delete m_pActiveView; m_pActiveView = nullptr; } } if (m_pActiveView == nullptr) { m_pActiveView = CreateRemoteEqView(pEquipment); } } } } else if (RX_CODE_SELECT_COMPONENT == code) { CComponent* pComponent; if (pAny->getPtrValue("ptr", (void*&)pComponent)) { if (pComponent->getClassName().compare("CPLC") == 0) { if (m_pMainContainer != nullptr) { if (m_pActiveComponentDlg != nullptr) { if (m_pActiveComponentDlg->GetContext() != (void*)pComponent) { m_pActiveComponentDlg->DestroyWindow(); delete m_pActiveComponentDlg; m_pActiveComponentDlg = nullptr; } } if (m_pActiveComponentDlg == nullptr) { m_pActiveComponentDlg = CreateComponentPLCDlg(pComponent); } } } } } else if (code == RX_CODE_ALARM_ON) { AlarmOn(); CAlarmMonitor* pComponent = (CAlarmMonitor*)theApp.m_model.getBonder().GetComponent(ALARM_MONITOR); m_pTopToolbar->GetBtn(IDC_BUTTON_ALARM)->EnableWindow(pComponent->isAlarming()); } else if (code == RX_CODE_ALARM_OFF) { AlarmOff(); CAlarmMonitor* pComponent = (CAlarmMonitor*)theApp.m_model.getBonder().GetComponent(ALARM_MONITOR); m_pTopToolbar->GetBtn(IDC_BUTTON_ALARM)->EnableWindow(pComponent->isAlarming()); } pAny->release(); }, [&]() -> void { // onComplete }, [&](IThrowable* pThrowable) -> void { // onErrorm pThrowable->printf(); }); theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread()) ->subscribe(m_pObserver); } } BOOL CBondEqDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // ½«¡°¹ØÓÚ...¡±²Ëµ¥ÏîÌí¼Óµ½ÏµÍ³²Ëµ¥ÖС£ // IDM_ABOUTBOX ±ØÐëÔÚϵͳÃüÁΧÄÚ¡£ ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // ÉèÖô˶Ի°¿òµÄͼ±ê¡£ µ±Ó¦ÓóÌÐòÖ÷´°¿Ú²»ÊǶԻ°¿òʱ£¬¿ò¼Ü½«×Ô¶¯ // Ö´Ðд˲Ù×÷ SetIcon(m_hIcon, TRUE); // ÉèÖôóͼ±ê SetIcon(m_hIcon, FALSE); // ÉèÖÃСͼ±ê // ³õʼ»¯Óû§¹ÜÀí UserManager& userManager = UserManager::getInstance(); #if !defined(_DEBUG) userManager.initializeIdleDetection(AfxGetMainWnd()->m_hWnd); SetTimer(1, 60000, nullptr); #endif userManager.loadSession(); std::unique_ptr& db = userManager.getDatabaseInstance(); // ÉèÖÃÔËÐÐÈÕ־ģ¿éµÄÊý¾Ý¿âÁ¬½Ó SystemLogManager& logManager = SystemLogManager::getInstance(); logManager.setDatabase(db.get()); // ³õʼ»¯ÔËÐÐÈÕÖ¾±í try { if (!logManager.initializeLogTable()) { AfxMessageBox("³õʼ»¯ÏµÍ³ÈÕ־ģ¿éʧ°Ü£¡"); return FALSE; } } catch (const std::exception& ex) { CString errorMsg; errorMsg.Format(_T("³õʼ»¯ÏµÍ³ÈÕ־ģ¿éʧ°Ü£º%s"), CString(ex.what())); AfxMessageBox(errorMsg, MB_ICONERROR); return FALSE; } // ³õʼ»¯±¨¾¯Ä£¿é AlarmManager& alarmManager = AlarmManager::getInstance(); alarmManager.setDatabase(db.get()); try { if (!alarmManager.initializeAlarmTable()) { AfxMessageBox("³õʼ»¯±¨¾¯Ä£¿éʧ°Ü£¡"); return FALSE; } } catch (const std::exception& ex) { CString errorMsg; errorMsg.Format(_T("³õʼ»¯±¨¾¯Ä£¿éʧ°Ü£º%s"), CString(ex.what())); AfxMessageBox(errorMsg, MB_ICONERROR); return FALSE; } // ÉèÖÃÅä·½Îļþ¼Ð·¾¶ RecipeManager& recipeManager = RecipeManager::getInstance(); std::string strRecipePath = CToolUnits::getCurrentExePath() + _T("\\Recipe"); CToolUnits::createDir(strRecipePath.c_str()); recipeManager.setRecipeFolder(strRecipePath); // ²Ëµ¥ CMenu menu; menu.LoadMenu(IDR_MENU_APP); SetMenu(&menu); // model init theApp.m_model.init(); // toolbar m_pTopToolbar = new CTopToolbar(); m_pTopToolbar->Create(IDD_TOP_TOOLBAR, this); m_pTopToolbar->ShowWindow(SW_SHOW); m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(FALSE); m_pTopToolbar->GetBtn(IDC_BUTTON_ALARM)->EnableWindow(FALSE); HMENU hMenu = m_pTopToolbar->GetOperatorMenu(); ASSERT(hMenu); ::EnableMenuItem(hMenu, ID_OPEATOR_SWITCH, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); // Éè±¸Ãæ°å m_pPanelProject = new CPanelProject(); m_pPanelProject->Create(IDD_PANEL_PROJECT, this); m_pPanelProject->ShowWindow(SW_SHOW); // Ö÷´°¿ÚÒ³ m_pMainContainer = new CMainContainer(); m_pMainContainer->Create(IDD_MAIN_CONTAINER, this); m_pMainContainer->ShowWindow(SW_SHOW); // HomeÒ³ m_pHomeDialog = CreateHomeDlg(); ShowWindow(SW_SHOWMAXIMIZED); InitRxWindows(); // ¸üеǼ״̬ UpdateLoginStatus(); logManager.log(SystemLogManager::LogType::Info, _T("BondEqÆô¶¯...")); return TRUE; // ³ý·Ç½«½¹µãÉèÖõ½¿Ø¼þ£¬·ñÔò·µ»Ø TRUE } void CBondEqDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // Èç¹ûÏò¶Ô»°¿òÌí¼Ó×îС»¯°´Å¥£¬ÔòÐèÒªÏÂÃæµÄ´úÂë // À´»æÖƸÃͼ±ê¡£ ¶ÔÓÚʹÓÃÎĵµ/ÊÓͼģÐ굀 MFC Ó¦ÓóÌÐò£¬ // Õ⽫ÓÉ¿ò¼Ü×Ô¶¯Íê³É¡£ void CBondEqDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // ÓÃÓÚ»æÖƵÄÉ豸ÉÏÏÂÎÄ SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // ʹͼ±êÔÚ¹¤×÷Çø¾ØÐÎÖоÓÖÐ int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // »æÖÆÍ¼±ê dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //µ±Óû§Í϶¯×îС»¯´°¿Úʱϵͳµ÷Óô˺¯ÊýÈ¡µÃ¹â±ê //ÏÔʾ¡£ HCURSOR CBondEqDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CBondEqDlg::OnClose() { // TODO: ÔÚ´ËÌí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂëºÍ/»òµ÷ÓÃĬÈÏÖµ CBonder& bonder = theApp.m_model.getBonder(); if (bonder.isRunning()) { AfxMessageBox("³ÌÐòºÍ»úÆ÷ÕýÔÚÔËÐÐÖУ¬ÇëÏÈÍ£Ö¹¹¤×÷ÔÙÍ˳ö³ÌÐò£¡"); return; } CDialogEx::OnClose(); } HBRUSH CBondEqDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Ôڴ˸ü¸Ä DC µÄÈκÎÌØÐÔ // TODO: Èç¹ûĬÈϵIJ»ÊÇËùÐè»­±Ê£¬Ôò·µ»ØÁíÒ»¸ö»­±Ê return hbr; } void CBondEqDlg::OnDestroy() { CDialogEx::OnDestroy(); if (m_pTopToolbar != nullptr) { m_pTopToolbar->DestroyWindow(); delete m_pTopToolbar; m_pTopToolbar = nullptr; } if (m_pPanelProject != nullptr) { m_pPanelProject->DestroyWindow(); delete m_pPanelProject; m_pPanelProject = nullptr; } if (m_pMainContainer != nullptr) { m_pMainContainer->DestroyWindow(); delete m_pMainContainer; m_pMainContainer = nullptr; } if (m_pHomeDialog != nullptr) { m_pHomeDialog->DestroyWindow(); delete m_pHomeDialog; m_pHomeDialog = nullptr; } if (m_pActiveView != nullptr) { m_pActiveView->DestroyWindow(); delete m_pActiveView; m_pActiveView = nullptr; } if (m_pActiveComponentDlg != nullptr) { m_pActiveComponentDlg->DestroyWindow(); delete m_pActiveComponentDlg; m_pActiveComponentDlg = nullptr; } if (m_hbrBkgnd != nullptr) { ::DeleteObject(m_hbrBkgnd); } if (m_pAlarmWnd != nullptr) { m_pAlarmWnd->DestroyWindow(); delete m_pAlarmWnd; } ASSERT(m_pObserver != NULL); m_pObserver->unsubscribe(); m_pObserver = NULL; #if !defined(_DEBUG) // Çå³ý UserManager µÄÎÞ²Ù×÷¼ì²â UserManager::getInstance().terminateIdleDetection(); KillTimer(1); #endif SystemLogManager::getInstance().log(SystemLogManager::LogType::Info, _T("BondEq¹Ø±Õ...")); } void CBondEqDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); if (m_pPanelProject == nullptr) return; Resize(); } #define TOOLBAR_HEIGHT 78 void CBondEqDlg::Resize() { CRect rcClient, rcItem; GetClientRect(&rcClient); int y = 0; m_pTopToolbar->MoveWindow(0, 0, rcClient.Width(), TOOLBAR_HEIGHT); y += TOOLBAR_HEIGHT; ASSERT(m_pPanelProject); int nPanelEquipmentWidth = m_pPanelProject->GetPanelWidth(); m_pPanelProject->MoveWindow(0, y, nPanelEquipmentWidth, rcClient.bottom - y); int x = nPanelEquipmentWidth; m_pMainContainer->MoveWindow(x + 1, y, rcClient.Width() - x - 0, rcClient.bottom - y - 2); } void CBondEqDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) { ASSERT(pPopupMenu != NULL); CCmdUI state; state.m_pMenu = pPopupMenu; ASSERT(state.m_pOther == NULL); ASSERT(state.m_pParentMenu == NULL); HMENU hParentMenu; if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu) state.m_pParentMenu = pPopupMenu; else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL) { CWnd* pParent = this; if (pParent != NULL && (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL) { int nIndexMax = ::GetMenuItemCount(hParentMenu); for (int nIndex = 0; nIndex < nIndexMax; nIndex++) { if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu) { state.m_pParentMenu = CMenu::FromHandle(hParentMenu); break; } } } } state.m_nIndexMax = pPopupMenu->GetMenuItemCount(); for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax; state.m_nIndex++) { state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex); if (state.m_nID == 0) continue; ASSERT(state.m_pOther == NULL); ASSERT(state.m_pMenu != NULL); if (state.m_nID == (UINT)-1) { state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex); if (state.m_pSubMenu == NULL || (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 || state.m_nID == (UINT)-1) { continue; } state.DoUpdate(this, TRUE); } else { state.m_pSubMenu = NULL; state.DoUpdate(this, FALSE); } UINT nCount = pPopupMenu->GetMenuItemCount(); if (nCount < state.m_nIndexMax) { state.m_nIndex -= (state.m_nIndexMax - nCount); while (state.m_nIndex < nCount && pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID) { state.m_nIndex++; } } state.m_nIndexMax = nCount; } } void CBondEqDlg::OnMenuFileSettings() { CSettingsDlg dlg; dlg.DoModal(); } void CBondEqDlg::OnUpdateMenuFileSettings(CCmdUI* pCmdUI) { pCmdUI->Enable(!theApp.m_model.getBonder().isRunning()); } void CBondEqDlg::OnMenuFileExit() { PostMessage(WM_CLOSE); } void CBondEqDlg::OnUpdateMenuFileExit(CCmdUI* pCmdUI) { pCmdUI->Enable(!theApp.m_model.getBonder().isRunning()); } void CBondEqDlg::OnMenuHelpAbout() { CAboutDlg dlgAbout; dlgAbout.DoModal(); } BOOL CBondEqDlg::PreTranslateMessage(MSG* pMsg) { if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { return TRUE; } return CDialogEx::PreTranslateMessage(pMsg); } LRESULT CBondEqDlg::OnViewActive(WPARAM wParam, LPARAM lParam) { CBaseView* pView = (CBaseView*)wParam; int code = (int)lParam; if (code == MA_ACTIVATE || code == MA_ACTIVATEANDEAT) { } return 0; } LRESULT CBondEqDlg::OnViewBtnClicked(WPARAM wParam, LPARAM lParam) { int id = (int)lParam; if (id == VIEW_TOOL_BTN_CLOSE) { CloseView((CComponentDlg*)wParam); } return 0; } LRESULT CBondEqDlg::OnToolbarBtnClicked(WPARAM wParam, LPARAM lParam) { int id = (int)lParam; SystemLogManager& logManager = SystemLogManager::getInstance(); if (id == IDC_BUTTON_RUN || id == IDC_BUTTON_STOP || id == IDC_BUTTON_SETTINGS) { CInputDialog inputDialog(_T("ÑéÖ¤Óû§"), _T("ÇëÊäÈëÓû§ÃÜÂ룺")); if (inputDialog.DoModal() != IDOK) { AfxMessageBox(_T("È¡ÏûÑéÖ¤£¡")); return 0; } /* CString inputText = inputDialog.GetInputText(); std::string strPass = UserManager::getInstance().getCurrentPass(); if (inputText.Compare(strPass.c_str()) != 0) { AfxMessageBox(_T("ÃÜÂë´íÎó£¡")); logManager.log(SystemLogManager::LogType::Info, _T("Ñé֤ʱ£¬ÃÜÂë´íÎó£¡")); return 0; } */ } if (id == IDC_BUTTON_RUN) { theApp.m_model.getBonder().start(); m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(FALSE); m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(TRUE); logManager.log(SystemLogManager::LogType::Operation, _T("ÔËÐÐ...")); } else if (id == IDC_BUTTON_STOP) { theApp.m_model.getBonder().stop(); m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(TRUE); m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(FALSE); logManager.log(SystemLogManager::LogType::Operation, _T("Í£Ö¹...")); } else if (id == IDC_BUTTON_ALARM) { AlarmOn(); } else if (id == IDC_BUTTON_SETTINGS) { CSettingsDlg dlg; dlg.DoModal(); } else if (id == IDC_BUTTON_OPERATOR) { int menuId = (int)wParam; UserManager& userManager = UserManager::getInstance(); if (menuId == 0) { CLoginDlg loginDlg; loginDlg.DoModal(); } else if (1 == menuId) { CChangePasswordDlg changePasswordDlg; changePasswordDlg.DoModal(); } else if (2 == menuId) { CUserManagerDlg dlg; if (dlg.DoModal()!= IDOK) { logManager.log(SystemLogManager::LogType::Operation, _T("Óû§¹ÜÀíµÄÔ¤²Ù×÷±»È¡Ïû£¡")); } } else if (3 == menuId) { CSystemLogManagerDlg dlg; dlg.DoModal(); } else if (4 == menuId) { int ret = AfxMessageBox(_T("ÊÇ·ñÇл»Óû§£¿Çл»Óû§»áÍ˳öµ±Ç°Õ˺ţ¡"), MB_OKCANCEL | MB_ICONEXCLAMATION); if (ret != IDOK) { return 0; } logManager.log(SystemLogManager::LogType::Operation, _T("È·ÈÏÇл»½ÇÉ«£¡")); if (userManager.isLoggedIn()) { logManager.log(SystemLogManager::LogType::Info, _T("Í˳öµÇ¼£¡")); userManager.logout(); } CLoginDlg loginDlg; loginDlg.DoModal(); } else { CString cstrMessage; cstrMessage.Format(_T("ÊÇ·ñÍ˳öÓû§ [%s]£¿"), userManager.getCurrentUser().c_str()); int ret = AfxMessageBox(_T(cstrMessage), MB_OKCANCEL | MB_ICONEXCLAMATION); if (ret != IDOK) { return 0; } logManager.log(SystemLogManager::LogType::Info, _T("Í˳öµÇ¼£¡")); userManager.logout(); } UpdateLoginStatus(); } return 0; } LRESULT CBondEqDlg::OnViewBtnMenuItem(WPARAM wParam, LPARAM lParam) { UINT id = (UINT)lParam; return 0; } void CBondEqDlg::CloseView(CBaseView* pView) { pView->DestroyWindow(); delete (CBaseView*)pView; m_pActiveView = nullptr; m_pMainContainer->Resize(); } void CBondEqDlg::CloseView(CComponentDlg* pView) { pView->DestroyWindow(); delete pView; m_pActiveComponentDlg = nullptr; m_pMainContainer->Resize(); } CHomeDialog* CBondEqDlg::CreateHomeDlg() { CHomeDialog* pDlg = new CHomeDialog(m_pMainContainer); pDlg->Create(IDD_DIALOG_HOME, m_pMainContainer); ::SetProp(pDlg->GetSafeHwnd(), _T("Home"), (HANDLE)(void*)1); m_pMainContainer->Resize(); return pDlg; } void CBondEqDlg::OnTimer(UINT_PTR nIDEvent) { if (1 == nIDEvent) { UserManager& userManager = UserManager::getInstance(); if (userManager.isLoggedIn()) { if (userManager.isInactiveTimeout()) { AfxMessageBox(_T("You have been logged out automatically due to a long period of no action.")); userManager.logout(); } } } CDialogEx::OnTimer(nIDEvent); } CBaseView* CBondEqDlg::CreateRemoteEqView(BEQ::IRemoteEquipment* pEquipment) { CBaseView* pDlg = new CRemoteEqView(m_pMainContainer); pDlg->Create(IDD_COMPONENT_REMOTE_EQ, m_pMainContainer); pDlg->SetContext(pEquipment); CString strIcon0, strIcon1, strIcon2, strIcon3; strIcon0.Format(_T("%s\\Res\\small_close0.ico"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); strIcon1.Format(_T("%s\\Res\\small_close1.ico"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); strIcon2.Format(_T("%s\\Res\\small_close2.ico"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); strIcon3.Format(_T("%s\\Res\\small_close3.ico"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); pDlg->AddToolBtn(VIEW_TOOL_BTN_CLOSE, (LPTSTR)(LPCTSTR)strIcon0, (LPTSTR)(LPCTSTR)strIcon1, (LPTSTR)(LPCTSTR)strIcon2, (LPTSTR)(LPCTSTR)strIcon3, "¹Ø±Õ"); pDlg->ShowWindow(SW_SHOW); char szName[256]; pEquipment->getName(szName, 256); pDlg->SetWindowText(szName); m_pMainContainer->Resize(); return pDlg; } void CBondEqDlg::UpdateLoginStatus() { HMENU hMenu = m_pTopToolbar->GetOperatorMenu(); UserManager& userManager = UserManager::getInstance(); if (userManager.isLoggedIn()) { ::EnableMenuItem(hMenu, ID_OPEATOR_LOGIN, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); ::EnableMenuItem(hMenu, ID_OPERATOR_CHANGE_PASSWORD, MF_BYCOMMAND | MF_ENABLED); ::EnableMenuItem(hMenu, ID_OPERATOR_SYSTEM_LOG, MF_BYCOMMAND | MF_ENABLED); ::EnableMenuItem(hMenu, ID_OPEATOR_SWITCH, MF_BYCOMMAND | MF_ENABLED); ::EnableMenuItem(hMenu, ID_OPERATOR_LOGOUT, MF_BYCOMMAND | MF_ENABLED); if (userManager.getCurrentUserRole() == UserRole::SuperAdmin) { ::EnableMenuItem(hMenu, ID_OPEATOR_USER_MANAGER, MF_BYCOMMAND | MF_ENABLED); } else { ::EnableMenuItem(hMenu, ID_OPEATOR_USER_MANAGER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); } m_pTopToolbar->SetOperatorBtnText(userManager.getCurrentUser().c_str()); } else { ::EnableMenuItem(hMenu, ID_OPEATOR_LOGIN, MF_BYCOMMAND | MF_ENABLED); ::EnableMenuItem(hMenu, ID_OPERATOR_CHANGE_PASSWORD, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); ::EnableMenuItem(hMenu, ID_OPEATOR_USER_MANAGER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); ::EnableMenuItem(hMenu, ID_OPERATOR_SYSTEM_LOG, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); ::EnableMenuItem(hMenu, ID_OPEATOR_SWITCH, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); ::EnableMenuItem(hMenu, ID_OPERATOR_LOGOUT, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); m_pTopToolbar->SetOperatorBtnText(_T("δµÇ¼")); } } CComponentPLCDlg* CBondEqDlg::CreateComponentPLCDlg(CComponent* pComponent) { CComponentPLCDlg* pDlg = new CComponentPLCDlg(m_pMainContainer); pDlg->SetContext(pComponent); pDlg->Create(IDD_COMPONENT_PLC, m_pMainContainer); CString strIcon0, strIcon1, strIcon2, strIcon3; strIcon0.Format(_T("%s\\Res\\small_close0.ico"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); strIcon1.Format(_T("%s\\Res\\small_close1.ico"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); strIcon2.Format(_T("%s\\Res\\small_close2.ico"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); strIcon3.Format(_T("%s\\Res\\small_close3.ico"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); pDlg->AddToolBtn(VIEW_TOOL_BTN_CLOSE, (LPTSTR)(LPCTSTR)strIcon0, (LPTSTR)(LPCTSTR)strIcon1, (LPTSTR)(LPCTSTR)strIcon2, (LPTSTR)(LPCTSTR)strIcon3, "¹Ø±Õ"); pDlg->ShowWindow(SW_SHOW); pDlg->SetWindowText(pComponent->getName().c_str()); m_pMainContainer->Resize(); return pDlg; } void CBondEqDlg::AlarmOn() { if (m_pAlarmWnd == nullptr) { m_pAlarmWnd = new CAlarmPopupDlg(); m_pAlarmWnd->Create(IDD_DIALOG_POPUP_ALARM, this); m_pAlarmWnd->CenterWindow(); } m_pAlarmWnd->AlarmOn(); } void CBondEqDlg::AlarmOff() { if (m_pAlarmWnd == nullptr) { m_pAlarmWnd = new CAlarmPopupDlg(); m_pAlarmWnd->Create(IDD_DIALOG_POPUP_ALARM, this); m_pAlarmWnd->CenterWindow(); } m_pAlarmWnd->AlarmOff(); }