123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878 |
- using System;
- using System.Collections.Generic;
- using System.Collections;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Threading;
- /// 시스템 구조 Ver2012-07-20
- ///
- /// 원래는 레지스트리에 있는 정보를 가지고 접근해야되지만 지금은 우선 프로그램안의 xml 파일에서 정보를 읽어와서 시스템을 구성한다
- /// 주의할 점은 실행하는 프로그램 경로와 저장하고 열기하는 프로젝트의 경로를 따로 관리하게 되므로 아래를 참조바람
- ///
- /// Program_Configuration.xml (옵션이므로 향후 제거될 수 있다)
- /// => 맨처음 프로그램이 실행하는 경우 제일 먼저 기초데이터를 이파일로 불러들인다. 최근 사용한 프로젝트명, 데이타베이스 접속 정보 등이 여기 저장되어있다.
- /// => 위치는 실행 프로그램 exe 파일과 동일하다
- ///
- /// 프로젝트 폴더
- /// => 메뉴->시스템->환경옵션 메뉴에서 선택한 경로에서 프로젝트 관리하도록 한다.
- /// => 주의할 점! 프로젝트 폴더안에 DB 폴더 안에는 미리 데이타베이스를 복사해야 한다. 차후에는 데이타베이스를 직접 생성할수 있도록 구현해야된다 (현재는 데이타베이스 읽기만 가능하므로)
- /// => 결국 반드시 프로그램 실행 전에 모든 프로젝트가 데이타베이스에 저장 완료되어 있다는 가정하에서 프로그램이 구동된다
- ///
- /// 수신기 아이디
- /// => 수신기 아이디는 1로서 각각 데이타베이스에 저장된다 (전제이다. 데이타베이스에 1이 아닌 다른 값이 들어가지는 않는다)
- /// => UI에 표시될 수신기 아이디는 각각 숫자로 1씩 증가하여 관리된다
- /// => 수신기 아이디에 따라 접근하는 데이타베이스 폴더는 달라지므로 폴더 패스로 수신기를 관리한다
- namespace IControls_FireManager
- {
- public partial class IControls_FireManager : Form
- {
- // 타이머 카운트 (종료없이 항상 타이머가 동작)
- public int timer_MainConfig_Cnt = 0;
- // 프로젝트 새로만들기 여부 대화 팝업창
- public Form Popup_NewProjectInform = new Form();
- // XML 파일 및 데이타베이스 저장 여부 대화 팝업창
- public Form Popup_NotSaveXmlDBInform = new Form();
- // XML 및 DB 저장 직전 상태
- public XMLDB_BEFORE_STATUS Popup_NotSaveXmlDBInform_Status;
- // 프로젝트 저장 여부 대화 팝업창
- public Form Popup_SaveProjectInform = new Form();
- // 수신기 전체 삭제 여부 대화 팝업창
- public Form Popup_ReceiverAllDelInform = new Form();
- // 프로젝트 저장을 위한 페이지 저장을 위한 수신기 아이디 리스트 (처음시작시 수신기 아이디가 모두 저장되어 있다가 저장 완료마다 해당 수신기 정보가 삭제됩니다)
- public ArrayList List_PageSaved_By_ReceiverID = new ArrayList();
- // 프로젝트 저장시에 수신기별로 페이지 저장을 하기 위해 한번만 실행하도록 함
- public bool Project_Save_ReceiverOnceExecute = false;
- // 프로젝트 저장 중 팝업
- public Form ProjectSavingPopup = new Form();
- public Form ProjectSavinEtcgPopup = new Form();
- // 메인
- public IControls_FireManager()
- {
- // 디자이너 초기화
- InitializeComponent();
- // 데이타 초기화
- Initialize_Data();
- // 디버그뷰 프레임 초기화
- Initialize_Frame_DebugView();
- // 트리뷰 프레임 초기화
- Initialize_Frame_TreeView();
- // 워크뷰 프레임 초기화
- Initialize_Frame_WorkView();
- // 개발자가 아니면 디버깅창이 필요없다
- this.uiPanel_DebugView.Closed = true;
- // 디버깅창이 없다면 창 사이즈도 고정되지 않도록 하고, 줄인다
- this.Size = new Size(1662, 858);//1608, 1028
- }
- // 디바이스 트리뷰 초기화
- public void Initialize_Frame_TreeView()
- {
- Frame_Tree Frame = new Frame_Tree();
- _Frame.Create(this.uiPanel_TreeViewContainer, Frame);
- }
- // 디바이스 워크뷰 초기화
- public void Initialize_Frame_WorkView()
- {
- Frame_Work Frame = new Frame_Work();
- _Frame.Create(this.uiPanel_WorkViewContainer, Frame);
- }
- // 디버그뷰 프레임 초기화
- public void Initialize_Frame_DebugView()
- {
- Frame_Debug Frame = new Frame_Debug();
- _Frame.Create(this.uiPanel_DebugViewContainer, Frame);
- }
- // 데이타 초기화
- public void Initialize_Data()
- {
- ///
- /// 폴더 생성 (강제로 폴더 생성 - 차후 삭제할수도있다. 사용자가 환경 옵션 지정시 폴더만 생성하는 역할만 한다)
- ///
- _File.Create_Folder("C:\\", "IControls_FireManager");
- ///
- /// 설정 파일 로드
- ///
- if (_File.Read_ProgramConfiguration() == false)
- {
- _Popup.MessageBoxPopup(0, _Text.GetDamagedConfigFile, _Text.OK);
- }
- ///
- /// 프로젝트 생성 위치, 즉 프로젝트 경로가 없다면 기본값으로 대체함.
- ///
- if (_Data.Project_Path.Length == 0) _Data.Project_Path = _File.ProgramPath;
- ///
- /// 타이머 시작 (폼이름으로 타이머 이름을 생성함)
- ///
- _Timer_WindowBase.Create(null, 1000, timer_MainConfig_Tick, true);
- ///
- /// 상태바 표시
- ///
- Update_StatusBar();
- ///
- /// 이벤트
- ///
- // 폼닫기 이벤트 핸들러 등록 (이벤트 핸들러 해제용)
- this.FormClosing += new FormClosingEventHandler(CreateForm_FormClosing);
- // 프로젝트 저장기능중 페이지 저장이 완료되었음을 알리는 이벤트 핸들러 등록
- _Event.Receiver_PageSaveComplete_SendMessage_Event += new _Event.Receiver_PageSaveComplete_SendMessage_Handler(_Event_Receiver_PageSaveComplete_SendMessage_Event);
- // 화면 최대화 명령 (TreeView Form -> Main Form) 이벤트 핸들러 등록
- _Event.Windows_MaxSize_SendMessage_Event += new _Event.Windows_MaxSize_SendMessage_Handler(_Event_Windows_MaxSize_SendMessage_Event);
- ///
- /// 스타일
- ///
- UI_Style_Initialize();
- }
- // 폼닫기
- public void CreateForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- // XML 및 DB 저장되지 않은 수신기가 존재한다면
- if (_Data.LIST_XmlDBNotSave_Receiver.Count != 0 || _Data.ProJect_Save_Complete == false)
- {
- // 이벤트 해제
- e.Cancel = true;
- // XML 파일 및 데이타베이스 저장 여부
- Popup_NotSaveXmlDBInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.NotSaveProjectConfirm, 0);
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageSaveXmlDB_SendMessage_Event);
- // 프로그램 종료 직전
- Popup_NotSaveXmlDBInform_Status = XMLDB_BEFORE_STATUS.PROGRAM_END;
- }
- else
- {
- // 종료시 잔상이 남는 문제
- this.Hide();
- }
- }
- ///
- /// 스타일
- ///
- // 스타일 초기화 함수
- private void UI_Style_Initialize()
- {
- // 스타일 적용
- this.uiPanelManager.VisualStyle = _Data.Style_PanelVisualStyle;
- this.uiCommandManager.VisualStyle = _Data.Style_VisualStyle;
- this.MainBar.VisualStyle = _Data.Style_VisualStyle;
- this.IconBar_1.VisualStyle = _Data.Style_VisualStyle;
- this.TopRebar.VisualStyle = _Data.Style_VisualStyle;
- this.officeFormAdorner.Office2007ColorScheme = _Data.Style_Office2007ColorScheme;
- }
- // 스타일 변경 함수
- private void UI_Style_Change(
- Janus.Windows.UI.Dock.PanelVisualStyle PanelVisualStyle,
- Janus.Windows.UI.VisualStyle VisualStyle,
- Janus.Windows.Ribbon.Office2007ColorScheme Office2007ColorScheme)
- {
- // 스타일 변수 저장
- _Data.Style_PanelVisualStyle = PanelVisualStyle;
- _Data.Style_VisualStyle = VisualStyle;
- _Data.Style_Office2007ColorScheme = Office2007ColorScheme;
- // 스타일 적용
- UI_Style_Initialize();
- // 체크 상태 초기화 (메뉴에서 선택한 체크 모두 해제)
- UI_Style_CheckStatusClear();
- // 다른폼에 알림
- _Event.WindowStyleSet_SendMessage_Write();
- // 파일에 저장
- _File.Write_ProgramConfiguration();
- }
- // 스타일 변경 체크 상태 초기화
- private void UI_Style_CheckStatusClear()
- {
- this.Menu_Style_Office2007.IsChecked = false;
- this.Menu_Style_Office2003.IsChecked = false;
- this.Menu_Style_VS2005.IsChecked = false;
- this.Menu_Style_Standard.IsChecked = false;
- }
- ///
- /// 이벤트
- ///
- // 윈도우 최대화
- private void _Event_Windows_MaxSize_SendMessage_Event()
- {
- this.WindowState = FormWindowState.Maximized;
- }
- // 메인 메뉴바에서 클릭시
- private void MainBar_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)
- {
- switch (e.Command.Key)
- {
- ///
- /// 메뉴 -> 시스템
- ///
- case "Menu_System_ConfigOption":
- // 시스템 환경 옵션
- Form_System_Config System_Config = new Form_System_Config();
- _Form.Create(System_Config, null);// this.uiCommandManager.Commands[e.Command.Key]);
- break;
- case "Menu_System_End":
- Program_End();
- break;
- ///
- /// 메뉴 -> 프로젝트
- ///
- case "Menu_Project_New":
- Project_New();
- break;
- case "Menu_Project_Open":
- Project_Open();
- break;
- case "Menu_Project_Del":
- Project_Del();
- break;
- case "Menu_Project_Save":
- Project_Save();
- break;
- ///
- /// 메뉴 -> 수신기
- ///
- case "Menu_Receiver_Add":
- // 프로젝트가 존재하는 경우에만
- if (_Data.Project_Name != null)
- {
- Form_Receiver_Add Receiver_Add = new Form_Receiver_Add(_Data.CREATE_RECEIVER_ID());
- _Form.Create(Receiver_Add, null);
- }
- else
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotSelectProjectInform, 0);
- break;
- case "Menu_Receiver_Del":
- // 프로젝트가 존재하는 경우에만
- if (_Data.Project_Name == null)
- {
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotSelectProjectInform, 0);
- }
- // 수신기가 존재하는 경우에만
- else if (_Data.LIST_RECEIVER_ID.Count == 0)
- {
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotReceiver, 0);
- }
- else
- {
- Popup_ReceiverAllDelInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.AllDelete_Continue, 0);
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_ReceiverAllDel_PopupClose_SendMessage_Event);
- }
- break;
- ///
- /// 메뉴 -> 보기
- ///
- case "Menu_View_Status":
- this.StatusBar.Visible = !(this.StatusBar.Visible);
- break;
- case "Menu_View_Debug":
- this.uiPanel_DebugView.Closed = !(this.uiPanel_DebugView.Closed);
- break;
- ///
- /// 메뉴 -> 도움말
- ///
- case "Menu_Help_Helper":
- Form__Sample Temp_Sample = new Form__Sample();
- _Form.Create(Temp_Sample, null);// this.uiCommandManager.Commands[e.Command.Key]);
- break;
- case "Menu_Help_MAP":
- break;
- ///
- /// 메뉴 -> 스타일 (현재 비활성화)
- ///
- case "Menu_Style_Office2007":
- // 변경
- UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Office2007, Janus.Windows.UI.VisualStyle.Office2007, Janus.Windows.Ribbon.Office2007ColorScheme.Blue);
- // 체크
- this.Menu_Style_Office2007.IsChecked = true;
- break;
- case "Menu_Style_Office2003":
- // 변경
- UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Office2003, Janus.Windows.UI.VisualStyle.Office2003, Janus.Windows.Ribbon.Office2007ColorScheme.Blue);
- // 체크
- this.Menu_Style_Office2003.IsChecked = true;
- break;
- case "Menu_Style_VS2005":
- // 변경
- UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.VS2005, Janus.Windows.UI.VisualStyle.VS2005, Janus.Windows.Ribbon.Office2007ColorScheme.Black);
- // 체크
- this.Menu_Style_VS2005.IsChecked = true;
- break;
- case "Menu_Style_Standard":
- // 변경
- UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Standard, Janus.Windows.UI.VisualStyle.Standard, Janus.Windows.Ribbon.Office2007ColorScheme.Black);
- // 체크
- this.Menu_Style_Standard.IsChecked = true;
- break;
- }
- }
- ///
- /// 아이콘바 스타일
- ///
- private void IconBar_2_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)
- {
- switch (e.Command.Key)
- {
- ///
- /// 메뉴 -> 스타일
- ///
- case "Icon_Office2007":
- // 변경
- UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Office2007, Janus.Windows.UI.VisualStyle.Office2007, Janus.Windows.Ribbon.Office2007ColorScheme.Blue);
- // 체크
- this.Menu_Style_Office2007.IsChecked = true;
- break;
- case "Icon_Office2003":
- // 변경
- UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Office2003, Janus.Windows.UI.VisualStyle.Office2003, Janus.Windows.Ribbon.Office2007ColorScheme.Blue);
- // 체크
- this.Menu_Style_Office2003.IsChecked = true;
- break;
- case "Icon_VS2005":
- // 변경
- UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.VS2005, Janus.Windows.UI.VisualStyle.VS2005, Janus.Windows.Ribbon.Office2007ColorScheme.Black);
- // 체크
- this.Menu_Style_VS2005.IsChecked = true;
- break;
- case "Icon_Standard":
- // 변경
- UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Standard, Janus.Windows.UI.VisualStyle.Standard, Janus.Windows.Ribbon.Office2007ColorScheme.Black);
- // 체크
- this.Menu_Style_Standard.IsChecked = true;
- break;
- }
- }
- ///
- /// 타이머
- ///
- // 초당 호출
- private void timer_MainConfig_Tick(object sender, EventArgs e)
- {
- // 반드시 타이머는 사용후 종료해야한다
- // 타이머를 종료하려면 아래의 주석코드를 제거한다
- // _Timer_WindowBase.Delete((string)((System.Windows.Forms.Timer)sender).Tag);
- // 타이머 카운트 갱신
- timer_MainConfig_Cnt++;
- // 타이머 카운트 초기화 (2초 갱신)
- if (timer_MainConfig_Cnt > 2)
- {
- // 초기화
- timer_MainConfig_Cnt = 0;
- ///
- /// 상태바 표시
- ///
- Update_StatusBar();
- //
- // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함
- //
- this.Text = "IControls_FireManager Ver3.1" + " 현재 출력그룹 혹은 맵연동 아이디는 " + _Data.Project_MapGroupIDTypeNumber + " 자리로 셋팅되어 있습니다";
- }
- // 시간정보 갱신
- this.Status_Time.Text = _Text.Blank + _Text.UI_STATUSBAR_PROGRAM_TIME + _Text.Blank + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
- }
- // 상태바 갱신
- private void Update_StatusBar()
- {
- // 프로젝트 명
- this.Status_ProjectName.Text = _Text.Blank + _Text.UI_STATUSBAR_PROJECT_NAME + _Text.Blank + _Data.Project_Name;
- // 프로젝트 패스
- this.Status_ProjectPath.Text = _Text.Blank + _Text.UI_STATUSBAR_PROJECT_PATH + _Text.Blank + _Data.Project_Path;
- // 현재 데이타베이스 경로
- this.Status_DatabasePath.Text = _Text.Blank + _Text.UI_STATUSBAR_DATABASE_PATH + _Text.Blank + _Data.DB_FullPath;
- // 프로그램 버전
- this.Status_ProgramVersion.Text = _Text.Blank + _Text.UI_STATUSBAR_PROGRAM_VERSION + _Text.Blank + _Data.Program_Version;
- }
- // 프로그램 종료
- private void Program_End()
- {
- // XML 및 DB 저장되지 않은 수신기가 존재한다면
- if (_Data.LIST_XmlDBNotSave_Receiver.Count != 0 || _Data.ProJect_Save_Complete == false)
- {
- // XML 파일 및 데이타베이스 저장 여부
- Popup_NotSaveXmlDBInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.NotSaveProjectConfirm, 0);
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageSaveXmlDB_SendMessage_Event);
- // 프로그램 종료 직전
- Popup_NotSaveXmlDBInform_Status = XMLDB_BEFORE_STATUS.PROGRAM_END;
- }
- else
- {
- this.Close();
- }
- }
- ///
- /// 프로젝트
- ///
- // 새로 만들기
- private void Project_New()
- {
- // 프로젝트 새로만들기 여부
- Popup_NewProjectInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 250, 150, _Text.NewProjectInform, 0);
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_NewProjectInform_SendMessage_Event);
- }
- // 프로젝트 새로만들기 여부 경고창을 생성하고 난후에 확인 버튼을 누를때 발생하는 이벤트
- public void _Event_Popup_NewProjectInform_SendMessage_Event(object sender, object etc)
- {
- // 대화 팝업 주체
- Form popup = (Form)sender;
- if (Popup_NewProjectInform.Name == popup.Name && etc.ToString() == _Text.OK)
- {
- // XML 및 DB 저장되지 않은 수신기가 존재한다면
- if (_Data.LIST_XmlDBNotSave_Receiver.Count != 0 || _Data.ProJect_Save_Complete == false)
- {
- // XML 파일 및 데이타베이스 저장 여부
- Popup_NotSaveXmlDBInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.NotSaveProjectConfirm, 0);
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageSaveXmlDB_SendMessage_Event);
- // 프로젝트 새로 만들기 직전
- Popup_NotSaveXmlDBInform_Status = XMLDB_BEFORE_STATUS.PROJECT_NEW;
- }
- else
- {
- // 워크뷰 및 트리뷰 에 알림
- _Event.WorkView_Clear_SendMessage_Write();
- _Event.TreeView_Clear_SendMessage_Write(null);
- // 폼 생성
- _Data.MenuActivedForm = new Form_Project_New();
- _Form.Create(_Data.MenuActivedForm, null);
- }
- }
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_Popup_NewProjectInform_SendMessage_Event);
- }
- // 열기
- private void Project_Open()
- {
- // XML 및 DB 저장되지 않은 수신기가 존재한다면
- if (_Data.LIST_XmlDBNotSave_Receiver.Count != 0 || _Data.ProJect_Save_Complete == false)
- {
- // XML 파일 및 데이타베이스 저장 여부
- Popup_NotSaveXmlDBInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.NotSaveProjectConfirm, 0);
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageSaveXmlDB_SendMessage_Event);
- // 프로젝트 열기 직전
- Popup_NotSaveXmlDBInform_Status = XMLDB_BEFORE_STATUS.PROJECT_OPEN;
- }
- else
- {
- // 열기 폼 생성
- _Data.MenuActivedForm = new Form_Project_Open();
- _Form.Create(_Data.MenuActivedForm, null);
- }
- }
- // 삭제
- private void Project_Del()
- {
- // 삭제 폼 생성
- _Data.MenuActivedForm = new Form_Project_Delete();
- _Form.Create(_Data.MenuActivedForm, null);
- }
- // 저장
- private void Project_Save()
- {
- if (_Data.LIST_XMLRECEIVER_ID.Count == 0 || _Data.HASH_RECEIVER.Count == 0)
- {
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.NotReceiver, 0);
- }
- else if (_Data.Check_Verify_EVENT_TYPE() == false)
- {
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 450, 150, _Text.NothingEventType, 0);
- }
- else
- {
- // 프로젝트 저장여부
- Popup_SaveProjectInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.SaveProject, 0);
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_SaveProjectInform_SendMessage_Event);
- }
- }
- // 프로젝트 저장 여부 확인 버튼을 누를때 발생하는 이벤트
- public void _Event_Popup_SaveProjectInform_SendMessage_Event(object sender, object etc)
- {
- // 대화 팝업 주체
- Form popup = (Form)sender;
- if (Popup_SaveProjectInform.Name == popup.Name && etc.ToString() == _Text.OK)
- {
- // 프로젝트 저장 시작
- Project_Save_Start();
- }
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_Popup_SaveProjectInform_SendMessage_Event);
- }
- // 폼닫기, 프로젝트 새로열기, 프로젝트 새로만들기 -> 프로젝트 저장 여부 확인 버튼을 누를때 발생하는 이벤트
- public void _Event_Popup_PageSaveXmlDB_SendMessage_Event(object sender, object etc)
- {
- // 대화 팝업 주체
- Form popup = (Form)sender;
- if (Popup_NotSaveXmlDBInform.Name == popup.Name && etc.ToString() == _Text.OK)
- {
- // 프로젝트를 저장하자
- Project_Save_Start();
- }
- else
- {
- // 팝업창 직전 상태
- switch (Popup_NotSaveXmlDBInform_Status)
- {
- case XMLDB_BEFORE_STATUS.PROGRAM_END:
- // 저장되지 않았던 리스트 초기화
- _Data.LIST_XmlDBNotSave_Receiver.Clear();
- // 프로젝트 저장여부 완료로 변경
- _Data.ProJect_Save_Complete = true;
- // 프로그램 종료
- this.Close();
- break;
- case XMLDB_BEFORE_STATUS.PROJECT_NEW:
- // 워크뷰 및 트리뷰 에 알림
- _Event.WorkView_Clear_SendMessage_Write();
- _Event.TreeView_Clear_SendMessage_Write(null);
- // 폼 생성
- _Data.MenuActivedForm = new Form_Project_New();
- _Form.Create(_Data.MenuActivedForm, null);
- break;
- case XMLDB_BEFORE_STATUS.PROJECT_OPEN:
- // 열기 폼 생성
- _Data.MenuActivedForm = new Form_Project_Open();
- _Form.Create(_Data.MenuActivedForm, null);
- break;
- }
- }
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageSaveXmlDB_SendMessage_Event);
- }
- // 수신기 전부 삭제 여부 팝업창 이벤트
- public void _Event_ReceiverAllDel_PopupClose_SendMessage_Event(object sender, object etc)
- {
- // 대화 팝업 주체
- Form popup = (Form)sender;
- if (Popup_ReceiverAllDelInform.Name == popup.Name && etc.ToString() == _Text.OK)
- {
- // 전체 삭제 이벤트 발생
- _Event.Receiver_Clear_SendMessage_Write();
- }
- // 대화 팝업은 특별처리
- _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_ReceiverAllDel_PopupClose_SendMessage_Event);
- }
- // 프로젝트 저장을 시작한다
- public void Project_Save_Start()
- {
- // 수신기가 없다면 저장 못함
- if (_Data.LIST_XMLRECEIVER_ID.Count == 0)
- {
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.NotReceiver, 0);
- return;
- }
- // 프로젝트 저장 중
- ProjectSavingPopup = _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.SaveProjectInform, 0);
- // 저장을 위한 리스트 생성
- List_PageSaved_By_ReceiverID.Clear();
- List_PageSaved_By_ReceiverID = (ArrayList)_Data.LIST_XMLRECEIVER_ID.Clone();
- // 화면 전환 (프로젝트 메인 페이지의 경우 특별히 매개변수에 SystenTeee 정보는 필요없다)
- _Event.WorkViewPageName_SendMessage_Write(null, Object_Type.PROJECT, null, null);
- // 프로젝트 저장
- Project_Save_ReceiverOnceExecute = false;
- // 대기 타이머 시작
- _Timer_WindowBase.Delete("Project_Save_Start");
- _Timer_WindowBase.Create("Project_Save_Start", 1000, timer_Project_Save_Start_Tick, true);
- }
- // 수신기별로 페이지 저장 완료 알림
- public void _Event_Receiver_PageSaveComplete_SendMessage_Event(string RECEIVER_ID)
- {
- // 저장완료했으므로 삭제
- List_PageSaved_By_ReceiverID.Remove(RECEIVER_ID);
- // 타이머 재동작
- Project_Save_ReceiverOnceExecute = false;
- }
- // 프로젝트 저장을 타이머로 처리함
- private void timer_Project_Save_Start_Tick(object sender, EventArgs e)
- {
- try
- {
- if (Project_Save_ReceiverOnceExecute == false)
- {
- Project_Save_ReceiverOnceExecute = true;
- // 마지막 수신기 처리
- if (List_PageSaved_By_ReceiverID.Count == 0)
- {
- // 팝업 종료(프로젝트 저장완료했습니다 -> 종료)
- ProjectSavingPopup.Close();
- // 팝업 시작(맵파일 저장중입니다 -> 시작)
- ProjectSavinEtcgPopup = _Popup.Create(Popup_Type.ConfirmNoBtn, Popup_Style.Normal, _Text.OK, 450, 150, _Text.SaveProjectEtcInform, 0);
- // 파일 복사 및 최종 마무리
- Project_Save_EndRoutine();
- // 팝업 시작(맵파일 저장중입니다 -> 종료)
- ProjectSavinEtcgPopup.Close();
- // 타이머종료
- _Timer_WindowBase.Delete("Project_Save_Start");
- }
- else
- {
- // 배열중 처음 수신기 아이디
- string Receiver_ID = (string)List_PageSaved_By_ReceiverID[0];
- // 페이지 저장
- _Event.Page_Save_SendMessage_Write(Receiver_ID);
- }
- }
- }
- catch (Exception ex)
- {
- // LOG
- _Event.DebugView_SendMessage_Write(ex.ToString());
- }
- }
- // 프로젝트 저장 최종 루틴
- private void Project_Save_EndRoutine()
- {
- try
- {
- ArrayList TempRemoveConfigTable = (ArrayList)_Data.LIST_XMLRECEIVER_ID.Clone();
- // 현재 몇개의 수신기가 있는지 알아내자
- foreach (string Receiver_Id in _Data.LIST_XMLRECEIVER_ID)
- {
- // 프로세스 삭제
- System.Diagnostics.Process[] mProcess = System.Diagnostics.Process.GetProcessesByName("fbserver");
- foreach (System.Diagnostics.Process p in mProcess)
- p.Kill();
- System.Threading.Thread.Sleep(1000);
- // Temp 폴더의 DB 를 각 수신기에 복사한다
- string TempDB_Path = _Data.DataBaseFilePath_Get(null);
- string ReceiverDB_Path = _Data.DataBaseFilePath_Get(Receiver_Id);
- System.IO.File.Copy(TempDB_Path, ReceiverDB_Path, true);
- // 파일복사는 시간이 걸릴것이다
- System.Threading.Thread.Sleep(1000);
- // 경로 재지정
- _Data.DataBaseFilePath_Set(Receiver_Id);
- // 각 수신기의 DB 의 TB_CONFIG 를 조절한다 (상관없는 디비는 모두 지워버린다)
- foreach (string Remove_Id in TempRemoveConfigTable)
- if (Remove_Id != Receiver_Id)
- _Db.Execute(_Sql.Delete_Table("TB_CONFIG", Remove_Id));
- // 맵프로세스 자동생성
- Project_Save_MapProcess(Receiver_Id);
- }
- // 경로 재지정 (temp로 복귀)
- _Data.DataBaseFilePath_Set(null);
- // cyim 2016.12.15 : 프로젝트 강제 쿼리 (수신반용 테이블)
- // 수신반에 연동할 모바일앱용 테이블을 저장한다
- _Db.Execute("delete from TB_RECEIVER_ERROR_COUNT");
- foreach (string ID in _Data.LIST_RECEIVER_ID)
- _Db.Execute(string.Format("insert into TB_RECEIVER_ERROR_COUNT (IP_ADDRESS,INFO1,INFO2,INFO3,INFO4,INFO5,INFO6,UPDATE_TIME) values ('{0}',0,0,0,0,0,0,current_timestamp)",
- ((_RECEIVER)_Data.HASH_RECEIVER[ID]).IP));
- // 프로젝트 완료
- _Data.ProJect_Save_Complete = true;
- }
- catch (Exception ex)
- {
- // LOG
- _Event.DebugView_SendMessage_Write(ex.ToString());
- }
- }
- // 프로젝트 저장시에 맵프로세스 파일을 자동 생성해준다
- private void Project_Save_MapProcess(string Receiver_Id)
- {
- // 맵연동 파일 생성용 전용 쿼리
- DataRowCollection DB_TABLE_MAPPROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.MapProcessFile_Create(Receiver_Id));
- if (DB_TABLE_MAPPROCESS != null && DB_TABLE_MAPPROCESS.Count != 0)
- {
- // 맵연동설정파일 포맷
- // - 한개의 레코드 길이 : 40 Byte (개행문자 포함)
- // - 구분자 는 |
- // - 마지막에 개행문자 (CR/LF)
- // - 순서 : A.MAP_NO,A.MAP_TYPE (ASC)
- // 1. RECEIVER ID : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)
- // 2. MAP NO. : 7 Bytes (7자리가 아닐 경우 왼쪽 0으로 채움) // cyim 2015.10.30 : 포맷변경 포함 5->7, 즉 2번째 Map no 가 7자리로 변경
- // 3. MAP TYPE : 1 Bytes (NULL일 경우 공백으로 채움)
- // 4. PROCESS TYPE : 1 Bytes (NULL일 경우 공백으로 채움)
- // 5. COMM. ID : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)
- // 6. BOARD ID : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)
- // 7. LOOP NO. : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)
- // 8. REPEATER ID : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)
- // 9. DEVICE ID : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)
- // 10. IN/OUT TYPE : 1 Bytes (NULL일 경우 공백으로 채움)
- // 11. USE FLAG : 1 Bytes (NULL일 경우 공백으로 채움)
- // 12. CR/LF : 2 Bytes
- // ex) C 소스코드
- // // MAP DATA 구성
- // sprintf (szMapData,"%03d|%07d|%c|%c|%03d|%03d|%03d|%03d|%03d|%c|%c|\r\n", // cyim 2015.10.30 : 포맷변경 포함 5->7, 즉 2번째 Map no 가 7자리로 변경
- // nReceiverID,nMapNo,
- // (szMapType[0]!='\0'?szMapType[0]:' '),
- // (szProcessType[0]!='\0'?szProcessType[0]:' '),
- // nCommID,nBoardID,nLoopNo,nRepeaterID,nDeviceID,
- // (szInoutType[0]!='\0'?szInoutType[0]:' '),
- // (szUseFlag[0]!='\0'?szUseFlag[0]:' '));
- // ex) 001|0000001|I|D|001|001|000|002|001|I|Y| // cyim 2015.10.30 : 포맷변경 포함 5->7, 즉 2번째 Map no 가 7자리로 변경
- StringBuilder Contents = new StringBuilder();
- foreach (DataRow dr in DB_TABLE_MAPPROCESS)
- {
- if (dr[0].ToString().Length != 0 && dr[1].ToString().Length != 0 && dr[2].ToString().Length != 0 && dr[3].ToString().Length != 0
- && dr[4].ToString().Length != 0 && dr[5].ToString().Length != 0 && dr[6].ToString().Length != 0 && dr[7].ToString().Length != 0
- && dr[8].ToString().Length != 0 && dr[9].ToString().Length != 0 && dr[10].ToString().Length != 0)
- {
- // 데이타 추출 및 포맷 적용
- string RECEIVER_ID = Int32.Parse(dr["RECEIVER_ID"].ToString()).ToString("D3");
- // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함
- string MAP_NO = "";
- if (_Data.Project_MapGroupIDTypeNumber == "6")
- MAP_NO = Int32.Parse(dr["MAP_NO"].ToString()).ToString("D7"); // cyim 2015.10.30 : 포맷변경 포함 5->7, 즉 2번째 Map no 가 7자리로 변경
- else
- MAP_NO = Int32.Parse(dr["MAP_NO"].ToString()).ToString("D5");
- string MAP_TYPE = dr["MAP_TYPE"].ToString();
- string PROCESS_TYPE = dr["PROCESS_TYPE"].ToString();
- string COMM_ID = Int32.Parse(dr["COMM_ID"].ToString()).ToString("D3");
- string BOARD_ID = Int32.Parse(dr["BOARD_ID"].ToString()).ToString("D3");
- string LOOP_NO = Int32.Parse(dr["LOOP_NO"].ToString()).ToString("D3");
- string REPEATER_ID = Int32.Parse(dr["REPEATER_ID"].ToString()).ToString("D3");
- string DEVICE_ID = Int32.Parse(dr["DEVICE_ID"].ToString()).ToString("D3");
- string INOUT_TYPE = dr["INOUT_TYPE"].ToString();
- string USE_FLAG = dr["USE_FLAG"].ToString();
- // 구분자 포함하여 레코드 단위 생성
- Contents.Append(
- RECEIVER_ID + "|" +
- MAP_NO + "|" +
- MAP_TYPE + "|" +
- PROCESS_TYPE + "|" +
- COMM_ID + "|" +
- BOARD_ID + "|" +
- LOOP_NO + "|" +
- REPEATER_ID + "|" +
- DEVICE_ID + "|" +
- INOUT_TYPE + "|" +
- USE_FLAG + "|"
- // + _Text.CarrageReturn // cyim 2016.03.29 : 통신데몬과 마차가지로 개행문자 삭제
- );
- }
- }
- ///
- /// 폴더생성 및 기본경로 지정
- ///
- // 수신기 폴더명
- string ReiceiverFolderName = _Text.DEFAULT_FOLDER_RECEIVER_PREFIX + Receiver_Id;
- // 경로 지정
- string MapProcessFile_ProjectPath = _Data.Project_Path + "\\" + _Data.Project_Name + "\\" + ReiceiverFolderName;
- //
- // 파일생성
- //
- _Cfg.Create_Cfg(Contents.ToString(), MapProcessFile_ProjectPath + "\\" + _Text.DEFALUT_MAPPROCESS_FILENAME);
- }
- }
- }
- }
|