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=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 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= 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 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 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 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(""); } 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"; } } };