initial ctrl-z working
This commit is contained in:
		@@ -9,6 +9,7 @@ using System.Windows.Forms;
 | 
			
		||||
namespace EduNetworkBuilder
 | 
			
		||||
{
 | 
			
		||||
    //Holds a little bit of information pertaining to the current animation.
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class AnimationClass
 | 
			
		||||
    {
 | 
			
		||||
        Point ImageStartPoint = new Point();
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ using System.Text.RegularExpressions;
 | 
			
		||||
 | 
			
		||||
namespace EduNetworkBuilder
 | 
			
		||||
{
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class LanguageString
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@@ -58,6 +59,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class LanguageStrings
 | 
			
		||||
    {
 | 
			
		||||
        List<LanguageString> TheStrings = new List<LanguageString>();
 | 
			
		||||
 
 | 
			
		||||
@@ -189,7 +189,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
            internalIP = internal_ip;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class PingTestStatus
 | 
			
		||||
    {
 | 
			
		||||
        public string Source;
 | 
			
		||||
@@ -211,6 +211,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class PuzzleInfo
 | 
			
		||||
    {
 | 
			
		||||
        public string PuzzleName;
 | 
			
		||||
@@ -320,6 +321,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class HelpURL
 | 
			
		||||
    {
 | 
			
		||||
        public string URL = "";
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// For drawing shapes on a network.  Rectangles, circles.  Filled or not
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class NetShape
 | 
			
		||||
    {
 | 
			
		||||
        public NetShapeType MyShape = NetShapeType.none;
 | 
			
		||||
 
 | 
			
		||||
@@ -45,6 +45,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        Image TheNetImage = new Bitmap(1024, 1024);
 | 
			
		||||
        Image TheNetImageBackground = new Bitmap(1024, 1024);
 | 
			
		||||
        public int itemsize = 100; //The size of network components
 | 
			
		||||
        [NonSerialized]
 | 
			
		||||
        PictureBox myPBox = null;
 | 
			
		||||
        private int UniqueIdentifier = 100; //This gets used for all sorts of things.  is auto-incremented every time someone asks for one
 | 
			
		||||
        private List<Packet> myPackets = new List<Packet>();
 | 
			
		||||
 
 | 
			
		||||
@@ -61,6 +61,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        public PersonClass CurrentUser;
 | 
			
		||||
 | 
			
		||||
        private List<HelpURL> HelpURLs = new List<HelpURL>();
 | 
			
		||||
        private List<Network> storedNetworkStates = new List<Network>(); //for ctrl-z going back in time to past state
 | 
			
		||||
 | 
			
		||||
        public BuilderWindow(string FirstArg="")
 | 
			
		||||
        {
 | 
			
		||||
@@ -231,11 +232,55 @@ namespace EduNetworkBuilder
 | 
			
		||||
            }
 | 
			
		||||
            if (e.KeyCode == Keys.Z && e.Modifiers == Keys.Control)
 | 
			
		||||
            {
 | 
			
		||||
                //ctrl-z
 | 
			
		||||
                if(storedNetworkStates.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    ChangeToPastState(storedNetworkStates[0]);
 | 
			
		||||
                    storedNetworkStates.RemoveAt(0);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //MessageBox.Show(e.KeyCode.ToString());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void StoreNetworkState(Network toStore)
 | 
			
		||||
        {
 | 
			
		||||
            //We should verify something has changed before storing it.  Oh well...
 | 
			
		||||
            storedNetworkStates.Insert(0,Network.DeepClone(toStore));
 | 
			
		||||
            int maxCount = 30;
 | 
			
		||||
            if(storedNetworkStates.Count > maxCount)
 | 
			
		||||
            {
 | 
			
		||||
                storedNetworkStates.RemoveRange(maxCount, storedNetworkStates.Count - maxCount);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// We do this every time we load a new network or create a network from scratch
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void ClearStoredNetworkStates()
 | 
			
		||||
        {
 | 
			
		||||
            storedNetworkStates.Clear();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Store the new state after a change has been made.
 | 
			
		||||
        /// Do this before every change (add, delete, move)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void ProcessChange()
 | 
			
		||||
        {
 | 
			
		||||
            StoreNetworkState(myNetwork);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void ChangeToPastState(Network OldNet)
 | 
			
		||||
        {
 | 
			
		||||
            if (OldNet != null)
 | 
			
		||||
            {
 | 
			
		||||
                myNetwork = OldNet;
 | 
			
		||||
                myNetwork.RegisterDisplayArea(pbNetworkView);
 | 
			
		||||
                UpdateMenu();
 | 
			
		||||
                UpdateForm();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Return the control with the given name.  Used primarily to color help buttons
 | 
			
		||||
        /// </summary>
 | 
			
		||||
@@ -1059,6 +1104,8 @@ namespace EduNetworkBuilder
 | 
			
		||||
        {
 | 
			
		||||
            if (ItemClickedOn != null)
 | 
			
		||||
            {
 | 
			
		||||
                ProcessChange();
 | 
			
		||||
 | 
			
		||||
                ItemClickedOn.Hide();
 | 
			
		||||
                UpdateLinks();
 | 
			
		||||
                UpdateVisuals();
 | 
			
		||||
@@ -1069,6 +1116,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        {
 | 
			
		||||
            if (ItemClickedOn != null)
 | 
			
		||||
            {
 | 
			
		||||
                ProcessChange();
 | 
			
		||||
                ItemClickedOn.PowerOff = false;
 | 
			
		||||
                bool BlowUpOnce = myNetwork.ItemHasTest(ItemClickedOn.hostname, NetTestType.DeviceBlowsUpWithPower) && !myNetwork.ItemTestIsComplete(ItemClickedOn.hostname, NetTestType.DeviceBlowsUpWithPower);
 | 
			
		||||
                bool BlowUpMultiple = myNetwork.ItemHasTest(ItemClickedOn.hostname, NetTestType.DeviceNeedsUPS) && !myNetwork.ItemTestIsComplete(ItemClickedOn.hostname, NetTestType.DeviceNeedsUPS);
 | 
			
		||||
@@ -1106,6 +1154,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        {
 | 
			
		||||
            if (ItemClickedOn != null)
 | 
			
		||||
            {
 | 
			
		||||
                ProcessChange();
 | 
			
		||||
                ItemClickedOn.PowerOff = true;
 | 
			
		||||
                //Mark the replace test as "done"
 | 
			
		||||
                myNetwork.RegisterDeviceReset(ItemClickedOn.hostname);
 | 
			
		||||
@@ -1117,6 +1166,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        //We will still do this for devices that are spraying the network
 | 
			
		||||
        private void pbNetworkView_Replace_Click(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            ProcessChange();
 | 
			
		||||
            if (ItemClickedOn != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (ItemClickedOn == null) return;
 | 
			
		||||
@@ -1135,6 +1185,8 @@ namespace EduNetworkBuilder
 | 
			
		||||
        {
 | 
			
		||||
            if (ItemClickedOn != null)
 | 
			
		||||
            {
 | 
			
		||||
                ProcessChange();
 | 
			
		||||
 | 
			
		||||
                if (ItemClickedOn == null) return;
 | 
			
		||||
                //Changing a UPS makes sure the power is off when done.
 | 
			
		||||
                ItemClickedOn.PowerOff = true;
 | 
			
		||||
@@ -1182,6 +1234,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
 | 
			
		||||
        private void pbNetworkView_RemoveLink_Click(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            ProcessChange();
 | 
			
		||||
            ToolStripItem thing = (ToolStripItem)sender;
 | 
			
		||||
            string released = thing.Text;
 | 
			
		||||
            released = Regex.Replace(released, ".* ", "");
 | 
			
		||||
@@ -1200,6 +1253,8 @@ namespace EduNetworkBuilder
 | 
			
		||||
            ToolStripItem thing = (ToolStripItem)sender;
 | 
			
		||||
            if (thing.Tag != null)
 | 
			
		||||
            {
 | 
			
		||||
                ProcessChange();
 | 
			
		||||
 | 
			
		||||
                NetworkLink NL = (NetworkLink)thing.Tag;
 | 
			
		||||
                //This may delete the old link and make a new one
 | 
			
		||||
                LinkEditor LE = new LinkEditor(NL);
 | 
			
		||||
@@ -1212,6 +1267,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
 | 
			
		||||
        private void pbNetworkView_ReplaceNetLink_Click(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            ProcessChange();
 | 
			
		||||
            ToolStripItem thing = (ToolStripItem)sender;
 | 
			
		||||
            if (thing.Tag != null)
 | 
			
		||||
            {
 | 
			
		||||
@@ -1234,6 +1290,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
 | 
			
		||||
        private void pbNetworkView_RemoveNetLink_Click(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            ProcessChange();
 | 
			
		||||
            ToolStripItem thing = (ToolStripItem)sender;
 | 
			
		||||
            if (thing.Tag != null)
 | 
			
		||||
            {
 | 
			
		||||
@@ -1249,6 +1306,8 @@ namespace EduNetworkBuilder
 | 
			
		||||
 | 
			
		||||
        private void pbNetworkView_DHCPRequest_Click(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            ProcessChange();
 | 
			
		||||
 | 
			
		||||
            ItemClickedOn.DHCPRequestFromHere();
 | 
			
		||||
            myNetwork.ProcessPackets();
 | 
			
		||||
            UpdateMessages();
 | 
			
		||||
@@ -1260,6 +1319,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        private void pbNetworkView_Reset_Click(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            if (ItemClickedOn == null) return;
 | 
			
		||||
            ProcessChange();
 | 
			
		||||
            ItemClickedOn.ClearIPs(); //reset the device
 | 
			
		||||
            UpdateVisuals();
 | 
			
		||||
        }
 | 
			
		||||
@@ -1272,6 +1332,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
                return;
 | 
			
		||||
            if (ItemClickedOn != null)
 | 
			
		||||
            {
 | 
			
		||||
                ProcessChange();
 | 
			
		||||
 | 
			
		||||
                DeviceConfig editwindow = new DeviceConfig(ItemClickedOn);
 | 
			
		||||
                editwindow.ShowDialog();
 | 
			
		||||
@@ -1302,6 +1363,8 @@ namespace EduNetworkBuilder
 | 
			
		||||
        {
 | 
			
		||||
            if(ShapeForEditing != null)
 | 
			
		||||
            {
 | 
			
		||||
                ProcessChange();
 | 
			
		||||
 | 
			
		||||
                myNetwork.RemoveShape(ShapeForEditing);
 | 
			
		||||
                ShapeForEditing = null;
 | 
			
		||||
                UpdateForm();
 | 
			
		||||
@@ -1311,6 +1374,8 @@ namespace EduNetworkBuilder
 | 
			
		||||
        {
 | 
			
		||||
            if (ShapeForEditing != null)
 | 
			
		||||
            {
 | 
			
		||||
                ProcessChange();
 | 
			
		||||
 | 
			
		||||
                ShapeEditor SE = new ShapeEditor(ShapeForEditing);
 | 
			
		||||
                SE.ShowDialog();
 | 
			
		||||
 | 
			
		||||
@@ -1322,8 +1387,11 @@ namespace EduNetworkBuilder
 | 
			
		||||
 | 
			
		||||
        private void pbNetworkView_Delete_Click(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            ProcessChange();
 | 
			
		||||
            if (ItemsSelected.Count == 0)
 | 
			
		||||
            {
 | 
			
		||||
                TryDeleteOneItem(ItemClickedOn);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                for (int i = ItemsSelected.Count - 1; i >= 0; i--)
 | 
			
		||||
@@ -1370,6 +1438,8 @@ namespace EduNetworkBuilder
 | 
			
		||||
        {
 | 
			
		||||
            if (ItemClickedOn == null) return; //we do not have something chosen to ping from
 | 
			
		||||
            ToolStripMenuItem Pressed = (ToolStripMenuItem)sender;
 | 
			
		||||
            ProcessChange();
 | 
			
		||||
 | 
			
		||||
            string itemname = Pressed.Text;
 | 
			
		||||
            string dest = (string)Pressed.Tag;
 | 
			
		||||
            NB_IPAddress destination;
 | 
			
		||||
@@ -1384,6 +1454,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        private void pbNetworkView_Traceroute_Name_Click(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            if (ItemClickedOn == null) return; //we do not have something chosen to ping from
 | 
			
		||||
            ProcessChange();
 | 
			
		||||
            ToolStripMenuItem Pressed = (ToolStripMenuItem)sender;
 | 
			
		||||
            string itemname = Pressed.Text;
 | 
			
		||||
            string dest = (string)Pressed.Tag;
 | 
			
		||||
@@ -1428,6 +1499,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        private void pbNetworkView_ArpClear_Click(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            if (ItemClickedOn == null) return; //we do not have something chosen to arp request from
 | 
			
		||||
            ProcessChange();
 | 
			
		||||
            ItemClickedOn.ClearArps();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -1496,8 +1568,11 @@ namespace EduNetworkBuilder
 | 
			
		||||
                //This mouse-up is part of a double-click operation. Do an edit.  But only if we are powered on
 | 
			
		||||
                if (ItemClickedOn != null) PoweredOff = ItemClickedOn.PowerOff;
 | 
			
		||||
                if (!PoweredOff)
 | 
			
		||||
                {
 | 
			
		||||
                    ProcessChange();
 | 
			
		||||
                    pbNetworkView_Edit_Click(sender, e);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (MouseIsDown && ItemsSelected.Count > 0)
 | 
			
		||||
@@ -1532,6 +1607,8 @@ namespace EduNetworkBuilder
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        ProcessChange();
 | 
			
		||||
 | 
			
		||||
                        //We just made a shape.
 | 
			
		||||
                        try
 | 
			
		||||
                        {
 | 
			
		||||
@@ -1570,6 +1647,8 @@ namespace EduNetworkBuilder
 | 
			
		||||
                MouseIsDown = false;
 | 
			
		||||
                if (selectedButton == "btnLink")
 | 
			
		||||
                {
 | 
			
		||||
                    ProcessChange();
 | 
			
		||||
 | 
			
		||||
                    //We are making a link
 | 
			
		||||
                    LinkEditor myEditor = new LinkEditor(ItemClickedOn, ReleasedOn);
 | 
			
		||||
                    myEditor.ShowDialog();
 | 
			
		||||
@@ -1578,6 +1657,8 @@ namespace EduNetworkBuilder
 | 
			
		||||
                }
 | 
			
		||||
                else if (ItemClickedOn == null)
 | 
			
		||||
                {
 | 
			
		||||
                    ProcessChange();
 | 
			
		||||
 | 
			
		||||
                    NetworkComponent NC = null;
 | 
			
		||||
                    switch (selectedButton)
 | 
			
		||||
                    {
 | 
			
		||||
@@ -1667,6 +1748,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
                    {
 | 
			
		||||
                        if (!ItemClickedOn.IsLockedInLocation())
 | 
			
		||||
                        {
 | 
			
		||||
                            ProcessChange();
 | 
			
		||||
                            ItemClickedOn.ChangeLocation(CenteredLocation);
 | 
			
		||||
                            ItemClickedOn.UnHide(); //If it was hidden, unhide it
 | 
			
		||||
                            UpdateLinks();
 | 
			
		||||
@@ -1857,6 +1939,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
        private void PrepForLoad()
 | 
			
		||||
        {
 | 
			
		||||
            processing = true;
 | 
			
		||||
            ClearStoredNetworkStates();
 | 
			
		||||
            myNetwork = new Network("");
 | 
			
		||||
            myNetwork.RegisterDisplayArea(pbNetworkView);
 | 
			
		||||
            GC.Collect();
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@ namespace EduNetworkBuilder
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// A class holding a project that needs to be done as either a test, quiz, or homework
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class SchoolworkClass
 | 
			
		||||
    {
 | 
			
		||||
        public Network theProject = null;
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace EduNetworkBuilder
 | 
			
		||||
{
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class TraversalClass
 | 
			
		||||
    {
 | 
			
		||||
        protected struct TraversalRecord
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user