/** * @file UIFramework.h * @brief ServerÀÇ È­¸éÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â UIFramework °´Ã¼ * @remarks * @author °­µ¿¸í(edith2580@gmail.com) * @date 2009-05-09 */ #pragma once #include "UICmdEdit.h" #include "UICmdMsgView.h" #include namespace NaveServer { /// »õ·Î¿î Ä¿¸Çµå¸¦ Ãß°¡ÇÕ´Ï´Ù. /// ADD_COMMAND(_T("help"), CCmdHelp, L"È­¸é¿¡ Ä¿¸àµå¸®½ºÆ®¸¦ º¸¿©ÁÝ´Ï´Ù."); #define ADD_COMMAND(cmd, object, msg) AddCommand(cmd, new object, msg) /** * @class UICommand * @brief ¾îÇø®ÄÉÀ̼ǿ¡¼­ Ä¿¸Çµå¸¦ ÀÛ¼ºÇÒ¶§ »ç¿ëÇÒ Ä¿¸àµå °´Ã¼ * @remarks * * @par * @author Edith * @date 2009-05-09 */ class UICommand { public: virtual BOOL DoProcess(WCHAR* lpParam) = 0; }; /** * @class UICommandFactory * @brief Ä¿¸Çµå¸¦ °ü¸®ÇÏ´Â Factory °´Ã¼ ServerÀÇ ServerÀÇ UI°´Ã¼°¡ »ó¼Ó¹Þ´Â´Ù. * @remarks * * @par * @author Edith * @date 2009-05-09 */ class UICommandFactory { public: BOOL AddCommand(const WCHAR* szCommand, UICommand* lpCommand, const WCHAR* szMessage) { if(0 == szCommand, 0 == lpCommand) return FALSE; m_CMDVector.push_back(COMMAND(szCommand, lpCommand, szMessage)); return TRUE; } VOID ReleaseCommand() { int iSize = m_CMDVector.size(); for(int i = 0; i < iSize; ++i) { delete m_CMDVector[i].m_lpCMD; } m_CMDVector.clear(); } virtual VOID InitializeCommand() {}; virtual VOID StartCommand() {}; // UIConsolÇü½Ä Command ÀÔ·Â virtual VOID EndCommand() {}; VOID ShowCommand() { LOG_IMPORTANT( (L"------------------- Commands -------------------") ); int iSize = m_CMDVector.size(); for(int i = 0; i < iSize; ++i) { LOG_IMPORTANT((L"%s : %s", m_CMDVector[i].m_szCMD, m_CMDVector[i].m_szMSG)); } LOG_IMPORTANT( (L"----------------- Commands End -----------------") ); } VOID DoCommand(WCHAR* Command) { WCHAR Buff[DEF_BUFSIZE]; ZeroMemory(Buff, DEF_BUFSIZE); wcscpy(Buff, Command); WCHAR* cmd; cmd = wcstok(Command, L" "); if(cmd) { Nave::uint32 uiHash = Nave::Hash(cmd); WCHAR* NextCmd = &Buff[wcslen(cmd)+1]; int iSize = m_CMDVector.size(); for(int i = 0; i < iSize; ++i) { if(m_CMDVector[i].m_uiHash != uiHash) continue; m_CMDVector[i].m_lpCMD->DoProcess(NextCmd); return; } } } public: UICommandFactory() { } ~UICommandFactory() { ReleaseCommand(); } private: struct COMMAND { Nave::uint32 m_uiHash; WCHAR m_szCMD[32]; WCHAR m_szMSG[128]; UICommand* m_lpCMD; COMMAND(const WCHAR* szCommand, UICommand* lpCMD, const WCHAR* szMessage) { m_uiHash = Nave::Hash(szCommand); wcscpy(m_szCMD, szCommand); if(szMessage) wcscpy(m_szMSG, szMessage); else wcscpy(m_szMSG, L"No Help Message"); m_lpCMD = lpCMD; } }; typedef std::vector CMDVector; CMDVector m_CMDVector; }; /** * @class UIConsol * @brief ÄÜ¼Ö UI * @remarks * * @par * @author Edith * @date 2009-05-09 */ class UIConsol : public UICommandFactory { BOOL m_bCommandExit; public: // »ç¿ëÀÚ ¿ÀºêÁ§Æ®¸¦ ÃʱâÈ­ ÇÕ´Ï´Ù. (À©µµ¿ì¼³Á¤ÀÌ Á¾·á‰Â ÈÄ¿¡ È£Ãâ) virtual VOID InitObject() {}; // »ç¿ëÀÚ ¿ÀºêÁ§Æ®¸¦ »èÁ¦ÇÕ´Ï´Ù. (¸ÞÀηçÇÁ°¡ ²÷³­ÈÄ(EndProcessÈ£ÃâÈÄ) È£Ãâ) virtual VOID ReleaseObject() {}; BOOL Init(); virtual VOID InitializeCommand() {}; virtual VOID StartCommand(); // UIConsolÇü½Ä Command ÀÔ·Â virtual VOID EndCommand(); public: UIConsol(VOID); ~UIConsol(VOID); }; /** * @class UIWindow * @brief À©µµ¿ì UI * @remarks * * @par * @author Edith * @date 2009-05-09 */ class UIWindow : public UICommandFactory { public: HWND GetWnd() { return m_hMainWnd; } BOOL IsExit() { return m_bCommandExit; } // »ç¿ëÀÚ ¿ÀºêÁ§Æ®¸¦ ÃʱâÈ­ ÇÕ´Ï´Ù. (À©µµ¿ì¼³Á¤ÀÌ Á¾·á‰Â ÈÄ¿¡ È£Ãâ) virtual VOID InitObject() {}; // »ç¿ëÀÚ ¿ÀºêÁ§Æ®¸¦ »èÁ¦ÇÕ´Ï´Ù. (¸ÞÀηçÇÁ°¡ ²÷³­ÈÄ(EndProcessÈ£ÃâÈÄ) È£Ãâ) virtual VOID ReleaseObject() {}; virtual VOID ShowWindow(int nCmdShow); // Windows MsgProc virtual LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); BOOL Init(HINSTANCE hInstance, int nCmdShow, int iWidth, int iHeight, WCHAR* AppName, WCHAR* Icon); virtual VOID InitializeCommand() {}; virtual VOID StartCommand(); // UIConsolÇü½Ä Command ÀÔ·Â virtual VOID EndCommand(); public: UIWindow(VOID); ~UIWindow(VOID); private: HWND m_hMainWnd; BOOL m_bCommandExit; HFONT m_hFont; VOID ResizeWindows( VOID ); // WM_EDIT_RETURN virtual VOID OnEditReturn(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // WM_COMMAND virtual VOID OnCommand(HWND hWnd, INT nID, INT iEvent, LPARAM lParam) { return; } }; }