public static void Read(EDMView edmView, XElement designerViewsXElement, Func<UIEntityType, ITypeDesigner> createEntityDesignerFromUIType, Func<UIComplexType, ITypeDesigner> createComplexDesignerFromUIType) { var designerViewXElements = designerViewsXElement == null ? Enumerable.Empty<XElement>() : designerViewsXElement.Elements("DesignerView"); if (designerViewXElements.Any()) foreach (var designerViewXElement in designerViewXElements) edmView.DesignerViews.Add(Read(edmView, createEntityDesignerFromUIType, createComplexDesignerFromUIType, designerViewXElement)); else edmView.DesignerViews.Add(DesignerView.NewView()); }
public override void Load(OpenedFile file, Stream stream) { Debug.Assert(file == this.PrimaryFile); EDMDesignerChangeWatcher.Init = true; // Load EDMX from stream XElement edmxElement = null; Action<XElement> readMoreAction = edmxElt => edmxElement = edmxElt; _edmView = new EDMView(stream, readMoreAction); // If EDMX is empty run EDM Wizard if (_edmView.EDM.IsEmpty) { edmxElement = null; EDMWizardWindow wizard = RunWizard(file, ProjectService.CurrentProject.RootNamespace); if (wizard.DialogResult == true) _edmView = new EDMView(wizard.EDMXDocument, readMoreAction); else return; } // Load or generate DesignerView and EntityTypeDesigners EntityTypeDesigner.Init = true; XElement designerViewsElement = null; if (edmxElement == null || (designerViewsElement = EDMXIO.ReadSection(edmxElement, EDMXIO.EDMXSection.DesignerViews)) == null) { designerViewsElement = DesignerIO.GenerateNewDesignerViewsFromCSDLView(_edmView); } if (edmxElement != null && designerViewsElement != null) DesignerIO.Read(_edmView, designerViewsElement, entityType => new EntityTypeDesigner(entityType), complexType => new ComplexTypeDesigner(complexType)); EntityTypeDesigner.Init = false; // Call DoEvents, otherwise drawing associations can fail VisualHelper.DoEvents(); // Gets the designer canvas _designerCanvas = DesignerCanvas.GetDesignerCanvas(this, _edmView, _edmView.DesignerViews.FirstOrDefault()); _scrollViewer.Content = _designerCanvas; // Register CSDL of EDMX in CSDL DatabaseTreeView CSDLDatabaseTreeViewAdditionalNode.Instance.CSDLViews.Add(_edmView.CSDL); EDMDesignerChangeWatcher.Init = false; }
public static XDocument WriteXDocument(EDMView edmView) { XElement ssdlElement = SSDLIO.WriteXElement(edmView.EDM.SSDLContainer); XElement csdlElement = CSDLIO.Write(edmView.EDM.CSDLContainer); XElement mslElement = MSLIO.Write(edmView.EDM); XElement designerElement = DesignerIO.Write(edmView); return WriteXDocument(ssdlElement, csdlElement, mslElement, designerElement); }
public override void Load(OpenedFile file, Stream stream) { Debug.Assert(file == this.PrimaryFile); EDMDesignerChangeWatcher.Init = true; // Load EDMX from stream XElement edmxElement = null; Action<XElement> readMoreAction = edmxElt => edmxElement = edmxElt; _edmView = new EDMView(stream, readMoreAction); // If EDMX is empty run EDM Wizard if (_edmView.EDM.IsEmpty) { edmxElement = null; string ns = String.Empty; if (ProjectService.CurrentProject == null) { ns = ICSharpCode.Core.MessageService.ShowInputBox("EDMDesigner","Enter NameSpace","DefaultNamespace"); } else { ns = ProjectService.CurrentProject.RootNamespace; } EDMWizardWindow wizard = RunWizard(file, ns); if (wizard.DialogResult == true) _edmView = new EDMView(wizard.EDMXDocument, readMoreAction); else throw new WizardCancelledException(); } // Load or generate DesignerView and EntityTypeDesigners EntityTypeDesigner.Init = true; XElement designerViewsElement = null; if (edmxElement == null || (designerViewsElement = EDMXIO.ReadSection(edmxElement, EDMXIO.EDMXSection.DesignerViews)) == null) { designerViewsElement = DesignerIO.GenerateNewDesignerViewsFromCSDLView(_edmView); } if (edmxElement != null && designerViewsElement != null) DesignerIO.Read(_edmView, designerViewsElement, entityType => new EntityTypeDesigner(entityType), complexType => new ComplexTypeDesigner(complexType)); EntityTypeDesigner.Init = false; // Gets the designer canvas _designerCanvas = DesignerCanvas.GetDesignerCanvas(this, _edmView, _edmView.DesignerViews.FirstOrDefault()); _scrollViewer.Content = _designerCanvas; // Register CSDL of EDMX in CSDL DatabaseTreeView CSDLViews.Add(_edmView.CSDL); EDMDesignerChangeWatcher.Init = false; }
public static DesignerCanvas GetDesignerCanvas(EDMDesignerViewContent container, EDMView edmView, DesignerView designerView) { DesignerCanvas designerCanvas = null; //if (designerView == null) //{ // EntityTypeDesigner.Init = true; // designerView = new DesignerView(); // designerView.ArrangeTypeDesigners = true; // designerView.Name = edmView.Name; // designerView.Zoom = 100; // if (edmView.CSDL.CSDL != null) // { // foreach (UIEntityType entityType in edmView.CSDL.EntityTypes) // { // designerView.AddTypeDesigner(new EntityTypeDesigner(entityType) { IsExpanded = true }); // } // } // EntityTypeDesigner.Init = false; //} if (designerView != null && _designerCanvas.ContainsKey(designerView)) { designerCanvas = _designerCanvas[designerView]; var parent = designerCanvas.Parent as DesignerCanvasPreview; if (parent != null) parent.Content = null; else ((ContentControl)designerCanvas.Parent).Content = null; } else { designerCanvas = new DesignerCanvas(container) { EDMView = edmView, DesignerView = designerView, Background = Brushes.White }; _designerCanvas.Add(designerView, designerCanvas); } return designerCanvas; }
public static void ShowDesignerCanvasPreviews(EDMView edmView, IUIType uiType, MenuItem showOtherTabsMenuItem, IEnumerable<DesignerView> designerViews) { if (showOtherTabsMenuItem.ItemsSource == null) showOtherTabsMenuItem.Items.Add(new MenuItem()); var designerCanvasPreviews = new List<DesignerCanvasPreview>(); Action<DesignerCanvasPreview> designerCanvasPreviewCreated = dcp => designerCanvasPreviews.Add(dcp); showOtherTabsMenuItem.SubmenuOpened += delegate { if (!designerCanvasPreviews.Any()) DesignerCanvasPreview.DesignerCanvasPreviewCreated += designerCanvasPreviewCreated; if (showOtherTabsMenuItem.ItemsSource == null) showOtherTabsMenuItem.Items.Clear(); showOtherTabsMenuItem.ItemsSource = designerViews; Init = true; DesignerCanvasPreview.EDMView = edmView; DesignerCanvasPreview.UIType = uiType; }; showOtherTabsMenuItem.SubmenuClosed += delegate { Init = false; DesignerCanvasPreview.DesignerCanvasPreviewCreated -= designerCanvasPreviewCreated; }; }
public static DesignerView Read(EDMView edmView, Func<UIEntityType, ITypeDesigner> createEntityDesignerFromUIType, Func<UIComplexType, ITypeDesigner> createComplexDesignerFromUIType, XElement designerViewXElement) { EDMDesignerChangeWatcher.Init = true; var designerView = new DesignerView() { Name = designerViewXElement.Attribute("Name").Value, Zoom = int.Parse(designerViewXElement.Attribute("Zoom").Value) }; var arrange = designerViewXElement.Attribute("Arrange"); if (arrange != null) designerView.ArrangeTypeDesigners = bool.Parse(arrange.Value); IEnumerable<XElement> designerTypeXElements = designerViewXElement.Elements("DesignerType"); foreach (var designerTypeXElement in designerTypeXElements) { var name = designerTypeXElement.Attribute("Name").Value; ITypeDesigner typeDesigner; var entityType = edmView.CSDL.EntityTypes.FirstOrDefault(et => et.Name == name); if (entityType != null) typeDesigner = createEntityDesignerFromUIType(entityType); else { var complexType = edmView.CSDL.ComplexTypes.FirstOrDefault(ct => ct.Name == name); if (complexType == null) continue; typeDesigner = createComplexDesignerFromUIType(complexType); } var leftAttribute = designerTypeXElement.Attribute("Left").Value; if (leftAttribute != null) typeDesigner.Left = double.Parse(leftAttribute, CultureInfo.InvariantCulture); var topAttribute = designerTypeXElement.Attribute("Top").Value; if (topAttribute != null) typeDesigner.Top = double.Parse(topAttribute, CultureInfo.InvariantCulture); var isExpandedAttribute = designerTypeXElement.Attribute("IsExpanded"); if (isExpandedAttribute != null) { RoutedEventHandler loaded = null; loaded = delegate { EDMDesignerChangeWatcher.Init = true; typeDesigner.IsExpanded = bool.Parse(isExpandedAttribute.Value); typeDesigner.Loaded -= loaded; EDMDesignerChangeWatcher.Init = false; }; typeDesigner.Loaded += loaded; } designerView.TypeDesignersLocations.Add(typeDesigner); } EDMDesignerChangeWatcher.Init = false; return designerView; }
public static XElement Write(EDMView edmView) { XElement connectionElement = null; XElement optionsElement = null; if (edmView.EDM.DesignerProperties == null || edmView.EDM.DesignerProperties.FirstOrDefault(dp => dp.Name == "MetadataArtifactProcessing") == null) { List<DesignerProperty> standardDesignerProperties = null; if (edmView.EDM.DesignerProperties == null) standardDesignerProperties = new List<DesignerProperty>(); else standardDesignerProperties = edmView.EDM.DesignerProperties.ToList(); standardDesignerProperties.Add(new DesignerProperty() { Name = "MetadataArtifactProcessing", Value = "EmbedInOutputAssembly" }); edmView.EDM.DesignerProperties = standardDesignerProperties; } connectionElement = new XElement(edmxNamespace + "Connection"); XElement designerInfoPropertyElement1 = new XElement(edmxNamespace + "DesignerInfoPropertySet"); connectionElement.Add(designerInfoPropertyElement1); foreach (DesignerProperty designerProperty in edmView.EDM.DesignerProperties) { designerInfoPropertyElement1.Add(new XElement(edmxNamespace + "DesignerProperty", new XAttribute("Name", designerProperty.Name), new XAttribute("Value", designerProperty.Value))); } optionsElement = new XElement(edmxNamespace + "Options"); XElement designerInfoPropertyElement2 = new XElement(edmxNamespace + "DesignerInfoPropertySet"); optionsElement.Add(designerInfoPropertyElement2); foreach (DesignerProperty designerProperty in edmView.EDM.DesignerProperties) { designerInfoPropertyElement2.Add(new XElement(edmxNamespace + "DesignerProperty", new XAttribute("Name", designerProperty.Name), new XAttribute("Value", designerProperty.Value))); } XElement designerElement = new XElement(edmxNamespace + "Designer") .AddElement(connectionElement) .AddElement(optionsElement); //if (edmView.EDM.EDMXDesignerDiagrams != null) // designerElement.AddElement(new XElement(edmxNamespace + "Diagrams", edmView.EDM.EDMXDesignerDiagrams)); //else designerElement.AddElement(new XElement(edmxNamespace + "Diagrams", Write(edmView.DesignerViews))); return designerElement; }
public static XElement GenerateNewDesignerViewsFromCSDLView(EDMView edmView) { XElement designerView = new XElement("DesignerView", new XAttribute("Name", "View"), new XAttribute("Zoom", 100), new XAttribute("Arrange", true)); foreach (UIEntityType entityType in edmView.CSDL.EntityTypes) { designerView.Add(new XElement("DesignerType", new XAttribute("Name", entityType.Name), new XAttribute("Top", 0), new XAttribute("Left", 0), new XAttribute("IsExpanded", true))); } edmView.EDM.EDMXDesignerDiagrams = designerView.Elements(); return new XElement("DesignerViews", designerView); }