PPageWebServer.cpp
上传用户:tangyu_668
上传日期:2014-02-27
资源大小:678k
文件大小:6k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2006 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. // PPageWebServer.cpp : implementation file
  22. //
  23. #include "stdafx.h"
  24. #include "mplayerc.h"
  25. #include "MainFrm.h"
  26. #include "PPageWebServer.h"
  27. // CPPageWebServer dialog
  28. IMPLEMENT_DYNAMIC(CPPageWebServer, CPPageBase)
  29. CPPageWebServer::CPPageWebServer()
  30. : CPPageBase(CPPageWebServer::IDD, CPPageWebServer::IDD)
  31. , m_fEnableWebServer(FALSE)
  32. , m_nWebServerPort(0)
  33. , m_launch(_T("http://localhost:13579/"))
  34. , m_fWebServerPrintDebugInfo(FALSE)
  35. , m_fWebServerUseCompression(FALSE)
  36. , m_fWebRoot(FALSE)
  37. , m_WebRoot(_T(""))
  38. , m_fWebServerLocalhostOnly(FALSE)
  39. , m_WebServerCGI(_T(""))
  40. , m_WebDefIndex(_T(""))
  41. {
  42. }
  43. CPPageWebServer::~CPPageWebServer()
  44. {
  45. }
  46. void CPPageWebServer::DoDataExchange(CDataExchange* pDX)
  47. {
  48. __super::DoDataExchange(pDX);
  49. DDX_Check(pDX, IDC_CHECK1, m_fEnableWebServer);
  50. DDX_Text(pDX, IDC_EDIT1, m_nWebServerPort);
  51. DDX_Control(pDX, IDC_EDIT1, m_nWebServerPortCtrl);
  52. DDX_Control(pDX, IDC_STATIC1, m_launch);
  53. DDX_Check(pDX, IDC_CHECK2, m_fWebServerPrintDebugInfo);
  54. DDX_Check(pDX, IDC_CHECK3, m_fWebServerUseCompression);
  55. DDX_Check(pDX, IDC_CHECK4, m_fWebRoot);
  56. DDX_Text(pDX, IDC_EDIT2, m_WebRoot);
  57. DDX_Check(pDX, IDC_CHECK5, m_fWebServerLocalhostOnly);
  58. DDX_Text(pDX, IDC_EDIT3, m_WebServerCGI);
  59. DDX_Text(pDX, IDC_EDIT9, m_WebDefIndex);
  60. }
  61. BOOL CPPageWebServer::PreTranslateMessage(MSG* pMsg)
  62. {
  63. if(pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd == m_launch.m_hWnd)
  64. {
  65. UpdateData();
  66. AppSettings& s = AfxGetAppSettings();
  67. if(CMainFrame* pWnd = (CMainFrame*)AfxGetMainWnd())
  68. {
  69. if(m_fEnableWebServer)
  70. {
  71. if(s.nWebServerPort != m_nWebServerPort)
  72. {
  73. AfxMessageBox(_T("Press apply first, before testing the new settings!"), MB_OK);
  74. return TRUE;
  75. }
  76. }
  77. }
  78. }
  79. return CPPageBase::PreTranslateMessage(pMsg);
  80. }
  81. BOOL CPPageWebServer::OnInitDialog()
  82. {
  83. __super::OnInitDialog();
  84. AppSettings& s = AfxGetAppSettings();
  85. m_fEnableWebServer = s.fEnableWebServer;
  86. m_nWebServerPort = s.nWebServerPort;
  87. m_fWebServerPrintDebugInfo = s.fWebServerPrintDebugInfo;
  88. m_fWebServerLocalhostOnly = s.fWebServerLocalhostOnly;
  89. m_fWebServerUseCompression = s.fWebServerUseCompression;
  90. m_fWebRoot = s.WebRoot.Find('*') < 0;
  91. m_WebRoot = s.WebRoot;
  92. m_WebRoot.TrimLeft(_T("*"));
  93. m_WebDefIndex = s.WebDefIndex;
  94. m_WebServerCGI = s.WebServerCGI;
  95. UpdateData(FALSE);
  96. OnEnChangeEdit1();
  97. return TRUE;  // return TRUE unless you set the focus to a control
  98. // EXCEPTION: OCX Property Pages should return FALSE
  99. }
  100. BOOL CPPageWebServer::OnApply()
  101. {
  102. UpdateData();
  103. AppSettings& s = AfxGetAppSettings();
  104. CString NewWebRoot = m_WebRoot;
  105. if(!m_fWebRoot) NewWebRoot = _T("*") + NewWebRoot;
  106. bool fRestart = s.nWebServerPort != m_nWebServerPort
  107. || s.WebRoot != NewWebRoot || s.WebServerCGI != m_WebServerCGI;
  108. s.fEnableWebServer = !!m_fEnableWebServer;
  109. s.nWebServerPort = m_nWebServerPort;
  110. s.fWebServerPrintDebugInfo = !!m_fWebServerPrintDebugInfo;
  111. s.fWebServerLocalhostOnly = !!m_fWebServerLocalhostOnly;
  112. s.fWebServerUseCompression = !!m_fWebServerUseCompression;
  113. s.WebRoot = NewWebRoot;
  114. s.WebDefIndex = m_WebDefIndex;
  115. s.WebServerCGI = m_WebServerCGI;
  116. if(CMainFrame* pWnd = (CMainFrame*)AfxGetMainWnd())
  117. {
  118. if(m_fEnableWebServer)
  119. {
  120. if(fRestart) pWnd->StopWebServer();
  121. pWnd->StartWebServer(m_nWebServerPort);
  122. }
  123. else
  124. {
  125. pWnd->StopWebServer();
  126. }
  127. }
  128. return __super::OnApply();
  129. }
  130. CString CPPageWebServer::GetMPCDir()
  131. {
  132. CString dir;
  133. GetModuleFileName(AfxGetInstanceHandle(), dir.GetBuffer(MAX_PATH), MAX_PATH);
  134. dir.ReleaseBuffer();
  135. CPath path(dir);
  136. path.RemoveFileSpec();
  137. return (LPCTSTR)path;
  138. }
  139. CString CPPageWebServer::GetCurWebRoot()
  140. {
  141. CString WebRoot;
  142. GetDlgItem(IDC_EDIT2)->GetWindowText(WebRoot);
  143. WebRoot.Replace('/', '\');
  144. CPath path;
  145. path.Combine(GetMPCDir(), WebRoot);
  146. return path.IsDirectory() ? (LPCTSTR)path : _T("");
  147. }
  148. static int __stdcall BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
  149. {
  150.   if(uMsg == BFFM_INITIALIZED && lpData)
  151.   ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
  152.   return 0;
  153. }
  154. bool CPPageWebServer::PickDir(CString& dir)
  155. {
  156. TCHAR buff[MAX_PATH];
  157. BROWSEINFO bi;
  158. bi.hwndOwner = m_hWnd;
  159. bi.pidlRoot = NULL;
  160. bi.pszDisplayName = buff;
  161. bi.lpszTitle = _T("Select the directory");
  162. bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_VALIDATE | BIF_USENEWUI;
  163. bi.lpfn = BrowseCtrlCallback;
  164. bi.lParam = (LPARAM)(LPCTSTR)dir;
  165. bi.iImage = 0; 
  166. LPITEMIDLIST iil;
  167. if(iil = SHBrowseForFolder(&bi))
  168. {
  169. SHGetPathFromIDList(iil, buff);
  170. dir = buff;
  171. return true;
  172. }
  173. return false;
  174. }
  175. BEGIN_MESSAGE_MAP(CPPageWebServer, CPPageBase)
  176. ON_EN_CHANGE(IDC_EDIT1, OnEnChangeEdit1)
  177. ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
  178. ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
  179. ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateButton2)
  180. END_MESSAGE_MAP()
  181. // CPPageWebServer message handlers
  182. void CPPageWebServer::OnEnChangeEdit1()
  183. {
  184. UpdateData();
  185. CString link;
  186. link.Format(_T("http://localhost:%d/"), m_nWebServerPort);
  187. m_launch.m_link = link;
  188. SetModified();
  189. }
  190. void CPPageWebServer::OnBnClickedButton1()
  191. {
  192. CString dir = GetCurWebRoot();
  193. if(PickDir(dir))
  194. {
  195. CPath path;
  196. if(path.RelativePathTo(GetMPCDir(), FILE_ATTRIBUTE_DIRECTORY, dir, FILE_ATTRIBUTE_DIRECTORY))
  197. dir = (LPCTSTR)path;
  198. m_WebRoot = dir;
  199. UpdateData(FALSE);
  200. }
  201. }
  202. void CPPageWebServer::OnBnClickedButton2()
  203. {
  204. CString dir;
  205. if(PickDir(dir))
  206. {
  207. dir += _T("\");
  208. CWebServer::Deploy(dir);
  209. }
  210. }
  211. void CPPageWebServer::OnUpdateButton2(CCmdUI* pCmdUI)
  212. {
  213. pCmdUI->Enable(GetDlgItem(IDC_EDIT2)->GetWindowTextLength() > 0);
  214. }