Form_Popup_OtherFireAlarm.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Collections;
  9. namespace FPER
  10. {
  11. // cyim 2013.8.9 타수신기 화재 정보 팝업창 출력 기능 추가
  12. // 지금 이 폼의 경우 프로그램이 실행되면서 여러개가 생성되므로 해당 수신기 아이디는 프로그램 종료직전까지 알고 있어야 한다.
  13. // 이는 _Popup.EtcReceiverFireAlarmPopup 해쉬테이블에서 관리된다
  14. // 키값은 수신기 아이디이다. 데이타는 이 클래스 자체로 관리되며 데이타중 회로번호를 키로 가지는 해쉬테이블에서 화재정보표시문구를 저장해둔다
  15. public partial class Form_Popup_OtherFireAlarm : Form
  16. {
  17. // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  18. MDIParent mdi = null;
  19. // 크로스 스레드 처리
  20. public delegate void SetText_Callback(string Data);
  21. public delegate void SetHash_Callback(Hashtable Data);
  22. public delegate void SetList_Callback(ArrayList Data);
  23. public delegate void SetForm_Callback(Form Data);
  24. // 수신기정보
  25. // 맨처음 프로그램 기동시에 데이타베이스에서 읽어 들어온다
  26. public string POPUP_RECEIVER_ID = null;
  27. public string POPUP_RECEIVER_IP = null;
  28. public string POPUP_RECEIVER_NAME = null;
  29. // 화재정보표시되는 문구
  30. public ArrayList LIST_FIRE_INFO = new ArrayList();
  31. // 생성자
  32. public Form_Popup_OtherFireAlarm(string RECEIVER_ID, MDIParent mdiparent) // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  33. {
  34. InitializeComponent();
  35. mdi = mdiparent; // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  36. //public _Popup = new _Popup(mdi);
  37. // 폼로드 이벤트 핸들러 등록
  38. this.Load += new EventHandler(Form_Popup_OtherFireAlarm_Load);
  39. // 폼닫기 이벤트 핸들러 등록
  40. this.FormClosing += new FormClosingEventHandler(Form_Popup_OtherFireAlarm_FormClosing);
  41. // 팝업창 갱신 이벤트 핸들러
  42. mdi.Event.EtcFirePopup_Update_Inform_Event += new _Event.EtcFirePopup_Update_Handler(_Event_EtcFirePopup_Update_Inform_Event); // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  43. // 수신기 아이디
  44. POPUP_RECEIVER_ID = RECEIVER_ID;
  45. }
  46. // 폼로드
  47. public void Form_Popup_OtherFireAlarm_Load(object sender, EventArgs e)
  48. {
  49. _Event_EtcFirePopup_Update_Inform_Event(POPUP_RECEIVER_ID);
  50. }
  51. // 폼닫기
  52. public void Form_Popup_OtherFireAlarm_FormClosing(object sender, FormClosingEventArgs e)
  53. {
  54. // 이벤트 핸들러 해제
  55. mdi.Event.EtcFirePopup_Update_Inform_Event -= new _Event.EtcFirePopup_Update_Handler(_Event_EtcFirePopup_Update_Inform_Event); // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  56. }
  57. // 팝업창 갱신 이벤트 핸들러
  58. public void _Event_EtcFirePopup_Update_Inform_Event(string RECEIVER_ID)
  59. {
  60. try // cyim 2015.10.23 보완 코드 추가
  61. {
  62. // 수신기 아이디에 의하여 이벤트를 거절할 수 있다
  63. //if (POPUP_RECEIVER_ID == RECEIVER_ID) // ID 제한 제거 - 타수신기 팝업 통일화
  64. //{
  65. // 수신기 정보
  66. Label_Receiver_Display(string.Format("ID [{0}] - [{1} , {2}]", POPUP_RECEIVER_ID, POPUP_RECEIVER_NAME, POPUP_RECEIVER_IP));
  67. //this.Text = "[" + POPUP_RECEIVER_NAME + ", " + POPUP_RECEIVER_IP + "]";
  68. // 화재 정보
  69. if (LIST_FIRE_INFO.Count == 0)
  70. {
  71. // 화재 상태
  72. Label_Fire_Status_1th_Display("");
  73. // 화재 상태 세부
  74. Label_Fire_Status_2st_Display("");
  75. // 화재 리스트
  76. Listview_Fire_Display(null);
  77. }
  78. else
  79. {
  80. // 최신 정보
  81. string Recently_FireText = ((_FIRE_LIST)LIST_FIRE_INFO[LIST_FIRE_INFO.Count - 1]).FIRE_TEXT;
  82. string Recently_FireTime = ((_FIRE_LIST)LIST_FIRE_INFO[LIST_FIRE_INFO.Count - 1]).FIRE_TIME;
  83. string Recently_FireType = ((_FIRE_LIST)LIST_FIRE_INFO[LIST_FIRE_INFO.Count - 1]).FIRE_TYPE == true ? "화재" : "복구"; ;
  84. // 화재 상태
  85. Label_Fire_Status_1th_Display(string.Format("{0} 에 {1} 정보 수신되었습니다", Recently_FireTime, Recently_FireType)); // cyim 2014.8.6 문구 수정 및 화면폼 크게 변경
  86. // 화재 상태 세부
  87. Label_Fire_Status_2st_Display(Recently_FireText);
  88. // 모든 정보를 표시하자
  89. Listview_Fire_Display(LIST_FIRE_INFO);
  90. }
  91. // 화면 업데이트
  92. Form_Update(this);
  93. //}
  94. }
  95. catch
  96. { }
  97. }
  98. // Label : 수신기 정보
  99. public void Label_Receiver_Display(string Data)
  100. {
  101. if (this.label_Receiver.InvokeRequired)
  102. {
  103. SetText_Callback d = new SetText_Callback(Label_Receiver_Display);
  104. this.label_Receiver.Invoke(d, new object[] { Data });
  105. }
  106. else
  107. {
  108. this.label_Receiver.Text = "수신기 : " + Data;
  109. }
  110. }
  111. // Label : 상태 정보
  112. public void Label_Fire_Status_1th_Display(string Data)
  113. {
  114. if (this.label_Fire_Status_1th.InvokeRequired)
  115. {
  116. SetText_Callback d = new SetText_Callback(Label_Fire_Status_1th_Display);
  117. this.label_Fire_Status_1th.Invoke(d, new object[] { Data });
  118. }
  119. else
  120. {
  121. this.label_Fire_Status_1th.Text = "상 태 : " + Data;
  122. }
  123. }
  124. // Textbox : 화재 정보
  125. public void Label_Fire_Status_2st_Display(string Data)
  126. {
  127. if (this.label_Fire_Status_2st.InvokeRequired)
  128. {
  129. SetText_Callback d = new SetText_Callback(Label_Fire_Status_2st_Display);
  130. this.label_Fire_Status_2st.Invoke(d, new object[] { Data });
  131. }
  132. else
  133. {
  134. this.label_Fire_Status_2st.Text = Data;
  135. }
  136. }
  137. // ListView : 화재 리스트
  138. public void Listview_Fire_Display(ArrayList pData)
  139. {
  140. if (this.listView_FireList.InvokeRequired)
  141. {
  142. SetList_Callback d = new SetList_Callback(Listview_Fire_Display);
  143. this.listView_FireList.Invoke(d, new object[] { pData });
  144. }
  145. else
  146. {
  147. this.listView_FireList.Items.Clear();
  148. // cyim 2016.12.06 : 이벤트 로그 해쉬테이블을 복사본으로 현재내역 조회하도록 함
  149. ArrayList Data = (ArrayList)pData.Clone();
  150. // cyim 2015.10.23 1개 및 역순출력 오류 수정
  151. if (Data != null && Data.Count != 0)
  152. {
  153. if (Data.Count == 1)
  154. {
  155. Listview_AddItem((_FIRE_LIST)Data[0]);
  156. }
  157. else
  158. {
  159. // 인덱스가 작은것이 제일 오래된 데이타이므로 역순으로 출력시킨다
  160. for (int i = Data.Count - 1; i > -1; i--)
  161. {
  162. Listview_AddItem((_FIRE_LIST)Data[i]);
  163. }
  164. }
  165. }
  166. }
  167. }
  168. // 화재리스트 항목 추가
  169. public void Listview_AddItem(_FIRE_LIST Data)
  170. {
  171. // 시간, 타입, 항목
  172. string temp_type = Data.FIRE_TYPE == true ? "화재" : "복구";
  173. string[] data = { Data.FIRE_TIME, Data.FIRE_RECEIVERNAME, Data.FIRE_RECEIVERIP, temp_type, Data.FIRE_TEXT };
  174. ListViewItem item = new ListViewItem(data);
  175. item.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Bold);
  176. listView_FireList.Items.Add(item);
  177. }
  178. // 폼업데이트
  179. public void Form_Update(Form Data)
  180. {
  181. if (this.InvokeRequired)
  182. {
  183. SetForm_Callback d = new SetForm_Callback(Form_Update);
  184. this.Invoke(d, new object[] { Data });
  185. }
  186. else
  187. {
  188. this.Update();
  189. }
  190. }
  191. // 창닫기 버튼
  192. public void button_FirePopupClose_Click(object sender, EventArgs e)
  193. {
  194. // 리소스 해제 금지 : 차후에 다시 알람이 발생한 경우 메모리 할당 루틴은 없다
  195. this.Hide();
  196. }
  197. internal void Form_Popup_OtherFireAlarm_FormClosing()
  198. {
  199. throw new NotImplementedException();
  200. }
  201. }
  202. }