d0fbc7ad932e2efa80e10688ba45fad19e740fc7.svn-base 113 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Collections;
  10. using System.Threading;
  11. namespace IControls_FireManager
  12. {
  13. public partial class Frame_Tree : Form
  14. {
  15. // Device Tree 에서 사용자가 선택한 노드
  16. public TreeNode SystemTree_SelectedNode;
  17. // 수신기 를 표시하기 위한 델리게이트
  18. delegate void TreeView_SetTextCallback(TreeNode pNode, _RECEIVER RECEIVER);
  19. // 수신기 전체 삭제 여부 대화 팝업창
  20. public Form Popup_ReceiverAllDelInform = new Form();
  21. // 수신기 삭제 여부 대화 팝업창
  22. public Form Popup_ReceiverDelInform = new Form();
  23. // 페이지 전체 삭제 여부 대화 팝업창
  24. public Form Popup_PageAllDelInform = new Form();
  25. // 페이지 삭제 여부 대화 팝업창
  26. public Form Popup_PageDelInform = new Form();
  27. // 페이지 저장 여부 대화 팝업창
  28. public Form Popup_PageSaveInform = new Form();
  29. // 동기화 진행시 트리 노드에 접근하기 위한 델리게이트
  30. delegate void TreeView_SyncXmlDataNodeCallback();
  31. // 동기화 진행 여부 대화 팝업창
  32. public Form Popup_XmlSyncStartInform = new Form();
  33. // 동기화 진행시 진행 팝업창
  34. public Form Popup_XmlSyncStartProgress = new Form();
  35. public int Popup_XmlSyncStartProgress_Count = 0; // 카운트
  36. public int Popup_XmlSyncStartProgress_Count_End = 3; // 최종카운트
  37. // 디바이스 정보를 DB에 저장 시 진행팝업창
  38. public Form Popup_DeviceIconSave_Progress = new Form();
  39. public int Popup_DeviceIconSave_Progress_Count = 0; // 카운트
  40. public int Popup_DeviceIconSave_Progress_Count_End = 0; // 최종카운트
  41. // 프로젝트 -> 수신기 추가 -> 확인 버튼을 누르는 경우, 수신기 정보를 임시 저장하는 클래스
  42. public _RECEIVER Temp_RECEIVER = new _RECEIVER();
  43. // 맵디자이너에서 페이지 동기화 스레드
  44. public Thread WorkingThread = null;
  45. //
  46. // 가변엑티브 레포트용 데이타
  47. //
  48. // 수신기 - 포인트 - 출력
  49. string[] ColumnNames_Point_Output = _Convert.String_to_ArrayString(_Text.UI_WORKFRAME_POINT_OUTPUT_COLUMNNAME);
  50. // 수신기 - 포인트 - 입력
  51. string[] ColumnNames_Point_Input = _Convert.String_to_ArrayString(_Text.UI_WORKFRAME_POINT_INPUT_COLUMNNAME);
  52. // 컬럼헤더
  53. public Single temp = 1.51F; // 0.280
  54. public Single temp2 = 1.11F;
  55. public ArrayList Point_Input_ColumnHeader = new ArrayList(); // 1.728
  56. public ArrayList Point_Output_ColumnHeader = new ArrayList(); // 1.728
  57. // 화면캡쳐
  58. public int Caputure_Process_Cnt = 0;
  59. public string Capure_Receiver_ID = null;
  60. public int Capture_Page_Index = 0;
  61. public Form Capture_Warning = null;
  62. // 생성자
  63. public Frame_Tree()
  64. {
  65. ///
  66. /// 초기화
  67. ///
  68. InitializeComponent();
  69. ///
  70. /// 이벤트
  71. ///
  72. // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
  73. this.FormClosing += new FormClosingEventHandler(CreateForm_FormClosing);
  74. // 트리뷰에 페이지 노드를 생성 및 편집하기 위한 이벤트 등록
  75. _Event.TreeView_PageNodeSet_SendMessage_Event += new _Event.TreeView_PageNodeSet_SendMessage_Handler(_Event_TreeView_PageNodeSet_SendMessage_Event);
  76. // 트리 추가 이벤트 핸들러 등록
  77. _Event.TreeView_ReceiverNodeSet_SendMessage_Event += new _Event.TreeView_ReceiverNodeSet_SendMessage_Handler(_Event_TreeView_ReceiverNodeSet_SendMessage_Event);
  78. // 다른이름으로 페이지 명을 변경하여 저장하는 이벤트 핸들러 등록
  79. _Event.Page_Rename_SendMessage_Event += new _Event.Page_Rename_SendMessage_Handler(_Event_Page_Rename_SendMessage_Event);
  80. // 페이지 저장 (XML 및 DB 저장) 이벤트 핸들러 등록
  81. _Event.Page_Save_SendMessage_Event += new _Event.Page_Save_SendMessage_Handler(_Event_Page_Save_SendMessage_Event);
  82. // 트리뷰 초기화 이벤트 및 프로젝트 열기 혹은 새로만들기 겸용 핸들러 등록
  83. _Event.TreeView_Clear_SendMessage_Event += new _Event.TreeView_Clear_SendMessage_Handler(_Event_TreeView_Clear_SendMessage_Event);
  84. // 수신기 초기화 이벤트 핸들러 등록
  85. _Event.Receiver_Clear_SendMessage_Event += new _Event.Receiver_Clear_SendMessage_Handler(_Event_Receiver_Clear_SendMessage_Event);
  86. // 수신기 추가 및 편집 폼에서 작업 완료 이벤트 핸들러 등록
  87. _Event.WorkViewPageName_Receiver_SendMessage_Event += new _Event.WorkViewPageName_Receiver_SendMessage_Handler(_Event_WorkViewPageName_Receiver_SendMessage_Event);
  88. ///
  89. /// UI 셋팅
  90. ///
  91. // 트리 초기화
  92. this.treeView_SystemTree.Nodes.Clear();
  93. // 가변레포트용 데이타
  94. // 입력포인트
  95. _ActiveReport.Print_Default_Column(Point_Input_ColumnHeader, ColumnNames_Point_Input[0], ColumnNames_Point_Input[0], 0.31F);
  96. _ActiveReport.Print_Default_Column(Point_Input_ColumnHeader, ColumnNames_Point_Input[1], ColumnNames_Point_Input[1], temp2);
  97. _ActiveReport.Print_Default_Column(Point_Input_ColumnHeader, ColumnNames_Point_Input[2], ColumnNames_Point_Input[2], temp2);
  98. _ActiveReport.Print_Default_Column(Point_Input_ColumnHeader, ColumnNames_Point_Input[3], ColumnNames_Point_Input[3], temp2);
  99. _ActiveReport.Print_Default_Column(Point_Input_ColumnHeader, ColumnNames_Point_Input[4], ColumnNames_Point_Input[4], temp2);
  100. _ActiveReport.Print_Default_Column(Point_Input_ColumnHeader, ColumnNames_Point_Input[5], ColumnNames_Point_Input[5], temp2);
  101. _ActiveReport.Print_Default_Column(Point_Input_ColumnHeader, ColumnNames_Point_Input[6], ColumnNames_Point_Input[6], temp2);
  102. // 출력포인트
  103. _ActiveReport.Print_Default_Column(Point_Output_ColumnHeader, ColumnNames_Point_Output[0], ColumnNames_Point_Output[0], 0.31F);
  104. _ActiveReport.Print_Default_Column(Point_Output_ColumnHeader, ColumnNames_Point_Output[1], ColumnNames_Point_Output[1], temp);
  105. _ActiveReport.Print_Default_Column(Point_Output_ColumnHeader, ColumnNames_Point_Output[2], ColumnNames_Point_Output[2], temp);
  106. _ActiveReport.Print_Default_Column(Point_Output_ColumnHeader, ColumnNames_Point_Output[3], ColumnNames_Point_Output[3], temp);
  107. _ActiveReport.Print_Default_Column(Point_Output_ColumnHeader, ColumnNames_Point_Output[4], ColumnNames_Point_Output[4], temp);
  108. }
  109. // _Receiver.xml 제거 : cyim 2012.8.29
  110. /////
  111. ///// Receiver XML 로 부터 읽은 값을 토대로 트리에 표시하기
  112. /////
  113. //private void treeView_Read_Receiver_XML()
  114. //{
  115. // // 프로젝트명이 있는 경우에 한해서 트리를 자동으로 추가해주자
  116. // // 단, Receiver.xml 에 아무런 데이타가 없다면 표시할 의미가 없다
  117. // if (_Data.HASH_XMLRECEIVER.Count != 0)
  118. // {
  119. // foreach (string XMLRECEIVER_ID in _Data.LIST_XMLRECEIVER_ID)
  120. // {
  121. // _RECEIVER RECEIVER = new _RECEIVER();
  122. // // 수신기 아이디
  123. // RECEIVER.ID = ((_ReceiverXML)_Data.HASH_XMLRECEIVER[XMLRECEIVER_ID]).ID;
  124. // // 수신기 아이피
  125. // RECEIVER.IP = ((_ReceiverXML)_Data.HASH_XMLRECEIVER[XMLRECEIVER_ID]).IP;
  126. // // 수신기 이름
  127. // RECEIVER.KEY_NAME = ((_ReceiverXML)_Data.HASH_XMLRECEIVER[XMLRECEIVER_ID]).KEY_NAME;
  128. // // 해쉬에 추가
  129. // if (_Hash.Add(_Data.HASH_RECEIVER, RECEIVER.ID, RECEIVER) == true)
  130. // {
  131. // // 키리스트에 추가
  132. // _Data.LIST_RECEIVER_ID.Add(RECEIVER.ID);
  133. // }
  134. // }
  135. // // 파일 읽기에 사용한 정보는 클리어
  136. // _Data.LIST_XMLRECEIVER_ID.Clear();
  137. // _Data.HASH_XMLRECEIVER.Clear();
  138. // // 저장된 정보를 토대로 트리에 표시
  139. // foreach (string RECEIVER_ID in _Data.LIST_RECEIVER_ID)
  140. // {
  141. // // 수신기 노드 추가
  142. // _Event_TreeView_ReceiverNodeSet_SendMessage_Event((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]);
  143. // }
  144. // // 동기화 작업 시작
  145. // // 리스트 및 해쉬 삭제
  146. // _Data.LIST_PAGE_ID.Clear();
  147. // _Data.HASH_PAGE.Clear();
  148. // ///
  149. // /// 스레드 시작전에 첫번째 수신기의 그래픽 노드를 선택했다고 지정하자
  150. // ///
  151. // // 서브키를 조회하기 위해 임시로 클래스 생성
  152. // _RECEIVER tempRECEIVER = new _RECEIVER();
  153. // // 첫번째 수신기의 그래픽 노드 키값 조회
  154. // string temp_key = tempRECEIVER.Set_SubKey(((_RECEIVER)_Data.HASH_RECEIVER[_Data.LIST_RECEIVER_ID[0].ToString()]), _Text.UI_TREE_IMAGE);
  155. // // 해당 그래픽 노드 정보
  156. // TreeNode tempNode = _Tree.GetNode_By_Name(this.treeView_SystemTree, temp_key);
  157. // // 선택된 노드를 지정
  158. // SystemTree_SelectedNode = tempNode;
  159. // // 스레드 시작
  160. // Sync_Xml_Data_Thread(((_RECEIVER)_Data.HASH_RECEIVER[_Data.LIST_RECEIVER_ID[0].ToString()]));
  161. // }
  162. //}
  163. ///
  164. /// Device Tree 노드의 마우스 클릭
  165. ///
  166. private void treeView_SystemTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
  167. {
  168. // LOG
  169. _Event.DebugView_SendMessage_Write(e.Node.Name + _Text.Minus + e.Node.Text + _Text.Blank + _Text.LOG_PushTreeNode);
  170. // 오른쪽마우스를 누르면 왼쪽마우스 버튼을 누른것처럼 포커스를 이동한다
  171. treeView_SystemTree.SelectedNode = treeView_SystemTree.GetNodeAt(e.X, e.Y);
  172. // 선택한 트리 노드를 저장한다
  173. SystemTree_SelectedNode = e.Node;
  174. // 왼쪽마우스 혹은 오른쪽 마우스 버튼으로 노드를 선택하면 페이지가 출력된다
  175. switch (e.Node.ImageIndex)
  176. {
  177. // 프로젝트
  178. case (int)Object_Type.PROJECT:
  179. _Event.WorkViewPageName_SendMessage_Write(null, Object_Type.PROJECT, null, null);
  180. break;
  181. // 수신기
  182. case (int)Object_Type.RECEIVER:
  183. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Name, Object_Type.RECEIVER, null, null);
  184. break;
  185. // 수신기 - 입출력
  186. case (int)Object_Type.INOUT:
  187. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Name, Object_Type.INOUT, null, null);
  188. break;
  189. // 수신기 - 입출력 - 통신보드
  190. case (int)Object_Type.COM_BOARD:
  191. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Parent.Name, Object_Type.COM_BOARD, null, null);
  192. break;
  193. // 수신기 - 입출력 - IO보드
  194. case (int)Object_Type.IO_BOARD:
  195. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Parent.Name, Object_Type.IO_BOARD, null, null);
  196. break;
  197. // 수신기 - 입출력 - 키패드
  198. case (int)Object_Type.KEYPAD:
  199. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Parent.Name, Object_Type.KEYPAD, null, null);
  200. break;
  201. // 수신기 -입출력 - 비상방송
  202. case (int)Object_Type.EMERGENCY_BROADCAST:
  203. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Parent.Name, Object_Type.EMERGENCY_BROADCAST, null, null);
  204. break;
  205. // 수신기 - 포인트
  206. case (int)Object_Type.POINT:
  207. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Name, Object_Type.POINT, null, null);
  208. break;
  209. // 수신기 - 포인트 - 입력
  210. case (int)Object_Type.INPUT:
  211. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Parent.Name, Object_Type.INPUT, null, null);
  212. break;
  213. // 수신기 - 포인트 - 출력
  214. case (int)Object_Type.OUTPUT:
  215. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Parent.Name, Object_Type.OUTPUT, null, null);
  216. break;
  217. // 수신기 - 연동
  218. case (int)Object_Type.OPER:
  219. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Name, Object_Type.OPER, null, null);
  220. break;
  221. // 수신기 - 연동 - 그룹
  222. case (int)Object_Type.OPER_GROUP:
  223. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Parent.Name, Object_Type.OPER_GROUP, null, null);
  224. break;
  225. // 수신기 - 연동 - 연동설정
  226. case (int)Object_Type.OPER_SET:
  227. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Parent.Name, Object_Type.OPER_SET, null, null);
  228. break;
  229. // 수신기 - 그래픽
  230. case (int)Object_Type.IMAGE:
  231. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Name, Object_Type.IMAGE, null, null);
  232. break;
  233. // 수신기 - 그래픽 - 페이지
  234. case (int)Object_Type.PAGE:
  235. _Event.WorkViewPageName_SendMessage_Write(SystemTree_SelectedNode.Parent.Parent.Name, Object_Type.PAGE, SystemTree_SelectedNode.Name, SystemTree_SelectedNode.Text);
  236. break;
  237. }
  238. // 오른쪽마우스 버튼
  239. if (e.Button == System.Windows.Forms.MouseButtons.Right)
  240. {
  241. switch (e.Node.ImageIndex)
  242. {
  243. // 프로젝트를 선택하는 경우
  244. case (int)Object_Type.PROJECT:
  245. {
  246. // 팝업 메뉴 생성
  247. _Contextmenustrip.Create(this.treeView_SystemTree, e.Location,
  248. _Text.ReceiverAdd + ";" +
  249. _Text.ContextStripSeparator + ";" +
  250. _Text.TreeCollapse + ";" +
  251. _Text.TreeExpand + ";" +
  252. _Text.ContextStripSeparator + ";" +
  253. _Text.ReceiverAllDel + ";" +
  254. _Text.ContextStripSeparator + ";" + // cyim 2016.12.15 : 모바일앱용 사용자 관리
  255. _Text.UserEdit + ";" +
  256. _Text.ContextStripSeparator,
  257. //+ ";" + // 엑셀로부터 이벤트타입을 읽어오는 방법으로 수정하였으므로 필요없음
  258. //_Text.EventTypeCreate,
  259. Selected_Project_Menustrip_ItemClicked);
  260. }
  261. break;
  262. // 수신기를 선택하는 경우
  263. case (int)Object_Type.RECEIVER:
  264. {
  265. // 팝업 메뉴 생성
  266. _Contextmenustrip.Create(this.treeView_SystemTree, e.Location,
  267. _Text.ReceiverDel + ";" +
  268. _Text.ReceiverEdit,
  269. Selected_Receiver_Menustrip_ItemClicked);
  270. }
  271. break;
  272. // 수신기 입출력을 선택하는 경우
  273. case (int)Object_Type.INOUT:
  274. {
  275. // 팝업 메뉴 생성
  276. _Contextmenustrip.Create(this.treeView_SystemTree, e.Location,
  277. _Text.INOUTEdit,
  278. Selected_InOut_Menustrip_ItemClicked);
  279. }
  280. break;
  281. // 포인트를 선택하는 경우
  282. case (int)Object_Type.POINT:
  283. {
  284. // 팝업 메뉴 생성
  285. _Contextmenustrip.Create(this.treeView_SystemTree, e.Location,
  286. _Text.ExcelImport,
  287. Selected_Point_Menustrip_ItemClicked);
  288. }
  289. break;
  290. // 포인트중 입력을 선택하는 경우
  291. case (int)Object_Type.INPUT:
  292. {
  293. // 팝업 메뉴 생성
  294. _Contextmenustrip.Create(this.treeView_SystemTree, e.Location,
  295. _Text.PointInputReport + ";" +
  296. _Text.EmergencyEditor + ";" +
  297. _Text.OPCOperationData,
  298. Selected_Point_Menustrip_ItemClicked);
  299. }
  300. break;
  301. // 포인트중 출력을 선택하는 경우
  302. case (int)Object_Type.OUTPUT:
  303. {
  304. // 팝업 메뉴 생성
  305. _Contextmenustrip.Create(this.treeView_SystemTree, e.Location,
  306. _Text.PointOutputReport,
  307. Selected_Point_Menustrip_ItemClicked);
  308. }
  309. break;
  310. // 연동의 그룹을 선택하는 경우
  311. case (int)Object_Type.OPER_GROUP:
  312. {
  313. // 팝업 메뉴 생성
  314. _Contextmenustrip.Create(this.treeView_SystemTree, e.Location,
  315. _Text.ExcelImport + ";" +
  316. _Text.OperGroupReport,
  317. Selected_OperGroup_Menustrip_ItemClicked);
  318. }
  319. break;
  320. // 연동의 설정을 선택하는 경우
  321. case (int)Object_Type.OPER_SET:
  322. {
  323. // 팝업 메뉴 생성
  324. _Contextmenustrip.Create(this.treeView_SystemTree, e.Location,
  325. _Text.ExcelImport + ";" +
  326. _Text.OperSetReport + ";" +
  327. _Text.MapProcessFile,
  328. Selected_OperSet_Menustrip_ItemClicked);
  329. }
  330. break;
  331. // 그래픽을 선택하는 경우
  332. case (int)Object_Type.IMAGE:
  333. {
  334. // 팝업 메뉴 생성
  335. _Contextmenustrip.Create(this.treeView_SystemTree, e.Location,
  336. _Text.PageAdd + ";" +
  337. _Text.PageSave + ";" +
  338. _Text.PageSync + ";" +
  339. _Text.ContextStripSeparator + ";" +
  340. _Text.PageAllDel + ";" +
  341. _Text.ContextStripSeparator + ";" +
  342. _Text.PageReport,
  343. Selected_Image_Menustrip_ItemClicked);
  344. }
  345. break;
  346. // 페이지를 선택하는 경우
  347. case (int)Object_Type.PAGE:
  348. {
  349. // 팝업 메뉴 생성
  350. _Contextmenustrip.Create(this.treeView_SystemTree, e.Location,
  351. _Text.PageEdit + ";" +
  352. _Text.PageRename + ";" +
  353. _Text.ContextStripSeparator + ";" +
  354. _Text.PageDel,
  355. Selected_Page_Menustrip_ItemClicked);
  356. }
  357. break;
  358. }
  359. }
  360. }
  361. ///
  362. /// 팝업 메뉴 선택
  363. ///
  364. // Root
  365. public void Selected_Project_Menustrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  366. {
  367. // 수신기 전체 삭제
  368. if (e.ClickedItem.Text == _Text.ReceiverAllDel)
  369. {
  370. // 수신기가 존재하는 경우에만
  371. if (_Data.LIST_RECEIVER_ID.Count == 0)
  372. {
  373. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotReceiver, 0);
  374. }
  375. else
  376. {
  377. Popup_ReceiverAllDelInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.AllDelete_Continue, 0);
  378. // 대화 팝업은 특별처리
  379. _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_ReceiverAllDel_PopupClose_SendMessage_Event);
  380. }
  381. }
  382. // 수신기 추가
  383. else if (e.ClickedItem.Text == _Text.ReceiverAdd)
  384. {
  385. // 수신기 추가를 시도하는 경우 수신기 아이디의 값은 1이다
  386. Form_Receiver_Add Receiver_Add = new Form_Receiver_Add(_Data.CREATE_RECEIVER_ID());
  387. _Form.Create(Receiver_Add, null);
  388. }
  389. // 트리축소
  390. else if (e.ClickedItem.Text == _Text.TreeCollapse)
  391. {
  392. this.treeView_SystemTree.CollapseAll();
  393. this.treeView_SystemTree.Nodes[0].Expand();
  394. }
  395. // 트리확대
  396. else if (e.ClickedItem.Text == _Text.TreeExpand)
  397. {
  398. this.treeView_SystemTree.ExpandAll();
  399. }
  400. // EVENT TYPE 생성
  401. else if (e.ClickedItem.Text == _Text.EventTypeCreate)
  402. {
  403. Create_TB_EVENT_TYPE();
  404. }
  405. // 사용자관리 [모바일앱전용] // cyim 2016.12.15 : 모바일앱용 사용자 관리
  406. else if (e.ClickedItem.Text == _Text.UserEdit)
  407. {
  408. Form_System_UserEdit System_UserEdit = new Form_System_UserEdit();
  409. _Form.Create(System_UserEdit, null);
  410. }
  411. }
  412. // 수신기 노드를 선택한 후 팝업창 출력후 메뉴 선택
  413. public void Selected_Receiver_Menustrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  414. {
  415. // 수신기 삭제
  416. if (e.ClickedItem.Text == _Text.ReceiverDel)
  417. {
  418. // 수신기가 존재하는 경우에만
  419. if (_Data.LIST_RECEIVER_ID.Count == 0)
  420. {
  421. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotReceiver, 0);
  422. }
  423. else
  424. {
  425. Popup_ReceiverDelInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.Delete_Continue, 0);
  426. // 대화 팝업은 특별처리
  427. _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_ReceiverDel_PopupClose_SendMessage_Event);
  428. }
  429. }
  430. // 수신기 수정
  431. else if (e.ClickedItem.Text == _Text.ReceiverEdit)
  432. {
  433. // 장치검색 폼생성 (수정 모드)
  434. Form_Receiver_Add Config_Device = new Form_Receiver_Add(Int32.Parse(SystemTree_SelectedNode.Name)); // 수신기 노드의 키값
  435. _Form.Create(Config_Device, null);
  436. }
  437. }
  438. // 포인트 노드를 선택한 후 팝업창 출력후 메뉴 선택
  439. public void Selected_Point_Menustrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  440. {
  441. // 엑셀연동
  442. if (e.ClickedItem.Text == _Text.ExcelImport)
  443. {
  444. // 엑셀 연동 폼
  445. Form_PointConfig PointConfig = new Form_PointConfig(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Name]), SystemTree_SelectedNode.Text);
  446. _Form.Create(PointConfig, null);
  447. }
  448. // 비상방송 편집
  449. else if (e.ClickedItem.Text == _Text.EmergencyEditor)
  450. {
  451. // 비상방송 편집 폼 (기존 UI 는 그대로 두고 여기 폼에서 일괄적으로 삭제를 진행할 수 있도록 한다)
  452. _Data.MenuActivedForm = new Form_AddDevice_Emergency(SystemTree_SelectedNode.Parent.Parent.Name, "Emergency", "I");
  453. _Form.Create(_Data.MenuActivedForm, null);
  454. }
  455. // 입력포인트 OPC 연동데이타 생성
  456. else if (e.ClickedItem.Text == _Text.OPCOperationData)
  457. {
  458. // OPC 연동 데이터 생성 폼
  459. Form_PointOpcData PointOpcData = new Form_PointOpcData(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Parent.Name]));
  460. _Form.Create(PointOpcData, null);
  461. }
  462. // 입력포인트 보고서
  463. else if (e.ClickedItem.Text == _Text.PointInputReport)
  464. {
  465. // 레포트 폼생성
  466. if (_Data.ActiveReportViewer_Enable == false)
  467. {
  468. // 테이블 생성
  469. DataSet DataSet_Point_Input = new DataSet();
  470. _Dataset.Create_Table(DataSet_Point_Input);
  471. _Dataset.Add_DataColumn(DataSet_Point_Input, ColumnNames_Point_Input, ColumnNames_Point_Input); // 키 정보와 UI 표시부는 동일하다
  472. // 매개변수 순서 => COMM_ID, INOUT_TYPE, BOARD_ID, LOOP_NO, REPEATER_ID, POSITION_CODE, DEVICE_TYPE_NAME, DEVICE_NAME
  473. DataRowCollection DB_TABLE_DEVICE = ((_ImportPoint)_Data.Hash_ImportPoint[SystemTree_SelectedNode.Parent.Parent.Name]).IN_Points;
  474. // cyim 2016.04.01 : 입력 및 출력회로 정렬 기능
  475. ArrayList SortSupport = new ArrayList();
  476. // DataSet 내용을 수정한다
  477. for (int i = 0; i < DB_TABLE_DEVICE.Count; i++)
  478. {
  479. // 레코드 정보
  480. DataRow dr = DB_TABLE_DEVICE[i];
  481. if (_Convert.Exception_Into_object(dr[3], dr[4], dr[5], dr[6], dr[7]) == true)
  482. {
  483. // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE
  484. MskDeviceIDString dev_s = new MskDeviceIDString(
  485. _Convert.Null_to_IntZero(dr[3].ToString()),
  486. _Convert.Null_to_IntZero(dr[4].ToString()),
  487. _Convert.Null_to_IntZero(dr[5].ToString()),
  488. _Convert.Null_to_IntZero(dr[6].ToString()),
  489. _Convert.Null_to_IntZero(dr[7].ToString()),
  490. dr[8].ToString(), SystemTree_SelectedNode.Parent.Parent.Name); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  491. // cyim 2016.04.01 : 입력 및 출력회로 정렬 기능
  492. _OrderByCircuitNo OrderByCircuitNo = new _OrderByCircuitNo();
  493. OrderByCircuitNo.CircuitNo = dev_s.MskId;
  494. OrderByCircuitNo.Type = dr[0].ToString();
  495. OrderByCircuitNo.Location = dr[1].ToString();
  496. OrderByCircuitNo.DeviceNickName = dr[2].ToString();
  497. OrderByCircuitNo.EmergencyCode = dr[10].ToString() + "-" + dr[11].ToString() + "-" + dr[12].ToString();
  498. OrderByCircuitNo.XML = string.Format("MI{0:00}{1:00}{2:0}{3:000}{4}",
  499. Int32.Parse(SystemTree_SelectedNode.Parent.Parent.Name),
  500. _Convert.Null_to_IntZero(dr[4].ToString()),
  501. _Convert.Null_to_IntZero(dr[5].ToString()),
  502. _Convert.Null_to_IntZero(dr[6].ToString()),
  503. _Convert.Null_to_IntZero(dr[7].ToString()));
  504. SortSupport.Add(OrderByCircuitNo);
  505. //DataSet_Point_Input.Tables[0].Rows.Add(
  506. // // No
  507. // (i + 1).ToString(),
  508. // // 회로번호
  509. // dev_s.MskId,
  510. // // 설비종류
  511. // dr[0].ToString(),
  512. // // 위치
  513. // dr[1].ToString(),
  514. // // 디바이스명칭
  515. // dr[2].ToString(),
  516. // // 비상방송
  517. // dr[10].ToString() + "-" + dr[11].ToString() + "-" + dr[12].ToString()
  518. // );
  519. }
  520. }
  521. // cyim 2016.04.01 : 입력 및 출력회로 정렬 기능
  522. SortSupport.Sort(_Data.Sort_CircuitNo);
  523. for (int i = 0; i < SortSupport.Count; i++)
  524. {
  525. _OrderByCircuitNo OrderByCircuitNo = (_OrderByCircuitNo)SortSupport[i];
  526. DataSet_Point_Input.Tables[0].Rows.Add(
  527. // No
  528. //string.Format("{0:d5}", (i + 1)),
  529. (i + 1),
  530. // 회로번호
  531. OrderByCircuitNo.CircuitNo,
  532. // 설비종류
  533. OrderByCircuitNo.Type,
  534. // 위치
  535. OrderByCircuitNo.Location,
  536. // 디바이스명칭
  537. OrderByCircuitNo.DeviceNickName,
  538. // 비상방송
  539. OrderByCircuitNo.EmergencyCode,
  540. // XML
  541. OrderByCircuitNo.XML
  542. );
  543. }
  544. // 레포트 생성
  545. Form_ActiveReport_Viewer Report = new Form_ActiveReport_Viewer(
  546. // 레포트 타입
  547. ACTIVE_REPORT_DATA.VARIABLE_HEIGHT,
  548. // 실제데이타
  549. DataSet_Point_Input.Tables[0].Rows,
  550. // 컬럼데이타
  551. Point_Input_ColumnHeader,
  552. // 제목
  553. "입력 포인트 보고서",
  554. // 개요
  555. string.Format(" 수신기아이디 [ {0} ] 전체 [ {1}건 ]", SystemTree_SelectedNode.Parent.Parent.Name, DataSet_Point_Input.Tables[0].Rows.Count),
  556. // 컬럼높이
  557. 0.21F,
  558. // 폰트사이즈
  559. 8);
  560. _Form.Create(Report, null);
  561. }
  562. else
  563. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.UsingReportViewer, 0);
  564. }
  565. // 출력포인트 보고서
  566. else if (e.ClickedItem.Text == _Text.PointOutputReport)
  567. {
  568. // 레포트 폼생성
  569. if (_Data.ActiveReportViewer_Enable == false)
  570. {
  571. // 테이블 생성
  572. DataSet DataSet_Point_Output = new DataSet();
  573. _Dataset.Create_Table(DataSet_Point_Output);
  574. _Dataset.Add_DataColumn(DataSet_Point_Output, ColumnNames_Point_Output, ColumnNames_Point_Output); // 키 정보와 UI 표시부는 동일하다
  575. // 매개변수 순서 => COMM_ID, INOUT_TYPE, BOARD_ID, LOOP_NO, REPEATER_ID, POSITION_CODE, DEVICE_TYPE_NAME, DEVICE_NAME
  576. DataRowCollection DB_TABLE_DEVICE = ((_ImportPoint)_Data.Hash_ImportPoint[SystemTree_SelectedNode.Parent.Parent.Name]).OUT_Points;
  577. // cyim 2016.04.01 : 입력 및 출력회로 정렬 기능
  578. ArrayList SortSupport = new ArrayList();
  579. // DataSet 내용을 수정한다
  580. for (int i = 0; i < DB_TABLE_DEVICE.Count; i++)
  581. {
  582. // 레코드 정보
  583. DataRow dr = DB_TABLE_DEVICE[i];
  584. if (_Convert.Exception_Into_object(dr[3], dr[4], dr[5], dr[6], dr[7]) == true)
  585. {
  586. // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE
  587. MskDeviceIDString dev_s = new MskDeviceIDString(
  588. _Convert.Null_to_IntZero(dr[3].ToString()),
  589. _Convert.Null_to_IntZero(dr[4].ToString()),
  590. _Convert.Null_to_IntZero(dr[5].ToString()),
  591. _Convert.Null_to_IntZero(dr[6].ToString()),
  592. _Convert.Null_to_IntZero(dr[7].ToString()),
  593. dr[8].ToString(), SystemTree_SelectedNode.Parent.Parent.Name); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  594. // cyim 2016.04.01 : 입력 및 출력회로 정렬 기능
  595. _OrderByCircuitNo OrderByCircuitNo = new _OrderByCircuitNo();
  596. OrderByCircuitNo.CircuitNo = dev_s.MskId;
  597. OrderByCircuitNo.Type = dr[0].ToString();
  598. OrderByCircuitNo.Location = dr[1].ToString();
  599. OrderByCircuitNo.DeviceNickName = dr[2].ToString();
  600. //_OrderByCircuitNo.EmergencyCode = dr[10].ToString() + "-" + dr[11].ToString() + "-" + dr[12].ToString();
  601. SortSupport.Add(OrderByCircuitNo);
  602. //DataSet_Point_Output.Tables[0].Rows.Add(
  603. // // No
  604. // (i + 1).ToString(),
  605. // // 회로번호
  606. // dev_s.MskId,
  607. // // 설비종류
  608. // dr[0].ToString(),
  609. // // 위치
  610. // dr[1].ToString(),
  611. // // 디바이스명칭
  612. // dr[2].ToString());
  613. }
  614. }
  615. // cyim 2016.04.01 : 입력 및 출력회로 정렬 기능
  616. SortSupport.Sort(_Data.Sort_CircuitNo);
  617. for (int i = 0; i < SortSupport.Count; i++)
  618. {
  619. _OrderByCircuitNo OrderByCircuitNo = (_OrderByCircuitNo)SortSupport[i];
  620. DataSet_Point_Output.Tables[0].Rows.Add(
  621. // No
  622. //string.Format("{0:d5}", (i + 1)),
  623. (i + 1),
  624. // 회로번호
  625. OrderByCircuitNo.CircuitNo,
  626. // 설비종류
  627. OrderByCircuitNo.Type,
  628. // 위치
  629. OrderByCircuitNo.Location,
  630. // 디바이스명칭
  631. OrderByCircuitNo.DeviceNickName
  632. // 비상방송
  633. //_OrderByCircuitNo.EmergencyCode
  634. );
  635. }
  636. // 레포트 생성
  637. Form_ActiveReport_Viewer Report = new Form_ActiveReport_Viewer(
  638. // 레포트 타입
  639. ACTIVE_REPORT_DATA.VARIABLE_HEIGHT,
  640. // 실제데이타
  641. DataSet_Point_Output.Tables[0].Rows,
  642. // 컬럼데이타
  643. Point_Output_ColumnHeader,
  644. // 제목
  645. "출력 포인트 보고서",
  646. // 개요
  647. string.Format(" 수신기아이디 [ {0} ] 전체 [ {1}건 ]", SystemTree_SelectedNode.Parent.Parent.Name, DataSet_Point_Output.Tables[0].Rows.Count),
  648. // 컬럼높이
  649. 0.21F,
  650. // 폰트사이즈
  651. 8);
  652. _Form.Create(Report, null);
  653. }
  654. else
  655. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.UsingReportViewer, 0);
  656. }
  657. }
  658. // 입출력 노드를 선택한 후 팝업창 출력후 메뉴 선택
  659. public void Selected_InOut_Menustrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  660. {
  661. // 입출력 수정
  662. if (e.ClickedItem.Text == _Text.INOUTEdit)
  663. {
  664. // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  665. if (((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Name]).MODEL == "IFC3300")
  666. {
  667. // 입출력 설정
  668. Form_Receiver_Port_BigReceiver Config_InOut_BigReceiver = new Form_Receiver_Port_BigReceiver(Int32.Parse(SystemTree_SelectedNode.Parent.Name)); // 입출력 노드의 부모 키값
  669. _Form.Create(Config_InOut_BigReceiver, null);
  670. }
  671. else
  672. {
  673. // 입출력 설정
  674. Form_Receiver_Port Config_InOut = new Form_Receiver_Port(Int32.Parse(SystemTree_SelectedNode.Parent.Name)); // 입출력 노드의 부모 키값
  675. _Form.Create(Config_InOut, null);
  676. }
  677. }
  678. }
  679. // 그룹 노드를 선택한 후 팝업창 출력후 메뉴 선택
  680. public void Selected_OperGroup_Menustrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  681. {
  682. if (e.ClickedItem.Text == _Text.ExcelImport) // 엑셀 Import
  683. {
  684. // 엑셀 연동 폼
  685. Form_PointConfig PointConfig = new Form_PointConfig(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Parent.Name]), SystemTree_SelectedNode.Text);
  686. _Form.Create(PointConfig, null);
  687. }
  688. else if (e.ClickedItem.Text == _Text.OperGroupReport) // 그룹 보고서
  689. {
  690. // 레포트 폼생성
  691. if (_Data.ActiveReportViewer_Enable == false)
  692. {
  693. //Form_ActiveReport_Viewer Report = new Form_ActiveReport_Viewer(SystemTree_SelectedNode.Parent.Parent.Name, ACTIVE_REPORT_DATA.OPER_GROUP);
  694. //_Form.Create(Report, null);
  695. // 용량이 크면 화면이 멈춘것처럼 보이므로 팝업창을 출력함
  696. Form Temp = _Popup.Create(Popup_Type.ConfirmNoBtn, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.ReportReady, 0);
  697. this.Update();
  698. _ActiveReport.Create_ReportViewer_OperGroup(SystemTree_SelectedNode.Parent.Parent.Name);
  699. Temp.Close();
  700. }
  701. else
  702. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.UsingReportViewer, 0);
  703. }
  704. }
  705. // 연동설정 노드를 선택한 후 팝업창 출력후 메뉴 선택
  706. public void Selected_OperSet_Menustrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  707. {
  708. if (e.ClickedItem.Text == _Text.ExcelImport) // 엑셀 Import
  709. {
  710. // 엑셀 연동 폼
  711. Form_PointConfig PointConfig = new Form_PointConfig(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Parent.Name]), SystemTree_SelectedNode.Text);
  712. _Form.Create(PointConfig, null);
  713. }
  714. else if (e.ClickedItem.Text == _Text.OperSetReport) // 연동설정 보고서
  715. {
  716. // 레포트 폼생성
  717. if (_Data.ActiveReportViewer_Enable == false)
  718. {
  719. //Form_ActiveReport_Viewer ActiveReportViewer = new Form_ActiveReport_Viewer(SystemTree_SelectedNode.Parent.Parent.Name, ACTIVE_REPORT_DATA.OPER_SET);
  720. //_Form.Create(ActiveReportViewer, null);
  721. // 용량이 크면 화면이 멈춘것처럼 보이므로 팝업창을 출력함
  722. Form Temp = _Popup.Create(Popup_Type.ConfirmNoBtn, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.ReportReady, 0);
  723. this.Update();
  724. _ActiveReport.Create_ReportViewer_OperSet(SystemTree_SelectedNode.Parent.Parent.Name);
  725. Temp.Close();
  726. }
  727. else
  728. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.UsingReportViewer, 0);
  729. }
  730. else if (e.ClickedItem.Text == _Text.MapProcessFile) // 연동 맵 파일 생성
  731. {
  732. // 연동 맵 파일 생성 폼
  733. Form_OperSetMapProcessFile OperSetMapProcessFile = new Form_OperSetMapProcessFile(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Parent.Name]));
  734. _Form.Create(OperSetMapProcessFile, null);
  735. }
  736. }
  737. // 이미지 노드 를 선택한 후 팝업창 출력후 메뉴 선택
  738. public void Selected_Image_Menustrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  739. {
  740. // 이미지 추가
  741. if (e.ClickedItem.Text == _Text.PageAdd)
  742. {
  743. ///
  744. /// 맵디자이너
  745. ///
  746. // 신규 이미지 추가하는 경우에는 오로지 한개의 화면만 존재하면 된다
  747. // 하지만 기존의 이미지를 편집하는 화면은 여러개의 화면이 존재할수 있다.
  748. // 주의할점은 기존의 화면을 닫지않는 상태에서 화면으로 돌릴때 폼의 이름으로 포커스를 맞추므로 수동으로 폼 이름을 조절한다
  749. string Form_MapDesigner_Name = "Form_MapDesigner_New";
  750. // 신규 이미지 추가용 맵디자이너 화면이 켜져 있는 경우
  751. if (_Form.CreatedForm.Contains(Form_MapDesigner_Name) == true)
  752. {
  753. // 이벤트 알림
  754. _Event.PictrueEdit_NodeSeleted_SendMessage_Write(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Name]), null);
  755. }
  756. // 신규 이미지 추가용 맵디자이너 화면이 켜져 있지 않은 경우
  757. else
  758. {
  759. // 신규 생성 : 맵디자이너 폼생성 , 수신기 노드 및 그래픽 노드의 정보를 전달
  760. Form_MapDesigner MapDesigner = new Form_MapDesigner(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Name]).ID, null, null);
  761. MapDesigner.Name = Form_MapDesigner_Name;
  762. _Form.Create(MapDesigner, null);
  763. }
  764. }
  765. // 모두 삭제
  766. else if (e.ClickedItem.Text == _Text.PageAllDel)
  767. {
  768. string Form_MapDesigner_Name = "Form_MapDesigner_" + SystemTree_SelectedNode.Name;
  769. // 맵디자이너 화면이 켜져 있는 경우
  770. if (_Form.CreatedForm.Contains(Form_MapDesigner_Name) == true)
  771. {
  772. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.MapDesignerActive, 0);
  773. }
  774. else
  775. {
  776. Popup_PageAllDelInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.AllDelete_Continue, 0);
  777. // 대화 팝업은 특별처리
  778. _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PageAllDel_PopupClose_SendMessage_Event);
  779. }
  780. }
  781. // 동기화
  782. // 삭제할지도 모름 -> 우선 적용해봄
  783. else if (e.ClickedItem.Text == _Text.PageSync)
  784. {
  785. // 작업중인 페이지가 하나라도 있다면 경고창 팝업 생성
  786. if (((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Name]).HASH_PAGE.Count != 0)
  787. {
  788. Popup_XmlSyncStartInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 450, 150, _Text.XmlSyncStartInform, 0);
  789. // 대화 팝업은 특별처리
  790. _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_XmlSyncStart_PopupClose_SendMessage_Event);
  791. }
  792. else
  793. {
  794. // 스레드 시작
  795. FieldSettingXml_Sync(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Name]));
  796. }
  797. }
  798. // 페이지 저장
  799. else if (e.ClickedItem.Text == _Text.PageSave)
  800. {
  801. if (((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Name]).HASH_PAGE.Count != 0)
  802. {
  803. Popup_PageSaveInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 450, 150, _Text.PageSaveXmlDB, 0);
  804. // 대화 팝업은 특별처리
  805. _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PageSaveXmlDB_PopupClose_SendMessage_Event);
  806. }
  807. else
  808. {
  809. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.PageNotInform, 0);
  810. }
  811. }
  812. // 화면 설정 보고서
  813. else if (e.ClickedItem.Text == _Text.PageReport)
  814. {
  815. if (_Data.Enable_Capture == false)
  816. {
  817. _Data.Enable_Capture = true;
  818. // 화면 최대화
  819. _Event.Windows_MaxSize_SendMessage_Write();
  820. // 캡쳐 경고 팝업
  821. Capture_Warning = _Popup.Create(Popup_Type.ConfirmNoBtn, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.CaptureReady, 0);
  822. Capture_Warning.Location = new Point(this.Location.X, this.Location.Y); // 위치는 가장자리로 배치
  823. // 트리 누르지 못하도록 방지
  824. this.treeView_SystemTree.Enabled = false;
  825. // 타이머 동작하면서 화면캡쳐 시도
  826. Capure_Receiver_ID = SystemTree_SelectedNode.Parent.Name;
  827. Caputure_Process_Cnt = 0;
  828. Capture_Page_Index = 0;
  829. _Timer_WindowBase.Delete("CAPTURE_IMAGE");
  830. _Timer_WindowBase.Create("CAPTURE_IMAGE", 1000, CAPTURE_IMAGE_Tick, true);
  831. }
  832. else
  833. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.CapturingNotAccess, 0);
  834. }
  835. }
  836. // 특별처리
  837. // 화면 캡쳐를 위해 타이머를 동작시킨다. 1초마다 번갈아가면서 화면을 선택한후, 캡쳐하는 방식이므로 조작은 금지하도록 유도한다
  838. private void CAPTURE_IMAGE_Tick(object sender, EventArgs e)
  839. {
  840. // 카운터 증가
  841. Caputure_Process_Cnt++;
  842. // 페이지 정보 추출
  843. _RECEIVER RECEIVER = (_RECEIVER)_Data.HASH_RECEIVER[Capure_Receiver_ID];
  844. if (RECEIVER.LIST_PAGE_ID.Count == 0)
  845. {
  846. Capture_Warning.Close();
  847. _Data.Enable_Capture = false;
  848. _Timer_WindowBase.Delete("CAPTURE_IMAGE");
  849. this.treeView_SystemTree.Enabled = true;
  850. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, "캡쳐할 페이지가 없습니다.", 0);
  851. return;
  852. }
  853. // 1초마다 번갈아가면서 페이지를 선택하고 캡쳐하는 것처럼 동작하게 한다
  854. if (Caputure_Process_Cnt % 2 == 0)
  855. {
  856. // 화면 캡쳐
  857. _Event.Capture_Save_SendMessage_Write(Capure_Receiver_ID, (string)RECEIVER.LIST_PAGE_ID[Capture_Page_Index]);
  858. // 페이지 인덱스 증가 (화면 캡쳐 이후에야 인덱스가 증가된다)
  859. Capture_Page_Index++;
  860. }
  861. else
  862. {
  863. // 자식노드 검색
  864. TreeNode temp_treenode = _Tree.GetNode_By_Name(this.treeView_SystemTree, (string)RECEIVER.LIST_PAGE_ID[Capture_Page_Index]);
  865. // 화면 전환
  866. _Event.WorkViewPageName_SendMessage_Write(Capure_Receiver_ID, Object_Type.PAGE, temp_treenode.Name, temp_treenode.Text);
  867. }
  868. // 만약 모든 페이지를 돌았다면
  869. if (((_RECEIVER)_Data.HASH_RECEIVER[Capure_Receiver_ID]).LIST_PAGE_ID.Count * 2 <= Caputure_Process_Cnt)
  870. {
  871. // 초기화
  872. Capture_Warning.Close();
  873. _Data.Enable_Capture = false;
  874. _Timer_WindowBase.Delete("CAPTURE_IMAGE");
  875. // 트리 누르지 못하도록 방지 해제
  876. this.treeView_SystemTree.Enabled = true;
  877. Form Temp = _Popup.Create(Popup_Type.ConfirmNoBtn, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.ReportReady, 0);
  878. this.Update();
  879. _ActiveReport.Create_ReportViewer_Page(SystemTree_SelectedNode.Parent.Name);
  880. Temp.Close();
  881. }
  882. }
  883. // 디바이스 정보를 DB에 저장
  884. private void DeviceIcon_Save(string RECEIVER_ID)
  885. {
  886. // 데이타베이스에 접속하지 못하면 사용못한다
  887. if (_Db.OpenTest() == true)
  888. {
  889. // 작업량 예상
  890. Popup_DeviceIconSave_Progress_Count_End = 0;
  891. foreach (string PAGE_ID in ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).LIST_PAGE_ID)
  892. foreach (string ICON_ID in ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).LIST_ICON_ID)
  893. if (((_PictureBoxItem)((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).HASH_ICON[ICON_ID]).ItemType == Item_Type.Device)
  894. Popup_DeviceIconSave_Progress_Count_End++;
  895. // 카운터 초기화
  896. Popup_DeviceIconSave_Progress_Count = 0;
  897. // 진행 팝업창 생성
  898. _Data.Result_Text = _Text.CompleteInform; // 진행 결과 메세지
  899. if (Popup_DeviceIconSave_Progress != null) Popup_DeviceIconSave_Progress.Close();
  900. // 맵디자이너에서 페이지 저장시에 디바이스 아이콘이 없어도 완료 팝업창이 출력하도록 수정 ( +1 로 수정)
  901. Popup_DeviceIconSave_Progress = _Popup.Create(Popup_Type.Progress, Popup_Style.Normal, _Text.OK, 250, 200, _Text.DataBaseSaveProgress, Popup_DeviceIconSave_Progress_Count_End + 1);
  902. // 스레드 생성
  903. WorkingThread = new Thread(new ParameterizedThreadStart(DeviceIcon_Save_Thread));
  904. // 스레드시작
  905. WorkingThread.Start(RECEIVER_ID);
  906. }
  907. }
  908. // 디바이스 정보를 DB에 저장 스레드
  909. private void DeviceIcon_Save_Thread(object pReceiver_ID)
  910. {
  911. string RECEIVER_ID = pReceiver_ID.ToString();
  912. string Debug_Device_Ope_ID = null;
  913. try
  914. {
  915. // 페이지별로 루틴이 실행된다
  916. foreach (string PAGE_ID in ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).LIST_PAGE_ID)
  917. {
  918. // 페이지 번호
  919. string JumpFiledID = ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]).ID;
  920. // 점프필드에는 널값이 들어가면 수신기UI 가 에러처리됨 - 2013.6.18
  921. JumpFiledID = _Data.Get_Verify_ID(JumpFiledID);
  922. _Page Page = ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PAGE_ID]);
  923. // 디바이스 아이콘을 추출해서 아이디를 가져온다
  924. foreach (string ICON_ID in Page.LIST_ICON_ID)
  925. {
  926. if (((_PictureBoxItem)Page.HASH_ICON[ICON_ID]).ItemType == Item_Type.Device)
  927. {
  928. _PictureBoxItem PictureBoxItem = ((_PictureBoxItem)Page.HASH_ICON[ICON_ID]);
  929. // 단, 디바이스 아이콘중 연동아이디가 없는 것은 무시
  930. if (PictureBoxItem != null
  931. && PictureBoxItem.Device_Oper_ID != null
  932. && PictureBoxItem.Device_Oper_ID.ToString().Length != 0)
  933. {
  934. // 디버깅 용도
  935. Debug_Device_Ope_ID = PictureBoxItem.Device_Oper_ID;
  936. // 아이디 예시 :MI-01-0-002-1
  937. // 입출력
  938. string InOut = PictureBoxItem.Device_Oper_ID[1].ToString(); // I 혹은 O
  939. // 수신기 ID : 1자리로 만들자
  940. string Receiver_ID = Page.Receiver_ID;
  941. // 통신보드 ID : 1자리로 만들자
  942. string ComBoard_ID = Int32.Parse(PictureBoxItem.Device_Oper_ID[3].ToString() + PictureBoxItem.Device_Oper_ID[4].ToString()).ToString();
  943. // 계통
  944. string Loop_No = PictureBoxItem.Device_Oper_ID[6].ToString();
  945. // 중계기 ID
  946. string Repeater_ID = Int32.Parse(PictureBoxItem.Device_Oper_ID[8].ToString() + PictureBoxItem.Device_Oper_ID[9].ToString() + PictureBoxItem.Device_Oper_ID[10].ToString()).ToString();
  947. // 중계기 포트번호
  948. string Device_ID = PictureBoxItem.Device_Oper_ID[12].ToString();
  949. _Db.UPDATE("TB_DEVICE",
  950. // Target Data
  951. "RECEIVER_ID=" + Receiver_ID +
  952. ";BOARD_ID=" + ComBoard_ID +
  953. ";LOOP_NO=" + Loop_No +
  954. ";REPEATER_ID=" + Repeater_ID +
  955. ";DEVICE_ID=" + Device_ID +
  956. ";INOUT_TYPE=" + InOut,
  957. // Updata Data
  958. "JUMP_FIELD_ID=" + JumpFiledID);
  959. }
  960. // 진행바 카운터가 증가한다
  961. _Event.ProgressPopupCount_SendMessage(Popup_DeviceIconSave_Progress, ++Popup_DeviceIconSave_Progress_Count);
  962. }
  963. }
  964. }
  965. // 저장하면 리스트에서 삭제
  966. if (_Data.LIST_XmlDBNotSave_Receiver.Contains(RECEIVER_ID) == true)
  967. _Data.LIST_XmlDBNotSave_Receiver.Remove(RECEIVER_ID);
  968. // 맵디자이너에서 페이지 저장시에 디바이스 아이콘이 없어도 완료 팝업창이 출력하도록 수정
  969. // 즉, 완료후 마지막 카운터 증가 (스레드 시작전에 1개를 플러스 하였음)
  970. _Event.ProgressPopupCount_SendMessage(Popup_DeviceIconSave_Progress, ++Popup_DeviceIconSave_Progress_Count);
  971. // 저장하면 이벤트 발생
  972. _Event.Receiver_PageSaveComplete_SendMessage_Write(RECEIVER_ID);
  973. }
  974. catch (Exception ex)
  975. {
  976. // LOG
  977. _Event.DebugView_SendMessage_Write(Debug_Device_Ope_ID + _Text.Blank + ex.ToString());
  978. // 진행바 팝업창 종료
  979. _Data.Result_Text = _Text.FailInform;
  980. _Event.ProgressPopupCount_SendMessage(Popup_DeviceIconSave_Progress, Popup_DeviceIconSave_Progress_Count_End);
  981. // 스레드 중지
  982. if (WorkingThread != null) WorkingThread.Abort();
  983. }
  984. }
  985. // 수신기 전부 삭제 여부 팝업창 이벤트
  986. public void _Event_ReceiverAllDel_PopupClose_SendMessage_Event(object sender, object etc)
  987. {
  988. // 대화 팝업 주체
  989. Form popup = (Form)sender;
  990. if (Popup_ReceiverAllDelInform.Name == popup.Name && etc.ToString() == _Text.OK)
  991. {
  992. ReceiverAllDel();
  993. }
  994. // 대화 팝업은 특별처리
  995. _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_ReceiverAllDel_PopupClose_SendMessage_Event);
  996. }
  997. public void ReceiverAllDel()
  998. {
  999. //// 프로젝트명 임시 저장
  1000. //string temp = this.treeView_SystemTree.Nodes[0].Text;
  1001. //// 트리 삭제
  1002. //this.treeView_SystemTree.Nodes.Clear();
  1003. //// 트리에 기존의 프로젝트명은 그대로 표시한다
  1004. //_Tree.NodeAdd_Root(this.treeView_SystemTree, _Text.UI_TREE_ROOT_KEY, temp, Object_Type.PROJECT);
  1005. // 해쉬 및 리스트 초기화
  1006. _Data.HASH_RECEIVER.Clear();
  1007. _Data.LIST_RECEIVER_ID.Clear();
  1008. _Data.HASH_XMLDEVTYPE.Clear();
  1009. _Data.LIST_XMLDEVTYPE_ID.Clear();
  1010. //_Data.HASH_PAGE.Clear();
  1011. //_Data.LIST_PAGE_ID.Clear();
  1012. // _Receiver.xml 제거 : cyim 2012.8.29 -> 복구 2013.5.27
  1013. //_Data.HASH_XMLRECEIVER.Clear();
  1014. _Data.LIST_XMLRECEIVER_ID.Clear();
  1015. _Data.List_ExcelPoint.Clear();
  1016. _Data.HASH_CodePosition.Clear();
  1017. _Data.LIST_CodePosition_NAME.Clear();
  1018. _Data.LIST_XmlDBNotSave_Receiver.Clear();
  1019. _Data.Hash_ImportPoint.Clear();
  1020. // 수신기 아이디 초기화
  1021. _Data.INIT_RECEIVER_ID = 1;
  1022. // 데이타베이스 경로 초기화
  1023. _Data.DB_FullPath = null;
  1024. // 프로세스 삭제
  1025. System.Diagnostics.Process[] mProcess = System.Diagnostics.Process.GetProcessesByName("fbserver");
  1026. foreach (System.Diagnostics.Process p in mProcess)
  1027. p.Kill();
  1028. System.Threading.Thread.Sleep(1000);
  1029. //
  1030. // 수신기 폴더 삭제
  1031. //
  1032. // 지정된 경로에 폴더 조회
  1033. string result = _File.Get_FolderNameList(_Data.Project_Path + "\\" + _Data.Project_Name);
  1034. if (result != null)
  1035. {
  1036. // 폴더리스트 생성
  1037. string[] FolderNames = _Convert.String_to_ArrayString(result);
  1038. // 폴더 삭제
  1039. foreach (string FolderName in FolderNames)
  1040. if (FolderName != _Text.DEFALUT_FOLDER_TEMP) // 전체삭제시 Temp 폴더는 삭제하지 않는다
  1041. _File.Delete_Folder(_Data.Project_Path, _Data.Project_Name + "\\" + FolderName);
  1042. }
  1043. // 수신기 파일 갱신
  1044. _File.Write_Receiver_XML(_Data.Project_Path + "\\" + _Data.Project_Name);
  1045. // 경로 재지정 (temp를 지운다)
  1046. _Data.DataBaseFilePath_Set(null);
  1047. // 데이타베이스에서 삭제
  1048. _Sql.Delete_Table("TB_BOARD", null);
  1049. _Sql.Delete_Table("TB_COMM", null);
  1050. _Sql.Delete_Table("TB_CONFIG", null);
  1051. _Sql.Delete_Table("TB_DEVICE", null);
  1052. _Sql.Delete_Table("TB_ANALOG_DEVICE_2", null);
  1053. _Sql.Delete_Table("TB_EMERGENCY_BROADCASTION", null);
  1054. _Sql.Delete_Table("TB_GROUP_DEVICE", null);
  1055. _Sql.Delete_Table("TB_MAP", null);
  1056. _Sql.Delete_Table("TB_MAP_PROCESS", null);
  1057. _Sql.Delete_Table("TB_GROUP", null);
  1058. _Sql.Delete_Table("TB_GROUP_DEVICE", null);
  1059. _Sql.Delete_Table("TB_RECEIVER", null);
  1060. _Sql.Delete_Table("TB_REPEATER", null);
  1061. _Sql.Delete_Table("TB_POSITION_CODE", null);// 전체 삭제의 경우 삭제해도 상관없음
  1062. //_Sql.Delete_Table("TB_DEVICE_TYPE", null);// -> RECEIVER_ID 없음 // 삭제하면 안됨 (어차피 기본값)
  1063. // 워크뷰에 알림
  1064. _Event.WorkView_Clear_SendMessage_Write();
  1065. _Event.TreeView_Clear_SendMessage_Write(_Data.Project_Name);
  1066. }
  1067. // 수신기 삭제 여부 팝업창 이벤트
  1068. public void _Event_ReceiverDel_PopupClose_SendMessage_Event(object sender, object etc)
  1069. {
  1070. // 대화 팝업 주체
  1071. Form popup = (Form)sender;
  1072. if (Popup_ReceiverAllDelInform.Name == popup.Name && etc.ToString() == _Text.OK)
  1073. {
  1074. // 리스트 및 해쉬에 반영
  1075. foreach (string RECEIVER_ID in _Data.LIST_RECEIVER_ID)
  1076. {
  1077. if (SystemTree_SelectedNode.Name == RECEIVER_ID)
  1078. {
  1079. _Data.HASH_RECEIVER.Remove(SystemTree_SelectedNode.Name);
  1080. _Data.LIST_RECEIVER_ID.Remove(SystemTree_SelectedNode.Name);
  1081. _Data.LIST_XMLRECEIVER_ID.Remove(SystemTree_SelectedNode.Name);
  1082. _Data.Hash_ImportPoint.Remove(SystemTree_SelectedNode.Name);
  1083. // 경로 재지정 (temp를 지운다)
  1084. _Data.DataBaseFilePath_Set(null);
  1085. // 데이타베이스에서 삭제
  1086. _Sql.Delete_Table("TB_BOARD", RECEIVER_ID);
  1087. _Sql.Delete_Table("TB_COMM", RECEIVER_ID);
  1088. _Sql.Delete_Table("TB_CONFIG", RECEIVER_ID);
  1089. _Sql.Delete_Table("TB_DEVICE", RECEIVER_ID);
  1090. _Sql.Delete_Table("TB_ANALOG_DEVICE_2", RECEIVER_ID);
  1091. _Sql.Delete_Table("TB_EMERGENCY_BROADCASTION", RECEIVER_ID);
  1092. _Sql.Delete_Table("TB_GROUP_DEVICE", RECEIVER_ID);
  1093. _Sql.Delete_Table("TB_MAP", RECEIVER_ID);
  1094. _Sql.Delete_Table("TB_MAP_PROCESS", RECEIVER_ID);
  1095. _Sql.Delete_Table("TB_GROUP", RECEIVER_ID);
  1096. _Sql.Delete_Table("TB_GROUP_DEVICE", RECEIVER_ID);
  1097. _Sql.Delete_Table("TB_RECEIVER", RECEIVER_ID);
  1098. _Sql.Delete_Table("TB_REPEATER", RECEIVER_ID);
  1099. //_Sql.Delete_Table("TB_POSITION_CODE", RECEIVER_ID);// -> RECEIVER_ID 없음 // 삭제하면 안됨
  1100. //_Sql.Delete_Table("TB_DEVICE_TYPE", RECEIVER_ID);// -> RECEIVER_ID 없음 // 삭제하면 안됨
  1101. break;
  1102. }
  1103. }
  1104. // 데이타베이스 경로 초기화
  1105. _Data.DB_FullPath = null;
  1106. // 프로세스 삭제
  1107. System.Diagnostics.Process[] mProcess = System.Diagnostics.Process.GetProcessesByName("fbserver");
  1108. foreach (System.Diagnostics.Process p in mProcess)
  1109. p.Kill();
  1110. System.Threading.Thread.Sleep(1000);
  1111. // 수신기 폴더 삭제
  1112. string ReiceiverFolderName = _Text.DEFAULT_FOLDER_RECEIVER_PREFIX + SystemTree_SelectedNode.Name;
  1113. _File.Delete_Folder(_Data.Project_Path, _Data.Project_Name + "\\" + ReiceiverFolderName);
  1114. // 수신기 파일 갱신
  1115. _File.Write_Receiver_XML(_Data.Project_Path + "\\" + _Data.Project_Name);
  1116. // 화면 전환
  1117. _Event.WorkViewPageName_SendMessage_Write(null, Object_Type.PROJECT, null, null);
  1118. // 트리에 반영
  1119. _Tree.DelNodeName_By_Name(this.treeView_SystemTree, SystemTree_SelectedNode.Name);
  1120. }
  1121. // 대화 팝업은 특별처리
  1122. _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_ReceiverDel_PopupClose_SendMessage_Event);
  1123. }
  1124. // 페이지 전부 삭제 여부 팝업창 이벤트
  1125. public void _Event_PageAllDel_PopupClose_SendMessage_Event(object sender, object etc)
  1126. {
  1127. // 대화 팝업 주체
  1128. Form popup = (Form)sender;
  1129. if (Popup_PageAllDelInform.Name == popup.Name && etc.ToString() == _Text.OK)
  1130. {
  1131. // 반드시 한단계 위에 수신기 노드가 있다
  1132. string Temp_Receiver_ID = SystemTree_SelectedNode.Parent.Name;
  1133. // 무조건 편집 혹은 새로만들기의 경우 차후 저장을 위해 셋팅
  1134. if (_Data.LIST_XmlDBNotSave_Receiver.Contains(Temp_Receiver_ID) == false)
  1135. _Data.LIST_XmlDBNotSave_Receiver.Add(Temp_Receiver_ID);
  1136. // 트리에서 전부 삭제
  1137. foreach (string PAGE_ID in ((_RECEIVER)_Data.HASH_RECEIVER[Temp_Receiver_ID]).LIST_PAGE_ID)
  1138. _Tree.DelNodeName_By_Name_Check_ReceiverID(this.treeView_SystemTree, ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[Temp_Receiver_ID]).HASH_PAGE[PAGE_ID]).NodeKey, Temp_Receiver_ID);
  1139. // 리스트 및 해쉬 삭제
  1140. ((_RECEIVER)_Data.HASH_RECEIVER[Temp_Receiver_ID]).LIST_PAGE_ID.Clear();
  1141. ((_RECEIVER)_Data.HASH_RECEIVER[Temp_Receiver_ID]).HASH_PAGE.Clear();
  1142. // FieldSetting.xml 초기화
  1143. // 수신기 폴더명
  1144. string ReiceiverFolderName = _Text.DEFAULT_FOLDER_RECEIVER_PREFIX + Temp_Receiver_ID;
  1145. // 경로 지정
  1146. string Default_Xml_FullPath = _Data.Project_Path + "\\" + _Data.Project_Name + "\\" + ReiceiverFolderName + "\\" + _Text.DEFAULT_FOLDER_MAPVIEW + "\\" + _Text.DEFAULT_FOLDER_XML;
  1147. // 기본 내용으로 변경 (FieldSetting_XML)
  1148. _File.Write_FieldSetting_XML(Temp_Receiver_ID, Default_Xml_FullPath);
  1149. // 화면 전환
  1150. _Event.WorkViewPageName_SendMessage_Write(Temp_Receiver_ID, Object_Type.IMAGE, null, null);
  1151. }
  1152. // 대화 팝업은 특별처리
  1153. _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_PageAllDel_PopupClose_SendMessage_Event);
  1154. }
  1155. // 동기화를 진행하려는 경우 작업중인 페이지가 있다고 경고창을 생성하고 난후에 확인 버튼을 누를때 발생하는 이벤트
  1156. public void _Event_XmlSyncStart_PopupClose_SendMessage_Event(object sender, object etc)
  1157. {
  1158. // 대화 팝업 주체
  1159. Form popup = (Form)sender;
  1160. if (Popup_XmlSyncStartInform.Name == popup.Name && etc.ToString() == _Text.OK)
  1161. {
  1162. ///
  1163. /// 페이지 노드를 삭제한다
  1164. ///
  1165. // 트리에서 전부 삭제
  1166. foreach (string PAGE_ID in ((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).LIST_PAGE_ID)
  1167. _Tree.DelNodeName_By_Name_Check_ReceiverID(this.treeView_SystemTree, ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).HASH_PAGE[PAGE_ID]).NodeKey, Temp_RECEIVER.ID);
  1168. // 리스트 및 해쉬 삭제
  1169. ((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).LIST_PAGE_ID.Clear();
  1170. ((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).HASH_PAGE.Clear();
  1171. // 스레드 시작
  1172. FieldSettingXml_Sync(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Name]));
  1173. }
  1174. // 대화 팝업은 특별처리
  1175. _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_XmlSyncStart_PopupClose_SendMessage_Event);
  1176. }
  1177. // 페이지저장 (XML 및 DB 저장) 이벤트
  1178. public void _Event_PageSaveXmlDB_PopupClose_SendMessage_Event(object sender, object etc)
  1179. {
  1180. // 대화 팝업 주체
  1181. Form popup = (Form)sender;
  1182. if (Popup_PageSaveInform.Name == popup.Name && etc.ToString() == _Text.OK)
  1183. {
  1184. // 밑에 코드 삭제 - cyim 무조건 저장루틴을 타도록 만듬 2013.7.4
  1185. //// 컬렉션 개체의 복사본으로 돌린다
  1186. //ArrayList Temp_LIST_XmlDBNotSave_Receiver = new ArrayList();
  1187. //object Temp=_Data.LIST_XmlDBNotSave_Receiver.Clone();
  1188. //Temp_LIST_XmlDBNotSave_Receiver = (ArrayList)Temp;
  1189. //foreach (string RECEIVER_ID in Temp_LIST_XmlDBNotSave_Receiver)
  1190. _Event_Page_Save_SendMessage_Event(SystemTree_SelectedNode.Parent.Name);
  1191. }
  1192. // 대화 팝업은 특별처리
  1193. _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_PageSaveXmlDB_PopupClose_SendMessage_Event);
  1194. }
  1195. public void _Event_Page_Save_SendMessage_Event(string RECEIVER_ID)
  1196. {
  1197. ///
  1198. /// FieldSetting.xml 쓰기
  1199. ///
  1200. // 맵디자이너 XML 데이터 저장
  1201. // 현재 DevType.xml 데이터는 오로지 읽기 전용이며
  1202. // FieldSetting.xml 데이터는 쓰기 전용이다
  1203. // 수신기 폴더명
  1204. //string ReiceiverFolderName = _Text.DEFAULT_FOLDER_RECEIVER_PREFIX + ((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Name]).ID;
  1205. string ReiceiverFolderName = _Text.DEFAULT_FOLDER_RECEIVER_PREFIX + ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).ID;
  1206. _File.Write_FieldSetting_XML(RECEIVER_ID, _Data.Project_Path + "\\" + _Data.Project_Name + "\\" + ReiceiverFolderName + "\\" + _Text.DEFAULT_FOLDER_MAPVIEW + "\\" + _Text.DEFAULT_FOLDER_XML);
  1207. ///
  1208. /// Receiver.xml 쓰기 (임시-오후 2:25 2012-08-23)
  1209. ///
  1210. //_File.Write_Receiver_XML(_Data.Project_Path + "\\" + _Data.Project_Name);
  1211. ///
  1212. /// TB_DEVICE -> 디바이스 아이콘이 속해져있는 페이지 번호 아이디를 JumpFieldID 로 치환하여 수정함
  1213. ///
  1214. DeviceIcon_Save(RECEIVER_ID);
  1215. // LOG
  1216. _Event.DebugView_SendMessage_Write(_Text.SaveFieldSettingInform);
  1217. }
  1218. ///
  1219. /// 초기화
  1220. ///
  1221. public void _Event_TreeView_Clear_SendMessage_Event(string ProjectName)
  1222. {
  1223. // 트리 초기화
  1224. this.treeView_SystemTree.Nodes.Clear();
  1225. // 프로젝트명이 없다면 프로젝트 삭제
  1226. if (ProjectName != null)
  1227. _Tree.NodeAdd_Root(this.treeView_SystemTree, _Text.UI_TREE_ROOT_KEY, ProjectName, Object_Type.PROJECT);
  1228. }
  1229. public void _Event_Receiver_Clear_SendMessage_Event()
  1230. {
  1231. ReceiverAllDel();
  1232. }
  1233. //
  1234. // 수신기 모델명 변경
  1235. //
  1236. // cyim 2016.12.05 : 트리뷰에 수신기 모델 표시
  1237. delegate void CallBack_DataApplytoGridex_Receiver_Set(string RECEIVER_ID);
  1238. public void _Event_WorkViewPageName_Receiver_SendMessage_Event(string RECEIVER_ID)
  1239. {
  1240. if (this.InvokeRequired)
  1241. {
  1242. CallBack_DataApplytoGridex_Receiver_Set d = new CallBack_DataApplytoGridex_Receiver_Set(_Event_WorkViewPageName_Receiver_SendMessage_Event);
  1243. this.Invoke(d, new object[] { RECEIVER_ID });
  1244. }
  1245. else
  1246. {
  1247. _RECEIVER RECEIVER = (_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID];
  1248. _Tree.SetNodeText_By_Name(this.treeView_SystemTree, RECEIVER.ID, RECEIVER.KEY_NAME);
  1249. }
  1250. }
  1251. ///
  1252. /// 동기화
  1253. ///
  1254. // 파일을 읽는 스레드
  1255. public void FieldSettingXml_Sync(_RECEIVER RECEIVER)
  1256. {
  1257. try
  1258. {
  1259. // 수신기 폴더명
  1260. string ReiceiverFolderName = _Text.DEFAULT_FOLDER_RECEIVER_PREFIX + RECEIVER.ID;
  1261. // 경로
  1262. string Default_Xml_FullPath = _Data.Project_Path + "\\" + _Data.Project_Name + "\\" + ReiceiverFolderName + "\\" + _Text.DEFAULT_FOLDER_MAPVIEW + "\\" + _Text.DEFAULT_FOLDER_XML;
  1263. // 파일 읽기
  1264. ArrayList Result = _File.Read_FieldSetting_XML(Default_Xml_FullPath);
  1265. // 임시로 현재 추가하는 수신기 정보를 저장하고 스레드를 실행시킨다
  1266. Temp_RECEIVER = RECEIVER;
  1267. // 파일이 없거나 페이지 정보가 없다면 사용못한다
  1268. if (Result != null && Result.Count != 0)
  1269. {
  1270. // 현재 생성중인 맵디자이너 창을 닫는다
  1271. _Event.MapDesigner_Close_SendMessage_Write();
  1272. // 트리에서 전부 삭제
  1273. foreach (string PAGE_ID in ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).LIST_PAGE_ID)
  1274. _Tree.DelNodeName_By_Name_Check_ReceiverID(this.treeView_SystemTree, ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).HASH_PAGE[PAGE_ID]).NodeKey, RECEIVER.ID);
  1275. // 작업량 예상
  1276. Popup_XmlSyncStartProgress_Count_End = 0;
  1277. foreach (_FieldSetting FieldSetting in Result)
  1278. {
  1279. // 페이지수
  1280. Popup_XmlSyncStartProgress_Count_End++;
  1281. // 버튼 아이콘
  1282. foreach (_FieldSetting_Button FieldSetting_Button in FieldSetting.Button)
  1283. Popup_XmlSyncStartProgress_Count_End++;
  1284. // 디바이스 아이콘
  1285. foreach (_FieldSetting_Device FieldSetting_Device in FieldSetting.Device)
  1286. Popup_XmlSyncStartProgress_Count_End++;
  1287. }
  1288. // 카운터 초기화
  1289. Popup_XmlSyncStartProgress_Count = 0;
  1290. // 진행 팝업창 생성
  1291. _Data.Result_Text = _Text.CompleteInform; // 진행 결과 메세지
  1292. if (Popup_XmlSyncStartProgress != null) Popup_XmlSyncStartProgress.Close();
  1293. Popup_XmlSyncStartProgress = _Popup.Create(Popup_Type.Progress, Popup_Style.Normal, _Text.OK, 250, 200, _Text.XmlSyncProgress, Popup_XmlSyncStartProgress_Count_End);
  1294. // 스레드 생성
  1295. Thread WorkingThread = new Thread(new ParameterizedThreadStart(FieldSettingXml_Sync_Thread));
  1296. // 스레드시작
  1297. WorkingThread.Start(Result);
  1298. }
  1299. else
  1300. {
  1301. // 수신기 추가를 완료하였습니다!
  1302. _Event.Receiver_NodeAddComplete_SendMessage_Write(RECEIVER.ID);
  1303. }
  1304. }
  1305. catch (Exception ex)
  1306. {
  1307. // LOG
  1308. _Event.DebugView_SendMessage_Write(ex.ToString());
  1309. // 스레드 중지
  1310. if (WorkingThread != null) WorkingThread.Abort();
  1311. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 450, 150, _Text.XmlSyncFileNotInform, 0);
  1312. }
  1313. }
  1314. // 동기화 진행 스레드
  1315. public void FieldSettingXml_Sync_Thread(object result)
  1316. {
  1317. Form_MapDesigner Temp_MapDesigner = null;
  1318. try
  1319. {
  1320. // 수신기 폴더명
  1321. string ReiceiverFolderName = _Text.DEFAULT_FOLDER_RECEIVER_PREFIX + Temp_RECEIVER.ID;
  1322. // 경로 지정
  1323. string Default_Xml_FullPath = _Data.Project_Path + "\\" + _Data.Project_Name + "\\" + ReiceiverFolderName + "\\" + _Text.DEFAULT_FOLDER_MAPVIEW + "\\" + _Text.DEFAULT_FOLDER_XML;
  1324. string Default_Field_FullPath = _Data.Project_Path + "\\" + _Data.Project_Name + "\\" + ReiceiverFolderName + "\\" + _Text.DEFAULT_FOLDER_MAPVIEW + "\\" + _Text.DEFAULT_FOLDER_FIELD;
  1325. string Default_Symbol_FullPath = _Data.Project_Path + "\\" + _Data.Project_Name + "\\" + ReiceiverFolderName + "\\" + _Text.DEFAULT_FOLDER_MAPVIEW + "\\" + _Text.DEFAULT_FOLDER_SYMBOL;
  1326. // 파일 읽기
  1327. //ArrayList Result = _File.Read_FieldSetting_XML(Default_Xml_FullPath);
  1328. ArrayList Result = (ArrayList)result;
  1329. // 리스트 및 해쉬 삭제
  1330. ((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).HASH_PAGE.Clear();
  1331. ((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).LIST_PAGE_ID.Clear();
  1332. // 리스트 및 해쉬에 반영
  1333. foreach (_FieldSetting FieldSetting in Result)
  1334. {
  1335. _Page Page = new _Page();
  1336. // 페이지 아이디
  1337. Page.ID = FieldSetting.ID;
  1338. // 페이지 이름
  1339. Page.NodeKey = _Data.CREATE_PAGE_ID(Temp_RECEIVER.ID, FieldSetting.Name);// Temp_RECEIVER.ID + _Text.Minus + FieldSetting.Name;
  1340. Page.NodeText = FieldSetting.Name;
  1341. // 관할 수신기 아이디
  1342. Page.Receiver_ID = FieldSetting.Receiver_ID;
  1343. // 배경그림을 저장하기 위해서 임시 맵디자이너 클래스 생성
  1344. Temp_MapDesigner = new Form_MapDesigner(Page.Receiver_ID, null, null);
  1345. // 배경그림
  1346. Page.PictureBoxItem_BackGround = Temp_MapDesigner.UI_Create_PictureBoxItem(
  1347. null,
  1348. Item_Type.BackGround,
  1349. Default_Field_FullPath + "\\" + FieldSetting.IMAGE,
  1350. FieldSetting.IMAGE,
  1351. Page.NodeKey,
  1352. 0, 0);
  1353. // 진행바 카운터가 증가한다
  1354. _Event.ProgressPopupCount_SendMessage(Popup_XmlSyncStartProgress, ++Popup_XmlSyncStartProgress_Count);
  1355. if (Page.PictureBoxItem_BackGround != null)
  1356. {
  1357. // 아이콘 번호
  1358. int ICON_ID_Order = 0;
  1359. // 버튼 아이콘
  1360. foreach (_FieldSetting_Button FieldSetting_Button in FieldSetting.Button)
  1361. {
  1362. _PictureBoxItem PictureBoxItem = new _PictureBoxItem();
  1363. // 버튼의 경우 순번이 B자가 붙어서 시작한다. 제거한다
  1364. //string Icon_ID = FieldSetting_Button.ID.Remove(0,1);// 특별히 XML 문서에서 버튼 아이디를 그대로 사용하지않고 순번으로 치환해서 사용해야함
  1365. string Icon_ID = ICON_ID_Order++.ToString();
  1366. // 픽쳐박스 생성
  1367. PictureBoxItem = Temp_MapDesigner.UI_Create_PictureBoxItem(
  1368. Page.PictureBoxItem_BackGround,
  1369. Item_Type.Button,
  1370. Default_Field_FullPath + "\\" + FieldSetting_Button.Image,
  1371. FieldSetting_Button.Image,
  1372. Icon_ID,
  1373. Int32.Parse(FieldSetting_Button.Xposition),
  1374. Int32.Parse(FieldSetting_Button.Yposition));
  1375. if (PictureBoxItem != null)
  1376. {
  1377. ///
  1378. /// 동적 할당 변수 처리
  1379. ///
  1380. // 버튼의 경우 일단 사이즈가 XML 우선시 한다
  1381. //PictureBoxItem.Width = Int32.Parse(FieldSetting_Button.Width);
  1382. //PictureBoxItem.Height = Int32.Parse(FieldSetting_Button.Height);
  1383. // 점프페이지 (페이지 아이디를 이름으로 대체한다)
  1384. PictureBoxItem.Button_JumpPageName = _File.Read_Page_ID_Order(Result, FieldSetting_Button.JumpField);
  1385. // 리스트 추가
  1386. Page.LIST_ICON_ID.Add(Icon_ID);
  1387. // 해쉬 추가
  1388. Page.HASH_ICON.Add(Icon_ID, PictureBoxItem);
  1389. }
  1390. else
  1391. {
  1392. // LOG
  1393. _Event.DebugView_SendMessage_Write(_Text.FieldSettingXmlFailInform + _Text.LeftBracket + FieldSetting.IMAGE + ":" + FieldSetting_Button.Image + ":" + FieldSetting_Button.ID + ":" + FieldSetting_Button.NAME + _Text.RightBracket);
  1394. }
  1395. // 진행바 카운터가 증가한다
  1396. _Event.ProgressPopupCount_SendMessage(Popup_XmlSyncStartProgress, ++Popup_XmlSyncStartProgress_Count);
  1397. }
  1398. // 디바이스 아이콘
  1399. foreach (_FieldSetting_Device FieldSetting_Device in FieldSetting.Device)
  1400. {
  1401. _PictureBoxItem PictureBoxItem = new _PictureBoxItem();
  1402. // 실제 디바이스 아이콘의 파일이름
  1403. string TempFileName = ((_DevTypeXML)_File.Read_DevType_FileName_by_IconID(FieldSetting_Device.DevIconID)).FILENAME;
  1404. if (TempFileName != null)
  1405. {
  1406. string Icon_ID = ICON_ID_Order++.ToString();
  1407. // 픽쳐박스 생성
  1408. PictureBoxItem = Temp_MapDesigner.UI_Create_PictureBoxItem(
  1409. Page.PictureBoxItem_BackGround,
  1410. Item_Type.Device,
  1411. Default_Symbol_FullPath + "\\" + TempFileName,
  1412. TempFileName,
  1413. Icon_ID,
  1414. Int32.Parse(FieldSetting_Device.Xposition),
  1415. Int32.Parse(FieldSetting_Device.Yposition));
  1416. if (PictureBoxItem != null)
  1417. {
  1418. ///
  1419. /// 동적 할당 변수 처리
  1420. ///
  1421. // 디바이스 연동 회로 번호 (포맷에 맞게 변환한다)
  1422. PictureBoxItem.Device_Oper_ID = _File.Read_Device_Oper_ID(FieldSetting_Device.ID);
  1423. // 데이타베이스로 부터 디바이스 명칭을 불러온다
  1424. MskDeviceIDString device_id = new MskDeviceIDString(PictureBoxItem.Device_Oper_ID, Page.Receiver_ID); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  1425. DataRowCollection DB_TABLE_DEVICE =
  1426. _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchDeviceName_Table_Value("TB_DEVICE",
  1427. "RECEIVER_ID", Page.Receiver_ID,
  1428. "COMM_ID", device_id.Comm_id,
  1429. "BOARD_ID", device_id.Board_id,
  1430. "LOOP_NO", device_id.Loop_no,
  1431. "REPEATER_ID", device_id.Repeater_id,
  1432. "DEVICE_ID", device_id.Device_id,
  1433. "INOUT_TYPE", device_id.Inout_type,
  1434. Page.Receiver_ID));
  1435. if (DB_TABLE_DEVICE != null)
  1436. {
  1437. foreach (DataRow dr in DB_TABLE_DEVICE)
  1438. {
  1439. PictureBoxItem.Device_DB_Name = dr[0].ToString();
  1440. }
  1441. }
  1442. // 리스트 추가
  1443. Page.LIST_ICON_ID.Add(Icon_ID);
  1444. // 해쉬 추가
  1445. Page.HASH_ICON.Add(Icon_ID, PictureBoxItem);
  1446. }
  1447. }
  1448. else
  1449. {
  1450. // LOG
  1451. _Event.DebugView_SendMessage_Write(_Text.FieldSettingXmlFailInform + _Text.LeftBracket + FieldSetting.IMAGE + ":" + FieldSetting_Device.DevIconID + ":" + FieldSetting_Device.ID + _Text.RightBracket);
  1452. }
  1453. // 진행바 카운터가 증가한다
  1454. _Event.ProgressPopupCount_SendMessage(Popup_XmlSyncStartProgress, ++Popup_XmlSyncStartProgress_Count);
  1455. }
  1456. // 해쉬 추가
  1457. if (_Hash.Add(((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).HASH_PAGE, Page.NodeKey, Page) == true)
  1458. {
  1459. ((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).LIST_PAGE_ID.Add(Page.NodeKey);
  1460. }
  1461. // 임시로 사용한 맵디자이너는 삭제
  1462. Temp_MapDesigner.Close();
  1463. }
  1464. else
  1465. {
  1466. // LOG
  1467. _Event.DebugView_SendMessage_Write(_Text.FieldSettingXmlFailInform + _Text.LeftBracket + FieldSetting.IMAGE + _Text.RightBracket);
  1468. // 임시로 사용한 맵디자이너는 삭제
  1469. if (Temp_MapDesigner != null) Temp_MapDesigner.Close();
  1470. // 진행바 팝업창 종료
  1471. _Data.Result_Text = _Text.FailInform;
  1472. _Event.ProgressPopupCount_SendMessage(Popup_XmlSyncStartProgress, Popup_XmlSyncStartProgress_Count_End);
  1473. // 스레드 중지
  1474. if (WorkingThread != null) WorkingThread.Abort();
  1475. }
  1476. }
  1477. // 스레드 완료후 최종 함수
  1478. FieldSettingXml_Sync_Thread_Complete();
  1479. }
  1480. catch (Exception ex)
  1481. {
  1482. // LOG
  1483. _Event.DebugView_SendMessage_Write(ex.ToString());
  1484. // 임시로 사용한 맵디자이너는 삭제
  1485. if (Temp_MapDesigner != null) Temp_MapDesigner.Close();
  1486. // 진행바 팝업창 종료
  1487. _Data.Result_Text = _Text.FailInform;
  1488. _Event.ProgressPopupCount_SendMessage(Popup_XmlSyncStartProgress, Popup_XmlSyncStartProgress_Count_End);
  1489. // 스레드 중지
  1490. if (WorkingThread != null) WorkingThread.Abort();
  1491. }
  1492. }
  1493. // 스레드 종료직전 호출되는 함수
  1494. private void FieldSettingXml_Sync_Thread_Complete()
  1495. {
  1496. if (this.treeView_SystemTree.InvokeRequired)
  1497. {
  1498. TreeView_SyncXmlDataNodeCallback d = new TreeView_SyncXmlDataNodeCallback(FieldSettingXml_Sync_Thread_Complete);
  1499. this.treeView_SystemTree.Invoke(d, new object[] { });
  1500. }
  1501. else
  1502. {
  1503. // 생성된 리스트와 해쉬테이블을 토대로 트리에 반영
  1504. foreach (string PAGE_ID in ((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).LIST_PAGE_ID)
  1505. {
  1506. // 해당 수신기 노드 정보
  1507. TreeNode ReceiverNode = _Tree.GetNode_By_Name(this.treeView_SystemTree, Temp_RECEIVER.ID);
  1508. // 해당 그래픽 노드 키정보 가져옴
  1509. string temp_key = Temp_RECEIVER.Set_SubKey(Temp_RECEIVER, _Text.UI_TREE_IMAGE);
  1510. TreeNode ImageNode = _Tree.GetNode_By_Name(this.treeView_SystemTree, temp_key);
  1511. string Temp_NodeKey = ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).HASH_PAGE[PAGE_ID]).NodeKey;
  1512. string Temp_NodeText = ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[Temp_RECEIVER.ID]).HASH_PAGE[PAGE_ID]).NodeText;
  1513. // 그래픽 노드 밑에 페이지 노드를 추가한다
  1514. _Tree.NodeAdd_Root_Node_Node_Node(this.treeView_SystemTree, 0, ReceiverNode.Index, ImageNode.Index, Temp_NodeKey, Temp_NodeText, Object_Type.PAGE);
  1515. // 그래픽 노드 모두 펼침
  1516. ImageNode.Expand();
  1517. }
  1518. // 수신기 추가를 완료하였습니다!
  1519. _Event.Receiver_NodeAddComplete_SendMessage_Write(Temp_RECEIVER.ID);
  1520. }
  1521. }
  1522. // 페이지 노드를 선택한 후 팝업창 출력후 메뉴선택
  1523. public void Selected_Page_Menustrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  1524. {
  1525. // 페이지 삭제
  1526. if (e.ClickedItem.Text == _Text.PageDel)
  1527. {
  1528. string Form_MapDesigner_Name = "Form_MapDesigner_" + SystemTree_SelectedNode.Name;
  1529. // 맵디자이너 화면이 켜져 있는 경우
  1530. if (_Form.CreatedForm.Contains(Form_MapDesigner_Name) == true)
  1531. {
  1532. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.MapDesignerActive, 0);
  1533. }
  1534. else
  1535. {
  1536. Popup_PageDelInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.PageDelDataInform, 0);
  1537. // 대화 팝업은 특별처리
  1538. _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageDelInform_SendMessage_Event);
  1539. }
  1540. }
  1541. // 페이지 수정
  1542. else if (e.ClickedItem.Text == _Text.PageEdit)
  1543. {
  1544. // 신규 이미지 추가하는 경우에는 오로지 한개의 화면만 존재하면 된다
  1545. // 하지만 기존의 이미지를 편집하는 화면은 여러개의 화면이 존재할수 있다.
  1546. // 주의할점은 기존의 화면을 닫지않는 상태에서 화면으로 돌릴때 폼의 이름으로 포커스를 맞추므로 수동으로 폼 이름을 조절한다
  1547. string Form_MapDesigner_Name = "Form_MapDesigner_" + SystemTree_SelectedNode.Name;
  1548. // 맵디자이너 화면이 켜져 있는 경우
  1549. if (_Form.CreatedForm.Contains(Form_MapDesigner_Name) == true)
  1550. {
  1551. // 이벤트 알림
  1552. _Event.PictrueEdit_NodeSeleted_SendMessage_Write(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Parent.Name]), SystemTree_SelectedNode.Name);
  1553. }
  1554. else
  1555. {
  1556. // 신규 생성 : 맵디자이너 폼생성 , 수신기 노드 및 그래픽 노드의 정보를 전달
  1557. Form_MapDesigner MapDesigner = new Form_MapDesigner(((_RECEIVER)_Data.HASH_RECEIVER[SystemTree_SelectedNode.Parent.Parent.Name]).ID, SystemTree_SelectedNode.Name, SystemTree_SelectedNode.Text);
  1558. MapDesigner.Name = Form_MapDesigner_Name;
  1559. _Form.Create(MapDesigner, null);
  1560. }
  1561. }
  1562. // 이름 변경
  1563. else if (e.ClickedItem.Text == _Text.PageRename)
  1564. {
  1565. string Form_MapDesigner_Name = "Form_MapDesigner_" + SystemTree_SelectedNode.Name;
  1566. // 맵디자이너 화면이 켜져 있는 경우
  1567. if (_Form.CreatedForm.Contains(Form_MapDesigner_Name) == true)
  1568. {
  1569. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.MapDesignerActive, 0);
  1570. }
  1571. else
  1572. {
  1573. Form Page_Rename = new Form_MapDesigner_Rename(SystemTree_SelectedNode.Parent.Parent.Name, SystemTree_SelectedNode.Name, SystemTree_SelectedNode.Text);
  1574. _Form.Create(Page_Rename, null);
  1575. }
  1576. }
  1577. }
  1578. // 페이지 삭제 여부 팝업창 이벤트
  1579. public void _Event_Popup_PageDelInform_SendMessage_Event(object sender, object etc)
  1580. {
  1581. // 대화 팝업 주체
  1582. Form popup = (Form)sender;
  1583. if (Popup_PageDelInform == popup && etc.ToString() == _Text.OK)
  1584. {
  1585. // 페이지 삭제는 반드시 두단계 위에 수신기 노드가 있다
  1586. string Temp_Receiver_ID = SystemTree_SelectedNode.Parent.Parent.Name;
  1587. // 트리에 반영
  1588. _Tree.DelNodeName_By_Name_Check_ReceiverID(this.treeView_SystemTree, SystemTree_SelectedNode.Name, SystemTree_SelectedNode.Parent.Parent.Name);
  1589. // 리스트 및 해쉬에 반영
  1590. foreach (string PAGE_ID in ((_RECEIVER)_Data.HASH_RECEIVER[Temp_Receiver_ID]).LIST_PAGE_ID)
  1591. {
  1592. if (SystemTree_SelectedNode.Name == PAGE_ID)
  1593. {
  1594. ((_RECEIVER)_Data.HASH_RECEIVER[Temp_Receiver_ID]).HASH_PAGE.Remove(SystemTree_SelectedNode.Name);
  1595. ((_RECEIVER)_Data.HASH_RECEIVER[Temp_Receiver_ID]).LIST_PAGE_ID.Remove(SystemTree_SelectedNode.Name);
  1596. // 무조건 편집 혹은 새로만들기의 경우 차후 저장을 위해 셋팅
  1597. if (_Data.LIST_XmlDBNotSave_Receiver.Contains(Temp_Receiver_ID) == false)
  1598. _Data.LIST_XmlDBNotSave_Receiver.Add(Temp_Receiver_ID);
  1599. // 화면 전환
  1600. _Event.WorkViewPageName_SendMessage_Write(Temp_Receiver_ID, Object_Type.IMAGE, null, null);
  1601. break;
  1602. }
  1603. }
  1604. }
  1605. // 대화 팝업은 특별처리
  1606. _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageDelInform_SendMessage_Event);
  1607. }
  1608. ///
  1609. /// EVENT 처리부
  1610. ///
  1611. // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
  1612. public void CreateForm_FormClosing(object sender, FormClosingEventArgs e)
  1613. {
  1614. // 트리뷰에 페이지 노드를 생성 및 편집하기 위한 이벤트 해제
  1615. _Event.TreeView_PageNodeSet_SendMessage_Event -= new _Event.TreeView_PageNodeSet_SendMessage_Handler(_Event_TreeView_PageNodeSet_SendMessage_Event);
  1616. // 트리 추가 이벤트 핸들러 해제
  1617. _Event.TreeView_ReceiverNodeSet_SendMessage_Event -= new _Event.TreeView_ReceiverNodeSet_SendMessage_Handler(_Event_TreeView_ReceiverNodeSet_SendMessage_Event);
  1618. // 다른이름으로 페이지 명을 변경하여 저장하는 이벤트 핸들러 해제
  1619. _Event.Page_Rename_SendMessage_Event -= new _Event.Page_Rename_SendMessage_Handler(_Event_Page_Rename_SendMessage_Event);
  1620. // 페이지 저장 (XML 및 DB 저장) 이벤트 핸들러 해제
  1621. _Event.Page_Save_SendMessage_Event -= new _Event.Page_Save_SendMessage_Handler(_Event_Page_Save_SendMessage_Event);
  1622. // 트리뷰 초기화 이벤트 및 프로젝트 열기 혹은 새로만들기 겸용 핸들러 등록
  1623. _Event.TreeView_Clear_SendMessage_Event -= new _Event.TreeView_Clear_SendMessage_Handler(_Event_TreeView_Clear_SendMessage_Event);
  1624. // 수신기 초기화 이벤트 핸들러 해제
  1625. _Event.Receiver_Clear_SendMessage_Event -= new _Event.Receiver_Clear_SendMessage_Handler(_Event_Receiver_Clear_SendMessage_Event);
  1626. // 수신기 추가 및 편집 폼에서 작업 완료 이벤트 핸들러 해제
  1627. _Event.WorkViewPageName_Receiver_SendMessage_Event -= new _Event.WorkViewPageName_Receiver_SendMessage_Handler(_Event_WorkViewPageName_Receiver_SendMessage_Event);
  1628. }
  1629. //// 프로젝트 새로 만들기 이벤트 핸들러 등록
  1630. //public void _Event_Project_New_SendMessage_Event(string ProjectName)
  1631. //{
  1632. // // 트리 초기화
  1633. // this.treeView_SystemTree.Nodes.Clear();
  1634. // // 노드 추가
  1635. // _Tree.NodeAdd_Root(this.treeView_SystemTree, _Text.UI_TREE_ROOT_KEY, ProjectName, Object_Type.PROJECT);
  1636. //}
  1637. //// 프로젝트 열기 이벤트
  1638. //public void _Event_Project_Open_SendMessage_Event(string ProjectName)
  1639. //{
  1640. // // 트리 초기화
  1641. // this.treeView_SystemTree.Nodes.Clear();
  1642. // // 프로젝트명 표시
  1643. // _Tree.NodeAdd_Root(this.treeView_SystemTree, _Text.UI_TREE_ROOT_KEY, ProjectName, Object_Type.PROJECT);
  1644. // // _Receiver.xml 제거 : cyim 2012.8.29
  1645. // //// 트리에 표시
  1646. // //treeView_Read_Receiver_XML();
  1647. //}
  1648. // 다른이름으로 페이지 명을 변경하여 저장하는 이벤트
  1649. public void _Event_Page_Rename_SendMessage_Event(string RECEIVER_ID, string PageNodeKey, string PageNodeText)
  1650. {
  1651. // 트리에 반영
  1652. TreeNode PageReame = _Tree.GetNode_By_Name(this.treeView_SystemTree, PageNodeKey);
  1653. // 임시 저장
  1654. string temp_BeforePageName = PageReame.Text;
  1655. // 노드 키와 텍스트 정보는 페이지 이름으로 통일한다
  1656. PageReame.Name = PageNodeKey;
  1657. PageReame.Text = PageNodeText;
  1658. // 리스트에 반영
  1659. //((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).LIST_PAGE_ID.Remove(OriginalName);
  1660. //((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).LIST_PAGE_ID.Add(PageName);
  1661. //// 페이지 값 복사
  1662. //_Page Page = ((_Page)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[OriginalName]);
  1663. //Page.Name=PageName;
  1664. // 해쉬에 반영
  1665. //((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE.Remove(OriginalName);
  1666. //((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE.Add(Page.Name, Page);
  1667. // 페이지명 변경
  1668. ((_Page)(((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID]).HASH_PAGE[PageNodeKey])).NodeText = PageNodeText;
  1669. // 기존의 버튼의 점프페이지명은 해당 페이지명으로 변경해야한다
  1670. _RECEIVER RECEIVER = (_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_ID];
  1671. // 수신기에 해당하는 페이지 정보 추출
  1672. foreach (string PAGE_ID in RECEIVER.LIST_PAGE_ID)
  1673. {
  1674. _Page Page = ((_Page)RECEIVER.HASH_PAGE[PAGE_ID]);
  1675. // 페이지에 해당하는 아이콘 정보 추출
  1676. foreach (string ICON_ID in Page.LIST_ICON_ID)
  1677. {
  1678. _PictureBoxItem PictureBoxItem = ((_PictureBoxItem)Page.HASH_ICON[ICON_ID]);
  1679. // 버튼 아이콘만 추출 (기존의 페이지명이 있는 경우에만)
  1680. if (PictureBoxItem.ItemType == Item_Type.Button && PictureBoxItem.Button_JumpPageName == temp_BeforePageName)
  1681. {
  1682. // 모든 점프페이지명을 변경시켜준다
  1683. PictureBoxItem.Button_JumpPageName = PageReame.Text;
  1684. }
  1685. }
  1686. }
  1687. // 무조건 편집 혹은 새로만들기의 경우 차후 저장을 위해 셋팅
  1688. if (_Data.LIST_XmlDBNotSave_Receiver.Contains(RECEIVER_ID) == false)
  1689. _Data.LIST_XmlDBNotSave_Receiver.Add(RECEIVER_ID);
  1690. // 화면 전환
  1691. _Event.WorkViewPageName_SendMessage_Write(RECEIVER_ID, Object_Type.IMAGE, null, null);
  1692. }
  1693. // 트리 노드 생성 및 편집 이벤트 처리
  1694. public void _Event_TreeView_ReceiverNodeSet_SendMessage_Event(_RECEIVER RECEIVER)
  1695. {
  1696. Delegate_New_SystemTree(treeView_SystemTree.Nodes[0], RECEIVER);
  1697. }
  1698. // 트리에 새로운 노드 추가
  1699. private void Delegate_New_SystemTree(TreeNode pNode, _RECEIVER RECEIVER) // 시스템 트리에 추가하기
  1700. {
  1701. if (this.treeView_SystemTree.InvokeRequired)
  1702. {
  1703. TreeView_SetTextCallback d = new TreeView_SetTextCallback(Delegate_New_SystemTree);
  1704. this.Invoke(d, new object[] { pNode, RECEIVER });
  1705. }
  1706. else
  1707. {
  1708. string temp_key = null;
  1709. string temp_name = null;
  1710. ///
  1711. /// 수신기
  1712. ///
  1713. // 수신기 노드 추가
  1714. temp_key = RECEIVER.ID;
  1715. temp_name = RECEIVER.KEY_NAME;
  1716. _Tree.NodeAdd_Root_Node(treeView_SystemTree, 0, temp_key, temp_name, Object_Type.RECEIVER);
  1717. // 추가한 노드의 정보를 알아야 하위 트리에 추가할수 있다
  1718. TreeNode Added_RECEIVER = _Tree.GetNode_By_Name(treeView_SystemTree, RECEIVER.ID);
  1719. ///
  1720. /// 입출력
  1721. ///
  1722. // 입출력 노드 추가
  1723. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_INOUTPUT);
  1724. temp_name = _Text.UI_TREE_INOUTPUT;
  1725. _Tree.NodeAdd_Root_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, temp_key, temp_name, Object_Type.INOUT);
  1726. // 추가한 노드의 정보를 알아야 하위 트리에 추가할수 있다
  1727. TreeNode Added_INOUTPUT = _Tree.GetNode_By_Name(treeView_SystemTree, temp_key);
  1728. // 통신 보드 노드 추가
  1729. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_COM_BOARD);
  1730. temp_name = _Text.UI_TREE_COM_BOARD;
  1731. _Tree.NodeAdd_Root_Node_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, Added_INOUTPUT.Index, temp_key, temp_name, Object_Type.COM_BOARD);
  1732. //// 추가한 노드의 정보를 알아야 하위 트리에 추가할수 있다
  1733. //TreeNode Added_COM_BOARD = _Tree.GetNode_By_Name(treeView_SystemTree, temp_key);
  1734. //for (int i = 1; i <= RECEIVER.COM_BOARD_MAX_NUM; i++)
  1735. //{
  1736. // temp_key = RECEIVER.Set_SubKey(RECEIVER, string.Format(_Text.UI_TREE_COM_BOARD_KEY, i));
  1737. // temp_name = _Text.UI_TREE_COM_BOARD + i.ToString();
  1738. // _Tree.NodeAdd_Root_Node_Node_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, Added_INOUTPUT.Index, Added_COM_BOARD.Index, temp_key, temp_name, Object_Type.COM_BOARDS);
  1739. //}
  1740. // IO 보드 노드 추가
  1741. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_IO_BOARD);
  1742. _Tree.NodeAdd_Root_Node_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, Added_INOUTPUT.Index, temp_key, _Text.UI_TREE_IO_BOARD, Object_Type.IO_BOARD);
  1743. //// 추가한 노드의 정보를 알아야 하위 트리에 추가할수 있다
  1744. //TreeNode Added_IO_BOARD = _Tree.GetNode_By_Name(treeView_SystemTree, temp_key);
  1745. //for (int i = 1; i <= RECEIVER.IO_BOARD_MAX_NUM; i++)
  1746. //{
  1747. // temp_key = RECEIVER.Set_SubKey(RECEIVER, string.Format(_Text.UI_TREE_IO_BOARD_KEY, i));
  1748. // temp_name = _Text.UI_TREE_IO_BOARD + i.ToString();
  1749. // _Tree.NodeAdd_Root_Node_Node_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, Added_INOUTPUT.Index, Added_IO_BOARD.Index, temp_key, temp_name, Object_Type.IO_BOARD);
  1750. //}
  1751. // 키패드 노드 추가
  1752. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_KEYPAD);
  1753. _Tree.NodeAdd_Root_Node_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, Added_INOUTPUT.Index, temp_key, _Text.UI_TREE_KEYPAD, Object_Type.KEYPAD);
  1754. // 비상방송 노드 추가
  1755. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_EMERGENCY_BROADCAST);
  1756. _Tree.NodeAdd_Root_Node_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, Added_INOUTPUT.Index, temp_key, _Text.UI_TREE_EMERGENCY_BROADCAST, Object_Type.EMERGENCY_BROADCAST);
  1757. ///
  1758. /// 포인트
  1759. ///
  1760. // 포인트 노드 추가
  1761. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_POINT);
  1762. _Tree.NodeAdd_Root_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, temp_key, _Text.UI_TREE_POINT, Object_Type.POINT);
  1763. // 추가한 노드의 정보를 알아야 하위 트리에 추가할수 있다
  1764. TreeNode Added_POINT = _Tree.GetNode_By_Name(treeView_SystemTree, temp_key);
  1765. // 입력 노드 추가
  1766. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_POINT_INPUT);
  1767. _Tree.NodeAdd_Root_Node_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, Added_POINT.Index, temp_key, _Text.UI_TREE_POINT_INPUT, Object_Type.INPUT);
  1768. // 출력 노드 추가
  1769. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_POINT_OUTPUT);
  1770. _Tree.NodeAdd_Root_Node_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, Added_POINT.Index, temp_key, _Text.UI_TREE_POINT_OUTPUT, Object_Type.OUTPUT);
  1771. ///
  1772. /// 연동
  1773. ///
  1774. // 연동 노드 추가
  1775. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_OPER);
  1776. _Tree.NodeAdd_Root_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, temp_key, _Text.UI_TREE_OPER, Object_Type.OPER);
  1777. // 추가한 노드의 정보를 알아야 하위 트리에 추가할수 있다
  1778. TreeNode Added_OPER = _Tree.GetNode_By_Name(treeView_SystemTree, temp_key);
  1779. // 그룹 노드 추가
  1780. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_OPER_GROUP);
  1781. _Tree.NodeAdd_Root_Node_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, Added_OPER.Index, temp_key, _Text.UI_TREE_OPER_GROUP, Object_Type.OPER_GROUP);
  1782. // 연동설정 노드 추가
  1783. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_OPER_SET);
  1784. _Tree.NodeAdd_Root_Node_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, Added_OPER.Index, temp_key, _Text.UI_TREE_OPER_SET, Object_Type.OPER_SET);
  1785. ///
  1786. /// 그래픽
  1787. ///
  1788. // 그래픽 노드 추가
  1789. temp_key = RECEIVER.Set_SubKey(RECEIVER, _Text.UI_TREE_IMAGE);
  1790. _Tree.NodeAdd_Root_Node_Node(treeView_SystemTree, 0, Added_RECEIVER.Index, temp_key, _Text.UI_TREE_IMAGE, Object_Type.IMAGE);
  1791. // 트리 전체 확대
  1792. treeView_SystemTree.ExpandAll();
  1793. //// 트리는 ACU 노드만 표시할수있도록 한다
  1794. //treeView_SystemTree.Nodes[0].Expand();
  1795. //// 추가한 수신기 노드 개수 만큼 열수 있도록 카운트
  1796. //int temp = 0;
  1797. //foreach (string RECEIVER_ID in _Data.LIST_RECEIVER_ID)
  1798. //{
  1799. // treeView_SystemTree.Nodes[0].Nodes[temp++].Expand();
  1800. //}
  1801. // 트리정보 저장
  1802. _Tree.Save_SystemTreeInfo(this.treeView_SystemTree);
  1803. // 수신기 노드가 추가되면 워크뷰에 리스트를 보여주도록 함 (프로젝트를 클릭한 것처럼 화면 전환)
  1804. _Event.WorkViewPageName_SendMessage_Write(RECEIVER.ID, Object_Type.PROJECT, null, null);
  1805. // 수신기 추가는 무조건
  1806. this.treeView_SystemTree.SelectedNode = _Tree.GetNode_By_Name(treeView_SystemTree, _Text.UI_TREE_ROOT_KEY);
  1807. ///
  1808. /// 강제 페이지 동기화
  1809. ///
  1810. // 페이지 동기화 루틴 추가
  1811. FieldSettingXml_Sync(RECEIVER);
  1812. }
  1813. }
  1814. // 트리뷰에 페이지 노드를 생성 및 편집하기 위한 이벤트 (예시 : 맵디자이너에서 페이지 추가)
  1815. private void _Event_TreeView_PageNodeSet_SendMessage_Event(string RECEIVER_ID, _Page Page)
  1816. {
  1817. // 해당 수신기 노드 정보
  1818. TreeNode ReceiverNode = _Tree.GetNode_By_Name(this.treeView_SystemTree, RECEIVER_ID);
  1819. // 그래픽 노드 밑에 페이지 노드를 추가한다 (그래픽 노드의 키값 형태 : RECEIVER.ID + _Text.Minus + PORT_NUM)
  1820. TreeNode ImageNode = _Tree.GetNode_By_Name(this.treeView_SystemTree, RECEIVER_ID + _Text.Minus + _Text.UI_TREE_IMAGE);
  1821. // 노드 키와 텍스트 정보는 페이지 이름으로 통일한다
  1822. _Tree.NodeAdd_Root_Node_Node_Node(this.treeView_SystemTree, 0, ReceiverNode.Index, ImageNode.Index, Page.NodeKey, Page.NodeText, Object_Type.PAGE);
  1823. // 그래픽 노드 모두 펼침
  1824. ImageNode.Expand();
  1825. }
  1826. // 이벤트 테이블 (TB_EVENT_TYPE) 생성
  1827. private void Create_TB_EVENT_TYPE()
  1828. {
  1829. try
  1830. {
  1831. OpenFileDialog openFileDialog = new OpenFileDialog();
  1832. // 파일을 읽는 경로는 우선 프로그램에서 배포하는 파일을 따라간다
  1833. openFileDialog.InitialDirectory = _File.ProgramPath; //_Data.Project_Path + "\\" + _Data.Project_Name;
  1834. //openFileDialog.Filter = "(*.xls)|*.xls|(*.xlsx)|*.xlsx";
  1835. openFileDialog.Filter = "(*.csv*)|*.csv";
  1836. if (openFileDialog.ShowDialog() == DialogResult.OK)
  1837. {
  1838. string[] EventTypeString = System.IO.File.ReadAllLines(openFileDialog.FileName, Encoding.Default);
  1839. if (EventTypeString.Length == 0)
  1840. {
  1841. // 데이타가 잘못되었습니다
  1842. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform, 0);
  1843. return;
  1844. }
  1845. // 임시저장소
  1846. ArrayList Type = new ArrayList();
  1847. ArrayList TypeName = new ArrayList();
  1848. foreach (string EventType in EventTypeString)
  1849. {
  1850. string[] Temps = EventType.Split(',');
  1851. if (Temps.Length < 2)
  1852. {
  1853. // 데이타가 잘못되었습니다
  1854. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform, 0);
  1855. return;
  1856. }
  1857. // 첫째줄은 제외
  1858. if (Temps[0] != "EVENT_TYPE")
  1859. {
  1860. Type.Add(Temps[0]);
  1861. TypeName.Add(Temps[1]);
  1862. }
  1863. }
  1864. // TB_EVENT_TYPE 모든 데이타 삭제
  1865. _Db.Execute(_Sql.Delete_Table("TB_EVENT_TYPE", null));
  1866. foreach (string Data in Type)
  1867. {
  1868. _Db.ADD("TB_EVENT_TYPE",
  1869. "EVENT_TYPE=" + Data +
  1870. ";EVENT_TYPE_NAME=" + TypeName[Type.IndexOf(Data)].ToString() +
  1871. ";UPDATE_USER_ID=" + "FireManager" +
  1872. ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  1873. }
  1874. // 저장하였습니다
  1875. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.SaveInform, 0);
  1876. }
  1877. }
  1878. catch (Exception e)
  1879. {
  1880. // 데이타가 잘못되었습니다
  1881. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform, 0);
  1882. _Event.DebugView_SendMessage_Write(e.ToString());
  1883. }
  1884. }
  1885. }
  1886. }