public void TemporarilyHideAssociation(Association association)
 {
     DiagramElement diagramElement = DiagramElements.FirstOrDefault(x => x.DiagramContent.Equals(association));
     if (diagramElement != null)
     {
         diagramElement.Show = false;
     }
 }
Example #2
0
 private void PositionTheAssociateControl(FrameworkElement control, Association associate)
 {
     Area proposedArea = associate.ProposePosition(control.ActualWidth, control.ActualHeight, this.subjectMetadata.Area, IsOverlappingWithOtherControls);
     Canvas.SetLeft(control, proposedArea.TopLeft.X);
     Canvas.SetTop(control, proposedArea.TopLeft.Y);
 }
        public void AddToTrivialList(Association association)
        {
            if (association == null)
            {
                throw new ArgumentNullResourceException("association", Resources.General_Given_Parameter_Cannot_Be_Null);
            }

            this.Factory.GetInstance<ITrivialFilter>().AddToTrivialTypeList(association.AssociatedTo);
            this.filter.ApplyTypeFilter(this.currentSubject);
        }
Example #4
0
        private void CreateAssociate(Association associate)
        {
            //var control = new ContentPresenter
            //                  {
            //                      DataContext = associate.AssociatedTo,
            //                      Content = associate.AssociatedTo,
            //                      Tag = VisualisedTypeViewMetadata.AssociateIdentifier + Guid.NewGuid()
            //                      // To distinguish this content presenter from other usages
            //                  };

            //this.DiagramSpace.Children.Add(control);
            //var metadata = new VisualisedTypeViewMetadata(control, associate);
            //this.allVisualisedTypes.Add(control.Tag.ToString(), metadata);
            //control.Loaded += (s, e) => OnAssociateControlLoaded(metadata);
        }
        private DiagramElement GetSourceOfLine(Association association)
        {
            var parentAssociation = association as ParentAssociation;
            if (parentAssociation == null)
            {
                return MainDrawingSubject;
            }

            DiagramElement search = this.allElements.FirstOrDefault(e => e.DiagramContent.Id == parentAssociation.AssociatedFrom.Id);
            if (search == null)
            {
                return MainDrawingSubject;
            }

            return search;
        }
        private IEnumerable<DiagramElement> DrawLineForSecondaryParent(DiagramElement fromDiagramElement, Association parentAssociation)
        {
            var fullyExpandedModelType = parentAssociation.AssociatedTo as IVisualisableTypeWithAssociations;
            if (fullyExpandedModelType == null || fullyExpandedModelType.Parent == null)
            {
                return new List<DiagramElement>();
            }

            DiagramElement destinationElement = FindDiagramElementFromContentId(fullyExpandedModelType.Parent.Id);
            if (destinationElement == null)
            {
                return new List<DiagramElement>();
            }

            var destinationAssociation = destinationElement.DiagramContent as Association;
            return DrawLine(fromDiagramElement, destinationElement, destinationAssociation);
        }
        private IEnumerable<DiagramElement> DrawLineForSecondaryImplements(DiagramElement fromDiagramElement, Association association)
        {
            var fullyExpandedModelType = association.AssociatedTo as IVisualisableTypeWithAssociations;
            if (fullyExpandedModelType == null || !fullyExpandedModelType.ThisTypeImplements.Any())
            {
                return new List<DiagramElement>();
            }

            var addedElements = new List<DiagramElement>();
            foreach (ParentAssociation implement in fullyExpandedModelType.ThisTypeImplements)
            {
                DiagramElement destinationElement = FindDiagramElementFromContentId(implement.Id);
                if (destinationElement == null)
                {
                    continue;
                }

                var destinationAssociation = destinationElement.DiagramContent as Association;
                addedElements.AddRange(DrawLine(fromDiagramElement, destinationElement, destinationAssociation));
            }

            return addedElements;
        }
        private IEnumerable<DiagramElement> DrawLine(DiagramElement fromElement, DiagramElement destinationElement, Association destinationAssociation)
        {
            Logger.Instance.WriteEntry("DrawLine for   {0}", destinationAssociation.AssociatedTo.Name);
            Logger.Instance.WriteEntry("    From Area: {0}", fromElement.Area);
            Logger.Instance.WriteEntry("    To Area  : {0}", destinationElement.Area);

            ConnectionLine route = ConnectionLine.FindBestConnectionRoute(fromElement.Area, destinationElement.Area, IsOverlappingWithOtherControls);
            destinationAssociation.StyleLine(route);
            var addedElements = new List<DiagramElement>();
            Logger.Instance.WriteEntry("    Route calculated from {0:F1}, {1:F1}  to {2:F1}, {3:F1}", route.From.X, route.From.Y, route.To.X, route.To.Y);
            Logger.Instance.WriteEntry("    From angle {0:F1} to angle {1:F1}", route.FromAngle, route.ToAngle);

            // Create the line diagram element and add to the diagram collection.
            // The line is linked to the arrow head position.
            var lineDiagramElement = new DiagramElement(DiagramId, route) { TopLeft = route.From };
            lineDiagramElement.RegisterPositionDependency(new[] { fromElement, destinationElement }, IsOverlappingWithOtherControls);
            addedElements.Add(lineDiagramElement);

            // Create an arrow head based on the best route and add to the diagram collection.
            // The arrow head is linked to the associate diagram element.
            ArrowHead arrowHead = destinationAssociation.CreateLineHead();
            var headDiagramElement = new DiagramElement(DiagramId, arrowHead) { TopLeft = route.To };
            headDiagramElement.RegisterPositionDependency(new[] { lineDiagramElement }, IsOverlappingWithOtherControls);
            addedElements.Add(headDiagramElement);

            return new[] { lineDiagramElement, headDiagramElement };
        }