_Popup.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Windows.Forms;
  5. using System.Collections;
  6. using System.Drawing;
  7. using System.Data;
  8. namespace FPER
  9. {
  10. // 타수신기 화재 팝업창 전용 클래스
  11. public class _FIRE_LIST
  12. {
  13. public string FIRE_TIME; // 시간
  14. public bool FIRE_TYPE; // 화재 or 복구
  15. public string FIRE_TEXT; // 디바이스 정보
  16. public string FIRE_RECEIVERNAME; // 타수신기 이름
  17. public string FIRE_RECEIVERIP; // 타수신기 IP
  18. }
  19. public class _Popup // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  20. {
  21. // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  22. MDIParent mdi = null;
  23. LogFileCreate LFC = new LogFileCreate();
  24. //
  25. // 팝업창을 관리하는 전용 팝업 클래스
  26. //
  27. // 공통 팝업창 (1개로 관리함 - 잠시기다려주세요)
  28. private Form_Popup CommonPopup = new Form_Popup();
  29. // 팝업 전용 위임자
  30. public delegate void CreateFormCallback(Form Target);
  31. public delegate void CreateEtcFirePopupCallback(string MyReceiver_ID, string FireReceiver_ID, MDIParent Target);
  32. // 수신기별로 관리되는 팝업창 (모두 Form_Popup_OtherFireAlarm 폼클래스 타입의 데이타가 저장된다)
  33. public Hashtable HASH_EtcReceiverFireAlarmPopup = new Hashtable();
  34. //
  35. // 차단 정보 팝업창
  36. //
  37. // cyim 2013.9.26 중계기차단 보완
  38. public Form_Popup_CutInfo Form_Popup_CutInfo_Main = null;
  39. // 차단정보를 새로운 폼에 출력하기 위한 전역 리스트 (차단시에 반드시 호출되는 함수에서 재설정되도록 함)
  40. public ArrayList Form_Popup_CutInfo_List = new ArrayList();
  41. // 차단 정보 팝업창 활성화 여부
  42. public bool Form_Popup_CutInfo_Enable = false;
  43. public MDIParent MdiParent { get; private set; }
  44. // 생성자
  45. public _Popup(MDIParent mdiparent)
  46. {
  47. mdi = mdiparent;
  48. }
  49. // 소멸자
  50. ~_Popup()
  51. {
  52. }
  53. //
  54. // 공통 팝업창 처리
  55. //
  56. // 출력
  57. public void CommonPopupShow(Form Target)
  58. {
  59. if (Target.InvokeRequired)
  60. {
  61. CreateFormCallback d = new CreateFormCallback(CommonPopupShow);
  62. Target.Invoke(d, new object[] { });
  63. }
  64. else
  65. {
  66. // 사전검사
  67. if (CommonPopup != null) CommonPopup.Close();
  68. // 메모리 할당
  69. CommonPopup = new Form_Popup();
  70. // 이벤트 등록
  71. Target.FormClosing += new FormClosingEventHandler(Target_FormClosing);
  72. Target.VisibleChanged += new EventHandler(Target_VisibleChanged);
  73. // 표시
  74. CommonPopup.Show(Target);
  75. // 위치
  76. CommonPopup.StartPosition = FormStartPosition.CenterParent;
  77. // 화면 갱신
  78. CommonPopup.Update();
  79. }
  80. }
  81. public void Target_VisibleChanged(object sender, EventArgs e)
  82. {
  83. Form frm = (Form)sender;
  84. if (frm.Visible == false)
  85. CommonPopupClose(frm);
  86. }
  87. // 닫힘
  88. public void CommonPopupClose(Form Target)
  89. {
  90. if (Target.InvokeRequired)
  91. {
  92. CreateFormCallback d = new CreateFormCallback(CommonPopupClose);
  93. Target.Invoke(d, new object[] { });
  94. }
  95. else
  96. {
  97. // 폼닫기
  98. if (CommonPopup != null)
  99. {
  100. CommonPopup.Hide(); // cyim 2013.9.23 대기팝업창 보완
  101. CommonPopup.Close();
  102. }
  103. // 이벤트 해제
  104. Target.VisibleChanged -= new EventHandler(Target_VisibleChanged);
  105. Target.FormClosing -= new FormClosingEventHandler(Target_FormClosing);
  106. }
  107. }
  108. // 부모 윈도우 닫힘 이벤트 핸들러
  109. public void Target_FormClosing(object sender, FormClosingEventArgs e)
  110. {
  111. // 부모가 종료되면 무조건 폼닫기 실행
  112. if (CommonPopup != null)
  113. {
  114. CommonPopup.Hide(); // cyim 2013.9.23 대기팝업창 보완
  115. CommonPopup.Close();
  116. }
  117. }
  118. //
  119. // 타수신기 화재 팝업창
  120. //
  121. // 기존 출력 방식 - 2020.07.20 변경
  122. //public void EtcReceiverFirePopupShow(string MyReceiver_ID, string FireReceiver_ID, MDIParent Target)
  123. //{
  124. // // cyim 2013.8.9 타수신기 화재 정보 팝업창 출력 기능 추가
  125. // // 제일먼저 타수신기 화재인지 알아내는것이 좋습니다. Contains 함수도 남용하면 속도에 악영향을 줍니다
  126. // if (MyReceiver_ID != FireReceiver_ID && HASH_EtcReceiverFireAlarmPopup.Count != 0)
  127. // {
  128. // if (HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID) == true)
  129. // {
  130. // if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Visible == false)
  131. // {
  132. // if (Target.InvokeRequired)
  133. // {
  134. // CreateEtcFirePopupCallback d = new CreateEtcFirePopupCallback(EtcReceiverFirePopupShow);
  135. // Target.Invoke(d, new object[] { MyReceiver_ID, FireReceiver_ID, Target });
  136. // }
  137. // else
  138. // {
  139. // int FireReceiver_ID_NUM = int.Parse(FireReceiver_ID);
  140. // // 표시
  141. // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Show();
  142. // // 2020.06.23 위치변경 - 멀티 팝업창을 위해서
  143. // //((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).StartPosition = FormStartPosition.CenterParent;
  144. // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).StartPosition = FormStartPosition.Manual;
  145. // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Location = new Point((Screen.PrimaryScreen.Bounds.Width / 2 - ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Width / 2) + (FireReceiver_ID_NUM - 1) * 30, (Screen.PrimaryScreen.Bounds.Height / 2 - ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Size.Height / 2) + (FireReceiver_ID_NUM - 1) * 30);
  146. // // 화면 갱신
  147. // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Update();
  148. // }
  149. // }
  150. // }
  151. // }
  152. //}
  153. // 출력 방식 - 2020.07.20 변경
  154. // 현장 요청사항 - 타 수신기 팝업 창 통일화
  155. public void EtcReceiverFirePopupShow(string MyReceiver_ID, string FireReceiver_ID, MDIParent Target)
  156. {
  157. // cyim 2013.8.9 타수신기 화재 정보 팝업창 출력 기능 추가
  158. // 제일먼저 타수신기 화재인지 알아내는것이 좋습니다. Contains 함수도 남용하면 속도에 악영향을 줍니다
  159. LFC.Log("EtcReceiverFirePopupShow(MyReceiver_ID: " + MyReceiver_ID + ", FireReceiver_ID: " + FireReceiver_ID + ", Target: " + Target);
  160. if (MyReceiver_ID != FireReceiver_ID && HASH_EtcReceiverFireAlarmPopup.Count != 0)
  161. {
  162. LFC.Log("EtcReceiverFireAlarmPopup.Contains: " + HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID));
  163. if (HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID) == true)
  164. {
  165. LFC.Log("EtcReceiverFireAlarmPopup.Visible " + ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).Visible);
  166. if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).Visible == false)
  167. {
  168. if (Target.InvokeRequired)
  169. {
  170. CreateEtcFirePopupCallback d = new CreateEtcFirePopupCallback(EtcReceiverFirePopupShow);
  171. Target.Invoke(d, new object[] { MyReceiver_ID, MyReceiver_ID, Target });
  172. }
  173. else
  174. {
  175. int FireReceiver_ID_NUM = int.Parse(MyReceiver_ID);
  176. // 표시
  177. LFC.Log("EtcReceiverFireAlarmPopup.Show()");
  178. ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).Show();
  179. // 2020.06.23 위치변경 - 멀티 팝업창을 위해서
  180. ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).StartPosition = FormStartPosition.Manual;
  181. ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).Location = new Point((Screen.PrimaryScreen.Bounds.Width / 2 - ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Width / 2) + (FireReceiver_ID_NUM - 1) * 30, (Screen.PrimaryScreen.Bounds.Height / 2 - ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Size.Height / 4) + (FireReceiver_ID_NUM - 1) * 30);
  182. // 화면 갱신
  183. ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).Update();
  184. }
  185. }
  186. LFC.Log("==================================================================================================================");
  187. //else
  188. //{
  189. // // 표시
  190. // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID])._Event_EtcFirePopup_Update_Inform_Event(FireReceiver_ID);
  191. //}
  192. }
  193. }
  194. }
  195. // 기존 프로세스 변경 - 타 수신기 팝업창 단일화
  196. // 데이타만 처리
  197. //public void EtcReceiverFirePopupProcess(string MyReceiver_ID, string FireReceiver_ID, bool FireType, string FireDisplayText, string FireTime)
  198. //{
  199. // // cyim 2013.8.9 타수신기 화재 정보 팝업창 출력 기능 추가
  200. // // 제일먼저 타수신기 화재인지 알아내는것이 좋습니다. Contains 함수도 남용하면 속도에 악영향을 줍니다
  201. // if (MyReceiver_ID != FireReceiver_ID && HASH_EtcReceiverFireAlarmPopup.Count != 0)
  202. // {
  203. // if (HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID) == true)
  204. // {
  205. // // 제일먼저 해당 수신기의 팝업창에 리스트의 개수를 파악한다.만약 최대값에 도달했다면 제일 마지막에 저장된 데이타를 삭제한다
  206. // if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Count > 14) // cyim 2015.10.23 타수신기 화재 리스트에서 항목은 최대 15개로 표시
  207. // {
  208. // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.RemoveAt(0);
  209. // }
  210. // // 데이타 생성
  211. // _FIRE_LIST FIRE_LIST = new _FIRE_LIST();
  212. // FIRE_LIST.FIRE_TEXT = FireDisplayText;
  213. // FIRE_LIST.FIRE_TYPE = FireType;
  214. // FIRE_LIST.FIRE_TIME = FireTime;//mdi.MyTime;//DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // cyim 2015.9.23 시간정보 표시 오류 (갱신을 안함) // cyim 2015.10.1 통보받은 화재 발생 시간을 기준으로 표시
  215. // // 데이타 추가
  216. // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Add(FIRE_LIST);
  217. // //// 화재
  218. // //if (FireType == true)
  219. // //{
  220. // // if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Contains(DisplayText) == false)
  221. // // {
  222. // // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Add(DisplayText);
  223. // // _Event.EtcFirePopup_Update_Inform_Write(FireReceiver_ID);
  224. // // }
  225. // //}
  226. // //// 복구
  227. // //else
  228. // //{
  229. // // if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Contains(DisplayText) == true)
  230. // // {
  231. // // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Remove(DisplayText);
  232. // // _Event.EtcFirePopup_Update_Inform_Write(FireReceiver_ID);
  233. // // }
  234. // //}
  235. // }
  236. // }
  237. //}
  238. // 데이타만 처리
  239. public void EtcReceiverFirePopupProcess(string MyReceiver_ID, string FireReceiver_ID, bool FireType, string FireDisplayText, string FireTime)
  240. {
  241. // cyim 2013.8.9 타수신기 화재 정보 팝업창 출력 기능 추가
  242. // 제일먼저 타수신기 화재인지 알아내는것이 좋습니다. Contains 함수도 남용하면 속도에 악영향을 줍니다
  243. LFC.Log("EtcReceiverFirePopupProcess(MyReceiver_ID: "+ MyReceiver_ID + ", FireReceiver_ID: "+ FireReceiver_ID + ", FireType: " + FireType + ", FireDisplayText: " + FireDisplayText + ", FireTime: " + FireTime);
  244. if (MyReceiver_ID != FireReceiver_ID && HASH_EtcReceiverFireAlarmPopup.Count != 0)
  245. {
  246. LFC.Log("EtcReceiverFireAlarmPopup.Contains: " + HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID));
  247. if (HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID) == true)
  248. {
  249. LFC.Log("EtcReceiverFireAlarm_LIST_FIRE_INFO.Count: " + ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).LIST_FIRE_INFO.Count);
  250. // 제일먼저 해당 수신기의 팝업창에 리스트의 개수를 파악한다.만약 최대값에 도달했다면 제일 마지막에 저장된 데이타를 삭제한다
  251. if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).LIST_FIRE_INFO.Count > 21) // cyim 2015.10.23 타수신기 화재 리스트에서 항목은 최대 20개로 표시
  252. {
  253. ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).LIST_FIRE_INFO.RemoveAt(0);
  254. }
  255. // 데이타 생성
  256. _FIRE_LIST FIRE_LIST = new _FIRE_LIST();
  257. FIRE_LIST.FIRE_TEXT = FireDisplayText;
  258. FIRE_LIST.FIRE_TYPE = FireType;
  259. FIRE_LIST.FIRE_RECEIVERNAME = ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).POPUP_RECEIVER_NAME;
  260. FIRE_LIST.FIRE_RECEIVERIP = ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).POPUP_RECEIVER_IP;
  261. FIRE_LIST.FIRE_TIME = FireTime;//mdi.MyTime;//DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // cyim 2015.9.23 시간정보 표시 오류 (갱신을 안함) // cyim 2015.10.1 통보받은 화재 발생 시간을 기준으로 표시
  262. LFC.Log("EtcReceiverFireAlarm_FIRE_TEXT: " + FIRE_LIST.FIRE_TEXT + ", FIRE_TYPE: "+ FIRE_LIST.FIRE_TYPE + ", FIRE_RECEIVERNAME: " + FIRE_LIST.FIRE_RECEIVERNAME + ", FIRE_RECEIVERIP: " + FIRE_LIST.FIRE_RECEIVERIP + ", FIRE_TIME: " + FIRE_LIST.FIRE_TIME);
  263. LFC.Log(" ");
  264. // 데이타 추가
  265. ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).LIST_FIRE_INFO.Add(FIRE_LIST);
  266. }
  267. }
  268. }
  269. }
  270. }