Hi,

Ok, last example, this one allows you to move a single object by mouse down
and move or "lasso" objects, plus the selection rect resizes down to the
selected objects.  I have already sent this file to you, since Yahoo screws
up the formatting, but I make it available to everyone here.


<?xml version="1.0" standalone="no"?>
<svg width="100%" height="100%" version="1.1" xml:space="preserve" 
xmlns="http://www.w3.org/2000/svg";
 xmlns:ev="http://www.w3.org/2001/xml-events";
xmlns:xlink="http://www.w3.org/1999/xlink";  onload="ecmascript:_onload(evt)"
     onmousedown="ecmascript:MouseDown(evt)"
     onmousemove="ecmascript:MouseMove(evt)"
     onmouseup="ecmascript:MouseUp(evt)">
<script type="text/ecmascript">
<![CDATA[
var svgDoc=document;
var svgRoot=svgDoc.documentElement;
var ObjArray = new Array();
var GroupArray = new Array();
var SelectRect = null;
var OrigX = 0;
var OrigY = 0;
var bInDrawRect = false;
var bMoveObjects = false;
var MyGroupObjectsObj = null;

function _onload(evt)
{
  MyGroupObjectsObj = svgDoc.getElementById("SelectGroup");

  var  create_bar=svgDoc.createElementNS("http://www.w3.org/2000/svg";,
"rect");
  create_bar.setAttribute("id", "r_bar");
  create_bar.setAttribute("fill", "green");
  create_bar.setAttribute("x", "300");
  create_bar.setAttribute("y", "50");
  create_bar.setAttribute("width", "100");
  create_bar.setAttribute("height", "30");
  create_bar.setAttribute("pointer-events", "inherit");
  create_bar.setAttribute("onmousedown","ecmascript: Obj_MouseDown(evt)");
  svgRoot.insertBefore(create_bar, MyGroupObjectsObj);
  ObjArray[ObjArray.length] = create_bar;

  var cir =  svgDoc.createElementNS("http://www.w3.org/2000/svg";, "circle");
  cir.setAttribute( "id","cir");
  cir.setAttribute( "cx","420");
  cir.setAttribute( "cy","165");
  cir.setAttribute( "r","10");
  cir.setAttribute('fill', 'red');
  cir.setAttribute('pointer-events', 'inherit');
  cir.setAttribute("onmousedown","ecmascript: Obj_MouseDown(evt)");
  svgRoot.insertBefore(cir, MyGroupObjectsObj);
  
  ObjArray[ObjArray.length] = cir;
}
function Obj_MouseDown(evt)
{
  if(SelectRect == null)
  {
    evt.stopPropagation();
    var bFound = false;
    for(var pos = 0; pos < ObjArray.length;pos++)
    {
      if(ObjArray[pos] == evt.target)
      {
        var obj = ObjArray[pos];
        GroupArray[GroupArray.length] = obj;
        ObjArray.splice(pos,1);
        svgRoot.removeChild(obj);
        MyGroupObjectsObj.appendChild(obj);
        
        //testing
        obj.setAttribute("stroke","black");
        bFound = true;
        break;
      }
    }//for
    
    if(bFound)
    {
      OrigX = evt.clientX;
      OrigY = evt.clientY;
      SelectRect=svgDoc.createElementNS("http://www.w3.org/2000/svg";,
"rect");
      SelectRect.setAttribute("id", "SelectRect");
      SelectRect.setAttribute("fill", "white");
      SelectRect.setAttribute("stroke", "blue");
      var gbbox = evt.target.getBBox();
      SelectRect.setAttribute("x", gbbox.x);
      SelectRect.setAttribute("y", gbbox.y);
      SelectRect.setAttribute("width", gbbox.width);
      SelectRect.setAttribute("height", gbbox.height);
      SelectRect.setAttribute("fill-opacity", 0.000001);
      SelectRect.setAttribute("pointer-events", "inherit");
 
//svgRoot.insertBefore(SelectRect,svgDoc.getElementById("Main_BKG").nextSibl
ing);
      svgRoot.appendChild(SelectRect);
      bMoveObjects = true;
    }
    
    
  }
}
function MouseDown(evt)
{
  evt.stopPropagation();
  if(!bInDrawRect && SelectRect == null)
  {
    OrigX = evt.clientX;
    OrigY = evt.clientY;
    SelectRect=svgDoc.createElementNS("http://www.w3.org/2000/svg";, "rect");
    SelectRect.setAttribute("id", "SelectRect");
    SelectRect.setAttribute("fill", "white");
    SelectRect.setAttribute("stroke", "blue");
    SelectRect.setAttribute("x", evt.clientX);
    SelectRect.setAttribute("y", evt.clientY);
    SelectRect.setAttribute("fill-opacity", 0.000001);
    SelectRect.setAttribute("width", "1");
    SelectRect.setAttribute("height", "1");
    SelectRect.setAttribute("pointer-events", "inherit");
 
//svgRoot.insertBefore(SelectRect,svgDoc.getElementById("Main_BKG").nextSibl
ing);
    svgRoot.appendChild(SelectRect);
    
    bInDrawRect = true;
  }
  else if(SelectRect != null)
  {
     var selbbox = SelectRect.getBBox();
     if((evt.clientX > selbbox.x) && (evt.clientX <
(selbbox.x+selbbox.width)) &&
        (evt.clientY > selbbox.y) && (evt.clientY <
(selbbox.y+selbbox.height)))
      {
        //in SelectRect
        bMoveObjects = true;
        OrigX = evt.clientX;
        OrigY = evt.clientY;
      }//if
      else
      {
         //ouside of SelectRect, so now we
         //remove all items and put them back and our rect
         for(var pos = 0; pos < GroupArray.length;pos++)
         {
            var obj = GroupArray[pos];
            ObjArray[ObjArray.length] = obj;
            GroupArray.splice(pos,1);
            pos--;
            MyGroupObjectsObj.removeChild(obj);
            svgRoot.insertBefore(obj, MyGroupObjectsObj);
            
            //testing
            obj.setAttribute("stroke","none");
         }//for
         
         svgRoot.removeChild(SelectRect);
         SelectRect = null;
      }//else
  }
}
function MouseMove(evt)
{
  evt.stopPropagation();
  if(bInDrawRect)
  {
    var dx = Math.abs(evt.clientX - OrigX);
    var dy = Math.abs(evt.clientY - OrigY);
  
    SelectRect.setAttribute("width", dx);
    SelectRect.setAttribute("height", dy);
  }
  else if(bMoveObjects)
  {
    var dx = evt.clientX - OrigX;
    var dy = evt.clientY - OrigY;
    
    OrigX = evt.clientX;
    OrigY = evt.clientY;
    
    for(var pos = 0; pos < GroupArray.length;pos++)
    {
       var obj = GroupArray[pos];
       switch(obj.tagName)
       {
         case "rect":
           var xpos = Number(obj.getAttribute("x"));
           var ypos = Number(obj.getAttribute("y"));
           xpos += dx;
           ypos += dy;
           
           obj.setAttribute("x", xpos);
           obj.setAttribute("y", ypos);
           break;
         case "circle":
           var xpos = Number(obj.getAttribute("cx"));
           var ypos = Number(obj.getAttribute("cy"));
           xpos += dx;
           ypos += dy;
       
           obj.setAttribute("cx", xpos);
           obj.setAttribute("cy", ypos);
           break;
       }//switch
    }
    
    var xpos = Number(SelectRect.getAttribute("x"));
    var ypos = Number(SelectRect.getAttribute("y"));
    xpos += dx;
    ypos += dy;
       
    SelectRect.setAttribute("x", xpos);
    SelectRect.setAttribute("y", ypos);
  }
}
function MouseUp(evt)
{
  evt.stopPropagation();
  if(bInDrawRect)
  {
    bInDrawRect = false;
  
    var selbbox = SelectRect.getBBox();
    for(var pos = 0; pos < ObjArray.length;pos++)
    {
       var objbbox = ObjArray[pos].getBBox();
       if((objbbox.x > selbbox.x) && ((objbbox.x+objbbox.width) <
(selbbox.x+selbbox.width)) &&
          (objbbox.y > selbbox.y) && ((objbbox.y+objbbox.height) <
(selbbox.y+selbbox.height)))
          {
            var obj = ObjArray[pos];
            GroupArray[GroupArray.length] = obj;
            ObjArray.splice(pos,1);
            pos--;
            svgRoot.removeChild(obj);
            MyGroupObjectsObj.appendChild(obj);
            
            //testing
            obj.setAttribute("stroke","black");
          }
    }//for
    var gbbox = MyGroupObjectsObj.getBBox();
    SelectRect.setAttribute("x", gbbox.x);
    SelectRect.setAttribute("y", gbbox.y);
    SelectRect.setAttribute("width", gbbox.width);
    SelectRect.setAttribute("height", gbbox.height);
    
  }
  bMoveObjects = false;
}

]]>
</script>
<rect id="Main_BKG" x="0" y="0" width="100%" height="100%" stroke="none"
fill="rgb(255,255,255)"  />
 <g id="SelectGroup" ></g>
</svg>



------------------------------------

-----
To unsubscribe send a message to: svg-developers-unsubscr...@yahoogroups.com
-or-
visit http://groups.yahoo.com/group/svg-developers and click "edit my 
membership"
----Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/svg-developers/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/svg-developers/join
    (Yahoo! ID required)

<*> To change settings via email:
    svg-developers-dig...@yahoogroups.com 
    svg-developers-fullfeatu...@yahoogroups.com

<*> To unsubscribe from this group, send an email to:
    svg-developers-unsubscr...@yahoogroups.com

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/

Reply via email to