PolycodePlayerView.cpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. #include "PolycodePlayerView.h"
  2. #include "resource.h"
  3. using namespace Polycode;
  4. Win32Core *core = NULL;
  5. HWND consoleHwnd;
  6. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  7. {
  8. int wmId, wmEvent;
  9. PAINTSTRUCT ps;
  10. HDC hdc;
  11. int nWidth, nHeight;
  12. if(!core)
  13. return DefWindowProc(hWnd, message, wParam, lParam);
  14. switch (message)
  15. {
  16. case WM_SIZE:
  17. nWidth = LOWORD(lParam);
  18. nHeight = HIWORD(lParam);
  19. if(core)
  20. core->getServices()->getRenderer()->Resize(nWidth, nHeight);
  21. break;
  22. case WM_MOUSEMOVE:
  23. if(core)
  24. core->handleMouseMove(lParam,wParam);
  25. break;
  26. case WM_MOUSEWHEEL:
  27. if(core)
  28. core->handleMouseWheel(lParam,wParam);
  29. break;
  30. case WM_LBUTTONDOWN:
  31. if(core)
  32. core->handleMouseDown(CoreInput::MOUSE_BUTTON1, lParam,wParam);
  33. break;
  34. case WM_LBUTTONUP:
  35. if(core)
  36. core->handleMouseUp(CoreInput::MOUSE_BUTTON1, lParam,wParam);
  37. break;
  38. case WM_RBUTTONDOWN:
  39. if(core)
  40. core->handleMouseDown(CoreInput::MOUSE_BUTTON2, lParam,wParam);
  41. break;
  42. case WM_RBUTTONUP:
  43. if(core)
  44. core->handleMouseUp(CoreInput::MOUSE_BUTTON2, lParam,wParam);
  45. break;
  46. case WM_MBUTTONDOWN:
  47. if(core)
  48. core->handleMouseDown(CoreInput::MOUSE_BUTTON3, lParam,wParam);
  49. break;
  50. case WM_MBUTTONUP:
  51. if(core)
  52. core->handleMouseUp(CoreInput::MOUSE_BUTTON3, lParam,wParam);
  53. break;
  54. case WM_KEYDOWN:
  55. if(core)
  56. core->handleKeyDown(lParam,wParam);
  57. break;
  58. case WM_KEYUP:
  59. if(core)
  60. core->handleKeyUp(lParam,wParam);
  61. break;
  62. case WM_CLOSE:
  63. if(core)
  64. core->Shutdown();
  65. break;
  66. case WM_DESTROY:
  67. PostQuitMessage(0);
  68. break;
  69. case WM_COMMAND:
  70. switch(LOWORD(wParam))
  71. {
  72. case ID_FILE_EXIT:
  73. if(core)
  74. core->Shutdown();
  75. break;
  76. case ID_FILE_OPEN:
  77. {
  78. TCHAR szFile[2048];
  79. OPENFILENAME ofn;
  80. ZeroMemory(&ofn, sizeof(ofn));
  81. ofn.lStructSize = sizeof(ofn);
  82. ofn.hwndOwner = hWnd;
  83. ofn.lpstrFile = szFile;
  84. ofn.lpstrFile[0] = '\0';
  85. ofn.nMaxFile = sizeof(szFile);
  86. ofn.lpstrFilter = L"Polycode Application (*.polyapp)\0*.POLYAPP\0";
  87. ofn.nFilterIndex = 0;
  88. ofn.lpstrFileTitle = NULL;
  89. ofn.nMaxFileTitle = 0;
  90. ofn.lpstrInitialDir = NULL;
  91. ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
  92. if (GetOpenFileName(&ofn)==TRUE) {
  93. TCHAR tpath[2049];
  94. GetModuleFileName(NULL, (LPWSTR)tpath, 2048);
  95. STARTUPINFO si;
  96. PROCESS_INFORMATION pi;
  97. ZeroMemory(&si, sizeof(si));
  98. String fullLine = String(tpath);
  99. CreateProcess(fullLine.wc_str(), szFile, NULL, NULL, false, 0, 0, NULL, &si, &pi);
  100. }
  101. }
  102. break;
  103. case ID_SHOW_CONSOLE:
  104. ShowWindow(consoleHwnd, SW_SHOW);
  105. UpdateWindow(consoleHwnd);
  106. break;
  107. }
  108. break;
  109. default:
  110. return DefWindowProc(hWnd, message, wParam, lParam);
  111. }
  112. return 0;
  113. }
  114. LRESULT CALLBACK ConsoleWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  115. {
  116. int wmId, wmEvent;
  117. PAINTSTRUCT ps;
  118. HDC hdc;
  119. int nWidth, nHeight;
  120. switch (message)
  121. {
  122. case WM_CLOSE:
  123. ShowWindow(consoleHwnd, SW_HIDE);
  124. UpdateWindow(consoleHwnd);
  125. break;
  126. default:
  127. return DefWindowProc(hWnd, message, wParam, lParam);
  128. }
  129. return 0;
  130. }
  131. void AppendTextToEditCtrl(HWND hWndEdit, LPCTSTR pszText)
  132. {
  133. int nLength = Edit_GetTextLength(hWndEdit);
  134. Edit_SetSel(hWndEdit, nLength, nLength);
  135. Edit_ReplaceSel(hWndEdit, pszText);
  136. }
  137. void PolycodePlayerView::handleEvent(Event *event){
  138. PolycodeDebugEvent *debugEvent = (PolycodeDebugEvent*) event;
  139. switch(event->getEventCode()) {
  140. case PolycodeDebugEvent::EVENT_ERROR:
  141. {
  142. String lineString = String("Error on line ");
  143. lineString = lineString + String::NumberToString(debugEvent->lineNumber);
  144. lineString = lineString + " - ";
  145. AppendTextToEditCtrl(consoleTextArea, lineString.wc_str());
  146. AppendTextToEditCtrl(consoleTextArea, debugEvent->errorString.wc_str());
  147. ShowWindow(consoleHwnd, SW_SHOW);
  148. UpdateWindow(consoleHwnd);
  149. }
  150. break;
  151. case PolycodeDebugEvent::EVENT_PRINT:
  152. AppendTextToEditCtrl(consoleTextArea, debugEvent->errorString.wc_str());
  153. ShowWindow(consoleHwnd, SW_SHOW);
  154. UpdateWindow(consoleHwnd);
  155. break;
  156. }
  157. }
  158. PolycodePlayerView::PolycodePlayerView(bool standaloneMode, HINSTANCE hInstance, int nCmdShow, LPCTSTR windowTitle) : PolycodeViewBase(), EventHandler() {
  159. WNDCLASSEX wcex;
  160. wcex.cbSize = sizeof(WNDCLASSEX);
  161. wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  162. wcex.lpfnWndProc = WndProc;
  163. wcex.cbClsExtra = 0;
  164. wcex.cbWndExtra = 0;
  165. wcex.hInstance = hInstance;
  166. wcex.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));
  167. //wcex.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0);
  168. wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  169. wcex.hbrBackground = NULL;
  170. if(standaloneMode) {
  171. wcex.lpszMenuName = NULL;
  172. } else {
  173. wcex.lpszMenuName = MAKEINTRESOURCE(IDR_MYMENU);;
  174. }
  175. wcex.lpszClassName = L"POLYCODEAPPLICATION";
  176. wcex.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);
  177. RegisterClassEx(&wcex);
  178. hwnd = CreateWindowEx(WS_EX_APPWINDOW, L"POLYCODEAPPLICATION", windowTitle, WS_OVERLAPPED|WS_SYSMENU,
  179. 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
  180. windowData = (void*)&hwnd;
  181. ShowWindow(hwnd, nCmdShow);
  182. UpdateWindow(hwnd);
  183. WNDCLASSEX console_wcex;
  184. console_wcex.cbSize = sizeof(WNDCLASSEX);
  185. console_wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  186. console_wcex.lpfnWndProc = ConsoleWindowProc;
  187. console_wcex.cbClsExtra = 0;
  188. console_wcex.cbWndExtra = 0;
  189. console_wcex.hInstance = hInstance;
  190. console_wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
  191. console_wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  192. console_wcex.hbrBackground = NULL;
  193. console_wcex.lpszMenuName = NULL;
  194. console_wcex.lpszClassName = L"CONSOLEWINDOW";
  195. console_wcex.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);
  196. RegisterClassEx(&console_wcex);
  197. consoleHwnd = CreateWindowEx(WS_EX_TOOLWINDOW, L"CONSOLEWINDOW", L"Debug console.", WS_OVERLAPPED|WS_SYSMENU,
  198. 640, 100, 500, 300, hwnd, NULL, hInstance, NULL);
  199. //ShowWindow(consoleHwnd, SW_SHOW);
  200. UpdateWindow(consoleHwnd);
  201. consoleTextArea = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|ES_READONLY,
  202. 0, 0, 500, 275, consoleHwnd, NULL, hInstance, NULL);
  203. ShowWindow(consoleTextArea, SW_SHOW);
  204. UpdateWindow(consoleTextArea);
  205. HFONT defaultFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
  206. SendMessage (consoleTextArea, WM_SETFONT, WPARAM (defaultFont), TRUE);
  207. }
  208. PolycodePlayerView::~PolycodePlayerView() {
  209. }