private void UndoModule()
 {
     lock (MainWindow.theNeuronArray.modules)
     {
         if (moduleUndoInfo.Count == 0)
         {
             return;
         }
         ModuleUndo m1 = moduleUndoInfo.Last();
         if (m1.moduleState == null)  //the module was just added
         {
             ModuleView.DeleteModule(m1.index);
         }
         else
         {
             if (m1.index == -1) //the module was just deleted
             {
                 ModuleView mv = new ModuleView
                 {
                     Width         = m1.moduleState.Width,
                     Height        = m1.moduleState.Height,
                     FirstNeuron   = m1.moduleState.FirstNeuron,
                     Color         = m1.moduleState.Color,
                     ModuleTypeStr = m1.moduleState.ModuleTypeStr,
                     Label         = m1.moduleState.Label,
                 };
                 // modules.Add(mv);
                 ModuleView.CreateModule(mv.Label, mv.ModuleTypeStr, Utils.IntToColor(mv.Color), mv.FirstNeuron, mv.Width, mv.Height);
             }
             else
             {
                 modules[m1.index].FirstNeuron   = m1.moduleState.FirstNeuron;
                 modules[m1.index].Width         = m1.moduleState.Width;
                 modules[m1.index].Height        = m1.moduleState.Height;
                 modules[m1.index].Color         = m1.moduleState.Color;
                 modules[m1.index].ModuleTypeStr = m1.moduleState.ModuleTypeStr;
                 modules[m1.index].Label         = m1.moduleState.Label;
             }
         }
         moduleUndoInfo.RemoveAt(moduleUndoInfo.Count - 1);
     }
 }
        public void AddModuleUndo(int index, ModuleView currentModule)
        {
            ModuleUndo m1 = new ModuleUndo();

            m1.index = index;
            if (currentModule == null)
            {
                m1.moduleState = null;
            }
            else
            {
                m1.moduleState = new ModuleView()
                {
                    Width         = currentModule.Width,
                    Height        = currentModule.Height,
                    FirstNeuron   = currentModule.FirstNeuron,
                    Color         = currentModule.Color,
                    ModuleTypeStr = currentModule.TheModule.GetType().Name,
                    Label         = currentModule.Label
                }
            };
            moduleUndoInfo.Add(m1);
        }