using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Collections; using System.Drawing; using System.Data; namespace FPER { // 타수신기 화재 팝업창 전용 클래스 public class _FIRE_LIST { public string FIRE_TIME; // 시간 public bool FIRE_TYPE; // 화재 or 복구 public string FIRE_TEXT; // 디바이스 정보 public string FIRE_RECEIVERNAME; // 타수신기 이름 public string FIRE_RECEIVERIP; // 타수신기 IP } public class _Popup // cyim 2015.8.4 수신반을 위한 static 클래스 정리 { // cyim 2015.8.4 수신반을 위한 static 클래스 정리 MDIParent mdi = null; LogFileCreate LFC = new LogFileCreate(); // // 팝업창을 관리하는 전용 팝업 클래스 // // 공통 팝업창 (1개로 관리함 - 잠시기다려주세요) private Form_Popup CommonPopup = new Form_Popup(); // 팝업 전용 위임자 public delegate void CreateFormCallback(Form Target); public delegate void CreateEtcFirePopupCallback(string MyReceiver_ID, string FireReceiver_ID, MDIParent Target); // 수신기별로 관리되는 팝업창 (모두 Form_Popup_OtherFireAlarm 폼클래스 타입의 데이타가 저장된다) public Hashtable HASH_EtcReceiverFireAlarmPopup = new Hashtable(); // // 차단 정보 팝업창 // // cyim 2013.9.26 중계기차단 보완 public Form_Popup_CutInfo Form_Popup_CutInfo_Main = null; // 차단정보를 새로운 폼에 출력하기 위한 전역 리스트 (차단시에 반드시 호출되는 함수에서 재설정되도록 함) public ArrayList Form_Popup_CutInfo_List = new ArrayList(); // 차단 정보 팝업창 활성화 여부 public bool Form_Popup_CutInfo_Enable = false; public MDIParent MdiParent { get; private set; } // 생성자 public _Popup(MDIParent mdiparent) { mdi = mdiparent; } // 소멸자 ~_Popup() { } // // 공통 팝업창 처리 // // 출력 public void CommonPopupShow(Form Target) { if (Target.InvokeRequired) { CreateFormCallback d = new CreateFormCallback(CommonPopupShow); Target.Invoke(d, new object[] { }); } else { // 사전검사 if (CommonPopup != null) CommonPopup.Close(); // 메모리 할당 CommonPopup = new Form_Popup(); // 이벤트 등록 Target.FormClosing += new FormClosingEventHandler(Target_FormClosing); Target.VisibleChanged += new EventHandler(Target_VisibleChanged); // 표시 CommonPopup.Show(Target); // 위치 CommonPopup.StartPosition = FormStartPosition.CenterParent; // 화면 갱신 CommonPopup.Update(); } } public void Target_VisibleChanged(object sender, EventArgs e) { Form frm = (Form)sender; if (frm.Visible == false) CommonPopupClose(frm); } // 닫힘 public void CommonPopupClose(Form Target) { if (Target.InvokeRequired) { CreateFormCallback d = new CreateFormCallback(CommonPopupClose); Target.Invoke(d, new object[] { }); } else { // 폼닫기 if (CommonPopup != null) { CommonPopup.Hide(); // cyim 2013.9.23 대기팝업창 보완 CommonPopup.Close(); } // 이벤트 해제 Target.VisibleChanged -= new EventHandler(Target_VisibleChanged); Target.FormClosing -= new FormClosingEventHandler(Target_FormClosing); } } // 부모 윈도우 닫힘 이벤트 핸들러 public void Target_FormClosing(object sender, FormClosingEventArgs e) { // 부모가 종료되면 무조건 폼닫기 실행 if (CommonPopup != null) { CommonPopup.Hide(); // cyim 2013.9.23 대기팝업창 보완 CommonPopup.Close(); } } // // 타수신기 화재 팝업창 // // 기존 출력 방식 - 2020.07.20 변경 //public void EtcReceiverFirePopupShow(string MyReceiver_ID, string FireReceiver_ID, MDIParent Target) //{ // // cyim 2013.8.9 타수신기 화재 정보 팝업창 출력 기능 추가 // // 제일먼저 타수신기 화재인지 알아내는것이 좋습니다. Contains 함수도 남용하면 속도에 악영향을 줍니다 // if (MyReceiver_ID != FireReceiver_ID && HASH_EtcReceiverFireAlarmPopup.Count != 0) // { // if (HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID) == true) // { // if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Visible == false) // { // if (Target.InvokeRequired) // { // CreateEtcFirePopupCallback d = new CreateEtcFirePopupCallback(EtcReceiverFirePopupShow); // Target.Invoke(d, new object[] { MyReceiver_ID, FireReceiver_ID, Target }); // } // else // { // int FireReceiver_ID_NUM = int.Parse(FireReceiver_ID); // // 표시 // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Show(); // // 2020.06.23 위치변경 - 멀티 팝업창을 위해서 // //((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).StartPosition = FormStartPosition.CenterParent; // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).StartPosition = FormStartPosition.Manual; // ((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); // // 화면 갱신 // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).Update(); // } // } // } // } //} // 출력 방식 - 2020.07.20 변경 // 현장 요청사항 - 타 수신기 팝업 창 통일화 public void EtcReceiverFirePopupShow(string MyReceiver_ID, string FireReceiver_ID, MDIParent Target) { // cyim 2013.8.9 타수신기 화재 정보 팝업창 출력 기능 추가 // 제일먼저 타수신기 화재인지 알아내는것이 좋습니다. Contains 함수도 남용하면 속도에 악영향을 줍니다 LFC.Log("EtcReceiverFirePopupShow(MyReceiver_ID: " + MyReceiver_ID + ", FireReceiver_ID: " + FireReceiver_ID + ", Target: " + Target); if (MyReceiver_ID != FireReceiver_ID && HASH_EtcReceiverFireAlarmPopup.Count != 0) { LFC.Log("EtcReceiverFireAlarmPopup.Contains: " + HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID)); if (HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID) == true) { LFC.Log("EtcReceiverFireAlarmPopup.Visible " + ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).Visible); if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).Visible == false) { if (Target.InvokeRequired) { CreateEtcFirePopupCallback d = new CreateEtcFirePopupCallback(EtcReceiverFirePopupShow); Target.Invoke(d, new object[] { MyReceiver_ID, MyReceiver_ID, Target }); } else { int FireReceiver_ID_NUM = int.Parse(MyReceiver_ID); // 표시 LFC.Log("EtcReceiverFireAlarmPopup.Show()"); ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).Show(); // 2020.06.23 위치변경 - 멀티 팝업창을 위해서 ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).StartPosition = FormStartPosition.Manual; ((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); // 화면 갱신 ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).Update(); } } LFC.Log("=================================================================================================================="); //else //{ // // 표시 // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID])._Event_EtcFirePopup_Update_Inform_Event(FireReceiver_ID); //} } } } // 기존 프로세스 변경 - 타 수신기 팝업창 단일화 // 데이타만 처리 //public void EtcReceiverFirePopupProcess(string MyReceiver_ID, string FireReceiver_ID, bool FireType, string FireDisplayText, string FireTime) //{ // // cyim 2013.8.9 타수신기 화재 정보 팝업창 출력 기능 추가 // // 제일먼저 타수신기 화재인지 알아내는것이 좋습니다. Contains 함수도 남용하면 속도에 악영향을 줍니다 // if (MyReceiver_ID != FireReceiver_ID && HASH_EtcReceiverFireAlarmPopup.Count != 0) // { // if (HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID) == true) // { // // 제일먼저 해당 수신기의 팝업창에 리스트의 개수를 파악한다.만약 최대값에 도달했다면 제일 마지막에 저장된 데이타를 삭제한다 // if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Count > 14) // cyim 2015.10.23 타수신기 화재 리스트에서 항목은 최대 15개로 표시 // { // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.RemoveAt(0); // } // // 데이타 생성 // _FIRE_LIST FIRE_LIST = new _FIRE_LIST(); // FIRE_LIST.FIRE_TEXT = FireDisplayText; // FIRE_LIST.FIRE_TYPE = FireType; // FIRE_LIST.FIRE_TIME = FireTime;//mdi.MyTime;//DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // cyim 2015.9.23 시간정보 표시 오류 (갱신을 안함) // cyim 2015.10.1 통보받은 화재 발생 시간을 기준으로 표시 // // 데이타 추가 // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Add(FIRE_LIST); // //// 화재 // //if (FireType == true) // //{ // // if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Contains(DisplayText) == false) // // { // // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Add(DisplayText); // // _Event.EtcFirePopup_Update_Inform_Write(FireReceiver_ID); // // } // //} // //// 복구 // //else // //{ // // if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Contains(DisplayText) == true) // // { // // ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).LIST_FIRE_INFO.Remove(DisplayText); // // _Event.EtcFirePopup_Update_Inform_Write(FireReceiver_ID); // // } // //} // } // } //} // 데이타만 처리 public void EtcReceiverFirePopupProcess(string MyReceiver_ID, string FireReceiver_ID, bool FireType, string FireDisplayText, string FireTime) { // cyim 2013.8.9 타수신기 화재 정보 팝업창 출력 기능 추가 // 제일먼저 타수신기 화재인지 알아내는것이 좋습니다. Contains 함수도 남용하면 속도에 악영향을 줍니다 LFC.Log("EtcReceiverFirePopupProcess(MyReceiver_ID: "+ MyReceiver_ID + ", FireReceiver_ID: "+ FireReceiver_ID + ", FireType: " + FireType + ", FireDisplayText: " + FireDisplayText + ", FireTime: " + FireTime); if (MyReceiver_ID != FireReceiver_ID && HASH_EtcReceiverFireAlarmPopup.Count != 0) { LFC.Log("EtcReceiverFireAlarmPopup.Contains: " + HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID)); if (HASH_EtcReceiverFireAlarmPopup.Contains(FireReceiver_ID) == true) { LFC.Log("EtcReceiverFireAlarm_LIST_FIRE_INFO.Count: " + ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).LIST_FIRE_INFO.Count); // 제일먼저 해당 수신기의 팝업창에 리스트의 개수를 파악한다.만약 최대값에 도달했다면 제일 마지막에 저장된 데이타를 삭제한다 if (((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).LIST_FIRE_INFO.Count > 21) // cyim 2015.10.23 타수신기 화재 리스트에서 항목은 최대 20개로 표시 { ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).LIST_FIRE_INFO.RemoveAt(0); } // 데이타 생성 _FIRE_LIST FIRE_LIST = new _FIRE_LIST(); FIRE_LIST.FIRE_TEXT = FireDisplayText; FIRE_LIST.FIRE_TYPE = FireType; FIRE_LIST.FIRE_RECEIVERNAME = ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).POPUP_RECEIVER_NAME; FIRE_LIST.FIRE_RECEIVERIP = ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[FireReceiver_ID]).POPUP_RECEIVER_IP; FIRE_LIST.FIRE_TIME = FireTime;//mdi.MyTime;//DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // cyim 2015.9.23 시간정보 표시 오류 (갱신을 안함) // cyim 2015.10.1 통보받은 화재 발생 시간을 기준으로 표시 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); LFC.Log(" "); // 데이타 추가 ((Form_Popup_OtherFireAlarm)HASH_EtcReceiverFireAlarmPopup[MyReceiver_ID]).LIST_FIRE_INFO.Add(FIRE_LIST); } } } } }