1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671 |
- XFormsTreeView.prototype = new XFormsGroup();
- function XFormsTreeView (strParentId, strAlert, strHelp, strHint, strAccesskey, strBind, strButtonColor, strCellSpacing, bCheckChildren,
- strCheckImage, strClass, bDisabled, bDragmode, bDropmode, bEditmenu, nExpandDepth, strExpandedImage, bFullRowSelect, bHasButtons,
- bHasCheck, bHasImages, bHasLines, strId, strImage, strIndent, strItemHeight, strItemSetType, strLineColor, nNavindex, bOneClickExpand,
- strOverflow, bPopup, strRef, strScroll, strSelectedImage, strShowEffect, bSingleExpand, strStyle, strTag, strUncheckImage, strVisibility,
- bIsItemSet, nItemLength, strNodeSet, strLabelRef, strValueRef, strDepthRef, strNodeSetName, strImageRef, strExpandedImageRef, strSelectedImageRef, strUserDefineAttrib, strUserStaticValue)
- {
- if (!strId)
- {
- return;
- }
-
- XFormsGroup.call(this, strParentId, strAlert, strHelp, strHint, strAccesskey, strBind, strClass, bDisabled, strId, nNavindex,
- strOverflow, bPopup, strRef, strScroll, strShowEffect, strStyle, strTag, strVisibility, strUserDefineAttrib);
-
- /**
- * Atrribute
- */
-
- this.attribute["buttoncolor"] = strButtonColor; // 보류
- this.attribute["cellspacing"] = strCellSpacing;
- this.attribute["checkchildren"] = String(bCheckChildren);
- this.attribute["checkimage"] = strCheckImage;
- this.attribute["dragmode"] = String(bDragmode);
- this.attribute["dropmode"] = String(bDropmode);
- this.attribute["editmenu"] = String(bEditmenu);
- this.attribute["expanddepth"] = String(nExpandDepth);
- this.attribute["expandedimage"] = String(strExpandedImage);
- this.attribute["fullrowselect"] = String(bFullRowSelect);
- this.attribute["hasbuttons"] = String(bHasButtons);
- this.attribute["hascheck"] = String(bHasCheck);
- this.attribute["hasimages"] = String(bHasImages);
- this.attribute["haslines"] = String(bHasLines);
- this.attribute["image"] = strImage;
- this.attribute["indent"] = strIndent;
- this.attribute["itemheight"] = strItemHeight;
- this.attribute["itemsettype"] = strItemSetType;
- this.attribute["linecolor"] = strLineColor;
- this.attribute["oneclickexpand"] = String(bOneClickExpand);
- this.attribute["selectedimage"] = strSelectedImage;
- this.attribute["singleexpand"] = String(bSingleExpand);
- this.attribute["uncheckimage"] = strUncheckImage;
-
- /**
- * Property
- */
- this.alwaysDrawButton; // 뷰어에 구현되어있지 않음. 보류.
- this.checkImage;
- this.currentStyle;
- this.expandDepth = nExpandDepth;
- this.label = "";
- this.length; // treeview item 갯수
- this.mouseCol = 0;
- this.mouseRow = 0;
- this.selected;
- this.nodeset = strNodeSet;
- this.focusIndex = -1;
- this.value = "";
- this.m_nSelectedRow = -1;
-
- this.m_strPath = new Array();
-
- this.m_strCellSpacing = "";
- this.m_strItemHeight = "";
-
- this.m_strLabelRef = strLabelRef;
- this.m_strValueRef = strValueRef;
- this.m_strDepthRef = strDepthRef;
- this.m_strNodeSetName = strNodeSetName;
- this.m_strImageRef = strImageRef;
- this.m_strExpandedImageRef = strExpandedImageRef;
- this.m_strSelectedImageRef = strSelectedImageRef;
- this.m_strUserStaticValue = strUserStaticValue;
- this.htStaticValue;
-
- this.m_bIsItemSet = bIsItemSet;
- this.itemset;
- this.m_objOriginControl = null;
- this.m_arItemSetAttribute = new Array();
- this.m_alLineDIV = new Array();
- this.m_xlOriginItemSet;
- };
- XFormsTreeView.prototype.init = function ()
- {
- XFormsGroup.prototype.init.call(this);
-
- var strAttribute = "id:" + this.id + ".item; background-color:transparent; vertical-align:middle; border-style:none; word-wrap:none; text-rect:visible; ";
- this.itemset = this.createChild("xforms:treeitem", strAttribute);
-
- var strLabelAttribute = "id:" + this.id + ".label";
- var objLabel = this.itemset.createChild("xforms:label", strLabelAttribute);
-
- var strValueAttribute = "id:" + this.id + ".value";
- var objValue = this.itemset.createChild("xforms:value", strValueAttribute);
-
- this.itemset.setLabel(objLabel);
- this.itemset.setValue(objValue);
-
- if (this.m_bIsItemSet)
- {
- this.initItemSetData();
- }
- else
- {
- this.initItemData();
- if("" != this.m_strUserStaticValue)
- {
- this.htStaticValue = new Hashtable();
- var arCellList = this.m_strUserStaticValue.split("|");
- for (var i=0; i<arCellList.length; i++)
- {
- if (-1 != arCellList[i].indexOf("^"))
- {
- var arCellLabelAndValue = arCellList[i].split("^");
- var strCellName = arCellLabelAndValue[0];
- arCellLabelAndValue.shift();
- this.htStaticValue[strCellName] = arCellLabelAndValue;
- }
- }
- }
- }
-
- this.makeCell();
-
- var arKeyset = this.children.keys();
- // item들 init
- for (var i=0; i<arKeyset.length; i++)
- {
- var strChild = arKeyset[i];
- var objChild = this.children.item(strChild);
-
- if (null != objChild)
- {
- objChild.init();
-
- if (!this.m_bIsItemSet && "xforms:cell" == objChild.getAttribute("tag"))
- {
- objChild.m_heControl.setAttribute("name", this.id + "_item");
- objChild.m_heControl.setAttribute("label", this.htStaticValue[objChild.id][0]);
- objChild.m_heControl.setAttribute("value", this.htStaticValue[objChild.id][1]);
- objChild.m_heControl.noWrap = true;
-
- // noWrap Attribute와 select 효과 때문에 ie만 content TD에 width를 1px을 넣는다.
- if (is_ie)
- {
- var heContentTD = document.getElementById("HE_" + objChild.id + "_content");
- // heContentTD.style.width = "1px";
- }
-
- }
- }
- }
-
- this.initItem();
- };
- XFormsTreeView.prototype.applySelection = function (strValue)
- {
- this.clearSelect();
-
- this.value = strValue;
-
- if (null != strValue && !strValue.isEmpty())
- {
- for (var i=0; i<this.length; i++)
- {
- var strSelectedImage = "";
-
- var objCell = this.getCell(i, 0);
- if (null != objCell && !objCell.getDisabled())
- {
- var strCellValue = objCell.getValue();
- if (strValue == strCellValue)
- {
- objCell.setSelect(true);
- this.focusIndex = objCell.index;
- // this.mouseRow = objCell.index;
- strSelectedImage = objCell.selectedImage;
- }
- else
- {
- objCell.setSelect(false);
- if (1 == objCell.expanded)
- {
- strSelectedImage = objCell.expandedimage;
- }
- else
- {
- strSelectedImage = objCell.image;
- }
- }
- }
-
- if ("" == strSelectedImage)
- {
- strSelectedImage = __getAppName() + "/kr/comsquare/image/treeview/blank.gif";
- }
- this.setImage(objCell.m_heControl, strSelectedImage);
- }
- }
- };
- XFormsTreeView.prototype.setAttribute = function (strAttribute, strValue)
- {
- XFormsGroup.prototype.setAttribute.call(this, strAttribute, strValue);
-
- switch (strAttribute)
- {
- case "row" :
- {
- this.attribute["row"] = strValue;
- this.m_nSelectedRow = strValue;
- this.mouseRow = strValue;
- break;
- }
- }
- };
- XFormsTreeView.prototype.initItem = function ()
- {
- // TreeView의 Image, ExpandedImage, SelectedImage
- var strImage = this.getAttribute("image");
- var strExpandedImage = this.getAttribute("expandedimage");
- var strSelectedImage = this.getAttribute("selectedimage");
-
- var nIndex = 0;
-
- for (var i=0; i<this.length; i++)
- {
- var objTreeItem = this.getCell(i, 0);
-
- // 미리 저장해둔 itemset의 attribute를 가져온다
- var clAttribute = this.m_arItemSetAttribute[nIndex];
- // index값 증가
- var strItemImage = clAttribute.item("image");
- var strItemExpandedImage = clAttribute.item("expandedimage");
- var strItemSelectedImage = clAttribute.item("selectedimage");
-
- var heItem = document.getElementById("HE_" + this.id + "_" + nIndex + "_0");
- var ImageSrc = heItem.getAttribute("image");
- // check는 맨처음에 무조건 안되있음.
- objTreeItem.setChecked(0);
-
- var nDepth = clAttribute.item("depth");
- objTreeItem.depth = nDepth;
-
- // Label과 Value를 세팅한다
- objTreeItem.label = objTreeItem.getLabel();
- objTreeItem.value = objTreeItem.getValue();
-
- if (null == clAttribute.item("haschilditem") || 0 == clAttribute.item("haschilditem"))
- {
- clAttribute.add("haschilditem", -1);
- }
- objTreeItem.m_nChildNumber = clAttribute.item("haschilditem");
-
- objTreeItem.expanded = clAttribute.item("expand");
- // index는 child의 순서와 같다.
- objTreeItem.index = nIndex;
-
- // parentIndex의 기본값 설정
- objTreeItem.parentIndex = -1;
- // parentIndex
- for (var j=i-1; j>=0; j--)
- {
- var objParentItem = this.getCell(j, 0);
- var nParentDepth = objParentItem.depth;
- if (nParentDepth < nDepth)
- {
- var strParentIndex = objParentItem.index;
- objTreeItem.parentIndex = strParentIndex;
- break;
- }
- }
-
- // image와 selectedImage, expandedImage, checkImage, uncheckImage 설정
- objTreeItem.image = ("" == strItemImage) ? strImage : strItemImage;
- objTreeItem.expandedimage = ("" == strItemExpandedImage) ? strExpandedImage : strItemExpandedImage;
- objTreeItem.selectedimage = ("" == strItemSelectedImage) ? strSelectedImage : strItemSelectedImage;
-
- var heContentTD = document.getElementById("HE_" + objTreeItem.id + "_content");
- heContentTD.noWrap = "nowrap";
-
- nIndex++;
- }
- if (!this.m_bIsItemSet)
- {
- for (var i=0; i<this.length; i++)
- {
- var nHasChildItem = 0;
- var objTreeItem = this.getCell(i, 0);
- var nParentDepth = objTreeItem.depth;
-
- for (var j=i+1; j<this.length; j++)
- {
- var objChildItem = this.getCell(j, 0);
- var nDepth = objChildItem.depth;
-
- if (nParentDepth + 1 == nDepth)
- {
- nHasChildItem++;
- }
- else if (nParentDepth + 1 > nDepth)
- {
- break;
- }
- }
- if (0 == nHasChildItem)
- {
- nHasChildItem = -1;
- }
- objTreeItem.m_nChildNumber = nHasChildItem;
- }
- }
-
- if ("false" != this.getAttribute("haslines"))
- {
- // if (!this.m_bIsItemSet)
- // {
- // this.setLineType();
- // }
- // this.makeLine();
- }
-
- // overflow = visible
- this.overflow();
-
- if (is_smartphone)
- {
- var strOverflow = this.getAttribute("overflow");
- // Treeview 원래 크기 저장해두기.
- this.m_nOriginWidth = this.m_heControl.offsetWidth;
- this.m_nOriginHeight = this.m_heControl.offsetHeight;
-
- this.makeTreeViewExpansion();
- }
-
- this.m_objOriginControl = this;
- };
- // TODO Group으로 올려야 할듯.
- XFormsTreeView.prototype.overflow = function ()
- {
- if ("visible" == this.getAttribute("overflow"))
- {
- // height setting
- var nTreeHeight = 0;
- var nTreeWidth = 0;
- var strIndent = ("" == this.getAttribute("indent")) ? "17px" : this.getAttribute("indent");
- var nIndent = parseInt(strIndent.replaceAll("px", ""));
-
- for (var i=0; i<this.length; i++)
- {
- var objCell = this.getCell(i, 0);
- if ("block" == objCell.m_heControl.style.display)
- {
- var strHeight = objCell.m_heControl.style.height;
- if (null != parseInt(strHeight.replaceAll("px", "")))
- {
- nTreeHeight += parseInt(strHeight.replaceAll("px", ""));
- }
- }
- var heContentTD = document.getElementById("HE_" + objCell.id + "_content");
- var nContentTDApsoluteRight = heContentTD.offsetLeft + heContentTD.offsetWidth;
- if (nTreeWidth < nContentTDApsoluteRight)
- {
- nTreeWidth = nContentTDApsoluteRight;
- }
- }
- HtmlLib.setStyle(this.m_heControl, "height", nTreeHeight + "px");
- HtmlLib.setStyle(this.m_heControl, "width", nTreeWidth + "px");
- }
- };
- XFormsTreeView.prototype.setLineType = function ()
- {
- for (var i=0; i<this.length; i++)
- {
- var objCell = this.getCell(i, 0);
- var nDepth = objCell.depth;
- var strItemLineType = this.htStaticValue[objCell.id][2];
-
- for (var j=0; j<nDepth; j++)
- {
- var heIndentDIV = document.getElementById("HE_" + this.id + "_" + i + "_0_indent" + j);
- heIndentDIV.setAttribute("linetype", strItemLineType.charAt(0));
- strItemLineType = strItemLineType.substr(1);
- }
-
- var nDIVCount = 0;
- var heCellDIV = document.getElementById("HE_" + this.id + "_" + i + "_0_div" + nDIVCount);
- while (null != heCellDIV)
- {
- heCellDIV.setAttribute("linetype", strItemLineType.charAt(0));
- strItemLineType = strItemLineType.substr(1);
-
- nDIVCount++;
- heCellDIV = document.getElementById("HE_" + this.id + "_" + i + "_0_div" + nDIVCount);
- }
- }
- };
- XFormsTreeView.prototype.makeLine = function ()
- {
- for (var i=0; i<this.length; i++)
- {
- var objCell = this.getCell(i, 0);
- var nDepth = objCell.depth;
-
- for (var j=0; j<nDepth; j++)
- {
- var heIndentDIV = document.getElementById("HE_" + this.id + "_" + i + "_0_indent" + j);
- var strLineType = heIndentDIV.getAttribute("linetype");
-
- var objLine = new jsGraphics(heIndentDIV);
- this.drawLine(objLine, strLineType);
- }
-
- var nDIVCount = 0;
- var heCellDIV = document.getElementById("HE_" + this.id + "_" + i + "_0_div" + nDIVCount);
- while (null != heCellDIV)
- {
- var strLineType = heCellDIV.getAttribute("linetype");
- var objLine = new jsGraphics(heCellDIV);
- this.m_alLineDIV.push(objLine);
- this.drawLine(objLine, strLineType);
-
- nDIVCount++;
- heCellDIV = document.getElementById("HE_" + this.id + "_" + i + "_0_div" + nDIVCount);
- }
- }
- };
- XFormsTreeView.prototype.drawLine = function (objLine, strLineType)
- {
- objLine.clear();
-
- objLine.setStroke(Stroke.DOTTED);
-
- var nWidth = ("" == this.getAttribute("indent")) ? 17 : parseInt(this.getAttribute("indent").replaceAll("px", ""));
- var nHeight = parseInt(this.m_strItemHeight.replaceAll("px", ""));
-
- switch (strLineType)
- {
- // indent 부분
- case "0" : // blank 일때
- {
- break;
- }
- case "1" : // 형제가 있을때 : │
- {
- objLine.drawLine(nWidth/2, 0, nWidth/2, nHeight);
- break;
- }
- case "2" : // 형제가 없고 맨처음일 때 : -
- {
- objLine.drawLine(nWidth/2, nHeight/2, nWidth, nHeight/2);
- break;
- }
- case "3" : // 처음 형제가 있을 때 : ┌
- {
- objLine.drawLine(nWidth/2, nHeight/2, nWidth/2, nHeight);
- objLine.drawLine(nWidth/2, nHeight/2, nWidth, nHeight/2);
- break;
- }
- case "4" : // 형제가 있을 때 : ├
- {
- objLine.drawLine(nWidth/2, 0, nWidth/2, nHeight);
- objLine.drawLine(nWidth/2, nHeight/2, nWidth, nHeight/2);
- break;
- }
- case "5" : // 형제가 있고 마지막일때 : └
- {
- objLine.drawLine(nWidth/2, nHeight/2, nWidth, nHeight/2);
- objLine.drawLine(nWidth/2, 0, nWidth/2, nHeight/2);
- break;
- }
- case "6" : // 형제가 있고 자식이 있고 처음일 때 : ─┬─
- {
- objLine.drawLine(0, nHeight/2, nWidth, nHeight/2);
- objLine.drawLine(nWidth/2, nHeight/2, nWidth/2, nHeight);
- break;
- }
- case "7" : // 형제가 없고 자식이 있을 때 : ──
- {
- objLine.drawLine(0, nHeight/2, nWidht, nHeight/2);
- break;
- }
- default :
- {
- break;
- }
- }
- objLine.paint();
- };
- XFormsTreeView.prototype.makeCell = function ()
- {
- for (var i=0; i<this.length; i++)
- {
- var strCellId = this.id + "_" + i + "_0";
- var objCell = new XFormsCell(this.id, 0, strCellId, i, "xforms:cell");
-
- var heItem = document.getElementById("HE_" + strCellId);
-
- objCell.setElement(this.itemset);
- objCell.setIndex(i);
- }
- };
- XFormsTreeView.prototype.initItemData = function ()
- {
- var heTreeControl = this.m_heControl;
-
- this.length = heTreeControl.childNodes.length;
-
- // expanded
- var strExpandDepth = this.getAttribute("expanddepth");
- var nExpandDepth = ("" == strExpandDepth)? 0 : parseInt(strExpandDepth);
-
- // height
- var strItemHeight = this.getAttribute("itemheight");
- this.m_strItemHeight = ("" == strItemHeight) ? "17px" : strItemHeight + "px";
-
- for (var i=0; i<this.length; i++)
- {
- var clAttributes = new Collection();
- var heTreeItem = document.getElementById("HE_" + this.id + "_" + i + "_0");
- var nExpanded = 0;
- if (null == heTreeItem)
- {
- return;
- }
-
- // depth 구하기
- var nDepth = 0;
- var heIndent = document.getElementById(heTreeItem.id + "_indent" + nDepth);
- while (null != heIndent)
- {
- nDepth++;
- heIndent = document.getElementById(heTreeItem.id + "_indent" + nDepth);
- }
- clAttributes.add("depth", nDepth);
-
- if ((nDepth < nExpandDepth) || (-1 == nExpandDepth))
- {
- nExpanded = 1;
- }
- clAttributes.add("expand", nExpanded);
-
- // image
- clAttributes.add("image", this.getAttribute("image"));
-
- // expandedimage
- clAttributes.add("expandedimage", this.getAttribute("expandedimage"));
-
- // selectedimage
- clAttributes.add("selectedimage", this.getAttribute("selectedimage"));
-
- this.m_arItemSetAttribute[i] = clAttributes;
-
- if (is_smartphone)
- {
- for (var j=0; j<nDepth; j++)
- {
- var heIndentTD = document.getElementById(heTreeItem.id + "_indent" + j);
- if (null != heIndentTD)
- {
- this.makeSmartphoneAttribute(heIndentTD);
- }
- }
-
- var heButtonTD = document.getElementById(heTreeItem.id + "_button");
- if (null != heButtonTD)
- {
- this.makeSmartphoneAttribute(heButtonTD);
- }
- var heCheckTD = document.getElementById(heTreeItem.id + "_check");
- if (null != heCheckTD)
- {
- this.makeSmartphoneAttribute(heCheckTD);
- }
- var heImageTD = document.getElementById(heTreeItem.id + "_image");
- if (null != heImageTD)
- {
- this.makeSmartphoneAttribute(heImageTD);
- }
-
- this.makeSmartphoneAttribute(document.getElementById(heTreeItem.id + "_blank"));
- }
- }
- };
- XFormsTreeView.prototype.makeSmartphoneAttribute = function (heElementTD)
- {
- heElementTD.setAttribute("onmousedown", "onmousedown=\" ");
- heElementTD.setAttribute("onmousemove", "onmousemove=\" ");
- heElementTD.setAttribute("onmouseup", "onmouseup=\" ");
- heElementTD.setAttribute("ondblclick", "ondblclick=\" ");
- heElementTD.setAttribute("onkeydown", "onkeydown=\" ");
- heElementTD.setAttribute("onkeypress", "onkeypress=\" ");
- heElementTD.setAttribute("onkeyup", "onkeyup=\" ");
- };
- XFormsTreeView.prototype.initItemSetDepthData = function (xlRefNode)
- {
- var nItemCount = xlRefNode.length;
-
- var xnItemSetData = XmlLib.createXML("DepthData").firstChild;
-
- var arDepthNode = new Array();
- var xnPrevItem;
- for (var i=0; i<nItemCount; i++)
- {
- var xnTreeItem = xlRefNode.item(i);
- var xnDepth = XmlLib.selectSingleNode(xnTreeItem, this.m_strDepthRef);
- var nDepth = parseInt(XmlLib.getTextValue(xnDepth));
- var xnCloneItem = xnTreeItem.cloneNode(true);
-
- if (null != xnPrevItem)
- {
- var xnPrevDepth = XmlLib.selectSingleNode(xnPrevItem, this.m_strDepthRef);
- var nPrevDepth = parseInt(XmlLib.getTextValue(xnPrevDepth));
-
- if (nPrevDepth < nDepth)
- {
- xnPrevItem.appendChild(xnCloneItem);
- }
- else
- {
- var xnParent;
- for (var j=nDepth-1; j >= 0; j--)
- {
- if (arDepthNode[j])
- {
- xnParent = arDepthNode[j];
- break;
- }
- }
-
- if (null != xnParent)
- {
- xnParent.appendChild(xnCloneItem);
- xnParent = null;
- }
- else
- {
- xnItemSetData.appendChild(xnCloneItem);
- }
- }
- }
- else
- {
- xnItemSetData.appendChild(xnCloneItem);
- }
-
- arDepthNode[nDepth] = xnCloneItem;
- xnPrevItem = xnCloneItem;
- }
- return xnItemSetData.childNodes;
- };
- XFormsTreeView.prototype.initItemSetData = function ()
- {
- this.m_nIndex = 0;
- var xlRefNode = model.getInstancePart(null, this.nodeset);
-
- if (null == xlRefNode)
- {
- return;
- }
-
- var xlItemSet = null;
- var strItemSetType = this.getAttribute("itemsettype");
- if ("depth" == strItemSetType)
- {
- xlItemSet = this.initItemSetDepthData(xlRefNode);
- }
- else
- {
- xlItemSet = xlRefNode;
- }
-
- this.m_xlOriginItemSet = xlItemSet;
-
- // 최상위 item의 갯수
- var nRootItemCount = xlItemSet.length;
-
- var strItemHeight = this.getAttribute("itemheight").replaceAll("px", "");
- var strCellSpacing = this.getAttribute("cellspacing").replaceAll("px", "");
-
- this.m_strItemHeight = ("" == strItemHeight) ? "17px" : strItemHeight + "px";
- this.m_strCellSpacing = ("" == strCellSpacing) ? "0px" : strCellSpacing + "px";
-
- var nDepth = 0;
- var strBlankRecursion = "";
- for (var i=0; i<nRootItemCount; i++)
- {
- var xnChild = xlItemSet.item(i);
-
- var bFirst = false;
- var bLast = false;
- var bSibling = false;
-
- if ("depth" == strItemSetType)
- {
- var xnDepth = XmlLib.selectSingleNode(xnChild, this.m_strDepthRef);
- var strDepth = XmlLib.getTextValue(xnDepth);
- if ("" != strDepth)
- {
- nDepth = parseInt(strDepth) - 1;
- for (var j=0; j<nDepth; j++)
- {
- strBlankRecursion += "0";
- }
- }
- }
-
- //첫번째 index일 때
- if (0 == i)
- {
- bFirst = true;
- }
-
- if (nRootItemCount - 1 == i)
- {
- bLast = true;
- }
-
- if (1 < nRootItemCount)
- {
- bSibling = true;
- }
-
- var strRecursion = strBlankRecursion + ((i == nRootItemCount-1) ? "0" : "1");
-
- this.makeSubItemSet(xnChild, nDepth, bFirst, bLast, bSibling, strRecursion);
- this.m_nIndex++;
- }
-
- // length property 세팅
- this.length = this.m_nIndex;
- };
- // 동적일때 html Tag 만들기.
- XFormsTreeView.prototype.makeSubItemSet = function (xnTreeNode, nDepth, bFirst, bLast, bSibling, strRecursion)
- {
- this.m_clItemSetAttributes = new Collection();
-
- // image, expandedimage, selectedimage hashtable에 넣어두는 method
- this.setItemSetImages(xnTreeNode);
-
- // depth도 설정
- this.m_clItemSetAttributes.add("depth", nDepth);
-
- // itemset node
- var xlChildItems = XmlLib.selectNodes(xnTreeNode, this.m_strNodeSetName);
-
- // child 갯수
- var nChildNumber = (null != xlChildItems) ? xlChildItems.length : -1;
- this.m_clItemSetAttributes.add("haschilditem", nChildNumber);
-
- var strItemId = this.id + "_" + this.m_nIndex + "_0";
-
- // TABLE 만들기
- var heItemTable = document.createElement("table");
-
- this.m_heControl.appendChild(heItemTable);
-
- // Item의 전체적인 Attribute 적용
- heItemTable.setAttribute("id", "HE_" + strItemId);
- HtmlLib.setStyle(heItemTable, "width", "100%");
-
- // ItemHeight와 CellSpacing 설정
- if ("" != this.m_strItemHeight)
- {
- HtmlLib.setStyle(heItemTable, "height", this.m_strItemHeight);
- heItemTable.cellSpacing = "0px";
- }
- else
- {
- heItemTable.cellSpacing = this.m_strCellSpacing;
- }
-
- var nExpandDepth = parseInt(this.expandDepth);
-
- if ("" == this.expandDepth)
- {
- if (null != this.m_arItemSetAttribute[0])
- {
- nExpandDepth = this.m_arItemSetAttribute[0].item("depth");
- }
- else
- {
- nExpandDepth = nDepth;
- }
- }
-
- if (-1 == nExpandDepth)
- {
- heItemTable.style.display = "block";
-
- // expand property 설정
- if (0 < nChildNumber)
- {
- this.m_clItemSetAttributes.add("expand", 1);
- }
- else
- {
- this.m_clItemSetAttributes.add("expand", 0);
- }
- }
- else
- {
- if (nExpandDepth < nDepth)
- {
- heItemTable.style.display = "none";
- this.m_clItemSetAttributes.add("expand", 0);
- }
- else
- {
- heItemTable.style.display = "block";
-
- // expand property 설정
- if (0 < nChildNumber && nExpandDepth != nDepth)
- {
- this.m_clItemSetAttributes.add("expand", 1);
- }
- else
- {
- this.m_clItemSetAttributes.add("expand", 0);
- }
- }
- }
-
- // TBODY 만들기
- var heItemTBody = document.createElement("tbody");
- heItemTable.appendChild(heItemTBody);
-
- var heItemTR = document.createElement("tr");
- // 들여쓰기 TD
- heItemTR = this.makeIndentationTD(strItemId, heItemTR, nDepth, strRecursion);
-
- heItemTBody.appendChild(heItemTR);
-
- // button 그리기
- var strHasButtons = this.getAttribute("hasbuttons");
- if ("false" != strHasButtons)
- {
- var heButtonTD = this.makeButtonTD(strItemId, nChildNumber);
- heItemTR.appendChild(heButtonTD);
-
- if ("false" != this.getAttribute("haslines"))
- {
- // 0 : DIV , 1 : IMG
- var heLineDIV = heButtonTD.children.item(0);
-
- if (bFirst)
- {
- heLineDIV.setAttribute("linetype", "6");
- }
- else if (bLast)
- {
- heLineDIV.setAttribute("linetype", "5");
- }
- else
- {
- heLineDIV.setAttribute("linetype", "4");
- }
-
- if (0 == this.m_nIndex)
- {
- if (bSibling)
- {
- heLineDIV.setAttribute("linetype", "3");
- }
- else
- {
- heLineDIV.setAttribute("linetype", "2");
- }
- }
- }
- }
-
- // checkbox 설정
- var strHasCheck = this.getAttribute("hascheck");
- if ("true" == strHasCheck)
- {
- var heCheckTD = this.makeCheckTD(strItemId);
- heItemTR.appendChild(heCheckTD);
- }
-
- // image 설정
- var strHasImages = this.getAttribute("hasimages");
- if ("false" != strHasImages)
- {
- heItemTR.appendChild(this.makeImageTD(strItemId));
- }
-
- // 내용 TD
- var heContentTD = this.makeContentTD(strItemId, xnTreeNode, heItemTable);
- heItemTR.appendChild(heContentTD);
-
- // content TD가 맨 끝가지 나오는것 방지하기 위한 blank TD
- var heBlankTD = document.createElement("td");
-
- heItemTR.appendChild(heBlankTD);
- // TODO if IS_IE?
- // HtmlLib.setStyle(heBlankTD, "width", "100%");
- heBlankTD.setAttribute("id", "HE_" + strItemId + "_blank");
- heBlankTD.style.width = "100%";
-
- if (is_smartphone)
- {
- this.makeSmartphoneAttribute(heBlankTD);
- }
-
- // attribute 넣기
- this.m_arItemSetAttribute[this.m_nIndex] = this.m_clItemSetAttributes;
-
- for (var i=0; i<nChildNumber ;i++)
- {
- // item의 index
- this.m_nIndex++;
-
- var bChildLast = false;
-
- if (i == nChildNumber - 1)
- {
- bChildLast = true;
- }
-
- var xnItem = xlChildItems.item(i);
-
- var strChildRecursion = (i == nChildNumber - 1) ? (strRecursion + "0") : (strRecursion + "1");
-
- var strItemSetType = this.getAttribute("itemsettype");
- if ("depth" == strItemSetType)
- {
- var xnDepth = XmlLib.selectSingleNode(xnItem, this.m_strDepthRef);
- var strDepth = XmlLib.getTextValue(xnDepth);
- if ("" != strDepth)
- {
- nDepth = parseInt(strDepth) - 1;
- this.makeSubItemSet(xnItem, nDepth, false, bChildLast, bSibling, strChildRecursion);
- }
- }
- else
- {
- this.makeSubItemSet(xnItem, nDepth+1, false, bChildLast, bSibling, strChildRecursion);
- }
- }
- };
- XFormsTreeView.prototype.setItemSetImages = function (xnNode)
- {
- // Image Node
- var xnImage = XmlLib.selectSingleNode(xnNode, this.m_strImageRef);
- // ExpandedImage Node
- var xnExpandedImage = XmlLib.selectSingleNode(xnNode, this.m_strExpandedImageRef);
- // SelectedImage Node
- var xnSelectedImage = XmlLib.selectSingleNode(xnNode, this.m_strSelectedImageRef);
-
- // 각 이미지의 src 가져오기
- var strImage = "";
- var strExpandedImage = "";
- var strSelectedImage = "";
- if (null != xnImage)
- {
- strImage = XmlLib.getTextValue(xnImage);
- }
- if (null != xnExpandedImage)
- {
- strExpandedImage = XmlLib.getTextValue(xnExpandedImage);
- }
- if (null != xnSelectedImage)
- {
- strSelectedImage = XmlLib.getTextValue(xnSelectedImage);
- }
- this.m_clItemSetAttributes.add("image", strImage);
- this.m_clItemSetAttributes.add("expandedimage", strExpandedImage);
- this.m_clItemSetAttributes.add("selectedimage", strSelectedImage);
- };
- /**
- * Tree Line을 그리기 위한 DIV 생성 Method
- * @param strId
- * @param heParent
- * @param nWidth
- * @return
- */
- XFormsTreeView.prototype.makeLineDIVHasLine = function (strId, heParent, nWidth)
- {
- var heLineDIV = document.createElement("div");
- heLineDIV.setAttribute("id", strId);
- HtmlLib.setStyle(heLineDIV, "width", nWidth + "px");
- HtmlLib.setStyle(heLineDIV, "height", this.m_strItemHeight);
- heLineDIV.style.position = "absolute";
-
- heParent.appendChild(heLineDIV);
- };
- XFormsTreeView.prototype.makeIndentationTD = function (strItemId, heItemTR, nDepth, strRecursion)
- {
- // TR 만들기
- var strIndent = this.getAttribute("indent");
-
- // strIndent가 없을경우와 18px일 경우가 같음
- if ("" == strIndent)
- {
- strIndent = "17px";
- }
- for (var i=0; i< nDepth; i++)
- {
- // 들여쓰기
- var heIndentTD = document.createElement("td");
-
- if (is_smartphone)
- {
- this.makeSmartphoneAttribute(heIndentTD);
- }
-
- heItemTR.appendChild(heIndentTD);
-
- // 들여쓰기 TD Attribute 설정
- var nIndent = parseInt(strIndent.replace("px", ""));
- HtmlLib.setStyle(heIndentTD, "width", nIndent + "px");
-
- heIndentTD.vAlign = "top";
-
- // 선을 그리기 위한 DIV 생성 Method
- this.makeLineDIVHasLine("HE_" + strItemId + "_indent" + i, heIndentTD, nIndent);
- heIndentTD.firstChild.style.position = "relative";
-
- if ("false" != this.getAttribute("hasbuttons"))
- {
- var heLineDIV = heIndentTD.children.item(0);
-
- if (null != heLineDIV)
- {
- if ('1' == strRecursion.charAt(i))
- {
- heLineDIV.setAttribute("linetype", "1");
- }
- else
- {
- heLineDIV.setAttribute("linetype", "0");
- }
- }
- }
- }
- return heItemTR;
- };
- XFormsTreeView.prototype.makeButtonTD = function (strItemId, nChildNumber)
- {
- var heButtonTD = document.createElement("td");
-
- // buttonTD의 setAttribute
- HtmlLib.setStyle(heButtonTD, "width", "17px");
- if (0 < nChildNumber)
- {
- heButtonTD.setAttribute("id", "HE_" + strItemId + "_button");
- }
- heButtonTD.vAlign = "top";
-
- // 선을 그리기 위한 buttonContainedDIV 생성 Method
- this.makeLineDIVHasLine("HE_" + strItemId + "_div0", heButtonTD, 17);
-
-
- // draw mark
- var heButtonIMG = document.createElement("img");
- heButtonTD.appendChild(heButtonIMG);
- heButtonIMG.setAttribute("alt", "");
- heButtonIMG.style.position = "relative";
-
- // child가 있을때 plus 이미지 넣기
- if (1 <= nChildNumber)
- {
- var nExpand = this.m_clItemSetAttributes.item("expand");
-
- // 펼쳐졌을 때
- if (1 == nExpand)
- {
- heButtonIMG.setAttribute("src", __getAppName() + "/kr/comsquare/image/treeview/minus.gif");
- }
- // 접혀있을 때
- else if (0 == nExpand) // TODO
- {
- heButtonIMG.setAttribute("src", __getAppName() + "/kr/comsquare/image/treeview/plus.gif");
- }
- }
- else
- {
- heButtonIMG.setAttribute("src", __getAppName() + "/kr/comsquare/image/treeview/blank.gif");
- heButtonIMG.style.width = "17px";
- heButtonIMG.style.height = "17px";
- }
-
- if (is_smartphone)
- {
- this.makeSmartphoneAttribute(heButtonTD);
- }
-
- return heButtonTD;
- };
- XFormsTreeView.prototype.makeCheckTD = function (strItemId)
- {
- var heCheckTD = document.createElement("td");
-
- // check 공통 attribute 세팅
- heCheckTD.setAttribute("id", "HE_" + strItemId + "_check");
- HtmlLib.setStyle(heCheckTD, "width", "17px");
- heCheckTD.vAlign = "top";
-
- var nHeight = parseInt(this.m_strItemHeight.replaceAll("px", ""));
-
- // 선을 그리기 위한 DIV 생성 Method
- if ("false" == this.getAttribute("hasbuttons"))
- {
- this.makeLineDIVHasLine("HE_" + strItemId + "_div0", heCheckTD, 17);
- }
- else
- {
- this.makeLineDIVHasLine("HE_" + strItemId + "_div1", heCheckTD, 17);
- }
-
- var heCheckIMG = document.createElement("img");
- heCheckTD.appendChild(heCheckIMG);
- heCheckIMG.setAttribute("alt", "");
-
- var strUncheckImage = this.getAttribute("uncheckimage");
- if ("" == this.getAttribute("uncheckimage"))
- {
- strUncheckImage = __getAppName() + "/kr/comsquare/image/treeview/uncheck.gif";
- }
-
- // Img Element setAttribute
- var nImageWidth = 13;
- var nImageHeight = 13;
- var nImageLeft = 2;
- var nImageTop = (nHeight - 13)/2;
-
- heCheckIMG.setAttribute("src", strUncheckImage);
- heCheckIMG.style.left = nImageLeft + "px";
- heCheckIMG.style.top = nImageTop + "px";
- HtmlLib.setStyle(heCheckIMG, "width", nImageWidth + "px");
- HtmlLib.setStyle(heCheckIMG, "height", nImageHeight + "px");
- heCheckIMG.style.position = "relative";
-
- if (is_smartphone)
- {
- this.makeSmartphoneAttribute(heCheckTD);
- }
-
- return heCheckTD;
- };
- XFormsTreeView.prototype.makeImageTD = function (strItemId)
- {
- var heImageTD = document.createElement("td");
-
- HtmlLib.setStyle(heImageTD, "width", "17px");
- heImageTD.setAttribute("id", "HE_" + strItemId + "_image");
-
- var strImage = this.getAttribute("image");
- var strItemImage = this.m_clItemSetAttributes.item("image");
- if ("" != strItemImage)
- {
- strImage = strItemImage;
- }
-
- // 펼쳐졌을때!
- if (1 == this.m_clItemSetAttributes.item("expand"))
- {
- var strExpandedImage = this.getAttribute("expandedimage");
- var strItemExpandedImage = this.m_clItemSetAttributes.item("expandedimage");
- if ("" == strItemExpandedImage)
- {
- if ("" != strExpandedImage)
- {
- strImage = strExpandedImage;
- }
- }
- else if (0 == this.m_clItemSetAttributes.item("expand"))
- {
- strImage = strItemExpandedImage;
- }
- }
- if ("true" != this.getAttribute("hascheck"))
- {
- if ("false" == this.getAttribute("hasbuttons"))
- {
- this.makeLineDIVHasLine("HE_" + strItemId + "_div0", heImageTD, "17px");
- }
- else
- {
- this.makeLineDIVHasLine("HE_" + strItemId + "_div1", heImageTD, "17px");
- }
- }
-
- var heImageIMG = document.createElement("img");
- heImageTD.appendChild(heImageIMG);
- heImageIMG.setAttribute("alt", "");
-
- if ("" == strImage)
- {
- strImage = __getAppName() + "/kr/comsquare/image/treeview/blank.gif";
- }
-
- heImageIMG.setAttribute("src", strImage);
- heImageIMG.style.position = "relative";
- heImageIMG.style.left = "0px";
- heImageIMG.style.top = "0px";
- heImageIMG.style.width = "17px";
- heImageIMG.style.height = "17px";
- if (is_smartphone)
- {
- this.makeSmartphoneAttribute(heImageTD);
- }
-
- return heImageTD;
- };
- XFormsTreeView.prototype.makeContentTD = function (strItemId, xnTreeNode, heItemTable)
- {
- var heContentTD = document.createElement("td");
-
- // 내용 TD Attribute설정
- heContentTD.setAttribute("noWrap", "true");
-
- heContentTD.setAttribute("id", "HE_" + strItemId + "_content");
-
- var xnLabel = XmlLib.selectSingleNode(xnTreeNode, this.m_strLabelRef);
- var strLabel = XmlLib.getTextValue(xnLabel);
-
- if (null != heContentTD.innerText)
- {
- heContentTD.innerText = strLabel;
- }
- else
- {
- heContentTD.textContent = strLabel;
- }
- // value setting
- var xnValue = XmlLib.selectSingleNode(xnTreeNode, this.m_strValueRef);
- var strValue = XmlLib.getTextValue(xnValue);
-
- // table에 attribute로 label value에 값을 넣는다
- heItemTable.setAttribute("label", strLabel);
- heItemTable.setAttribute("value", strValue);
-
- if (is_smartphone)
- {
- this.makeSmartphoneAttribute(heContentTD);
- }
-
- return heContentTD;
- };
- XFormsTreeView.prototype.applyDefaultStyle = function ()
- {
- XFormsGroup.prototype.applyDefaultStyle.call(this);
- if (!this.attribute["border-style"] && !this.attribute["border-width"])
- {
- HtmlLib.setStyle(this.m_heControl, "border-width", "2px");
- HtmlLib.setStyle(this.m_heControl, "border-style", "inset");
- }
-
- if ("" == HtmlLib.getStyle(this.m_heControl, "cursor"))
- {
- HtmlLib.setStyle(this.m_heControl, "cursor", "default");
- }
- };
- XFormsTreeView.prototype.select = function (nIndex)
- {
- var xlRefNode = this.getRefNode();
- if (null == xlRefNode)
- {
- return;
- }
-
- var objCell = this.getCell(nIndex, 0);
- if (null == objCell)
- {
- return;
- }
-
- var bChange = false;
-
- var xnRefNode = xlRefNode.item(0);
- if (null != xnRefNode)
- {
- var strOldValue = XmlLib.getTextValue(xnRefNode);
- var strValue = objCell.getValue();
-
- if (strOldValue != strValue)
- {
- bChange = true;
- this.clearSelect();
- }
- }
- this.refreshCurrentModel(this.attribute["ref"]);
-
- objCell.setSelect(true);
-
- this.dispatch("xforms-select");
-
- if (bChange)
- {
- this.dispatch("xforms-value-changed");
- }
- };
- XFormsTreeView.prototype.refresh = function ()
- {
- var strId = this.id;
- if (null != this.m_heControl)
- {
- if (this.isRebuild())
- {
- this.rebuild();
- // var strValue = this.getValue(strRef);
- // this.applySelection(strValue);
- }
- else if (this.isChangedLabel())
- {
- var strRef = this.attribute["ref"];
- if (null != strRef && "" != strRef)
- {
- var bContain = false;
- var heTarget = event.srcElement;
- while (null != heTarget)
- {
- var strTargetId = heTarget.id;
- if (this.id == strTargetId)
- {
- bContain = true;
- break;
- }
- heTarget = heTarget.parentNode;
- }
-
- if (bContain)
- {
- var strValue = this.getValue(strRef);
- this.applySelection(strValue);
- }
- }
- }
- }
- };
- XFormsTreeView.prototype.isChangedLabel = function ()
- {
- if (this.m_bIsItemSet)
- {
- var objCell = this.getCell(this.m_nSelectedRow, 0);
- var xlRefNode = this.getRefNode();
- if (null == objCell || null == xlRefNode)
- {
- return false;
- }
-
- var xnRefNode = xlRefNode.item(0);
- if (null != xnRefNode)
- {
- var strOldValue = XmlLib.getTextValue(xnRefNode);
- var strValue = objCell.getValue();
- if (strOldValue != strValue)
- {
- XmlLib.setTextValue(xnRefNode, strValue);
- this.value = strValue;
-
- return true;
- }
- }
- return false;
- }
- };
- XFormsTreeView.prototype.clearSelect = function ()
- {
- for (var i=0; i<this.length; i++)
- {
- var objCell = this.getCell(i, 0);
- if (null != objCell)
- {
- objCell.setSelect(false);
- if (1 == objCell.expanded)
- {
- strSelectedImage = objCell.expandedimage;
- }
- else
- {
- strSelectedImage = objCell.image;
- }
- }
- }
- this.value = "";
- };
- /**
- * rebuild : item을 노드셋과 맞게 다시그린다.
- */
- XFormsTreeView.prototype.rebuild = function ()
- {
- if (this.m_bIsItemSet)
- {
- // 초기화
- this.initialization();
-
- this.initItemSetData();
- this.makeCell();
- var arKeyset = this.children.keys();
- for (var i=0; i<arKeyset.length; i++)
- {
- var strChild = arKeyset[i];
- var objChild = this.children.item(strChild);
- if (null != objChild)
- {
- objChild.init();
- }
- }
-
- this.initItem();
- }
- };
- XFormsTreeView.prototype.isRebuild = function ()
- {
- var bRebuild = false;
-
- if (this.m_bIsItemSet)
- {
- var xlNode = model.getInstancePart(null, this.nodeset);
-
- if (null != xlNode)
- {
- bChangeNode = this.compareNodes(this.m_xlOriginItemSet, xlNode);
-
- // if ("depth" == this.getAttribute("itemsettype"))
- // {
- // var nChangedLength = xlNode.length;
- // if (this.length != nChangedLength)
- // {
- // bRebuild = true;
- // }
- // }
- // else
- // {
- if (bChangeNode)
- {
- bRebuild = true;
- }
- // }
- }
- }
- return bRebuild;
- };
- // 노드 비교
- XFormsTreeView.prototype.compareNodes = function (xlOriginNode, xlNode)
- {
- var bChangeNode = false;
- if (null != xlOriginNode)
- {
- var nLength = xlNode.length;
- var nOrgLength = xlOriginNode.length;
-
- if (nOrgLength != nLength)
- {
- bChangeNode = true;
- }
- else
- {
- for (var i=0; i<nLength; i++)
- {
- var xnChildNode = xlNode.item(i);
- var xnOriginChildNode = xlOriginNode.item(i);
-
- var xlChildNodeList = xnChildNode.childNodes;
- var xlOriginChildNodeList = xnOriginChildNode.childNodes;
-
- // var xlOriginChildNodeList = XmlLib.selectNodes(xnOriginChildNode, this.m_strNodeSetName);
- // var xlChildNodeList = XmlLib.selectNodes(xnChildNode, this.m_strNodeSetName);
- bChangeNode = this.compareNodes(xlOriginChildNodeList, xlChildNodeList);
- if (bChangeNode)
- {
- break;
- }
- else
- {
- var xnFirstChild = xnChildNode.firstChild;
- var xnOriginFirstChild = xnOriginChildNode.firstChild;
-
- if (null != xnFirstChild && null != xnOriginFirstChild)
- {
- var strFirstChild = xnFirstChild.nodeValue;
- var strOriginFirstChild = xnOriginFirstChild.nodeValue;
-
- if (null != strFirstChild && (strFirstChild != strOriginFirstChild))
- {
- bChangeNode = true;
- break;
- }
- }
- }
- }
- }
- }
- else
- {
- bChangeNode = true;
- }
-
- return bChangeNode;
- };
- XFormsTreeView.prototype.initialization = function ()
- {
- var nIndex = 0;
- while (null != this.children.item(nIndex))
- {
- if ("xforms:cell" != this.children.item(nIndex).elementName)
- {
- nIndex++;
- continue;
- }
- var strChildrenId = this.children.item(nIndex).id;
- this.children.remove(strChildrenId);
- var heChildren = document.getElementById("HE_" + strChildrenId);
- heChildren.parentNode.removeChild(heChildren);
- }
-
- this.m_arItemSetAttribute.removeAll();
- };
- XFormsTreeView.prototype.deselect = function ()
- {
- this.clearSelect();
-
- this.dispatch("xforms-deselect");
- this.dispatch("xforms-value-changed");
- };
- XFormsTreeView.prototype.getCheckValue = function (strSeparator)
- {
- if (null == strSeparator)
- {
- return;
- }
-
- var strCheckResult = "";
- for (var i=0; i<this.length; i++)
- {
- var objCell = this.getCell(i, 0);
- if (1 == objCell.getChecked())
- {
- var strValue = objCell.getValue();
- strCheckResult += strValue + strSeparator;
- }
- }
-
- // 모두 합치고 마지막 구분자를 제거한다
- var nIndexNumber = strCheckResult.lastIndexOf(strSeparator);
- strCheckResult = strCheckResult.substring(0, nIndexNumber);
-
- return strCheckResult;
- };
- XFormsTreeView.prototype.getItemPath = function (nIndex, strSeparator)
- {
- if (null == nIndex)
- {
- return;
- }
-
- // defalut 구분자
- if (null == strSeparator)
- {
- strSeparator = ",";
- }
-
- var objCell = this.getCell(nIndex, 0);
- if (null == objCell)
- {
- return;
- }
-
- var strPathResult = "";
- var strPathResult = strSeparator + objCell.getLabel();
-
- var nParentIndex = objCell.parentIndex;
- while (-1 != nParentIndex)
- {
- var objParentCell = this.getCell(nParentIndex, 0);
- var strParentLabel = objParentCell.getLabel();
-
- if ("" != strParentLabel)
- {
- strPathResult = strSeparator + strParentLabel + strPathResult;
- }
-
-
- nParentIndex = objParentCell.parentIndex;
- }
-
- // 구분자의 문자열 길이
- var nSeparatorLength = strSeparator.length;
- strPathResult = strPathResult.substring(nSeparatorLength, strPathResult.length);
-
- return strPathResult;
- };
- // createChild 부분
- XFormsTreeView.create = function (strParentId, clAttribute, strStyle)
- {
- // 메인노드 생성
- var xnTreeView = XFormsTreeView.createMainNode(clAttribute);
- var xnParent = document.getElementById("HE_"+strParentId);
- xnParent.appendChild(xnTreeView);
- // 하위노드 생성
- xnTreeView = XFormsTreeView.createSubNodes(xnTreeView, clAttribute);
- // object 생성
- return XFormsTreeView.createObject(strParentId, xnTreeView, clAttribute, strStyle);
- };
- XFormsTreeView.createMainNode = function (clAttribute)
- {
- var xnTreeView = document.createElement("div");
-
- if (!clAttribute.exists("border-width"))
- {
- clAttribute.add("border-width", "2px");
- }
-
- if (!clAttribute.exists("border-style"))
- {
- clAttribute.add("border-style", "inset");
- }
-
- xnTreeView = XFormsTreeView.createAttribute(xnTreeView, clAttribute);
-
- return xnTreeView;
- };
- XFormsTreeView.createSubNodes = function (xnTreeView, clAttribute)
- {
- return xnTreeView;
- };
- XFormsTreeView.createObject = function (strParentId, xnTreeView, clAttribute, strStyle)
- {
- var strAlert = "";
- var strHelp = "";
- var strHint = "";
- var strAccesskey = "";
- var strBind = "";
- var strButtonColor = "";
- var strCellSpacing = "";
- var bCheckChildren = false;
- var strCheckImage = "";
- var strClass = "";
- var bDisabled = false;
- var bDragMode = false;
- var bDropMode = false;
- var bEditMenu = true;
- var nExpandDepth = 0;
- var strExpandedImage = "";
- var bFullRowSelect = false;
- var bHasButtons = true;
- var bHasCheck = false;
- var bHasImages = true;
- var bHasLines = true;
- var strId = "";
- var strImage = "";
- var strIndent = "";
- var strItemHeight = "";
- var strItemSetType = "";
- var strLineColor = "";
- var nNavindex = 9007199254740992;
- var bOneClickExpand = false;
- var strOverflow = "hidden";
- var bPopup = false;
- var strRef = "";
- var strScroll = "";
- var strSelectedImage = "";
- var strShowEffect = "";
- var bSingleExpand = false;
- var strUncheckImage = "";
- var strVisibility = "visible";
-
- var bIsItemSet = true;
- var nItemLength = 0;
- var strNodeSet = "";
- var strLabelRef = "";
- var strValueRef = "";
- var strDepthRef = "";
- var strNodeSetName = "";
- var strImageRef = "";
- var strExpandedImageRef = "";
- var strSelectedImageRef = "";
-
- var strUserDefineAttrib = "";
- for (var i=0; i<clAttribute.count(); i++)
- {
- var strAttributeName = clAttribute.keys()[i];
- switch (strAttributeName)
- {
- case "alert" :
- {
- strAlert = clAttribute.item(strAttributeName);
- break;
- }
- case "help" :
- {
- strHelp = clAttribute.item(strAttributeName);
- break;
- }
- case "hint" :
- {
- strHint = clAttribute.item(strAttributeName);
- break;
- }
- case "accesskey" :
- {
- strAccesskey = clAttribute.item(strAttributeName);
- break;
- }
- case "bind" :
- {
- strBind = clAttribute.item(strAttributeName);
- break;
- }
- case "buttoncolor" :
- {
- strButtonColor = clAttribute.item(strAttributeName);
- break;
- }
- case "cellspacing" :
- {
- strCellSpacing = clAttribute.item(strAttributeName);
- break;
- }
- case "checkchildren" :
- {
- if ("true" == clAttribute.item(strAttributeName))
- {
- bCheckChildren = true;
- }
- break;
- }
- case "checkimage" :
- {
- strCheckImage = clAttribute.item(strAttributeName);
- break;
- }
- case "class" :
- {
- strClass = clAttribute.item(strAttributeName);
- break;
- }
- case "disabled" :
- {
- if ("true" == clAttribute.item(strAttributeName))
- {
- bDisabled = true;
- }
- break;
- }
- case "dragmode" :
- {
- if ("true" == clAttribute.item(strAttributeName))
- {
- bDragMode = true;
- }
- break;
- }
- case "dropmode" :
- {
- if ("true" == clAttribute.item(strAttributeName))
- {
- bDropMode = true;
- }
- break;
- }
- case "editmenu" :
- {
- if ("false" == clAttribute.item(strAttributeName))
- {
- bEditMenu = false;
- }
- break;
- }
- case "expanddepth" :
- {
- nExpandDepth = parseInt(clAttribute.item(strAttributeName));
- break;
- }
- case "expandedimage" :
- {
- strExpandedImage = clAttribute.item(strAttributeName);
- break;
- }
- case "fullrowselect" :
- {
- if ("true" == clAttribute.item(strAttributeName))
- {
- bFullRowSelect = true;
- }
- break;
- }
- case "hasbuttons" :
- {
- if ("false" == clAttribute.item(strAttributeName))
- {
- bHasButtons = false;
- }
- break;
- }
- case "hascheck" :
- {
- if ("true" == clAttribute.item(strAttributeName))
- {
- bHasCheck = true;
- }
- break;
- }
- case "hasimages" :
- {
- if ("false" == clAttribute.item(strAttributeName))
- {
- bHasImages = false;
- }
- break;
- }
- case "haslines" :
- {
- if ("false" == clAttribute.item(strAttributeName))
- {
- bHasLines = false;
- }
- break;
- }
-
- case "id" :
- {
- strId = clAttribute.item(strAttributeName);
- break;
- }
- case "image" :
- {
- strImage = clAttribute.item(strAttributeName);
- break;
- }
- case "indent" :
- {
- strIndent = clAttribute.item(strAttributeName);
- break;
- }
- case "itemheight" :
- {
- strItemHeight = clAttribute.item(strAttributeName);
- break;
- }
- case "itemsettype" :
- {
- strItemSetType = clAttribute.item(strAttributeName);
- break;
- }
- case "linecolor" :
- {
- strLineColor = clAttribute.item(strAttributeName);
- break;
- }
- case "navindex" :
- {
- nNavindex = parseInt(clAttribute.item(strAttributeName));
- break;
- }
- case "oneclickexpand" :
- {
- if ("true" == clAttribute.item(strAttributeName))
- {
- bOneClickExpand = true;
- }
- break;
- }
- case "overflow" :
- {
- strOverflow = clAttribute.item(strAttributeName);
- break;
- }
- case "ref" :
- {
- strRef = clAttribute.item(strAttributeName);
- break;
- }
- case "scroll" :
- {
- strScroll = clAttribute.item(strAttributeName);
- break;
- }
- case "selectedimage" :
- {
- strSelectedImage = clAttribute.item(strAttributeName);
- break;
- }
- case "singleexpand" :
- {
- if ("true" == clAttribute.item(strAttributeName))
- {
- bSingleExpand = true;
- }
- break;
- }
- case "uncheckimage" :
- {
- strUncheckImage = clAttribute.item(strAttributeName);
- break;
- }
- case "visibility" :
- {
- strVisibility = clAttribute.item(strAttributeName);
- break;
- }
- // 트리를 그리기 위한 attribute
- case "nodeset" :
- {
- break;
- }
-
- default :
- {
- if (!STYLE_LIST[strAttributeName])
- {
- strUserDefineAttrib += strAttributeName + ":" + clAttribute.item(strAttributeName) + "; ";
- }
- break;
- }
- }
- }
- var objTreeView = new XFormsTreeView (strParentId, strAlert, strHelp, strHint, strAccesskey, strBind, strButtonColor, strCellSpacing, bCheckChildren,
- strCheckImage, strClass, bDisabled, bDragMode, bDropMode, bEditMenu, nExpandDepth, strExpandedImage, bFullRowSelect, bHasButtons,
- bHasCheck, bHasImages, bHasLines, strId, strImage, strIndent, strItemHeight, strItemSetType, strLineColor, nNavindex, bOneClickExpand,
- strOverflow, bPopup, strRef, strScroll, strSelectedImage, strShowEffect, bSingleExpand, strStyle, "xforms:treeview", strUncheckImage, strVisibility,
- bIsItemSet, nItemLength, strNodeSet, strLabelRef, strValueRef, strDepthRef, strNodeSetName, strImageRef, strExpandedImageRef, strSelectedImageRef, strUserDefineAttrib);
- return objTreeView;
- };
- XFormsTreeView.createAttribute = function (xnHtmlNode, clAttribute)
- {
- xnHtmlNode =XFormsGroup.createAttribute(xnHtmlNode, clAttribute);
- return xnHtmlNode;
- };
- /*****************
- * Function
- */
- XFormsTreeView.prototype.item = function (nIndex)
- {
- if (null == nIndex)
- {
- return;
- }
-
- return this.getCell(nIndex, 0);
- };
- //Check값 변경 True/False;
- XFormsTreeView.prototype.changeCheck = function (nIndex)
- {
- var objItem = this.getCell(nIndex, 0);
- var nChecked = objItem.getChecked();
-
- if (1 == nChecked)
- {
- nChecked = 0;
- }
- else
- {
- nChecked = 1;
- }
-
- objItem.setChecked(nChecked);
- if (1 == nChecked)
- {
- this.dispatch("onunchecked");
- }
- else
- {
- this.dispatch("onchecked");
- }
- if ("true" == this.getAttribute("checkchildren"))
- {
- this.checkChildren(nIndex, nChecked);
- }
- };
- //child들도 같이 check상태 변화 변경
- XFormsTreeView.prototype.checkChildren = function (nIndex, nChecked)
- {
- for (var i=0; i<this.length; i++)
- {
- var objChildItem = this.getCell(i, 0);
- if (nIndex == objChildItem.getParentIndex())
- {
- objChildItem.setChecked(nChecked);
- if (0 == nChecked)
- {
- this.dispatch("onunchecked");
- }
- else
- {
- this.dispatch("onchecked");
- }
-
- var nChildIndex = objChildItem.getIndex();
- this.checkChildren(nChildIndex, nChecked);
- }
- }
- };
- XFormsTreeView.prototype.isContained = function (objCell, nX)
- {
- if (null == objCell)
- {
- return;
- }
-
- var objElement = objCell.m_objElement;
- var strCellId = objCell.id;
- var strDepth = objCell.depth;
- var nRow = objCell.index;
-
- var heButton = document.getElementById("HE_" + strCellId + "_button");
- var heCheck = document.getElementById("HE_" + strCellId + "_check");
- var heImage = document.getElementById("HE_" + strCellId + "_image");
-
- var nExpand = objCell.getExpand();
-
- if (1 == nExpand)
- {
- nExpand = 0;
- }
- else if (0 == nExpand)
- {
- nExpand = 1;
- }
- if (objElement.hasContained(heButton, nX) && -1 != objCell.haschilditem())
- {
- this.dispatch("onmarkclick");
-
- if (1 == nExpand)
- {
- // onExpanded Event
- this.dispatch("onexpanded");
-
- this.setExpand(nRow);
- }
- else if (0 == nExpand)
- {
- // onCollapse Event
- this.dispatch("oncollapse");
-
- this.setCollapse(nRow);
- }
- }
- else if (objElement.hasContained(heCheck, nX))
- {
- if ("false" == this.getAttribute("hasbuttons"))
- {
- if (1 == nExpand)
- {
- // onExpanded Event
- this.dispatch("onexpanded");
-
- this.setExpand(nRow);
- }
- else if (0 == nExpand)
- {
- // onCollapse Event
- this.dispatch("oncollapse");
-
- this.setCollapse(nRow);
- }
- }
- this.toggleCheck(nRow);
- }
- else
- {
- if ("false" == this.getAttribute("hasbuttons") &&
- "true" != this.getAttribute("hascheck"))
- {
- if (objElement.hasContained(heImage, nX))
- {
- if (1 == nExpand)
- {
- // onExpanded Event
- this.dispatch("onexpanded");
-
- this.setExpand(nRow);
- }
- else if (0 == nExpand)
- {
- // onCollapse Event
- this.dispatch("oncollapse");
-
- this.setCollapse(nRow);
- }
- }
- }
-
- for (var i=0; i<this.length; i++)
- {
- var objChild = this.getCell(i, 0);
-
- var strChildId = objChild.id;
- if (strChildId == strCellId)
- {
- objChild.setSelect(true);
- this.focusIndex = objChild.index;
- var selectedImage = objChild.selectedimage;
- strSelectedImage = ("" == selectedImage || null == selectedImage) ? objChild.image : selectedImage;
-
- this.label = objChild.getLabel();
- this.value = objChild.getValue();
-
- }
- else
- {
- objChild.setSelect(false);
- if (1 == objChild.expanded)
- {
- strSelectedImage = objChild.expandedimage;
- }
- else if (0 == objChild.expanded)
- {
- strSelectedImage = objChild.image;
- }
- }
-
- if ("" == strSelectedImage)
- {
- strSelectedImage = __getAppName() + "/kr/comsquare/image/treeview/blank.gif";
- }
- var heItem = document.getElementById("HE_" + this.id + "_" + i + "_0_image");
- this.setImage(heItem, strSelectedImage);
- }
- this.dispatch("xforms-select");
-
- var strEventType = "";
- if (is_firefox)
- {
- strEventType = m_event.m_browserEvent.type;
- }
- else
- {
- strEventType = event.type;
- }
-
- // oneclickexpand 설정
- if (("mousedown" == strEventType && "true" == this.getAttribute("oneclickexpand")) ||
- ("dblclick" == strEventType && "true" != this.getAttribute("oneclickexpand")))
- {
- var heContentItem = document.getElementById("HE_" + strCellId + "_content");
- if (objElement.hasContained(heContentItem, nX) && -1 != objCell.haschilditem())
- {
- if (1 == nExpand)
- {
- this.setExpand(nRow);
- }
- else if (0 == nExpand)
- {
- this.setCollapse(nRow);
- }
- }
-
- }
- }
- this.overflow();
- };
- XFormsTreeView.prototype.toggleCheck = function (nIndex)
- {
- var objSelectItem = this.getCell(nIndex, 0);
- if (null == objSelectItem)
- {
- return;
- }
-
- var strCheckChildren = this.getAttribute("checkchildren");
- var strHasButtons = this.getAttribute("hasbuttons");
-
- var heItem = document.getElementById("HE_" + this.id + "_" + nIndex + "_0_check");
-
- var nChecked = objSelectItem.getChecked();
- var nSelectDepth = objSelectItem.depth;
-
- if (null != heItem)
- {
- var strCheckImage = this.getAttribute("checkimage");
- if ("" == strCheckImage)
- {
- strCheckImage = __getAppName() + "/kr/comsquare/image/treeview/check.gif";
- }
-
- var strUncheckImage = this.getAttribute("uncheckimage");
- if ("" == strUncheckImage)
- {
- strUncheckImage = __getAppName() + "/kr/comsquare/image/treeview/uncheck.gif";
- }
-
- if (0 == nChecked)
- {
- this.setImage(heItem, strCheckImage);
- objSelectItem.setChecked(1);
-
- // onChecked Event
- this.dispatch("onchecked");
- }
- else
- {
- this.setImage(heItem, strUncheckImage);
- objSelectItem.setChecked(0);
-
- // onUnchecked Event
- this.dispatch("onunchecked");
- }
- }
-
- if ("true" == strCheckChildren && -1 != objSelectItem.haschilditem())
- {
- for (var i=nIndex+1; i<this.length; i++)
- {
- var objItem = this.getCell(i, 0);
- var nItemDepth = objItem.depth;
- if (nItemDepth > nSelectDepth)
- {
- objItem.setChecked(nChecked);
- this.toggleCheck(objItem.index);
- }
- else
- {
- break;
- }
- }
- }
- };
- XFormsTreeView.prototype.expand = function (nIndex, bExpand)
- {
- var nExpand = 0;
- if (bExpand)
- {
- nExpand = 1;
- }
- var objCell = this.getCell(nIndex, 0);
- objCell.setExpand(nExpand);
-
- // singleexpand 속성이 true일때 나머지 row를 접어준다.
- if ("true" == this.getAttribute("singleexpand"))
- {
- this.singleexpand(nIndex);
- }
-
- var nCellDepth = objCell.depth;
- var strDisplay = objCell.m_heControl.style.display;
-
- if ("none" != strDisplay)
- {
- if (bExpand)
- {
- this.setExpand(nIndex);
- }
- else
- {
- this.setCollapse(nIndex);
- }
- }
- this.overflow();
- };
- XFormsTreeView.prototype.setExpand = function (nRow)
- {
- var objSelectItem = this.getCell(nRow, 0);
- if (-1 != objSelectItem.haschilditem())
- {
- var nSelectDepth = objSelectItem.depth;
-
- var heSelectItem = document.getElementById("HE_" + this.id + "_" + nRow + "_0_button");
- var strImage = __getAppName() + "/kr/comsquare/image/treeview/minus.gif";
-
- objSelectItem.setExpand(1);
-
- for (var i=nRow+1; i<this.length; i++)
- {
- var objItem = this.getCell(i, 0);
- var nItemDepth = objItem.depth;
-
- if (nItemDepth <= nSelectDepth)
- {
- break;
- }
- else if (nItemDepth > nSelectDepth)
- {
- if (nRow == objItem.parentIndex)
- {
-
- if (1 == objItem.getExpand())
- {
- this.setExpand(objItem.index);
- }
- objItem.m_heControl.style.display = "block";
- }
- }
- }
-
- // 이미지 바꾸기
- this.setImage(heSelectItem, strImage);
-
- if ("" != objSelectItem.expandedimage && !objSelectItem.selected)
- {
- var heImage = document.getElementById("HE_" + this.id + "_" + nRow + "_0_image");
- this.setImage(heImage, objSelectItem.expandedimage);
- }
-
- if ("true" == this.getAttribute("singleexpand"))
- {
- this.singleexpand(nRow);
- }
- }
- };
- XFormsTreeView.prototype.getLineDIV = function (strId)
- {
- return objLine;
- };
- XFormsTreeView.prototype.singleexpand = function (nSelectIndex)
- {
- var objSelectItem = this.getCell(nSelectIndex, 0);
- if (-1 != objSelectItem.haschilditem())
- {
- var nSelectCellDepth = objSelectItem.depth;
- var arSameDepthCell = new Array();
- for (var i=0; i<this.length; i++)
- {
- var objItem = this.getCell(i, 0);
-
- var nItemIndex = objItem.index;
- var nItemDepth = objItem.depth;
-
- if (nItemDepth == nSelectCellDepth)
- {
- if (nItemIndex != nSelectIndex)
- {
- this.setCollapse(nItemIndex);
- }
- }
- }
- }
- };
- XFormsTreeView.prototype.setCollapse = function (nRow)
- {
- var objSelectItem = this.getCell(nRow, 0);
- objSelectItem.setExpand(0);
-
- var heSelectItem = document.getElementById("HE_" + this.id + "_" + nRow + "_0_button");
-
- if (null != heSelectItem)
- {
- var strImage = __getAppName() + "/kr/comsquare/image/treeview/plus.gif";
- this.setImage(heSelectItem, strImage);
- }
-
- var nSelectCellDepth = objSelectItem.depth;
-
- for (var i=nRow+1; i<this.length; i++)
- {
- var objChildItem = this.getCell(i, 0);
- var nChildDepth = objChildItem.depth;
-
- if (nChildDepth <= nSelectCellDepth)
- {
- break;
- }
-
- objChildItem.m_heControl.style.display = "none";
- }
-
- // image를 다시 세팅
- if (!objSelectItem.selected)
- {
- var strImage = ("" != objSelectItem.image) ? objSelectItem.image : __getAppName() + "/kr/comsquare/image/treeview/blank.gif";
- var heImage = document.getElementById("HE_" + this.id + "_" + nRow + "_0_image");
- this.setImage(heImage, strImage);
- }
- };
- XFormsTreeView.prototype.setImage = function (heItem, strImage)
- {
- if (null != heItem)
- {
- for (var i=0; i<heItem.childNodes.length; i++)
- {
- var heImageTag = heItem.childNodes.item(i);
- if ("IMG" == heImageTag.nodeName)
- {
- heImageTag.src = strImage;
- break;
- }
- }
- }
-
- };
- /**
- * Method
- */
- XFormsTreeView.prototype.getBindingType = function ()
- {
- return BT_SINGLE;
- };
- /**************************
- * Event
- */
- XFormsTreeView.prototype.onMouseUp = function (event)
- {
- XFormsGroup.prototype.onMouseUp.call(this, event);
- this.m_bLButtonDown = false;
- };
- XFormsTreeView.prototype.onMouseMove = function (event)
- {
- if (this.m_bLButtonDown && "false" != this.getAttribute("dragmode") && !this.m_bDragStart)
- {
- window.bDragDrop = true;
- this.m_bDragStart = true;
- event.capture = "";
- event.drag = this.id;
- this.dispatch("ondragstart");
- }
- else
- {
- XFormsGroup.prototype.onMouseMove.call(this, event);
- }
- };
- /**
- * OnMouseDown
- */
- XFormsTreeView.prototype.onMouseDown = function (event)
- {
- XFormsGroup.prototype.onMouseDown.call(this, event);
-
- if (!this.isCell(event.target))
- {
- return;
- }
-
- if (TFEvent.BUTTON_LEFT != event.button)
- {
- return;
- }
-
- this.m_bLButtonDown = false;
- this.m_bDragStart = false;
-
- var objCell = this.getCell(this.m_nSelectedRow, 0);
-
- if (null != objCell)
- {
- if (objCell.getDisabled())
- {
- return;
- }
-
- var nOffsetX = 0;
- var heOffsetParent = this.m_heControl;
-
-
-
- while (null != heOffsetParent)
- {
- nOffsetX += heOffsetParent.offsetLeft - heOffsetParent.scrollLeft;
-
- heOffsetParent = heOffsetParent.offsetParent;
- }
- var nX = event.clientX - nOffsetX;
-
- // var nX = event.clientX - (is_android ? this.getClientLeftForAndroid() : this.getClientLeft());
- this.isContained(objCell, nX);
-
- // TODO Tree Label쪽 클릭 시 this.m_nSelectRow가 안들어온다.
- window.setFocus(objCell.getId());
- this.m_bLButtonDown = true;
- }
- };
- XFormsTreeView.prototype.getClientLeftForAndroid = function ()
- {
- var nOffsetX = 0;
- var heOffsetParent = this.m_heControl;
-
- while (null != heOffsetParent)
- {
- nOffsetX += heOffsetParent.offsetLeft - heOffsetParent.scrollLeft;
-
- heOffsetParent = heOffsetParent.offsetParent;
- }
- return nOffsetX;
- };
- /**
- * onDblCilck Event
- */
- XFormsTreeView.prototype.onDblClick = function (event)
- {
- if ("true" != this.getAttribute("disabled") && "true" != this.getAttribute("oneclickexpand"))
- {
- this.onMouseDown(event);
- }
- };
- /**
- * 스마트폰 브라우저 상에서 트리 확장/되돌림 버튼 위치를 조정한다.
- *
- * @return
- */
- XFormsTreeView.prototype.moveTreeViewExpansion = function ()
- {
- if (is_smartphone)
- {
- if (this.bIsExpansion)
- {
- var heElementExpansion = document.getElementById("__TREEVIEW_EXPANSION_" + this.id);
- if (null != heElementExpansion)
- {
- var nTreeViewEndXPosition = this.getOffsetLeft() + this.m_heControl.offsetWidth;
- var nTreeViewEndYPosition = this.getOffsetTop() + this.m_heControl.offsetHeight;
- var nScreenEndXPosition = window.scrollX + window.innerWidth;
- var nScreenEndYPosition = window.scrollY + window.innerHeight;
- var nTreeViewXPosition = this.m_heControl.offsetLeft;
- var nTreeViewYPosition = this.m_heControl.offsetTop;
-
- var nXPos = (nTreeViewEndXPosition > nScreenEndXPosition) ? nScreenEndXPosition : nTreeViewEndXPosition;
- var nYPos = (nTreeViewEndYPosition > nScreenEndYPosition) ? nScreenEndYPosition : nTreeViewEndYPosition;
- nXPos = (nTreeViewXPosition < nXPos) ? nXPos : nTreeViewXPosition;
- nYPos = (nTreeViewYPosition < nYPos) ? nYPos : nTreeViewYPosition;
- heElementExpansion.style.top = nYPos - 20 + "px";
- heElementExpansion.style.left = nXPos - 20 + "px";
- }
- }
- }
- };
- XFormsTreeView.prototype.makeTreeViewExpansion = function ()
- {
- var heExpansionButton = document.getElementById("__TREEVIEW_EXPANSION_" + this.id);
- if (null == heExpansionButton)
- {
- if (is_ie)
- {
- heExpansionButton = document.createElement("<image onclick=\"XFormsTreeView.onClickExpansion(event, '" + this.id + "');\">");
- }
- else
- {
- heExpansionButton = document.createElement("image");
- heExpansionButton.setAttribute("onclick", "XFormsTreeView.onClickExpansion(event, \""+this.id+"\")");
- }
-
- heExpansionButton.setAttribute("id", "__TREEVIEW_EXPANSION_" + this.id);
- heExpansionButton.setAttribute("src", __getAppName() + "/kr/comsquare/image/treeview/treeviewExpansion.png");
- heExpansionButton.style.position = "absolute";
- heExpansionButton.style.left = (this.getOffsetLeft() + this.m_heControl.offsetWidth - 20) + "px";
- heExpansionButton.style.top = (this.getOffsetTop() + this.m_heControl.offsetHeight - 20) + "px";
-
- document.body.appendChild(heExpansionButton);
- }
- if ("visible" == this.getAttribute("overflow") || "hidden" == this.getAttribute("overflow"))
- {
- heExpansionButton.style.display = "none";
- }
- };
- // TreeView 전체 크기 다시 그리기(DIV)
- XFormsTreeView.prototype.wholeTreeView = function ()
- {
- var strOriginOverflow = this.getAttribute("overflow");
-
- var scrollWidth = (this.m_nOriginWidth > this.m_heControl.scrollWidth) ? this.m_nOriginWidth : this.m_heControl.scrollWidth ;
- var scrollHeight = (this.m_nOriginHeight > this.m_heControl.scrollHeight) ? this.m_nOriginHeight : this.m_heControl.scrollHeight ;
- this.m_heControl.style.width = scrollWidth + "px";
- this.m_heControl.style.height = scrollHeight + "px";
-
- this.moveTreeViewExpansion();
- };
- /**
- * 전역함수
- */
- XFormsTreeView.onClickExpansion = function (event, strId)
- {
- var objTreeView = document.allElement.item(strId);
- var heElementTreeView = document.getElementById("HE_" + strId);
- var heElementExpansion = document.getElementById("__TREEVIEW_EXPANSION_" + strId);
-
- if (null != heElementTreeView)
- {
- var strOverflow = objTreeView.getAttribute("overflow");
-
- // if ("hidden" == strOverflow)
- if (!objTreeView.bIsExpansion)
- {
- var scrollWidth = (objTreeView.m_nOriginWidth > heElementTreeView.scrollWidth) ? objTreeView.m_nOriginWidth : heElementTreeView.scrollWidth;
- var scrollHeight = (objTreeView.m_nOriginHeight > heElementTreeView.scrollHeight) ? objTreeView.m_nOriginHeight : heElementTreeView.scrollHeight;
- heElementTreeView.style.width = scrollWidth + "px";
- heElementTreeView.style.height = scrollHeight + "px";
-
- objTreeView.setAttribute("overflow", "visible");
- objTreeView.setOverflow("visible");
- objTreeView.bIsExpansion = true;
- heElementExpansion.src = __getAppName() + "/kr/comsquare/image/treeview/treeviewReturn.png";
-
-
- var nScreenEndXPosition = window.scrollX + window.innerWidth;
- var nScreenEndYPosition = window.scrollY + window.innerHeight;
-
- var nTreeViewEndXPosition = objTreeView.getOffsetLeft() + heElementTreeView.offsetWidth;
- var nTreeViewEndYPosition = objTreeView.getOffsetTop() + heElementTreeView.offsetHeight;
-
- var nXPos = ((nTreeViewEndXPosition > nScreenEndXPosition) ? nScreenEndXPosition : nTreeViewEndXPosition);
- var nYPos = ((nTreeViewEndYPosition > nScreenEndYPosition) ? nScreenEndYPosition : nTreeViewEndYPosition);
-
- heElementExpansion.style.left = ((nXPos - 20) < 0) ? "0px" : (nXPos - 20) + "px";
- heElementExpansion.style.top = ((nYPos - 20) < 0) ? "0px" : (nYPos - 20) + "px";
- }
- else
- {
- heElementTreeView.style.width = objTreeView.m_nOriginWidth + "px";
- heElementTreeView.style.height = objTreeView.m_nOriginHeight + "px";
-
- objTreeView.setAttribute("overflow", "hidden");
- objTreeView.setOverflow("hidden");
- objTreeView.bIsExpansion = false;
- heElementExpansion.src = __getAppName() + "/kr/comsquare/image/treeview/treeviewExpansion.png";
-
- heElementExpansion.style.left = (objTreeView.getOffsetLeft() + heElementTreeView.offsetWidth - 20) + "px";
- heElementExpansion.style.top = (objTreeView.getOffsetTop() + heElementTreeView.offsetHeight - 20) + "px";
- }
- }
- };
|