public FormsDesignerContent(FormsDesignerExtension parent, OpenedFile sourceFile) : base(parent) { _language = (NetLanguageDescriptor)LanguageDescriptor.GetLanguageByPath(sourceFile.FilePath); if (!(_language is NetLanguageDescriptor)) throw new ArgumentException("File must be a .NET source file."); _extensionHost = parent.ExtensionHost; _extensionHost.ControlManager.AppearanceChanged += ControlManager_AppearanceChanged; _propertyContainer = new PropertyContainer(); _serviceContainer = new ServiceContainer(); _surfaceManager = parent.DesignerSurfaceManager; _codeReader = new DesignerCodeReader(_extensionHost, _language); _codeWriter = new DesignerCodeWriter(_language); this.Text = sourceFile.FilePath.FileName + sourceFile.FilePath.Extension + " [Design]"; this.AssociatedFile = sourceFile; this.AssociatedFile.FilePathChanged += AssociatedFile_FilePathChanged; _errorControl = new ErrorControl() { Dock = DockStyle.Fill, }; _errorControl.ReloadRequested += _errorControl_ReloadRequested; SetupDesigner(); }
/// <summary> /// Parses a source code and creates a new design surface. /// </summary> /// <param name="serviceContainer"></param> /// <param name="surfaceManager"></param> /// <param name="file">The source file to deserialize.</param> /// <returns></returns> public DesignSurface Deserialize(DesignSurfaceManager surfaceManager, IServiceContainer serviceContainer, OpenedFile file) { DesignSurface surface = surfaceManager.CreateDesignSurface(serviceContainer); IDesignerHost designerHost = surface.GetService(typeof(IDesignerHost)) as IDesignerHost; Type componentType = CompileTypeFromFile(file); // load base type. surface.BeginLoad(componentType.BaseType); // get instance to copy components and properties from. Control instance = Activator.CreateInstance(componentType) as Control; // add components var components = CreateComponents(componentType, instance, designerHost); InitializeComponents(components, designerHost); Control rootControl = designerHost.RootComponent as Control; Control parent = rootControl.Parent; ISite site = rootControl.Site; // copy instance properties to root control. CopyProperties(instance, designerHost.RootComponent); rootControl.AllowDrop = true; rootControl.Parent = parent; rootControl.Visible = true; rootControl.Site = site; designerHost.RootComponent.Site.Name = instance.Name; return surface; }
public FormsDesignerExtension() { _formEditors = new Dictionary<OpenedFile, FormsDesignerContent>(); ToolBoxBuilder = new FormsToolBoxBuilder(); DesignerSurfaceManager = new DesignSurfaceManager(); }