Initial drag of multiple items
This commit is contained in:
parent
04f455bf46
commit
693c77cfe0
@ -392,7 +392,30 @@ namespace EduNetworkBuilder
|
|||||||
}
|
}
|
||||||
return null;
|
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)
|
public NetworkDevice ItemFromName(string hostname)
|
||||||
{
|
{
|
||||||
NetworkDevice tDevice;
|
NetworkDevice tDevice;
|
||||||
|
@ -47,6 +47,7 @@ namespace EduNetworkBuilder
|
|||||||
public Point LastMouseMovePos = new Point(-1, -1);
|
public Point LastMouseMovePos = new Point(-1, -1);
|
||||||
private NetworkDevice ItemClickedOn = null;
|
private NetworkDevice ItemClickedOn = null;
|
||||||
private List<NetworkDevice> ItemsSelected = new List<NetworkDevice>();
|
private List<NetworkDevice> ItemsSelected = new List<NetworkDevice>();
|
||||||
|
private Point OrigClickPoint = new Point(-1, -1);
|
||||||
|
|
||||||
public BuilderWindow()
|
public BuilderWindow()
|
||||||
{
|
{
|
||||||
@ -919,7 +920,6 @@ namespace EduNetworkBuilder
|
|||||||
Point CenteredLocation = myNetwork.clickedPosCentered(e.Location);
|
Point CenteredLocation = myNetwork.clickedPosCentered(e.Location);
|
||||||
Point ClickLocation = myNetwork.clickedPos(e.Location);
|
Point ClickLocation = myNetwork.clickedPos(e.Location);
|
||||||
NetworkDevice ReleasedOn = myNetwork.ItemAtPosition(ClickLocation);
|
NetworkDevice ReleasedOn = myNetwork.ItemAtPosition(ClickLocation);
|
||||||
MouseIsDown = false;
|
|
||||||
LastBackgroundImage = null;
|
LastBackgroundImage = null;
|
||||||
pbNetworkView.Image = null; //erase old highlight area
|
pbNetworkView.Image = null; //erase old highlight area
|
||||||
LastMouseMovePos = new Point(-1, -1);
|
LastMouseMovePos = new Point(-1, -1);
|
||||||
@ -933,7 +933,6 @@ namespace EduNetworkBuilder
|
|||||||
pbNetworkView_RightMouseUp(ReleasedOn, e);
|
pbNetworkView_RightMouseUp(ReleasedOn, e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (duration.TotalMilliseconds < 250)
|
if (duration.TotalMilliseconds < 250)
|
||||||
{
|
{
|
||||||
//This mouse-up is part of a double-click operation. Do an edit
|
//This mouse-up is part of a double-click operation. Do an edit
|
||||||
@ -941,6 +940,54 @@ namespace EduNetworkBuilder
|
|||||||
}
|
}
|
||||||
else
|
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")
|
if (selectedButton == "btnLink")
|
||||||
{
|
{
|
||||||
//We are making a link
|
//We are making a link
|
||||||
@ -1039,6 +1086,7 @@ namespace EduNetworkBuilder
|
|||||||
{
|
{
|
||||||
Point location = myNetwork.clickedPos(e.Location);
|
Point location = myNetwork.clickedPos(e.Location);
|
||||||
ClickedLocation = location;
|
ClickedLocation = location;
|
||||||
|
OrigClickPoint = myNetwork.clickedPosCentered(e.Location);
|
||||||
ClickedImageLocation = e.Location;
|
ClickedImageLocation = e.Location;
|
||||||
//See if we have clicked on something
|
//See if we have clicked on something
|
||||||
ItemClickedOn = myNetwork.ItemAtPosition(location);
|
ItemClickedOn = myNetwork.ItemAtPosition(location);
|
||||||
@ -1061,7 +1109,7 @@ namespace EduNetworkBuilder
|
|||||||
myNetwork.Invalidate(oldrec);
|
myNetwork.Invalidate(oldrec);
|
||||||
|
|
||||||
//set it to the new pos
|
//set it to the new pos
|
||||||
toMove.ChangeLocation(NewPosition);
|
toMove.ChangeLocationUnsnapped(NewPosition);
|
||||||
//tell it to draw
|
//tell it to draw
|
||||||
toMove.Print(pbNetworkView.BackgroundImage, false);
|
toMove.Print(pbNetworkView.BackgroundImage, false);
|
||||||
//invalidate
|
//invalidate
|
||||||
@ -1075,11 +1123,29 @@ namespace EduNetworkBuilder
|
|||||||
|
|
||||||
Point CenteredLocation = myNetwork.clickedPosCentered(e.Location);
|
Point CenteredLocation = myNetwork.clickedPosCentered(e.Location);
|
||||||
Point MouseLocation = myNetwork.clickedPos(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
|
//find where we are
|
||||||
DragItemToNewLocation(ItemClickedOn, CenteredLocation);
|
DragItemToNewLocation(ItemClickedOn, CenteredLocation);
|
||||||
}
|
}
|
||||||
|
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
|
else if (MouseIsDown && ItemClickedOn == null) //Dragging an empty area
|
||||||
{
|
{
|
||||||
//make a rectangle
|
//make a rectangle
|
||||||
|
@ -706,6 +706,11 @@ namespace EduNetworkBuilder
|
|||||||
MyLocation = NB.GetSnapped(Location);
|
MyLocation = NB.GetSnapped(Location);
|
||||||
IsDirty = true;
|
IsDirty = true;
|
||||||
}
|
}
|
||||||
|
public void ChangeLocationUnsnapped(Point Location)
|
||||||
|
{
|
||||||
|
MyLocation = Location;
|
||||||
|
IsDirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetSize(int tSize)
|
public void SetSize(int tSize)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user