using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Collections; namespace FPER { // cyim 2013.8.9 타수신기 화재 정보 팝업창 출력 기능 추가 // 지금 이 폼의 경우 프로그램이 실행되면서 여러개가 생성되므로 해당 수신기 아이디는 프로그램 종료직전까지 알고 있어야 한다. // 이는 _Popup.EtcReceiverFireAlarmPopup 해쉬테이블에서 관리된다 // 키값은 수신기 아이디이다. 데이타는 이 클래스 자체로 관리되며 데이타중 회로번호를 키로 가지는 해쉬테이블에서 화재정보표시문구를 저장해둔다 public partial class Form_Popup_OtherFireAlarm : Form { // cyim 2015.8.4 수신반을 위한 static 클래스 정리 MDIParent mdi = null; // 크로스 스레드 처리 public delegate void SetText_Callback(string Data); public delegate void SetHash_Callback(Hashtable Data); public delegate void SetList_Callback(ArrayList Data); public delegate void SetForm_Callback(Form Data); // 수신기정보 // 맨처음 프로그램 기동시에 데이타베이스에서 읽어 들어온다 public string POPUP_RECEIVER_ID = null; public string POPUP_RECEIVER_IP = null; public string POPUP_RECEIVER_NAME = null; // 화재정보표시되는 문구 public ArrayList LIST_FIRE_INFO = new ArrayList(); // 생성자 public Form_Popup_OtherFireAlarm(string RECEIVER_ID, MDIParent mdiparent) // cyim 2015.8.4 수신반을 위한 static 클래스 정리 { InitializeComponent(); mdi = mdiparent; // cyim 2015.8.4 수신반을 위한 static 클래스 정리 //public _Popup = new _Popup(mdi); // 폼로드 이벤트 핸들러 등록 this.Load += new EventHandler(Form_Popup_OtherFireAlarm_Load); // 폼닫기 이벤트 핸들러 등록 this.FormClosing += new FormClosingEventHandler(Form_Popup_OtherFireAlarm_FormClosing); // 팝업창 갱신 이벤트 핸들러 mdi.Event.EtcFirePopup_Update_Inform_Event += new _Event.EtcFirePopup_Update_Handler(_Event_EtcFirePopup_Update_Inform_Event); // cyim 2015.8.4 수신반을 위한 static 클래스 정리 // 수신기 아이디 POPUP_RECEIVER_ID = RECEIVER_ID; } // 폼로드 public void Form_Popup_OtherFireAlarm_Load(object sender, EventArgs e) { _Event_EtcFirePopup_Update_Inform_Event(POPUP_RECEIVER_ID); } // 폼닫기 public void Form_Popup_OtherFireAlarm_FormClosing(object sender, FormClosingEventArgs e) { // 이벤트 핸들러 해제 mdi.Event.EtcFirePopup_Update_Inform_Event -= new _Event.EtcFirePopup_Update_Handler(_Event_EtcFirePopup_Update_Inform_Event); // cyim 2015.8.4 수신반을 위한 static 클래스 정리 } // 팝업창 갱신 이벤트 핸들러 public void _Event_EtcFirePopup_Update_Inform_Event(string RECEIVER_ID) { try // cyim 2015.10.23 보완 코드 추가 { // 수신기 아이디에 의하여 이벤트를 거절할 수 있다 //if (POPUP_RECEIVER_ID == RECEIVER_ID) // ID 제한 제거 - 타수신기 팝업 통일화 //{ // 수신기 정보 Label_Receiver_Display(string.Format("ID [{0}] - [{1} , {2}]", POPUP_RECEIVER_ID, POPUP_RECEIVER_NAME, POPUP_RECEIVER_IP)); //this.Text = "[" + POPUP_RECEIVER_NAME + ", " + POPUP_RECEIVER_IP + "]"; // 화재 정보 if (LIST_FIRE_INFO.Count == 0) { // 화재 상태 Label_Fire_Status_1th_Display(""); // 화재 상태 세부 Label_Fire_Status_2st_Display(""); // 화재 리스트 Listview_Fire_Display(null); } else { // 최신 정보 string Recently_FireText = ((_FIRE_LIST)LIST_FIRE_INFO[LIST_FIRE_INFO.Count - 1]).FIRE_TEXT; string Recently_FireTime = ((_FIRE_LIST)LIST_FIRE_INFO[LIST_FIRE_INFO.Count - 1]).FIRE_TIME; string Recently_FireType = ((_FIRE_LIST)LIST_FIRE_INFO[LIST_FIRE_INFO.Count - 1]).FIRE_TYPE == true ? "화재" : "복구"; ; // 화재 상태 Label_Fire_Status_1th_Display(string.Format("{0} 에 {1} 정보 수신되었습니다", Recently_FireTime, Recently_FireType)); // cyim 2014.8.6 문구 수정 및 화면폼 크게 변경 // 화재 상태 세부 Label_Fire_Status_2st_Display(Recently_FireText); // 모든 정보를 표시하자 Listview_Fire_Display(LIST_FIRE_INFO); } // 화면 업데이트 Form_Update(this); //} } catch { } } // Label : 수신기 정보 public void Label_Receiver_Display(string Data) { if (this.label_Receiver.InvokeRequired) { SetText_Callback d = new SetText_Callback(Label_Receiver_Display); this.label_Receiver.Invoke(d, new object[] { Data }); } else { this.label_Receiver.Text = "수신기 : " + Data; } } // Label : 상태 정보 public void Label_Fire_Status_1th_Display(string Data) { if (this.label_Fire_Status_1th.InvokeRequired) { SetText_Callback d = new SetText_Callback(Label_Fire_Status_1th_Display); this.label_Fire_Status_1th.Invoke(d, new object[] { Data }); } else { this.label_Fire_Status_1th.Text = "상 태 : " + Data; } } // Textbox : 화재 정보 public void Label_Fire_Status_2st_Display(string Data) { if (this.label_Fire_Status_2st.InvokeRequired) { SetText_Callback d = new SetText_Callback(Label_Fire_Status_2st_Display); this.label_Fire_Status_2st.Invoke(d, new object[] { Data }); } else { this.label_Fire_Status_2st.Text = Data; } } // ListView : 화재 리스트 public void Listview_Fire_Display(ArrayList pData) { if (this.listView_FireList.InvokeRequired) { SetList_Callback d = new SetList_Callback(Listview_Fire_Display); this.listView_FireList.Invoke(d, new object[] { pData }); } else { this.listView_FireList.Items.Clear(); // cyim 2016.12.06 : 이벤트 로그 해쉬테이블을 복사본으로 현재내역 조회하도록 함 ArrayList Data = (ArrayList)pData.Clone(); // cyim 2015.10.23 1개 및 역순출력 오류 수정 if (Data != null && Data.Count != 0) { if (Data.Count == 1) { Listview_AddItem((_FIRE_LIST)Data[0]); } else { // 인덱스가 작은것이 제일 오래된 데이타이므로 역순으로 출력시킨다 for (int i = Data.Count - 1; i > -1; i--) { Listview_AddItem((_FIRE_LIST)Data[i]); } } } } } // 화재리스트 항목 추가 public void Listview_AddItem(_FIRE_LIST Data) { // 시간, 타입, 항목 string temp_type = Data.FIRE_TYPE == true ? "화재" : "복구"; string[] data = { Data.FIRE_TIME, Data.FIRE_RECEIVERNAME, Data.FIRE_RECEIVERIP, temp_type, Data.FIRE_TEXT }; ListViewItem item = new ListViewItem(data); item.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Bold); listView_FireList.Items.Add(item); } // 폼업데이트 public void Form_Update(Form Data) { if (this.InvokeRequired) { SetForm_Callback d = new SetForm_Callback(Form_Update); this.Invoke(d, new object[] { Data }); } else { this.Update(); } } // 창닫기 버튼 public void button_FirePopupClose_Click(object sender, EventArgs e) { // 리소스 해제 금지 : 차후에 다시 알람이 발생한 경우 메모리 할당 루틴은 없다 this.Hide(); } internal void Form_Popup_OtherFireAlarm_FormClosing() { throw new NotImplementedException(); } } }