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 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
                {
                    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;

            // 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;
        }
Exemplo n.º 3
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));
        }
Exemplo n.º 4
0
        public static XDocument WriteXDocument(EDMView edmView)
        {
            if (edmView.EDM.IsEmpty)
            {
                return(WriteXDocument(null, null, null, null));
            }
            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));
        }
Exemplo n.º 5
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;

                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;
        }
Exemplo n.º 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);
        }
Exemplo n.º 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);
        }
Exemplo n.º 9
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);
        }