#include "StdAfx.h" #include "ViewMgr.h" #include "resource.h" #include "DisplayWnd.h" #include "Config.h" #include "MsgCenter.h" #include "ViewExten.h" #include "ViewTrunk.h" #include "ViewVoip.h" #include "ViewIvr.h" #include "ViewFax.h" SINGLETON_IMPLEMENT(CViewMgr) CViewMgr::CViewMgr(void) { } CViewMgr::~CViewMgr(void) { __free(); } /***************************************************************** **【函数名称】 __free **【函数功能】 释放资源 **【参数】 **【返回值】 ****************************************************************/ void CViewMgr::__free(void) { UINT Key = 0; CViewResBase *pView = NULL; POSITION pos = m_ViewMap.GetStartPosition(); while (pos != NULL) { m_ViewMap.GetNextAssoc(pos, Key, pView); if (pView != NULL) delete pView; } // end while m_ViewMap.RemoveAll(); } /***************************************************************** **【函数名称】 __showResView **【函数功能】 显示资源视图 **【参数】 **【返回值】 ****************************************************************/ void CViewMgr::__showResView(CViewResBase* pView) { if (m_ViewMap.IsEmpty()) return; ViewMap::CPair* pPair = m_ViewMap.PGetFirstAssoc(); ASSERT(pPair != NULL); pView->showTogether(pPair->value); } /***************************************************************** **【函数名称】 __procResType **【函数功能】 设备资源类型初始化函数 **【参数】 Type 设备资源类型 **【返回值】 ****************************************************************/ void CViewMgr::procResType(UINT Type) { CViewResBase* pView = NULL; UINT NameId; UINT ListId; if (m_ViewMap.Lookup(Type, pView)) // ych { return; } switch (Type) { case DEV_RES_TYPE_EXT: // 内线 { pView = new CViewExten(); m_ViewRes.newRes(DEV_RES_TYPE_EXT); NameId = IDS_STR_VIEW_EXT; ListId = IDC_LIST_EXT; m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_EXT, IDS_STR_VIEW_EXT); } break; case DEV_RES_TYPE_TRUNK: // 外线 { pView = new CViewTrunk(); m_ViewRes.newRes(DEV_RES_TYPE_TRUNK); NameId = IDS_STR_VIEW_TRUNK; ListId = IDC_LIST_TRUNK; m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_TRUNK, IDS_STR_VIEW_TRUNK); } break; case DEV_RES_TYPE_VOIP: // VoIP { pView = new CViewVoip(); m_ViewRes.newRes(DEV_RES_TYPE_VOIP); NameId = IDS_STR_VIEW_VOIP; ListId = IDC_LIST_VOIP; m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_VOIP, IDS_STR_VIEW_VOIP); } break; case DEV_RES_TYPE_IVR: // IVR线路 { pView = new CViewIvr(); m_ViewRes.newRes(DEV_RES_TYPE_IVR); NameId = IDS_STR_VIEW_IVR; ListId = IDC_LIST_IVR; m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_IVR, IDS_STR_VIEW_IVR); } break; case DEV_RES_TYPE_FAX: // 传真 { pView = new CViewFax(); m_ViewRes.newRes(DEV_RES_TYPE_FAX); NameId = IDS_STR_VIEW_FAX; ListId = IDC_LIST_FAX; m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_FAX, IDS_STR_VIEW_FAX); } break; //case DEV_RES_TYPE_CONFERENCE: // 会议 // { // pView = new CViewMeeting(); // m_ViewRes.newRes(DEV_RES_TYPE_CONFERENCE); // NameId = IDS_STR_VIEW_MEETING; // ListId = IDC_LIST_MEETING; // m_pWnd->InsertMenuItem(ID_MENU_LOG, ID_MENU_VIEW_MEETING, IDS_STR_VIEW_MEETING); // } // break; default: break; } // end switch // 生成并存储设备资源类型节点 if (pView != NULL) { pView->create(m_pWnd, NameId, ListId); __showResView(pView); m_ViewMap.SetAt(Type, pView); } } /***************************************************************** **【函数名称】 __procResDetail **【函数功能】 资源明细处理函数 **【参数】 pResDetail 资源明细 **【返回值】 ****************************************************************/ void CViewMgr::__procResDetail(EventResDetail *pResDetail) { ASSERT(pResDetail != NULL); CViewResBase* pView = NULL; if (m_ViewMap.Lookup(pResDetail->nResType, pView)) { ASSERT(pView != NULL); pView->onResDetail(pResDetail); } } /***************************************************************** **【函数名称】 __procResState **【函数功能】 资源状态变化处理函数 **【参数】 pResStatus 资源状态 **【返回值】 ****************************************************************/ void CViewMgr::__procResState(EventResStatus *pResStatus) { ASSERT(pResStatus != NULL); CViewResBase* pView = NULL; if (m_ViewMap.Lookup(pResStatus->nResType, pView)) { ASSERT(pView != NULL); pView->onResState(pResStatus); } } /***************************************************************** **【函数名称】 setup **【函数功能】 视图管理器创建 **【参数】 **【返回值】 ****************************************************************/ bool CViewMgr::setup(CDisplayWnd* pWnd) { ASSERT(pWnd != NULL); m_pWnd = pWnd; if (!m_ViewLog.create(pWnd)) { AfxMessageBox(_T("日志视图创建失败!")); return false; } ILogger::getInstance().init(&m_ViewLog, LOG_DEV_CTI, CConfig::GetInstance().logFilePath()); ILogger::getInstance().start(); if (!m_ViewRes.create(pWnd)) { AfxMessageBox(_T("设备资源视图创建失败!")); return false; } CMsgCenter& MsgCenter = CMsgCenter::GetInstance(); MsgCenter.regist(DEV_EVENT_RES_TYPE, this); MsgCenter.regist(DEV_EVENT_RES_DETAIL, this); MsgCenter.regist(DEV_EVENT_RES_STATUS, this); return true; } /***************************************************************** **【函数名称】 showResView **【函数功能】 显示指定资源视图 **【参数】 **【返回值】 ****************************************************************/ bool CViewMgr::showResView(UINT ResType) { CViewResBase* pView = NULL; if (m_ViewMap.Lookup(ResType, pView)) { ASSERT(pView != NULL); pView->show(); return true; } else return false; } /***************************************************************** **【函数名称】 onMessage **【函数功能】 消息事件处理函数 **【参数】 MsgType: 消息事件类型 lpContent: 消息内容 **【返回值】 ****************************************************************/ void CViewMgr::onMessage(UINT MsgType, const PARAM lpContent) { if (lpContent == NULL) return; switch (MsgType) { case DEV_EVENT_RES_TYPE: // 设备资源类型 { EventResType* pResType = (EventResType*)lpContent; #ifdef _USE_EHANGCOM AfxGetMainWnd()->PostMessage(WM_CORE_EVENT, CORE_EVENT_DEV_RES_TYPE, pResType->nResType); #else AfxGetMainWnd()->SendMessage(WM_CORE_EVENT, CORE_EVENT_DEV_RES_TYPE, pResType->nResType); #endif } break; case DEV_EVENT_RES_DETAIL: // 设备资源明细 { EventResDetail* pResDetail = (EventResDetail*)lpContent; __procResDetail(pResDetail); } break; case DEV_EVENT_RES_STATUS: // 设备资源状态变化 { EventResStatus* pResStatus = (EventResStatus*)lpContent; __procResState(pResStatus); } break; default: break; } }