Initial drag of multiple items
This commit is contained in:
parent
04f455bf46
commit
693c77cfe0
@ -392,7 +392,30 @@ namespace EduNetworkBuilder
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public List<NetworkDevice> DevicesInRectangle(Rectangle area)
|
||||
{
|
||||
NetworkDevice tDevice;
|
||||
Point tPoint;
|
||||
List<NetworkDevice> thelist = new List<NetworkDevice>();
|
||||
|
||||
foreach (NetworkComponent tItem in NetComponents)
|
||||
{
|
||||
if (tItem is NetworkDevice)
|
||||
{
|
||||
tDevice = (NetworkDevice)tItem;
|
||||
int tsize = tDevice.Size;
|
||||
tPoint = tDevice.myLocation();
|
||||
if (tPoint.X + tsize >= area.X && tPoint.Y +tsize >= area.Y)
|
||||
{
|
||||
if (tPoint.X <= area.X + area.Width && tPoint.Y <= area.Y + area.Height)
|
||||
{
|
||||
thelist.Add(tDevice);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return thelist;
|
||||
}
|
||||
public NetworkDevice ItemFromName(string hostname)
|
||||
{
|
||||
NetworkDevice tDevice;
|
||||
|
@ -47,6 +47,7 @@ namespace EduNetworkBuilder
|
||||
public Point LastMouseMovePos = new Point(-1, -1);
|
||||
private NetworkDevice ItemClickedOn = null;
|
||||
private List<NetworkDevice> ItemsSelected = new List<NetworkDevice>();
|
||||
private Point OrigClickPoint = new Point(-1, -1);
|
||||
|
||||
public BuilderWindow()
|
||||
{
|
||||
@ -919,7 +920,6 @@ namespace EduNetworkBuilder
|
||||
Point CenteredLocation = myNetwork.clickedPosCentered(e.Location);
|
||||
Point ClickLocation = myNetwork.clickedPos(e.Location);
|
||||
NetworkDevice ReleasedOn = myNetwork.ItemAtPosition(ClickLocation);
|
||||
MouseIsDown = false;
|
||||
LastBackgroundImage = null;
|
||||
pbNetworkView.Image = null; //erase old highlight area
|
||||
LastMouseMovePos = new Point(-1, -1);
|
||||
@ -933,7 +933,6 @@ namespace EduNetworkBuilder
|
||||
pbNetworkView_RightMouseUp(ReleasedOn, e);
|
||||
return;
|
||||
}
|
||||
|
||||
if (duration.TotalMilliseconds < 250)
|
||||
{
|
||||
//This mouse-up is part of a double-click operation. Do an edit
|
||||
@ -941,6 +940,54 @@ namespace EduNetworkBuilder
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MouseIsDown && ItemClickedOn == null && ItemsSelected.Count > 0)
|
||||
{
|
||||
//We were dragging stuff. All done now
|
||||
MouseIsDown = false;
|
||||
ItemsSelected.Clear(); //clear it so we stop moving these ones
|
||||
return;
|
||||
}
|
||||
if (MouseIsDown && ItemClickedOn == null)
|
||||
{
|
||||
//We just finished dragging a select box
|
||||
//Put them all into the drag box.
|
||||
ItemsSelected.Clear();
|
||||
int sx;
|
||||
int sy;
|
||||
int swidth;
|
||||
int sheight;
|
||||
if (ClickedImageLocation.X > e.Location.X)
|
||||
{
|
||||
sx = e.Location.X;
|
||||
swidth = ClickedImageLocation.X - sx;
|
||||
}
|
||||
else
|
||||
{
|
||||
sx = ClickedImageLocation.X;
|
||||
swidth = e.Location.X - sx;
|
||||
}
|
||||
if (ClickedImageLocation.Y > e.Location.Y)
|
||||
{
|
||||
sy = e.Location.Y;
|
||||
sheight = ClickedImageLocation.Y - sy;
|
||||
}
|
||||
else
|
||||
{
|
||||
sy = ClickedImageLocation.Y;
|
||||
sheight = e.Location.Y - sy;
|
||||
}
|
||||
//Now we have a rectangle, but need to exchange numbers for numbers on the image
|
||||
Point topCorner = myNetwork.clickedPos(new Point(sx, sy));
|
||||
Point botCorner = myNetwork.clickedPos(new Point(sx + swidth, sy + sheight));
|
||||
|
||||
Rectangle selectbox = new Rectangle(topCorner.X, topCorner.Y, botCorner.X - topCorner.X, botCorner.Y - topCorner.Y);
|
||||
|
||||
ItemsSelected.AddRange(myNetwork.DevicesInRectangle(selectbox));
|
||||
Console.WriteLine("Selected " + ItemsSelected.Count + " items");
|
||||
MouseIsDown = false;
|
||||
return;
|
||||
}
|
||||
MouseIsDown = false;
|
||||
if (selectedButton == "btnLink")
|
||||
{
|
||||
//We are making a link
|
||||
@ -1039,6 +1086,7 @@ namespace EduNetworkBuilder
|
||||
{
|
||||
Point location = myNetwork.clickedPos(e.Location);
|
||||
ClickedLocation = location;
|
||||
OrigClickPoint = myNetwork.clickedPosCentered(e.Location);
|
||||
ClickedImageLocation = e.Location;
|
||||
//See if we have clicked on something
|
||||
ItemClickedOn = myNetwork.ItemAtPosition(location);
|
||||
@ -1061,7 +1109,7 @@ namespace EduNetworkBuilder
|
||||
myNetwork.Invalidate(oldrec);
|
||||
|
||||
//set it to the new pos
|
||||
toMove.ChangeLocation(NewPosition);
|
||||
toMove.ChangeLocationUnsnapped(NewPosition);
|
||||
//tell it to draw
|
||||
toMove.Print(pbNetworkView.BackgroundImage, false);
|
||||
//invalidate
|
||||
@ -1075,12 +1123,30 @@ namespace EduNetworkBuilder
|
||||
|
||||
Point CenteredLocation = myNetwork.clickedPosCentered(e.Location);
|
||||
Point MouseLocation = myNetwork.clickedPos(e.Location);
|
||||
if (MouseIsDown && LastBackgroundImage != null && ItemClickedOn != null) //We are trying to drag something
|
||||
if (MouseIsDown && LastBackgroundImage != null && ItemClickedOn != null && ItemsSelected.Count == 0) //We are trying to drag something
|
||||
{
|
||||
//find where we are
|
||||
DragItemToNewLocation(ItemClickedOn, CenteredLocation);
|
||||
}
|
||||
else if(MouseIsDown && ItemClickedOn == null) //Dragging an empty area
|
||||
else if (MouseIsDown && ItemsSelected.Count >0) //dragging multiple items around
|
||||
{
|
||||
//Track the difference between the last redraw and this re-draw
|
||||
//Move every item by that amount.
|
||||
int xdif = CenteredLocation.X - OrigClickPoint.X ;
|
||||
int ydif = CenteredLocation.Y - OrigClickPoint.Y;
|
||||
if (xdif != 0 || ydif != 0)
|
||||
{
|
||||
foreach (NetworkDevice nd in ItemsSelected)
|
||||
{
|
||||
Point oPoint = nd.myLocation();
|
||||
Point nPoint = new Point(oPoint.X + xdif, oPoint.Y + ydif);
|
||||
DragItemToNewLocation(nd, nPoint);
|
||||
}
|
||||
}
|
||||
//Now set the location so we do it from here next time
|
||||
OrigClickPoint = CenteredLocation;
|
||||
}
|
||||
else if (MouseIsDown && ItemClickedOn == null) //Dragging an empty area
|
||||
{
|
||||
//make a rectangle
|
||||
Image tImage = new Bitmap(pbNetworkView.BackgroundImage.Width, pbNetworkView.BackgroundImage.Height);
|
||||
|
@ -706,6 +706,11 @@ namespace EduNetworkBuilder
|
||||
MyLocation = NB.GetSnapped(Location);
|
||||
IsDirty = true;
|
||||
}
|
||||
public void ChangeLocationUnsnapped(Point Location)
|
||||
{
|
||||
MyLocation = Location;
|
||||
IsDirty = true;
|
||||
}
|
||||
|
||||
public void SetSize(int tSize)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user