function toolbar(nodeClass) { var m_displayDom=document.createElement("span"); m_displayDom.setAttribute("id","mmToolbar_" + nodeClass.getPKey()); m_displayDom.setAttribute("class","boxToolbar"); var m_addNode=new dataTools.imageDom('pix/icnStar.png',"+","Add node"); m_addNode.onclick=addNodeClick; m_displayDom.appendChild(m_addNode); var m_collapseNode=new dataTools.imageDom("pix/icnArrowUp.png","_","Collapse node"); m_collapseNode.onclick=collapseNodeClick; m_collapseNode.hide=function(){m_collapseNode.style.display="none";} m_collapseNode.show=function(){m_collapseNode.style.display="inline";} m_collapseNode.hide(); m_displayDom.appendChild(m_collapseNode); var m_expandNode=new dataTools.imageDom("pix/icnArrowDown.png","-","Expand node"); m_expandNode.onclick=expandNodeClick; m_expandNode.hide=function(){m_expandNode.style.display="none";} m_expandNode.show=function(){m_expandNode.style.display="inline";} m_expandNode.hide(); m_displayDom.appendChild(m_expandNode); var m_eraseNode=new dataTools.imageDom("pix/icnWaste.png","E","Erase Node and subnodes"); m_eraseNode.onclick=eraseNodeClick; m_displayDom.appendChild(m_eraseNode); var m_addFreeLink=new dataTools.imageDom("pix/icnNewBranch.png","F","Add Free relation"); m_addFreeLink.style.position="absolute"; m_addFreeLink.isDragging=false; m_displayDom.appendChild(m_addFreeLink); dragNDrop.activateForObject(m_addFreeLink); dragNDrop.addSubscriber(freeLinkEventNotify,"endMoving"); var m_changeParentNode=new dataTools.imageDom("pix/icnMoveBranch.png","P","Change Parent relation"); m_changeParentNode.style.position="absolute"; m_changeParentNode.isDragging=false; m_displayDom.appendChild(m_changeParentNode); dragNDrop.activateForObject(m_changeParentNode); dragNDrop.addSubscriber(changeParentNodeEventNotify,"endMoving"); var m_debugNode=document.createElement("span"); if (g_debug) { m_debugNode.appendChild(document.createTextNode("d")); m_debugNode.style.position="absolute"; m_debugNode.onclick=debugNodeClick; m_displayDom.appendChild(m_debugNode); } m_displayDom.mmClass=nodeClass; m_displayDom.hide=hide; m_displayDom.show=show; return(m_displayDom); function freeLinkEventNotify(publisher,eventType,addInfo){ if (("endMoving"==eventType) && (publisher==m_addFreeLink) && (addInfo != null)) { var parentNode=nodeClass; var childNode=addInfo; if ( parentNode!=childNode) { var newNodeRel=new nodeRel(dataTools.getNewPKey(),parentNode,childNode,"free"); parentNode.addNodeRelation(newNodeRel); childNode.addNodeRelation(newNodeRel); childNode.redrawNodeRelations(); } hide(); } } function changeParentNodeEventNotify(publisher,eventType,addInfo){ if (("endMoving"==eventType) && (publisher==m_changeParentNode) && (addInfo!=null)) { var childNode=nodeClass; var newParentNode=addInfo; var mainNodeRel=childNode.getParentNodeRelation(); if ( (newParentNode!=childNode) && (!newParentNode.isChildNodeOf(childNode)) && (newParentNode!=childNode.getParentNode()) ) { if (mainNodeRel != null) { var oldParentNode=mainNodeRel.getParentNode(); oldParentNode.deleteNodeRelation(mainNodeRel); childNode.deleteNodeRelation(mainNodeRel); mainNodeRel.erase(); } var newNodeRel=new nodeRel(dataTools.getNewPKey(),newParentNode,childNode); newParentNode.addNodeRelation(newNodeRel); childNode.addNodeRelation(newNodeRel); newNodeRel.redraw(); } hide(); } } function addNodeClick(event){ event.stopPropagation(); nodeClass.expand(true); var child=new node(dataTools.getNewPKey(),"(enter text)"); var originX=parseInt(nodeClass.style.top.split("px")[0]); var originY=parseInt(nodeClass.style.left.split("px")[0]); child.style.top=(originX+50)+"px"; child.style.left=(originY+50)+"px"; var parent=nodeClass; var newNodeRel=new nodeRel(dataTools.getNewPKey(),parent,child); parent.addNodeRelation(newNodeRel); child.addNodeRelation(newNodeRel); child.redrawNodeRelations(); } function eraseNodeClick(event){ event.stopPropagation(); nodeClass.erase(); } function expandNodeClick(event){ event.stopPropagation(); nodeClass.expand(); m_expandNode.hide(); m_collapseNode.show(); } function collapseNodeClick(event){ event.stopPropagation(); nodeClass.collapse(); m_collapseNode.hide(); m_expandNode.show(); } function debugNodeClick(event){ event.stopPropagation(); alert( nodeClass.debugOut()); } function handleCollapseExpand(){ // Collapse if ((!m_displayDom.parentNode.isLeafNode()) && (!m_displayDom.parentNode.isCollapsed())) { m_collapseNode.show(); } else { m_collapseNode.hide(); } // Expand if ((!m_displayDom.parentNode.isLeafNode()) && (m_displayDom.parentNode.isCollapsed())) { m_expandNode.show(); } else { m_expandNode.hide(); } } function show(){ handleCollapseExpand(); m_displayDom.style.display="block"; m_displayDom.style.top=-1*(m_displayDom.offsetHeight) + "px"; // -20 is for the round corners (takes 10 px each side) m_displayDom.style.width=(nodeClass.offsetWidth-20) + "px"; //repaint FreeLink Control m_addFreeLink.style.left=66; m_addFreeLink.style.top=0; //reposition changeParent Control m_changeParentNode.style.left=88; m_changeParentNode.style.top=0; //reposition debug Control m_debugNode.style.left=0; m_debugNode.style.top=15; } function hide(){ if ((!m_addFreeLink.isDragging) && (!m_changeParentNode.isDragging)) { m_displayDom.style.display="none"; } } }