示例#1
0
 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;
		}
示例#3
0
        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;
		}
示例#5
0
        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;
     };
 }
示例#7
0
        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;
        }
示例#8
0
        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;
        }
示例#9
0
        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);
        }