TriggerOptionsDlg.cpp 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. /*
  2. FinalSun/FinalAlert 2 Mission Editor
  3. Copyright (C) 1999-2024 Electronic Arts, Inc.
  4. Authored by Matthias Wagner
  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 3 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program. If not, see <https://www.gnu.org/licenses/>.
  15. */
  16. // TriggerOptionsDlg.cpp: Implementierungsdatei
  17. //
  18. #include "stdafx.h"
  19. #include "finalsun.h"
  20. #include "TriggerOptionsDlg.h"
  21. #include "mapdata.h"
  22. #include "variables.h"
  23. #include "functions.h"
  24. #include "inlines.h"
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30. /////////////////////////////////////////////////////////////////////////////
  31. // Dialogfeld CTriggerOptionsDlg
  32. CTriggerOptionsDlg::CTriggerOptionsDlg(CWnd* pParent /*=NULL*/)
  33. : CDialog(CTriggerOptionsDlg::IDD, pParent)
  34. {
  35. //{{AFX_DATA_INIT(CTriggerOptionsDlg)
  36. //}}AFX_DATA_INIT
  37. }
  38. void CTriggerOptionsDlg::DoDataExchange(CDataExchange* pDX)
  39. {
  40. CDialog::DoDataExchange(pDX);
  41. //{{AFX_DATA_MAP(CTriggerOptionsDlg)
  42. DDX_Control(pDX, IDC_MEDIUM, m_Medium);
  43. DDX_Control(pDX, IDC_HARD, m_Hard);
  44. DDX_Control(pDX, IDC_EASY, m_Easy);
  45. DDX_Control(pDX, IDC_DISABLED, m_Disabled);
  46. DDX_Control(pDX, IDC_TRIGGERTYPE, m_TriggerType);
  47. DDX_Control(pDX, IDC_NAME, m_Name);
  48. DDX_Control(pDX, IDC_HOUSE, m_House);
  49. DDX_Control(pDX, IDC_ATTACHEDTRIGGER, m_AttachedTrigger);
  50. //}}AFX_DATA_MAP
  51. }
  52. BEGIN_MESSAGE_MAP(CTriggerOptionsDlg, CDialog)
  53. //{{AFX_MSG_MAP(CTriggerOptionsDlg)
  54. ON_EN_CHANGE(IDC_NAME, OnChangeName)
  55. ON_CBN_EDITCHANGE(IDC_HOUSE, OnEditchangeHouse)
  56. ON_CBN_EDITCHANGE(IDC_ATTACHEDTRIGGER, OnEditchangeAttachedtrigger)
  57. ON_EN_KILLFOCUS(IDC_NAME, OnKillfocusName)
  58. ON_WM_KILLFOCUS()
  59. ON_CBN_EDITCHANGE(IDC_TRIGGERTYPE, OnEditchangeTriggertype)
  60. ON_BN_CLICKED(IDC_DISABLED, OnDisabled)
  61. ON_BN_CLICKED(IDC_EASY, OnEasy)
  62. ON_BN_CLICKED(IDC_MEDIUM, OnMedium)
  63. ON_BN_CLICKED(IDC_HARD, OnHard)
  64. //}}AFX_MSG_MAP
  65. END_MESSAGE_MAP()
  66. /////////////////////////////////////////////////////////////////////////////
  67. // Behandlungsroutinen für Nachrichten CTriggerOptionsDlg
  68. void CTriggerOptionsDlg::UpdateDialog()
  69. {
  70. // MW 07/20/01
  71. CIniFile& ini=Map->GetIniFile();
  72. if(m_currentTrigger.GetLength()==0) return;
  73. ListHouses(m_House, FALSE, TRUE, FALSE);
  74. ListTriggers(m_AttachedTrigger);
  75. m_AttachedTrigger.InsertString(0, "<none>");
  76. RepairTrigger(ini.sections["Triggers"].values[m_currentTrigger]);
  77. m_Name.SetWindowText(GetParam(ini.sections["Triggers"].values[m_currentTrigger],2));
  78. m_House.SetWindowText(TranslateHouse(GetParam(ini.sections["Triggers"].values[m_currentTrigger],0), TRUE));
  79. CString attachedTrigger=GetParam(ini.sections["Triggers"].values[m_currentTrigger],1);
  80. m_AttachedTrigger.SetWindowText(attachedTrigger);
  81. m_Disabled.SetCheck((atoi(GetParam(ini.sections["Triggers"].values[m_currentTrigger],3))));
  82. m_Easy.SetCheck((atoi(GetParam(ini.sections["Triggers"].values[m_currentTrigger],4))));
  83. m_Medium.SetCheck((atoi(GetParam(ini.sections["Triggers"].values[m_currentTrigger],5))));
  84. m_Hard.SetCheck((atoi(GetParam(ini.sections["Triggers"].values[m_currentTrigger],6))));
  85. int i;
  86. for(i=0;i<m_AttachedTrigger.GetCount();i++)
  87. {
  88. CString tmp;
  89. m_AttachedTrigger.GetLBText(i,tmp);
  90. TruncSpace(tmp);
  91. if(tmp==attachedTrigger)
  92. m_AttachedTrigger.SetCurSel(i);
  93. }
  94. for(i=0;i<ini.sections["Tags"].values.size();i++)
  95. {
  96. CString type=*ini.sections["Tags"].GetValueName(i);
  97. CString attTrigg=GetParam(ini.sections["Tags"].values[type], 2);
  98. if(attTrigg==m_currentTrigger)
  99. {
  100. m_TriggerType.SetWindowText(GetParam(ini.sections["Tags"].values[type], 0));
  101. break;
  102. }
  103. }
  104. }
  105. void CTriggerOptionsDlg::OnChangeName()
  106. {
  107. if(m_currentTrigger.GetLength()==0) return;
  108. CIniFile& ini=Map->GetIniFile();
  109. if(ini.sections["Triggers"].FindName(m_currentTrigger)<0 || m_currentTrigger.GetLength()==0) return;
  110. CString newName;
  111. m_Name.GetWindowText(newName);
  112. if(newName.GetLength()==0) newName=" ";
  113. if(newName.Find(",",0)>=0)
  114. {//newName.SetAt(newName.Find(",",0), 0);
  115. newName=newName.Left(newName.Find(",",0));
  116. m_Name.SetWindowText(newName);}
  117. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 2, newName);
  118. int i;
  119. int p=0;
  120. for(i=0;i<ini.sections["Tags"].values.size();i++)
  121. {
  122. CString type=*ini.sections["Tags"].GetValueName(i);
  123. CString attTrigg=GetParam(ini.sections["Tags"].values[type], 2);
  124. if(attTrigg==m_currentTrigger)
  125. {
  126. p++;
  127. char c[50];
  128. itoa(p,c,10);
  129. CString newVal=newName+" ";
  130. newVal+=c;
  131. ini.sections["Tags"].values[type]=SetParam(ini.sections["Tags"].values[type], 1, newVal);
  132. }
  133. }
  134. //MessageBox(ini.sections["Triggers"].values[m_currentTrigger],newName);
  135. RepairTrigger(ini.sections["Triggers"].values[m_currentTrigger]);
  136. }
  137. void CTriggerOptionsDlg::OnEditchangeHouse()
  138. {
  139. CIniFile& ini=Map->GetIniFile();
  140. if(ini.sections["Triggers"].FindName(m_currentTrigger)<0 || m_currentTrigger.GetLength()==0) return;
  141. CString newHouse;
  142. m_House.GetWindowText(newHouse);
  143. newHouse=TranslateHouse(newHouse);
  144. newHouse.TrimLeft();
  145. TruncSpace(newHouse);
  146. if(newHouse.Find(",",0)>=0) newHouse.SetAt(newHouse.Find(",",0), 0);
  147. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 0, newHouse);
  148. RepairTrigger(ini.sections["Triggers"].values[m_currentTrigger]);
  149. }
  150. void CTriggerOptionsDlg::OnEditchangeAttachedtrigger()
  151. {
  152. CIniFile& ini=Map->GetIniFile();
  153. if(ini.sections["Triggers"].FindName(m_currentTrigger)<0 || m_currentTrigger.GetLength()==0) return;
  154. CString newTrigger;
  155. m_AttachedTrigger.GetWindowText(newTrigger);
  156. newTrigger.TrimLeft();
  157. TruncSpace(newTrigger);
  158. if(newTrigger.Find(",",0)>=0) newTrigger.SetAt(newTrigger.Find(",",0), 0);
  159. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 1, newTrigger);
  160. }
  161. void CTriggerOptionsDlg::OnKillfocusName()
  162. {
  163. ((CTriggerEditorDlg*)(this->GetOwner()->GetOwner()))->UpdateDialog();
  164. }
  165. void CTriggerOptionsDlg::OnKillFocus(CWnd* pNewWnd)
  166. {
  167. CDialog::OnKillFocus(pNewWnd);
  168. ((CTriggerEditorDlg*)(this->GetOwner()->GetOwner()))->UpdateDialog();
  169. }
  170. void CTriggerOptionsDlg::OnEditchangeTriggertype()
  171. {
  172. CIniFile& ini=Map->GetIniFile();
  173. if(ini.sections["Triggers"].FindName(m_currentTrigger)<0 || m_currentTrigger.GetLength()==0) return;
  174. CString newType;
  175. m_TriggerType.GetWindowText(newType);
  176. TruncSpace(newType);
  177. int i;
  178. for(i=0;i<ini.sections["Tags"].values.size();i++)
  179. {
  180. CString type=*ini.sections["Tags"].GetValueName(i);
  181. CString attTrigg=GetParam(ini.sections["Tags"].values[type], 2);
  182. if(attTrigg==m_currentTrigger)
  183. {
  184. ini.sections["Tags"].values[type]=SetParam(ini.sections["Tags"].values[type], 0, newType);
  185. }
  186. }
  187. RepairTrigger(ini.sections["Triggers"].values[m_currentTrigger]);
  188. }
  189. BOOL CTriggerOptionsDlg::PreTranslateMessage(MSG* pMsg)
  190. {
  191. {
  192. m_tooltip.RelayEvent(pMsg);
  193. }
  194. return CDialog::PreTranslateMessage(pMsg);
  195. }
  196. BOOL CTriggerOptionsDlg::OnInitDialog()
  197. {
  198. CDialog::OnInitDialog();
  199. {
  200. m_tooltip.Create(this);
  201. m_tooltip.Activate(TRUE);
  202. m_tooltip.AddTool(GetDlgItem(IDC_HOUSE), GetLanguageStringACP("TT_TriggerHouse"));
  203. }
  204. return TRUE;
  205. }
  206. void CTriggerOptionsDlg::OnDisabled()
  207. {
  208. CIniFile& ini=Map->GetIniFile();
  209. if(ini.sections["Triggers"].FindName(m_currentTrigger)<0 || m_currentTrigger.GetLength()==0) return;
  210. BOOL bDisabled=FALSE;
  211. if(m_Disabled.GetCheck()==0) bDisabled=FALSE;
  212. else
  213. bDisabled=TRUE;
  214. if(bDisabled)
  215. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 3, "1");
  216. else
  217. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 3, "0");
  218. }
  219. void CTriggerOptionsDlg::OnEasy()
  220. {
  221. CIniFile& ini=Map->GetIniFile();
  222. if(ini.sections["Triggers"].FindName(m_currentTrigger)<0 || m_currentTrigger.GetLength()==0) return;
  223. BOOL bEasy=FALSE;
  224. if(m_Easy.GetCheck()==0) bEasy=FALSE;
  225. else
  226. bEasy=TRUE;
  227. if(bEasy)
  228. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 4, "1");
  229. else
  230. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 4, "0");
  231. }
  232. void CTriggerOptionsDlg::OnMedium()
  233. {
  234. CIniFile& ini=Map->GetIniFile();
  235. if(ini.sections["Triggers"].FindName(m_currentTrigger)<0 || m_currentTrigger.GetLength()==0) return;
  236. BOOL bMedium=FALSE;
  237. if(m_Medium.GetCheck()==0) bMedium=FALSE;
  238. else
  239. bMedium=TRUE;
  240. if(bMedium)
  241. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 5, "1");
  242. else
  243. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 5, "0");
  244. }
  245. void CTriggerOptionsDlg::OnHard()
  246. {
  247. CIniFile& ini=Map->GetIniFile();
  248. if(ini.sections["Triggers"].FindName(m_currentTrigger)<0 || m_currentTrigger.GetLength()==0) return;
  249. BOOL bHard=FALSE;
  250. if(m_Hard.GetCheck()==0) bHard=FALSE;
  251. else
  252. bHard=TRUE;
  253. if(bHard)
  254. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 6, "1");
  255. else
  256. ini.sections["Triggers"].values[m_currentTrigger]=SetParam(ini.sections["Triggers"].values[m_currentTrigger], 6, "0");
  257. }
  258. //MW 07/20/01
  259. void CTriggerOptionsDlg::Clear()
  260. {
  261. }