179 lines
5.5 KiB
JavaScript
179 lines
5.5 KiB
JavaScript
|
|
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";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|