MissionSettingsDlg.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. //===========================================================================//
  2. // Copyright (C) Microsoft Corporation. All rights reserved. //
  3. //===========================================================================//
  4. // MissionSettingsDlg.cpp : implementation file
  5. //
  6. #include "stdafx.h"
  7. #include "resource.h"
  8. #include "MissionSettingsDlg.h"
  9. #include "assert.h"
  10. #include "EditorData.h" /* just for definition of GAME_MAX_PLAYERS */
  11. #include "ResourceStringSelectionDlg.h"
  12. #include "../MCLib/Utilities.h" /*for cLoadString*/
  13. #include "UserTextEdit.h"
  14. /* mh: I notice the compiler seems complain about DEBUG_NEW not being defined
  15. sometimes. I don't why it does this sometimes and sometimes not. It doesn't seem
  16. to do this when I do a clean rebuild. */
  17. #if 0 /*gos doesn't like this */
  18. #ifdef _DEBUG
  19. #define new DEBUG_NEW
  20. #undef THIS_FILE
  21. static char THIS_FILE[] = __FILE__;
  22. #endif
  23. #endif /*gos doesn't like this */
  24. /////////////////////////////////////////////////////////////////////////////
  25. // MissionSettingsDlg dialog
  26. MissionSettingsDlg::MissionSettingsDlg(CWnd* pParent /*=NULL*/)
  27. : CDialog(MissionSettingsDlg::IDD, pParent)
  28. {
  29. m_MissionNameResourceStringID = 0;
  30. m_BlurbResourceStringID = 0;
  31. m_Blurb2ResourceStringID = 0;
  32. //{{AFX_DATA_INIT(MissionSettingsDlg)
  33. m_AuthorEdit = _T("");
  34. m_MaxPlayers = 0;
  35. m_MaxTeams = 0;
  36. m_TimeLimit = -1.0;
  37. m_SinglePlayerCheck = FALSE;
  38. m_InitialResourcePoints = 0;
  39. m_ScenarioTune = _T("");
  40. m_VideoFilename = _T("");
  41. m_CBills = 0;
  42. m_NumRPBuildings = 0;
  43. m_DownloadUrlEdit = _T("");
  44. m_MissionType = -1;
  45. m_AirStrikeCheck = FALSE;
  46. m_AllTech = FALSE;
  47. m_MineLayerCheck = FALSE;
  48. m_NoVariantsCheck = FALSE;
  49. m_RepairVehicleCheck = FALSE;
  50. m_ResourceBuildingCheck = FALSE;
  51. m_SalvageCraftCheck = FALSE;
  52. m_ScoutCopterCheck = FALSE;
  53. m_SensorProbeCheck = FALSE;
  54. m_UnlimitedAmmoCheck = FALSE;
  55. m_DropWeightLimit = 0;
  56. m_ArtilleryPieceCheck = FALSE;
  57. m_RPsForMechsCheck = FALSE;
  58. m_MissionNameEdit = _T("");
  59. m_BlurbEdit = _T("");
  60. m_Blurb2Edit = _T("");
  61. m_BlurbResourceStringIDEdit = _T("");
  62. m_Blurb2ResourceStringIDEdit = _T("");
  63. m_MissionNameResourceStringIDEdit = _T("");
  64. //}}AFX_DATA_INIT
  65. }
  66. void MissionSettingsDlg::DoDataExchange(CDataExchange* pDX)
  67. {
  68. CDialog::DoDataExchange(pDX);
  69. //{{AFX_DATA_MAP(MissionSettingsDlg)
  70. DDX_Control(pDX, IDC_NUM_RP_BUILDINGS_SPIN, m_NumRPBuildingsSpin);
  71. DDX_Control(pDX, IDC_MAX_PLAYERS_SPIN, m_MaxPlayersSpin);
  72. DDX_Control(pDX, IDC_MAX_TEAMS_SPIN, m_MaxTeamsSpin);
  73. DDX_Text(pDX, IDC_AUTHOR_EDIT, m_AuthorEdit);
  74. DDX_Text(pDX, IDC_MAX_PLAYERS_EDIT, m_MaxPlayers);
  75. DDV_MinMaxInt(pDX, m_MaxPlayers, 2, 8);
  76. DDX_Text(pDX, IDC_MAX_TEAMS_EDIT, m_MaxTeams);
  77. DDV_MinMaxInt(pDX, m_MaxTeams, 2, 8);
  78. DDX_Text(pDX, IDC_TIME_LIMIT_EDIT, m_TimeLimit);
  79. DDV_MinMaxInt(pDX, m_TimeLimit, -1, 2147483647);
  80. DDX_Check(pDX, IDC_SINGLE_PLAYER_CHECK, m_SinglePlayerCheck);
  81. DDX_Text(pDX, IDC_INITIAL_RESOURCE_POINTS_EDIT, m_InitialResourcePoints);
  82. DDX_CBString(pDX, IDC_SCENARIO_TUNE_COMBO, m_ScenarioTune);
  83. DDX_Text(pDX, IDC_VIDEO_FILENAME_EDIT, m_VideoFilename);
  84. DDX_Text(pDX, IDC_INITIAL_CBILLS_EDIT, m_CBills);
  85. DDX_Text(pDX, IDC_NUM_RP_BUILDINGS_EDIT, m_NumRPBuildings);
  86. DDV_MinMaxInt(pDX, m_NumRPBuildings, 0, 32);
  87. DDX_Text(pDX, IDC_DOWNLOAD_URL_EDIT, m_DownloadUrlEdit);
  88. DDX_CBIndex(pDX, IDC_MISSION_TYPE_COMBO, m_MissionType);
  89. DDX_Check(pDX, IDC_AIR_STRIKE_CHECK, m_AirStrikeCheck);
  90. DDX_Check(pDX, IDC_ALL_TECH_CHECK, m_AllTech);
  91. DDX_Check(pDX, IDC_MINE_LAYER_CHECK, m_MineLayerCheck);
  92. DDX_Check(pDX, IDC_NO_VARIANTS_CHECK, m_NoVariantsCheck);
  93. DDX_Check(pDX, IDC_REPAIR_VEHICLE_CHECK, m_RepairVehicleCheck);
  94. DDX_Check(pDX, IDC_RESOURCE_BUILDING_CHECK, m_ResourceBuildingCheck);
  95. DDX_Check(pDX, IDC_SALVAGE_CRAFT_CHECK, m_SalvageCraftCheck);
  96. DDX_Check(pDX, IDC_SCOUT_COPTER_CHECK, m_ScoutCopterCheck);
  97. DDX_Check(pDX, IDC_SENSOR_PROBE_CHECK, m_SensorProbeCheck);
  98. DDX_Check(pDX, IDC_UNLIMITED_AMMO_CHECK, m_UnlimitedAmmoCheck);
  99. DDX_Text(pDX, IDC_DROP_WEIGHT_EDIT, m_DropWeightLimit);
  100. DDV_MinMaxInt(pDX, m_DropWeightLimit, 30, 999);
  101. DDX_Check(pDX, IDC_ARTILLERY_PIECE_CHECK, m_ArtilleryPieceCheck);
  102. DDX_Check(pDX, IDC_RPS_FOR_MECHS_CHECK, m_RPsForMechsCheck);
  103. DDX_Text(pDX, IDC_MISSION_NAME_EDIT, m_MissionNameEdit);
  104. DDX_Text(pDX, IDC_BLURB_EDIT, m_BlurbEdit);
  105. DDX_Text(pDX, IDC_BLURB2_EDIT, m_Blurb2Edit);
  106. DDX_Text(pDX, IDC_BLURB_RESOURCE_STRING_ID_EDIT, m_BlurbResourceStringIDEdit);
  107. DDX_Text(pDX, IDC_BLURB2_RESOURCE_STRING_ID_EDIT, m_Blurb2ResourceStringIDEdit);
  108. DDX_Text(pDX, IDC_MISSION_NAME_RESOURCE_STRING_ID_EDIT, m_MissionNameResourceStringIDEdit);
  109. //}}AFX_DATA_MAP
  110. }
  111. BEGIN_MESSAGE_MAP(MissionSettingsDlg, CDialog)
  112. //{{AFX_MSG_MAP(MissionSettingsDlg)
  113. ON_BN_CLICKED(IDC_BROWSE_BUTTON, OnBrowseButton)
  114. ON_BN_CLICKED(IDC_MISSION_NAME_EDIT_BUTTON, OnMissionNameEditButton)
  115. ON_BN_CLICKED(IDC_BLURB_EDIT_BUTTON, OnBlurbEditButton)
  116. ON_BN_CLICKED(IDC_BLURB2_EDIT_BUTTON, OnBlurb2EditButton)
  117. //}}AFX_MSG_MAP
  118. END_MESSAGE_MAP()
  119. /////////////////////////////////////////////////////////////////////////////
  120. // MissionSettingsDlg message handlers
  121. static BOOL CSLoadString(int resourceID, CString &targetStr) {
  122. char szTmp[16384/*max string length*/];
  123. cLoadString( resourceID, szTmp, 16384/*max string length*/ );
  124. targetStr = szTmp;
  125. CString tmpStr;
  126. tmpStr.Format("mc2res.dll:%d Not defined", resourceID);
  127. if (0 == strcmp(tmpStr.GetBuffer(0), szTmp)) {
  128. return (0);
  129. }
  130. return (!0);
  131. }
  132. void MissionSettingsDlg::UpdateMissionNameDisplay() {
  133. UpdateData(TRUE);
  134. if (m_MissionNameUseResourceString) {
  135. m_MissionNameResourceStringIDEdit.Format("%d", m_MissionNameResourceStringID);
  136. int ret = CSLoadString(m_MissionNameResourceStringID, m_MissionNameEdit);
  137. if (0 == ret) {
  138. m_MissionNameEdit = _TEXT("");
  139. }
  140. } else {
  141. m_MissionNameResourceStringIDEdit = _TEXT("");
  142. m_MissionNameEdit = m_MissionNameUnlocalizedText;
  143. }
  144. UpdateData(FALSE);
  145. }
  146. void MissionSettingsDlg::UpdateBlurbDisplay() {
  147. UpdateData(TRUE);
  148. if (m_BlurbUseResourceString) {
  149. m_BlurbResourceStringIDEdit.Format("%d", m_BlurbResourceStringID);
  150. int ret = CSLoadString(m_BlurbResourceStringID, m_BlurbEdit);
  151. if (0 == ret) {
  152. m_BlurbEdit = _TEXT("");
  153. }
  154. } else {
  155. m_BlurbResourceStringIDEdit = _TEXT("");
  156. m_BlurbEdit = m_BlurbUnlocalizedText;
  157. }
  158. UpdateData(FALSE);
  159. }
  160. void MissionSettingsDlg::UpdateBlurb2Display() {
  161. UpdateData(TRUE);
  162. if (m_Blurb2UseResourceString) {
  163. m_Blurb2ResourceStringIDEdit.Format("%d", m_Blurb2ResourceStringID);
  164. int ret = CSLoadString(m_Blurb2ResourceStringID, m_Blurb2Edit);
  165. if (0 == ret) {
  166. m_Blurb2Edit = _TEXT("");
  167. }
  168. } else {
  169. m_Blurb2ResourceStringIDEdit = _TEXT("");
  170. m_Blurb2Edit = m_Blurb2UnlocalizedText;
  171. }
  172. UpdateData(FALSE);
  173. }
  174. BOOL MissionSettingsDlg::OnInitDialog()
  175. {
  176. CDialog::OnInitDialog();
  177. m_MaxTeamsSpin.SetRange(2, GAME_MAX_PLAYERS);
  178. m_MaxPlayersSpin.SetRange(2, GAME_MAX_PLAYERS);
  179. m_NumRPBuildingsSpin.SetRange(0, 32/*max random RP buildings*/);
  180. UpdateMissionNameDisplay();
  181. UpdateBlurbDisplay();
  182. UpdateBlurb2Display();
  183. return TRUE; // return TRUE unless you set the focus to a control
  184. // EXCEPTION: OCX Property Pages should return FALSE
  185. }
  186. void MissionSettingsDlg::OnBrowseButton()
  187. {
  188. UpdateData(TRUE);
  189. while (true) {
  190. CFileDialog selectAVIFileDialog(TRUE,_T("AVI"),_T("*.AVI"),
  191. OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_NOCHANGEDIR,
  192. _T("Movie (*.AVI)|*.AVI|"));
  193. selectAVIFileDialog.m_ofn.lpstrInitialDir = moviePath;
  194. if( selectAVIFileDialog.DoModal()==IDOK ) {
  195. CString pathname = selectAVIFileDialog.GetPathName();
  196. int CurrentDirectoryBufferLength = GetCurrentDirectory(0, 0);
  197. assert(1 <= CurrentDirectoryBufferLength);
  198. //TCHAR *CurrentDirectoryBuffer = new TCHAR[CurrentDirectoryBufferLength];
  199. TCHAR *CurrentDirectoryBuffer = (TCHAR *)malloc(sizeof(TCHAR) * CurrentDirectoryBufferLength);
  200. int ret = GetCurrentDirectory(CurrentDirectoryBufferLength, CurrentDirectoryBuffer);
  201. assert(CurrentDirectoryBufferLength - 1 == ret);
  202. ret = -1;
  203. if (pathname.GetLength() > (CurrentDirectoryBufferLength - 1)) {
  204. ret = _tcsnicmp(CurrentDirectoryBuffer, pathname.GetBuffer(0), CurrentDirectoryBufferLength - 1);
  205. }
  206. //delete [] CurrentDirectoryBuffer; CurrentDirectoryBuffer = 0;
  207. free(CurrentDirectoryBuffer); CurrentDirectoryBuffer = 0;
  208. if (0 == ret) {
  209. m_VideoFilename = (pathname.GetBuffer(0) + (CurrentDirectoryBufferLength - 1) + 1);
  210. break;
  211. } else {
  212. AfxMessageBox(IDS_MUST_BE_IN_SUBDIRECTORY);
  213. }
  214. } else {
  215. break;
  216. }
  217. }
  218. UpdateData(FALSE);
  219. }
  220. void MissionSettingsDlg::OnMissionNameEditButton()
  221. {
  222. CUserTextEdit userTextEditDialog;
  223. userTextEditDialog.m_UnlocalizedText = m_MissionNameUnlocalizedText;
  224. userTextEditDialog.m_UseResourceString = m_MissionNameUseResourceString;
  225. userTextEditDialog.m_ResourceStringID = m_MissionNameResourceStringID;
  226. int ret = userTextEditDialog.DoModal();
  227. if (IDOK == ret) {
  228. m_MissionNameUnlocalizedText = userTextEditDialog.m_UnlocalizedText;
  229. m_MissionNameUseResourceString = userTextEditDialog.m_UseResourceString;
  230. m_MissionNameResourceStringID = userTextEditDialog.m_ResourceStringID;
  231. UpdateMissionNameDisplay();
  232. }
  233. }
  234. void MissionSettingsDlg::OnBlurbEditButton()
  235. {
  236. CUserTextEdit userTextEditDialog;
  237. userTextEditDialog.m_UnlocalizedText = m_BlurbUnlocalizedText;
  238. userTextEditDialog.m_UseResourceString = m_BlurbUseResourceString;
  239. userTextEditDialog.m_ResourceStringID = m_BlurbResourceStringID;
  240. int ret = userTextEditDialog.DoModal();
  241. if (IDOK == ret) {
  242. m_BlurbUnlocalizedText = userTextEditDialog.m_UnlocalizedText;
  243. m_BlurbUseResourceString = userTextEditDialog.m_UseResourceString;
  244. m_BlurbResourceStringID = userTextEditDialog.m_ResourceStringID;
  245. UpdateBlurbDisplay();
  246. }
  247. }
  248. void MissionSettingsDlg::OnBlurb2EditButton()
  249. {
  250. CUserTextEdit userTextEditDialog;
  251. userTextEditDialog.m_UnlocalizedText = m_Blurb2UnlocalizedText;
  252. userTextEditDialog.m_UseResourceString = m_Blurb2UseResourceString;
  253. userTextEditDialog.m_ResourceStringID = m_Blurb2ResourceStringID;
  254. int ret = userTextEditDialog.DoModal();
  255. if (IDOK == ret) {
  256. m_Blurb2UnlocalizedText = userTextEditDialog.m_UnlocalizedText;
  257. m_Blurb2UseResourceString = userTextEditDialog.m_UseResourceString;
  258. m_Blurb2ResourceStringID = userTextEditDialog.m_ResourceStringID;
  259. UpdateBlurb2Display();
  260. }
  261. }