123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636 |
- <?xml version="1.0" encoding="utf-8"?>
- <Script type="xscript4.0"><![CDATA[class nuMedirecMultiRadio extends Div
- {
- /*******************************************************************************
- * 멤버변수
- ******************************************************************************/
- private var PADDING_SIZE = 5;
- private var TEXT_WIDTH = 12;
- private var MARGIN_SIZE = 19//20;//22;
- private var LINE_SPACING = 16;
-
- private var oBindDataset;
- private var sBindColumn;
- private var sDispText;
- private var aRadio;
- private var _draw = false; //Grid 를 다시 그릴지 여부 (처음에 한번 그린다음에 true로 바뀜
- private var oBindDataset;
- private var _bCheckAll = false;
- private var RUNAFTERLOAD = null;
- private var classname = "nuMedirecMultiRadio";
-
- public var columncount; // 컬럼 갯수
- public var _binddataset;//_binddataset; // bind dataset
- public var codecolumn; // bind col
- public var datacolumn; // bind head col
- public var _paddingsize;
- public var _onitemclick; //체크값이 변경되었을 경우 실행할 함수명 2016.10.07 추가
- public var _onitemchanged; //체크값이 변경되었을 경우 실행할 함수명 2016.10.07 추가
- //2015.12.10 by 이봉욱 - 기록서식에서 컨트롤 사용 시 checkbox 스타일 관련 속성추가
- public var _lineSpacing; //checkbox 행간격(ex: 16)
- //public var readonly = true;
-
- /*******************************************************************************
- * 생성자 && OnDraw
- ******************************************************************************/
-
- /**
- * @desc 생성자 생성에 필요한 값들을 정의하자.
- * @param sName - 객체이름
- * @param iLeft
- * @param iTop
- * @param iRight
- * @param iBottom
- */
- function nuMedirecMultiRadio( sName, iLeft, iTop, iRight, iBottom ) {
-
- if( !isNull(sName) )
- this.name = sName;
- if( !isNull(iLeft) )
- this.position.left = iLeft;
- if( !isNull(iTop) )
- this.position.top = iTop;
- if( !isNull(iRight) )
- this.position.right = iRight;
- if( !isNull(iBottom) )
- this.position.bottom = iBottom;
-
- //this.class = "nuMedirecMultiRadio";
-
- aRadio = new Array();
- }
-
- /**
- * 객체를 그릴때마다 기본적으로 호출되는 함수
- * checkbox를 그리자.
- */
- function OnDraw(Canvas, EventArgs)
- {
- DefaultDraw(Canvas.getPainter());
- if(_draw==true)return;
- //if(!isNull(oBindDataset)) return;
-
- //checkbox 생성
- reDraw();
-
-
- //_draw = true;
-
-
- if( RUNAFTERLOAD != null ) {
- RUNAFTERLOAD();
- RUNAFTERLOAD = null;
- }
- }
-
- /**
- * @desc multicheckbox 를 다시 그린다.
- */
- function reDraw() {
- //if( isNull(datacolumn) || isNull(codecolumn) )
- if( isNull(codecolumn) )
- return;
-
- if( isNull(_binddataset) )
- return;
-
- var orgDataset = eval(_binddataset);
- //oBindDataset = eval(_binddataset);
- oBindDataset = getInternalDataSet(_binddataset + "_" + this.name);//getDataSet(_binddataset + "_" + this.name);
- // trace("Dataset 생성 : " + _binddataset + "_" + this.name);
- // trace("Org Dataset : " + orgDataset);
- // trace("Org Dataset : " + orgDataset.saveXML());
- //oBindDataset.assign(orgDataset);
- oBindDataset.loadXML(orgDataset.saveXML());
- oBindDataset.name = _binddataset + "_" + this.name;
- // trace("Dataset 복사 완료: " + oBindDataset.name);
- // trace(oBindDataset.saveXML());
- if( isNull( oBindDataset ) )
- return;
- oBindDataset.onrowposchanged.addHandler( bindDataset_onrowposchanged );
-
- //0. col text 와 col size를 dataset 기준으로 결정하자.
- var iColSize = 0;
- var aDataCol = new Array();
- var aCodeCol = new Array();
- for( var i=0; i<oBindDataset.rowcount; i++) {
- var value = oBindDataset.getColumn(i, codecolumn);
- aCodeCol[i] = value;
- if(!isNull(datacolumn)){
- var text = oBindDataset.getColumn(i, datacolumn);
- aDataCol[i] = text;
- }
- }
- iColSize = aCodeCol.length;//aDataCol.length;
-
-
- //1. 기존에 등록되어 있는 obj 를 지우자.
- for( var i=0; i<aRadio.length; i++ ) {
- var objRadio = aRadio[i];
- this.removeChild( objRadio.name );
-
- // Destroy Object
- objRadio.destroy();
- objRadio = null;
- }
- aRadio = new Array(); //array 초기화
- //3. column 마다 최대 길이를 알아내오자.
- var iColCnt = isNull(columncount) ? oBindDataset.rowcount :
- (columncount == -1 ? oBindDataset.rowcount : columncount);
- var aMaxColSize = new Array();
- for(var i = 0; i < iColSize; i++){
- this.scrollbars = "none";
- var iWidthx = MARGIN_SIZE;
- if(!isNull(datacolumn))
- iWidthx += fn_getTextSize(aDataCol[i], "Dotum", 9);
-
- if( aMaxColSize[i%iColCnt] < iWidthx || aMaxColSize[i%iColCnt] == null){
- aMaxColSize[i%iColCnt] = iWidthx;
- }
- }
-
- //4. Radio 를 그리기 시작하자.
- var iLeft = 0;
- var iWidth = 150;
- var iTop = 0;
- var iPadding = 7;
-
- iRowIdx = 0; //줄번호
- iColIdx = 0; //col번호
-
- // if( isNull(_paddingsize) ) _paddingsize = 0;
- // else _paddingsize = parseInt(_paddingsize);
-
- if( isNull(_paddingsize) ) {
- iPadding = isNull(oBindDataset) ? 0 : ((oBindDataset.rowcount == iColCnt) ? PADDING_SIZE : 0)
- }
- else iPadding = parseInt(_paddingsize);
-
- for(var i=0; i<iColSize; i++) {
- var iMaxColSize = aMaxColSize[ iColIdx ];
- iWidth = aMaxColSize[i%iColCnt];
-
- //left, top 좌표값 지정
- if( iColCnt == 0 ) {
- iTop = 0;
- } else {
- if(!isNull(_lineSpacing)){
- iTop = _lineSpacing * iRowIdx;
- }else{
- iTop = LINE_SPACING * iRowIdx;//MARGIN_SIZE * iRowIdx;
- }
-
- //지정한 col 갯수만큼이 되면 줄바꿈
- if( i % iColCnt == 0 ) {
- iLeft = 0;
- }
- }
-
- if( (i+1) % iColCnt == 0 ) {
- iRowIdx ++;
- iColIdx = 0;
-
- } else {
- iColIdx++;
- }
-
- //새로운 Radio 생성---------------------------------------
- var objId = this.name + "_" + aCodeCol[i];//aDataCol[i];//"Radio"+i;
- var objRadio = new Radio(objId, iLeft + 2, iTop + 2, iLeft + iWidth, iTop + 16);
- if(!isNull(this.class)){
- objRadio.class = this.class;
- }
-
- if(!isNull(this.refdegnitemno)){
- objRadio.refdegnitemno = this.refdegnitemno;
- }
- objRadio.classname = this.classname;
-
- this.addChild(objId, objRadio);
-
- var dsTemp = new Dataset();
- dsTemp.copyData(oBindDataset);
- dsTemp.filterstr = "valcd == '"+aCodeCol[i]+"'";
-
- //var dsName = "ds_radio_" + _binddataset + "_" + i;
- //var dsName = "ds_" + this.name + "_" + _binddataset + "_" + i;
- var dsName = "ds_radio_" + oBindDataset.name + "_" + i;
- var dsMultiRadio = getInternalDataSet(dsName);//getDataSet(dsName);//new Dataset()//getDataSet(dsName);
- //parent.addChild(dsName, dsMultiRadio);
- objRadio.codecolumn = codecolumn;
- if(!isNull(datacolumn))
- objRadio.datacolumn = datacolumn;
- dsMultiRadio.copyData(dsTemp, true);
- dsMultiRadio.name = dsName;
- objRadio.innerdataset = dsMultiRadio;//dsName;
- // trace("♬♬♬♬♬♬♬♬♬♬ objRadio.value : " + objRadio.value)
- // trace("♬♬♬♬♬♬♬♬♬♬ dsMultiRadio : \n" + dsMultiRadio.saveXML());
- //trace("♬♬♬♬♬♬♬♬♬♬ objRadio.innerdataset : " + objRadio.innerdataset);
- //trace("♬♬♬♬♬♬♬♬♬♬ objRadio.innerdataset : \n" + eval(objRadio.innerdataset).saveXML());
-
- objRadio.onkeydown.addHandler( nuMultiRadio_onkeydown );
- objRadio.onitemclick.addHandler( nuMultiRadio_onitemclick );
- objRadio.onitemchanged.addHandler( nuMultiRadio_onitemchanged );
- objRadio.show();
-
- aRadio[i] = objRadio;
- //left 좌표값 이동
- if( iPadding > 0 ) {
- iLeft += iWidth + iPadding;
- }else{
- iLeft += iWidth;
- }
- }
-
- //2015.05.13 데이터셋의 갯수가 많아서 스크롤을 생성해야 할 경우가 발생하여 추가
- this.resetScroll();
-
- if(this.enable == false) {
- this.enable = true;
- this.enable = false;
- }
-
- _draw = true;
- }
-
-
-
- /*******************************************************************************
- * 확장함수
- ******************************************************************************/
-
- /**
- * @desc checkbox에 필요한 값을 dataset에서 읽어와서 바인드하자
- */
- function setBindDataset() {
- return;
- // if( isNull(oBindDataset) ) return;
- //
- // var iBaseIdx = 0;
- // for(var i=0; i<aRadio.length - iBaseIdx; i++) {
- // trace("!!!!!!!여기가 수상하다.");
- // var objRadio = aRadio[iBaseIdx + i]; //'전체'가 포함되어 있을때 idx 가 한칸 뒤로
- //
- // if( oBindDataset.rowcount <= i ) continue;
- //
- // // 2013.08.28 이길용 수정, setCheckVall시에 이벤트 타는것 방지.
- // objRadio.enableevent = false;
- //
- // var sBindVal = oBindDataset.getColumn( i, codecolumn );
- // objRadio.value = sBindVal;
- //
- // objRadio.enableevent = true;
- // }
- }
-
- /**
- * @desc checkbox에 값이 변경되면 dataset에 값을 바인드하자.
- */
- function getBindDataset() {
- return;
- // if( isNull(oBindDataset) ) return;
- //
- // var iBaseIdx = 0;
- // for(var i=0; i<aCheckBox.length - iBaseIdx; i++) {
- // var objCheckBox = aCheckBox[iBaseIdx + i]; //'전체'가 포함되어 있을때 idx 가 한칸 뒤로
- //
- // if( oBindDataset.rowcount <= i ) continue;
- //
- // oBindDataset.setColumn( i, codecolumn, objCheckBox.value );
- // }
- }
-
- /**
- * @desc DataSet이 존재한다면 그대로 들고 오고 없다면 생성해서 가지고 오자.
- * @param sDsNm - DataSet Name
- * @return - 생성된 DataSet
- */
- function getInternalDataSet( sDsNm ) {
- var oDS;
- if( !this.isValidObject( sDsNm ) ) {
- oDS = new Dataset(sDsNm);
- oDS.name = sDsNm;
- this.addChild(sDsNm, oDS);
- } else {
- oDS = eval(sDsNm);
- }
-
- return oDS;
- }
-
- /**
- * @desc 값 반환
- * @param sGubun 구분자
- * @return check 된 code value
- */
- public function getValue() {
- if( isNull(oBindDataset) ) return;
-
- var nRow = oBindDataset.findRow("checked", "1");
- if(nRow == -1)
- return "";
-
- return oBindDataset.getColumn(nRow, "valcd");
- }
-
- /**
- * @desc 값 바인드
- * @param sBindVal 바인드 시킬 코드 값
- * @param sGubun 구분자
- */
- public function setValue( sValue ) {
- //trace("♬♬♬♬♬♬♬ call setValue ===> " + sValue + ", oBindDataset : " + oBindDataset + ", _binddataset : " + _binddataset + ", eval(_binddataset) : " + eval(_binddataset));
- //if( isNull(oBindDataset) ) return;
- //if( isNull(oBindDataset) ) {
- while(_draw == false){
- trace( this.name + " draw 여부 : " + _draw );
- reDraw();
- }
- //}
- //oBindDataset = eval(_binddataset);
-
- var nRow = oBindDataset.findRowAs(codecolumn, sValue);//7자리 코드(basecd) 기반으로 Setting 가능하도록
- //trace("setValue ===> " + sValue + ", " + nRow);
- var objRdo;
- for(var i=0; i < oBindDataset.rowcount; i++)
- {
- var valCd = oBindDataset.getColumn(i, codecolumn);
- var objNm = this.name + "_" + valCd;
- objRdo = this.all[objNm];
- if(nRow == i)
- {
- if(oBindDataset.getColumn(i, "checked") != "1")
- {
- objRdo.value = valCd;
- oBindDataset.setColumn(i, "checked","1");
-
- var ev = new ItemChangeEventInfo();
- //nuMultiRadio_onitemchanged(objRdo, ev);
- objRdo.onitemchanged.fireEvent(objRdo, ev);
- }
- }
- else
- {
- var oldValue = objRdo.value;
- //trace("oldValue ===> " + oldValue);
- objRdo.value = null;
- oBindDataset.setColumn(i, "checked","0");
- if(!isNull(oldValue)){
- var ev = new ItemChangeEventInfo();
- objRdo.onitemchanged.fireEvent(objRdo, ev);
- }
- }
- }
- }
-
- /*******************************************************************************
- * 유틸함수
- ******************************************************************************/
-
- /**
- * @desc 입력값이 null에 해당하는 경우 모두를 한번에 체크한다.
- * @param sValue 체크할 문자열( 예 : null 또는 undefined 또는 "" 또는 "abc" )
- * @return sValue가 undefined, null, NaN, "", Array.length = 0인 경우 = true, 이외의 경우 = false
- */
- private function isNull(sValue)
- {
- if( new String(sValue).valueOf() == "undefined") return true;
- if( sValue == null ) return true;
- if( ("x"+sValue == "xNaN") && ( new String(sValue.length).valueOf() == "undefined" ) ) return true;
- if( sValue.length == 0 ) return true;
-
- return false;
- }
-
- /*
- * Function Name : fn_getTextSize
- * Description : Text Size 반환
- * Parameter : 사이즈를 계산할 문자열, 폰트네임, 폰트사이즈
- * Return : 계산된 Size
- * Example : fn_getTextSize("XPLATFORM", "Dotum", 9);
- */
- function fn_getTextSize(sString, sFontName, nFontSize)
- {
- var objFont = new Font;
- objFont.size = nFontSize;
- objFont.name = sFontName;
-
- var objPainter = this.canvas.getPainter();
- var objTextSize = objPainter.getTextSize(sString, objFont);
- return objTextSize.cx;
- }
-
- /**
- * @desc 현재 컨트롤의 전체이름을 반환한다.
- * @param
- * @return fullName : 현재 컨트롤의 전체이름
- */
- function getComponentFullName(){
- var fullName = "";
- var obj = this;
- while(!isNull(obj.parent.name) && (obj.parent.toString().toUpperCase() != "[OBJECT CHILDFRAME]")){
- fullName = obj.name + (isNull(fullName)?"":"_") + fullName;
- obj = obj.parent;
- }
- //trace("[nuMultiCheckbox] This Component Full name : " + fullName);
- return fullName;
- }
-
- /**
- * XPlatform Component 타입 리턴
- * @param obj : 확인할 Component 객체
- * @return string
- */
- function fn_xpCompTypeOf(obj)
- {
- var type;
- if( obj && (typeof obj == "object") && !obj.hasOwnProperty ){
- var s = obj.toString();
- if(s.indexOf("object") > -1){
- type = s.substr(8, s.length-9);
- }else{
- type = s;
- }
- }
- return type;
- }
-
- //innerdataset을 구하기 위해 추가. 2019.02.28 한지현대리 요청
- public function getInnerdataset()
- {
- var oForm = getBaseForm();
- var tmpDs = oForm.objects[_binddataset];
- return tmpDs;
- }
-
- private function getBaseForm(){
- var oForm = this;
- while( isNull((oForm = oForm.parent).url) ){
- if( oForm.toString() == "[object Form]" )
- break;
- }
- return oForm;
- }
-
- /*******************************************************************************
- * Event 영역
- ******************************************************************************/
-
- /**
- * @desc checkbox를 클릭했을때
- */
- function nuMultiRadio_onitemclick(obj:Radio, e:RadioMouseEventInfo)
- {
- //trace("Call!!! nuMultiRadio_onitemclick ===> " + obj.value + ", " + e.itemvalue);
- if( isNull( oBindDataset ) )
- return;
-
- if(isNull(obj.value))
- setValue(e.itemvalue);
- else
- setValue("");
-
- return;
-
- var nRow = oBindDataset.findRow(codecolumn, e.itemvalue);
- var objRdo;
- //trace("oBindDataset.getRowCount() ==> " + oBindDataset.getRowCount());
- for(var i=0; i < oBindDataset.getRowCount(); i++)
- {
- var valCd = oBindDataset.getColumn(i, "valcd");
- var objNm = this.name + "_" + valCd;
- objRdo = this.all[objNm];//eval("rdo_multi_"+i);
- //trace("objRdo == > " + objRdo);
- if(nRow == i)
- {
- if(oBindDataset.getColumn(i, "checked") == "1")
- {
- objRdo.value = null;
- oBindDataset.setColumn(i, "checked","0");
- }
- else
- {
- //test
- //objRdo.value = null;
- objRdo.value = valCd;
- oBindDataset.setColumn(i, "checked","1");
- }
- }
- else
- {
- objRdo.value = null;
- oBindDataset.setColumn(i, "checked","0");
- }
- }
-
- if(!isNull(_onitemclick))
- eval(_onitemclick + "(obj, e)");
- }
- function nuMultiRadio_onitemchanged(obj:Radio, e:ItemChangeEventInfo)
- {
- //trace("Call!!! nuMultiRadio_onitemchanged ==> " + obj.name + ", " + obj.value + ", " + e.postvalue);
-
- var focusdObj = this.getFocus();
- //trace("obj ==> " + obj + ", focusdObj ==> " + focusdObj);
- // trace("obj.parent ==> " + obj.parent.name + ", focusdObj.parent ==> " + focusdObj.parent.name);
- // trace("focusdObj ==> " + focusdObj.name + ", " + focusdObj.value + ", " + e.postvalue);
- if( !isNull(focusdObj)){
- if(obj.parent == focusdObj.parent && obj != focusdObj)
- {
- if(!isNull(obj.value))
- obj.value = null;
-
- obj = focusdObj; }
- }
- //trace("Call!!! nuMultiRadio_onitemchanged ==> " + _onitemchanged);
- if(!isNull(_onitemchanged))
- eval(_onitemchanged + "(obj, e)");
- }
- function nuMultiRadio_onkeydown(obj:Radio, e:KeyEventInfo)
- {
- if( isNull( oBindDataset ) )
- return;
-
- if(e.keycode == 37 || //left
- e.keycode == 38 || //top
- e.keycode == 39 || //right
- e.keycode == 40) //bottom
- {
- var nRow = oBindDataset.findRow(codecolumn, obj.value);
- //trace("!!!!!!!old nRow : " + nRow);
- //trace("!!!!!!!oBindDataset.rowcount - 1 : " + (oBindDataset.rowcount - 1));
- if(nRow == oBindDataset.rowcount - 1){
- if(e.keycode == 39 || e.keycode == 40)
- nRow = 0;
- else{
- nRow = nRow - 1;
- if(nRow < 0){
- nRow = 0;
- }
- }
- }
- else if(nRow != -1){
- if(e.keycode == 39 || e.keycode == 40)
- nRow = nRow + 1;
- else{
- nRow = nRow - 1;
- if(nRow < 0)
- nRow = oBindDataset.rowcount - 1;
- }
- }else if(nRow == -1){
- nRow = 0;
- }
- var valCd = oBindDataset.getColumn(nRow, codecolumn);
- //trace("!!!!!!!new nRow : " + nRow + ", " + valCd);
- var objNm = this.name + "_" + valCd;
- var objRdo = this.all[objNm];
- objRdo.setFocus();
- setValue(valCd);
- }
- }
-
- function AddItemChangedHandler(pFunc){
- while(_draw == false){
- trace( this.name + " draw 여부 : " + _draw );
- reDraw();
- }
-
- if( isNull( oBindDataset ) )
- return;
-
- for(var i=0; i < oBindDataset.rowcount; i++)
- {
- var valCd = oBindDataset.getColumn(i, "valcd");
- var objNm = this.name + "_" + valCd;
- var objRdo = this.all[objNm];
- if(isNull(objRdo))
- continue;
-
- objRdo.onitemchanged.addHandler(pFunc);
- }
- }
-
- /**
- * @desc dataset의 rowposition 이 변경되었을때
- */
- function bindDataset_onrowposchanged(obj:Dataset, e:DSRowPosChangeEventInfo)
- {
- //trace("bindDataset_onrowposchanged");
-
- setBindDataset();
- }
- }
- ]]></Script>
|