cp_radioList.xfdl 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FDL version="1.5">
  3. <TypeDefinition url="..\default_typedef.xml"/>
  4. <Form id="cp_radioList" classname="cp_periodCal" inheritanceid="" position="absolute 0 0 100 20" titletext="Radio List" scrollbars="none" onload="cp_form_onload" col="1" row="1" style="background:transparent;">
  5. <Layouts>
  6. <Layout>
  7. <Radio id="rdo_Tmp" taborder="1" columncount="0" rowcount="0" position="absolute 0 0 100 20" codecolumn="codecolumn" datacolumn="datacolumn">
  8. <Dataset id="innerdataset">
  9. <ColumnInfo>
  10. <Column id="codecolumn" size="256"/>
  11. <Column id="datacolumn" size="256"/>
  12. </ColumnInfo>
  13. <Rows>
  14. <Row>
  15. <Col id="codecolumn">0</Col>
  16. <Col id="datacolumn">Multi Radio</Col>
  17. </Row>
  18. </Rows>
  19. </Dataset>
  20. </Radio>
  21. </Layout>
  22. </Layouts>
  23. <Objects>
  24. <Dataset id="ds_rdoList" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  25. <ColumnInfo>
  26. <Column id="chk" type="STRING" size="256"/>
  27. <Column id="val" type="STRING" size="256"/>
  28. <Column id="txt" type="STRING" size="256"/>
  29. </ColumnInfo>
  30. </Dataset>
  31. </Objects>
  32. <Script type="xscript4.0"><![CDATA[/***************************************************************************************
  33. * System Name : himed2
  34. * Job Name : Composite
  35. * File Name : cp_radioList.xfdl
  36. * Creator : TOBESOFT
  37. * Make Date : 2014.03.24
  38. *
  39. * Description : multi radio List
  40. *---------------------------------------------------------------------------------------
  41. * Modify Date Modifier Modify Description
  42. *---------------------------------------------------------------------------------------
  43. * 2013.01.18 TOBESOFT Initial Make Program
  44. *
  45. *---------------------------------------------------------------------------------------
  46. ****************************************************************************************/
  47. /* 참고사항
  48. * User Properties
  49. col : 아이템 열의 개수
  50. row : 아이템 행의 개수
  51. */
  52. //=======================================================================================
  53. // Common Lib Include
  54. //---------------------------------------------------------------------------------------
  55. include "com_commonxp::comm_ds.xjs";
  56. //=======================================================================================
  57. // Global Form Variable
  58. //---------------------------------------------------------------------------------------
  59. var iv_event; //event
  60. var objForm; //form Object
  61. /****************************************************************************************
  62. * Description : Form Initialization
  63. * Argument : obj : Object Event has occurred
  64. * : e : Event Object
  65. * return :
  66. ****************************************************************************************/
  67. function cp_form_onload(obj:Form, e:LoadEventInfo)
  68. {
  69. objForm = obj;
  70. }
  71. //=======================================================================================
  72. // Event
  73. //---------------------------------------------------------------------------------------
  74. function ufn_event_onitemchanged(obj:Radio, e:ItemChangeEventInfo)
  75. {
  76. var nRow = ds_rdoList.findRow("val", e.postvalue);
  77. var objRdo;
  78. for(var i=0; i < ds_rdoList.getRowCount(); i++)
  79. {
  80. objRdo = eval("rdo_multi_"+i);
  81. if(nRow == i)
  82. {
  83. ds_rdoList.setColumn(i, "chk","1");
  84. }
  85. else
  86. {
  87. objRdo.value = null;
  88. ds_rdoList.setColumn(i, "chk","0");
  89. }
  90. }
  91. if(!ufn_isNull(iv_event)) ufn_compositeEvent(iv_event, e.postvalue);
  92. }
  93. //=======================================================================================
  94. // User Function
  95. //---------------------------------------------------------------------------------------
  96. /****************************************************************************************
  97. * Description : form init setting
  98. * Argument : String sProp - uset properties
  99. * Object objDs - dataset object
  100. * String sColVal - value column
  101. * String sColTxt - text column
  102. * String sEvent - event function
  103. * @return N / A
  104. * ex)setInitProperty("col=2,row=1")
  105. ****************************************************************************************/
  106. function setInitComp(sProp, objDs, sColVal, sColTxt, sEvent)
  107. {
  108. //InitProperty
  109. if(!ufn_isNull(sProp))
  110. {
  111. setInitProperty(sProp);
  112. }
  113. //trace(objDs.saveXML());
  114. //BindDataset
  115. if(!(ufn_isNull(objDs) || ufn_isNull(sColVal) || ufn_isNull(sColTxt)))
  116. {
  117. setBindDataset(objDs, sColVal, sColTxt);
  118. }
  119. //setCallEvent
  120. if(!ufn_isNull(sEvent))
  121. {
  122. setCallEvent(sEvent);
  123. }
  124. }
  125. /****************************************************************************************
  126. * Description : user property setting
  127. * Argument : String sVal
  128. * @return N / A
  129. * ex)setInitProperty("col=2,row=1")
  130. ****************************************************************************************/
  131. function setInitProperty(sVal)
  132. {
  133. if(ufn_isNull(sVal))
  134. {
  135. return;
  136. }
  137. var arrVal= sVal.split(",");
  138. var arrProp;
  139. for(var i=0; i < arrVal.length; i++)
  140. {
  141. arrProp = arrVal[i].split("=");
  142. eval(objForm.name+"."+arrProp[0]+"="+arrProp[1]);
  143. }
  144. //trace("asdfsadfsdf:"+objForm.col+" "+objForm.row+" "+objForm.cellspacing+" "+objForm.vcellspacing+" "+objForm.itemWidth+" "+objForm.itemHeight+" , overflow="+objForm.overflow);
  145. }
  146. /****************************************************************************************
  147. * Description : dstaset binding
  148. * Argument : object objDs - dataset Object
  149. :
  150. * @return N / A
  151. ****************************************************************************************/
  152. function setBindDataset(objDs, sColVal, sColTxt)
  153. {
  154. ufn_removeComp();
  155. ds_rdoList.clearData();
  156. var nRow;
  157. for(var i =0; i < objDs.getRowCount() ; i++)
  158. {
  159. nRow = ds_rdoList.addRow();
  160. ds_rdoList.setColumn(nRow, "val", ufn_trim(objDs.getColumn(i, sColVal)));
  161. ds_rdoList.setColumn(nRow, "txt", ufn_trim(objDs.getColumn(i, sColTxt)));
  162. }
  163. utlf_makeRadio();
  164. rdo_Tmp.visible = false;
  165. }
  166. /****************************************************************************************
  167. * Description : User Composite Set Data Method
  168. * Argument : sData
  169. * return : none
  170. ****************************************************************************************/
  171. function setData(sData)
  172. {
  173. var nRow = ds_rdoList.findRow("val", sData);
  174. var objRdo;
  175. var objName;
  176. var objNm = objForm.name;
  177. for(var i=0; i < ds_rdoList.getRowCount(); i++)
  178. {
  179. objRdo = eval("rdo_multi_"+i);
  180. if(nRow == i)
  181. {
  182. //objName = objRdo.name;
  183. objRdo.value = sData;
  184. ds_rdoList.setColumn(i, "chk","1");
  185. }
  186. else
  187. {
  188. objRdo.value = "";
  189. ds_rdoList.setColumn(i, "chk","0");
  190. }
  191. }
  192. if(!ufn_isNull(iv_event)) ufn_compositeEvent(iv_event,sData);
  193. }
  194. /****************************************************************************************
  195. * Description : User Composite Get Data Method
  196. * Argument : none
  197. * return : none
  198. ****************************************************************************************/
  199. function getData()
  200. {
  201. var iv_Rtn = ds_rdoList.lookup("chk", "1", "val");
  202. return iv_Rtn;
  203. }
  204. /****************************************************************************************
  205. * Description : User Composite Get Data Method
  206. * Argument : none
  207. * return : none
  208. ****************************************************************************************/
  209. function getLableData()
  210. {
  211. var iv_Rtn = ds_rdoList.lookup("chk", "1", "txt");
  212. return iv_Rtn;
  213. }
  214. /****************************************************************************************
  215. * Description : User Composite set setEnbale
  216. * Argument : none
  217. * return : none
  218. ****************************************************************************************/
  219. function setEnbale(bReq)
  220. {
  221. objForm.enable = bReq;
  222. }
  223. /****************************************************************************************
  224. * Description : User Composite Set Event Method
  225. * Argument : none
  226. * return : none
  227. ****************************************************************************************/
  228. function setCallEvent(sEvent)
  229. {
  230. iv_event = sEvent;
  231. }
  232. /****************************************************************************************
  233. * Description : dstaset binding
  234. * Argument : object objDs - dataset Object
  235. :
  236. * @return N / A
  237. ****************************************************************************************/
  238. function utlf_makeRadio()
  239. {
  240. var arrCol = new Array();
  241. var sDsNm; //데이터셋 ID
  242. var sTxt; //라디오 텍스트
  243. var objFont = utlf_getObjFont(9, "Dotum"); //font object
  244. var objTextSize; //폰트사이즈
  245. var nFontPx;
  246. var objInnDs; // innerdataset;
  247. var nCellspacing = toNumber(objForm.cellspacing,5)
  248. //var nCellspacing = 5; //컴퍼넌트사이 간격
  249. var nCircleSize = 19; //라디오 이미지 사이즈
  250. var nWidth = 0; // radio width
  251. var nHeight = 0; //radio height
  252. /* //추가 확장기능 요청시 사용할려고 남겨 놓음
  253. var nItemWidth = toNumber(objForm.itemWidth,0);
  254. var nItemHeight = toNumber(objForm.itemHeight,0);
  255. if(nItemWidth < 1 || ufn_isNull(nItemWidth))
  256. {
  257. nWidth = 100;
  258. }
  259. else
  260. {
  261. nWidth = nItemWidth;
  262. }
  263. if(nItemHeight< 1 || ufn_isNull(nItemHeight))
  264. {
  265. nHeight = 20;
  266. }
  267. else
  268. {
  269. nHeight = nItemHeight;
  270. }
  271. */
  272. nWidth = 19;
  273. nHeight =20;
  274. var objFont = utlf_getObjFont(9, "Dotum"); //font object
  275. var objTextSize; //폰트사이즈
  276. var objNm = objForm.name;
  277. var j = 1; //col 갯수
  278. var nTop = 0;
  279. var nLeft = 0;
  280. var nTop =0;
  281. var nRight =0;
  282. var nBottom =0;
  283. var nMaxWidth = 0; //가장 큰 넓이값-폼의 크기를 설정하기 위한 값
  284. var nMaxHeight = 0; //가장 큰 높이값-폼의 크기를 설정하기 위한 값
  285. for(var i=0; i < ds_rdoList.getRowCount(); i++)
  286. {
  287. arrCol[0] = {col: "cd", type:"string", size:256};
  288. arrCol[1] = {col: "nm", type:"string", size:256};
  289. sDsNm = dsf_createDs("ds_rdo_"+i, arrCol);
  290. objInnDs = eval(sDsNm);
  291. objInnDs.insertRow(0);
  292. sTxt = ufn_trim(ds_rdoList.getColumn(i,"txt"));
  293. objInnDs.setColumn(0,"cd", ufn_trim(ds_rdoList.getColumn(i,"val")));
  294. objInnDs.setColumn(0,"nm", sTxt);
  295. //trace(sDsNm + "::" +objInnDs.saveXML());
  296. if(i == 0)
  297. {
  298. nLeft = 0;
  299. }
  300. else
  301. {
  302. nLeft = nRight + nCellspacing;
  303. }
  304. objTextSize = utlf_getTextSize(sTxt, objFont); //폰트사이즈
  305. nRight = nLeft + nCircleSize + objTextSize.cx;
  306. if(toNumber(objForm.row,0) == 1 || toNumber(objForm.col,0) >= j) //한 row의 컬럼 갯수 보다 크면 다음 row로 이동
  307. {
  308. utlf_createRadio("rdo_multi_"+i, nLeft, nTop, nRight, nTop + nHeight, sDsNm);
  309. }
  310. else
  311. {
  312. nLeft = 0;
  313. nTop = nTop + nHeight ;
  314. nRight = nLeft + nCircleSize + objTextSize.cx;
  315. utlf_createRadio("rdo_multi_"+i, nLeft, nTop, nRight, nTop + nHeight, sDsNm);
  316. j = 0;
  317. }
  318. if(nMaxWidth < (nRight + nWidth))
  319. {
  320. nMaxWidth = nRight + nWidth;
  321. }
  322. if(nMaxHeight < nTop + nHeight)
  323. {
  324. nMaxHeight = nTop + nHeight;
  325. }
  326. j++;
  327. }
  328. //overflow 가 visible이면 checkbox 크기에 맞게 form을 늘여준다.
  329. if(objForm.overflow == "visible")
  330. {
  331. //sysf_trace("nMaxWidth : " + nMaxWidth + " nMaxHeight : " + nMaxHeight);
  332. //form 사이즈를 조절한다.
  333. objForm.position.width = nMaxWidth;
  334. objForm.position.height = nMaxHeight;
  335. }
  336. else if(objForm.overflow == "hidden") //form의 사이즈를 변경하지 않는다.
  337. {
  338. }
  339. else if(objForm.overflow == "scroll") //폼에 스크롤을 생성한다.
  340. {
  341. objForm.scrollbars = "autoboth";
  342. }
  343. else
  344. {
  345. //form 사이즈를 조절한다.
  346. // objForm.position.width = nMaxWidth;
  347. // objForm.position.height = nMaxHeight;
  348. }
  349. }
  350. /****************************************************************************************
  351. * Description : create radio object
  352. * Argument : string chkName - checkbox id
  353. number nL - left postion
  354. number nT - top postion
  355. number nR - right postion
  356. number nB - bottom postion
  357. string sVal - true value
  358. string sTxt - text value
  359. * @return N / A
  360. ****************************************************************************************/
  361. function utlf_createRadio(rdoName, nL, nT, nR, nB, sDsNm)
  362. {
  363. var objRadio = new Radio(rdoName, nL, nT, nR, nB);
  364. objForm.addChild(rdoName, objRadio);
  365. objRadio.onitemchanged.addHandler(ufn_event_onitemchanged);
  366. objRadio.innerdataset = sDsNm;
  367. objRadio.codecolumn = "cd";
  368. objRadio.datacolumn = "nm";
  369. objRadio.show();
  370. }
  371. /**********************************************************************************
  372. * 함수명 : ufn_trim
  373. * 설 명 : 입력받은 문자열의 공백을 제거한다.
  374. * argument : sValue 문자열 값
  375. * return Type : return 문자열
  376. * 작성자 : tobesoft
  377. **********************************************************************************/
  378. function ufn_trim(sValue)
  379. {
  380. if (sValue == null) return "";
  381. if (new String(sValue).valueOf() == "undefined") return "";
  382. if (new String(sValue) == null) return "";
  383. var retVal = (new String(sValue)).replace(/^\s+|\s+$/g, '');
  384. return retVal;
  385. }
  386. /****************************************************************************************
  387. * Description : 컴포지트 이벤트 호출 함수
  388. * Argument : sEventId - 호출할 이벤트 ID
  389. * sCompNm - 컴포지트명
  390. * @return N / A
  391. ****************************************************************************************/
  392. function ufn_compositeEvent(sEventId,sCompNm)
  393. {
  394. var lv_oFrame = this.getOwnerFrame();
  395. var lv_bInhForm = ufn_isNull(lv_oFrame.bInhForm) ? false : lv_oFrame.bInhForm;
  396. var lv_bMdiForm = ufn_isNull(lv_oFrame.bMdiForm) ? false : lv_oFrame.bMdiForm;
  397. var lv_bMdiPopForm = ufn_isNull(lv_oFrame.bMdiPopForm) ? false : lv_oFrame.bMdiPopForm;
  398. try{
  399. if(lv_bInhForm)
  400. {
  401. if(lv_bMdiForm == true || lv_bMdiPopForm == true)
  402. {
  403. if(ufn_isNull(sCompNm))
  404. {
  405. eval("this.getOwnerFrame().form.div_Layout.div_Work."+sEventId+"()");
  406. }
  407. else
  408. {
  409. eval("this.getOwnerFrame().form.div_Layout.div_Work."+sEventId+"('"+sCompNm+"')");
  410. }
  411. }
  412. else
  413. {
  414. if(ufn_isNull(sCompNm))
  415. {
  416. eval("this.getOwnerFrame().form."+sEventId+"()");
  417. }
  418. else
  419. { ;
  420. eval("this.getOwnerFrame().form."+sEventId+"('"+sCompNm+"')");
  421. }
  422. }
  423. }
  424. else
  425. {
  426. if(ufn_isNull(sCompNm))
  427. {
  428. eval(sEventId+"()");
  429. }
  430. else
  431. {
  432. eval(sEventId+"('"+sCompNm+"')");
  433. }
  434. }
  435. }catch(err){}
  436. }
  437. /****************************************************************************************
  438. * Description : 입력값이 null 또는 wihte space로만 이루어져 있으면 빈문자를 리턴하는 함수
  439. * Argument : sValue String
  440. * return : String
  441. ****************************************************************************************/
  442. function ufn_isEmpty(sValue)
  443. {
  444. if (new String(sValue).valueOf() == "undefined") return "";
  445. if (sValue == null) return "";
  446. var lv_sChkStr = new String(sValue);
  447. if (lv_sChkStr == null) return "";
  448. if (lv_sChkStr.toString().length == 0 ) return "";
  449. return sValue;
  450. }
  451. /****************************************************************************************
  452. * Description : 입력값이 null 또는 wihte space로만 이루어져 있는지 확인 하는 함수
  453. * Argument : value 입력값
  454. * return : boolean. null(혹은 white space) 여부
  455. ****************************************************************************************/
  456. function ufn_isNull(sValue)
  457. {
  458. if (new String(sValue).valueOf() == "undefined") return true;
  459. if (sValue == null) return true;
  460. var lv_sChkStr = new String(sValue);
  461. if (lv_sChkStr == null) return true;
  462. if (lv_sChkStr.toString().length == 0 ) return true;
  463. return false;
  464. }
  465. /****************************************************************************************
  466. * Description : remove Compnent
  467. * Argument : none
  468. * return : none
  469. ****************************************************************************************/
  470. function ufn_removeComp()
  471. {
  472. for(var i =0 ; i < ds_rdoList.getRowCount(); i++)
  473. {
  474. if(isValidObject("rdo_multi_"+i))
  475. {
  476. var objCh = eval("rdo_multi_"+i);
  477. objForm.removeChild("rdo_multi_"+i);
  478. var suss = objCh.destroy();
  479. objCh= null;
  480. }
  481. }
  482. }]]></Script>
  483. </Form>
  484. </FDL>