/// <summary>
        /// Setup constructor
        /// </summary>
        /// <param name="view">Planet view</param>
        /// <param name="template">Planetary template</param>
        /// <param name="model">Planet model instance</param>
        public PlanetTemplateViewController( IPlanetModelTemplateView view, IPlanetModelTemplate template, IPlanetModel model )
        {
            Arguments.CheckNotNull( view, "view" );
            Arguments.CheckNotNull( template, "template" );
            Arguments.CheckNotNull( model, "model" );
            m_View = view;
            m_Template = template;
            m_Model = model;

            m_View.PlanetModelTemplate = template;
            m_View.PlanetModel = model;
        }
        /// <summary>
        /// Setup constructor
        /// </summary>
        /// <param name="projectType">Project type that created this project</param>
        /// <param name="name">Project name</param>
        /// <param name="modelFactory">Factory used for creating environment models from templates</param>
        /// <param name="renderFactory">Factory used for creating environment renderers from models</param>
        /// <param name="template">ProjectType to use</param>
        /// <param name="planet">Planet to use</param>
        protected PlanetProject( ProjectType projectType, string name, IPlanetEnvironmentModelFactory modelFactory, IPlanetEnvironmentRendererFactory renderFactory, IPlanetModelTemplate template, IPlanet planet )
            : base(projectType, name, null, null)
        {
            Arguments.CheckNotNull( template, "template" );
            Arguments.CheckNotNull( modelFactory, "modelFactory" );
            Arguments.CheckNotNull( renderFactory, "renderFactory" );
            Arguments.CheckNotNull( planet, "planet" );

            new PlanetTemplateWatcher( template, planet, modelFactory, renderFactory );

            m_Planet = planet;
            m_PlanetTemplate = template;
            template.CreateModelInstance( planet.Model, modelFactory, InstanceContext );
        }
        /// <summary>
        /// Setup constructor
        /// </summary>
        public PlanetTemplateWatcher( IPlanetModelTemplate planetTemplate, IPlanet planet, IPlanetEnvironmentModelFactory modelFactory, IPlanetEnvironmentRendererFactory rendererFactory )
        {
            Arguments.CheckNotNull( planetTemplate, "planetTemplate" );
            Arguments.CheckNotNull( planet, "planet" );
            m_ModelFactory = modelFactory;
            m_RendererFactory = rendererFactory;
            m_PlanetTemplate = planetTemplate;
            m_Planet = planet;

            m_PlanetTemplate.ComponentAdded += OnTemplateAdded;
            m_PlanetTemplate.ComponentRemoved += OnTemplateRemoved;

            m_Planet.Model.ComponentAdded += OnModelAdded;
            m_Planet.Model.ComponentRemoved += OnModelRemoved;
        }
 /// <summary>
 /// Setup constructor
 /// </summary>
 public EditablePlanetTemplateViewController( IWorkspace workspace, IViewFactory viewFactory, IEditableCompositeView view, IPlanetModelTemplate template )
     : base(workspace, viewFactory, view, template)
 {
 }
 /// <summary>
 /// Creates a view used to edit the parameters of a planet template
 /// </summary>
 public IPlanetModelTemplateView CreatePlanetTemplateView( IPlanetModelTemplate template, IPlanetModel instance )
 {
     //	HACK: AP: Create a view and a controller that are dependent on the template type
     IPlanetModelTemplateView view;
     if ( template is ISpherePlanetModelTemplate )
     {
         view = new SpherePlanetModelTemplateViewControl( );
         new SpherePlanetTemplateViewController( ( ISpherePlanetModelTemplateView )view, ( ISpherePlanetModelTemplate )template, ( ISpherePlanetModel )instance );
     }
     else
     {
         throw new NotSupportedException( "Unsupported planet template type " + template.GetType( ) );
     }
     return view;
 }