public void Edit(VisualSymbolFormat TargetSymbolFormat) { this.TargetSymbolFormat = TargetSymbolFormat; this.WorkingFormats.Clear(); var Purposes = Enum.GetValues(typeof(ETextPurpose)).Cast <ETextPurpose>() .OrderedInitiallyWith(ETextPurpose.Title, ETextPurpose.Subtitle, ETextPurpose.DetailHeading, ETextPurpose.DetailCaption, ETextPurpose.DetailContent); foreach (var Value in Purposes) { var ValuePurpose = (ETextPurpose)Value; var ValueFormat = this.TargetSymbolFormat.GetTextFormat(ValuePurpose); var NewReg = new TextFormatEditRegister { RegPurpose = ValuePurpose, RegFormat = ValueFormat }; this.WorkingFormats.Add(NewReg); } this.LbxFormats.ItemsSource = this.WorkingFormats; }
// --------------------------------------------------------------------------------------------------------------------------------------------------------- private void BtnSwitchDetailsScopeOrder_Click(object sender, RoutedEventArgs e) { if (this.SymbolSource == null) { return; } VisualSymbolFormat.SetShowGlobalDetailsFirst(this.SymbolSource, !VisualSymbolFormat.GetShowGlobalDetailsFirst(this.SymbolSource)); DockPanel.SetDock(this.GlobalDetailsMaintainer, (VisualSymbolFormat.GetShowGlobalDetailsFirst(this.SymbolSource) ? Dock.Top : Dock.Bottom)); }
private void UserControl_Loaded(object sender, RoutedEventArgs e) { if (this.SymbolSource == null) { return; } DockPanel.SetDock(this.GlobalDetailsMaintainer, (VisualSymbolFormat.GetShowGlobalDetailsFirst(this.SymbolSource) ? Dock.Top : Dock.Bottom)); }
// --------------------------------------------------------------------------------------------------------------------------------------------------------- /// <summary> /// Creates and returns a new draw implementing this visual connector for an optional presentation context. /// </summary> public override DrawingGroup CreateDraw(UIElement PresentationContext, bool ShowManipulationAdorners) { // Calculate the Edge Positions if (this.OriginSymbol.Graphic == null) { this.OriginSymbol.GenerateGraphic(PresentationContext, ShowManipulationAdorners); } if (this.TargetSymbol.Graphic == null) { this.TargetSymbol.GenerateGraphic(PresentationContext, ShowManipulationAdorners); } // IMPORTANT: This validation allows to calculate edge-positions ONLY when not present. // The last calculated edge-positions are used for when presentation-context is not supplied, // which is used for generating the graphics of a composite-content view inside a symbol's details poster. if (PresentationContext == null && (this.OriginEdgePosition == Display.NULL_POINT || this.TargetEdgePosition == Display.NULL_POINT)) { PresentationContext = this.OwnerRepresentation.DisplayingView.Presenter; } DrawingGroup Result = null; if (this.IntermediatePosition == Display.NULL_POINT) { if (PresentationContext != null) { /*T Console.WriteLine("OriSym={0}=>{1}, TarSym={2}=>{3}.", * this.OriginSymbol, this.OriginSymbol.Graphic.GetHashCode(), * this.TargetSymbol, this.TargetSymbol.Graphic.GetHashCode()); */ if (this.OriginSymbol.IsRelatedVisible) { this.OriginEdgePosition = (this.OriginSymbol.IsHidden ? this.OriginPosition : this.OriginPosition.DetermineNearestIntersectingPoint(this.TargetPosition, PresentationContext, this.OriginSymbol.Graphic, this.OwnerRepresentation.DisplayingView.VisualHitTestFilter)); } if (this.TargetSymbol.IsRelatedVisible) { this.TargetEdgePosition = (this.TargetSymbol.IsHidden ? this.TargetPosition : this.TargetPosition.DetermineNearestIntersectingPoint(this.OriginPosition, PresentationContext, this.TargetSymbol.Graphic, this.OwnerRepresentation.DisplayingView.VisualHitTestFilter)); } // Nasty trick to compensate miscalculation of border position (or after undoing a relationship-central-symbol move) if (this.OriginEdgePosition == this.TargetSymbol.BaseCenter) { this.OriginPosition = this.OriginSymbol.BaseCenter.FindBoundary(this.OriginPosition, PresentationContext, this.OriginSymbol.Graphic, true) .SubstituteFor(default(Point), this.OriginSymbol.BaseCenter); this.OriginEdgePosition = this.OriginPosition; } if (this.TargetEdgePosition == this.OriginSymbol.BaseCenter) { this.TargetPosition = this.TargetSymbol.BaseCenter.FindBoundary(this.TargetPosition, PresentationContext, this.TargetSymbol.Graphic, true) .SubstituteFor(default(Point), this.TargetSymbol.BaseCenter); this.TargetEdgePosition = this.TargetPosition; } } /*T Console.WriteLine("OriginEdgePoint X={0}, Y={1}. TargetEdgePoint X={2}, Y={3}", * Math.Truncate(this.OriginEdgePosition.X), Math.Truncate(this.OriginEdgePosition.Y), * Math.Truncate(this.TargetEdgePosition.X), Math.Truncate(this.TargetEdgePosition.Y)); */ // Draw the Connector line Result = MasterDrawer.CreateDrawingConnector(this.OriginPlug, this.TargetPlug, VisualConnectorsFormat.GetLineBrush(this), VisualConnectorsFormat.GetLineThickness(this), VisualConnectorsFormat.GetLineDash(this), VisualConnectorsFormat.GetLineJoin(this), VisualConnectorsFormat.GetLineCap(this), VisualConnectorsFormat.GetPathStyle(this), VisualConnectorsFormat.GetPathCorner(this), VisualConnectorsFormat.GetMainBackground(this), VisualConnectorsFormat.GetOpacity(this), this.TargetEdgePosition, this.OriginEdgePosition, null, VISUAL_MAGNITUDE_ADJUSTMENT); /*T visual cue for detecting miscalculations... * Result.Children.Add(new GeometryDrawing(Brushes.Green, new Pen(Brushes.Red, 1.0), * new EllipseGeometry(new Point(this.OriginEdgePosition.X + 100, this.OriginEdgePosition.Y), 3, 3))); * Result.Children.Add(new GeometryDrawing(Brushes.Blue, new Pen(Brushes.Red, 1.0), * new EllipseGeometry(new Point(this.TargetEdgePosition.X + 100, this.TargetEdgePosition.Y), 3, 3))); */ } else { if (PresentationContext != null) { var EdgePos = (this.OriginSymbol.IsHidden ? this.OriginPosition : this.OriginPosition.DetermineNearestIntersectingPoint(this.IntermediatePosition, PresentationContext, this.OriginSymbol.Graphic, this.OwnerRepresentation.DisplayingView.VisualHitTestFilter)); if (EdgePos != this.IntermediatePosition) { this.OriginEdgePosition = EdgePos; } EdgePos = (this.TargetSymbol.IsHidden ? this.TargetPosition : this.TargetPosition.DetermineNearestIntersectingPoint(this.IntermediatePosition, PresentationContext, this.TargetSymbol.Graphic, this.OwnerRepresentation.DisplayingView.VisualHitTestFilter)); if (EdgePos != this.IntermediatePosition) { this.TargetEdgePosition = EdgePos; } } //T Console.WriteLine("OriginEdgePoint X={0}, Y={1}. TargetEdgePoint X={2}, Y={3}. IP={4}", OriginEdgePoint.X, OriginEdgePoint.Y, TargetEdgePoint.X, TargetEdgePoint.Y, this.IntermediatePosition); // Draw the Connector origin line Result = MasterDrawer.CreateDrawingConnector(this.OriginPlug, Plugs.None, VisualConnectorsFormat.GetLineBrush(this), VisualConnectorsFormat.GetLineThickness(this), VisualConnectorsFormat.GetLineDash(this), VisualConnectorsFormat.GetLineJoin(this), VisualConnectorsFormat.GetLineCap(this), VisualConnectorsFormat.GetPathStyle(this), VisualConnectorsFormat.GetPathCorner(this), VisualConnectorsFormat.GetMainBackground(this), VisualConnectorsFormat.GetOpacity(this), this.IntermediatePosition, this.OriginEdgePosition, null, VISUAL_MAGNITUDE_ADJUSTMENT); // Draw the Connector target line Result.Children.Add( MasterDrawer.CreateDrawingConnector(Plugs.None, this.TargetPlug, VisualConnectorsFormat.GetLineBrush(this), VisualConnectorsFormat.GetLineThickness(this), VisualConnectorsFormat.GetLineDash(this), VisualConnectorsFormat.GetLineJoin(this), VisualConnectorsFormat.GetLineCap(this), VisualConnectorsFormat.GetPathStyle(this), VisualConnectorsFormat.GetPathCorner(this), VisualConnectorsFormat.GetMainBackground(this), VisualConnectorsFormat.GetOpacity(this), this.TargetEdgePosition, this.IntermediatePosition, null, VISUAL_MAGNITUDE_ADJUSTMENT)); } /*T Console.WriteLine("OriginEdgePosition X={0}, Y={1}. TargetEdgePosition X={2}, Y={3}. IP={4}", * OriginEdgePosition.X, OriginEdgePosition.Y, TargetEdgePosition.X, TargetEdgePosition.Y, this.IntermediatePosition); */ // PENDING: Register periferic decorators for drawing (such as callouts, notes, etc. Not to be confused with Text decorations) // Show main-symbol name if required var RelDef = this.RepresentedLink.OwnerRelationship.RelationshipDefinitor.Value; /* ? * if (RelDef.IsSimple && RelDef.HideCentralSymbolWhenSimple && RelDef.ShowNameIfHidingCentralSymbol) * { * var LabelingBrushes = this.OwnerRelationshipRepresentation.MainSymbol.PutNameOnTop(Result); * this.OwnerRelationshipRepresentation.MainSymbol.PutDefinitionOnTop(Result, LabelingBrushes.Item2, LabelingBrushes.Item1, 4); * } * else * if (this.OwnerRelationshipRepresentation.MainSymbol.IsHidden) * { * var LabelingBrushes = this.OwnerRelationshipRepresentation.MainSymbol.GetDefaultLabelBrushes(); * this.OwnerRelationshipRepresentation.MainSymbol.PutDefinitionOnTop(Result, LabelingBrushes.Item2, LabelingBrushes.Item1); * } */ this.LabelArea = null; // Show link-role name decorator if required if (RelDef.DefaultConnectorsFormat.LabelLinkVariant || RelDef.DefaultConnectorsFormat.LabelLinkDefinitor || RelDef.DefaultConnectorsFormat.LabelLinkDescriptor || this.OwnerRepresentation.DisplayingView.ShowLinkRoleVariantLabels || this.OwnerRepresentation.DisplayingView.ShowLinkRoleDefNameLabels || this.OwnerRepresentation.DisplayingView.ShowLinkRoleDescNameLabels) { using (var Context = Result.Append()) { var DecoratorCenter = this.IntermediatePosition; if (DecoratorCenter == Display.NULL_POINT) { DecoratorCenter = new Point((this.OriginEdgePosition.X + this.TargetEdgePosition.X) / 2.0, (this.OriginEdgePosition.Y + this.TargetEdgePosition.Y) / 2.0); } /*T else * Console.WriteLine("DecoratorCenter = IntermediatePoint"); */ //T Console.WriteLine("DecoratorCenter: X={0}, Y={1}", DecoratorCenter.X, DecoratorCenter.Y); var LinkDescriptorLabel = (((RelDef.DefaultConnectorsFormat.LabelLinkDescriptor || this.OwnerRepresentation.DisplayingView.ShowLinkRoleDescNameLabels) && this.RepresentedLink.Descriptor != null) ? this.RepresentedLink.Descriptor.Name : null); var LinkDefinitorLabel = (RelDef.DefaultConnectorsFormat.LabelLinkDefinitor || this.OwnerRepresentation.DisplayingView.ShowLinkRoleDefNameLabels ? this.RepresentedLink.RoleDefinitor.Name : null); var LinkRoleVariantLabel = (RelDef.DefaultConnectorsFormat.LabelLinkVariant || this.OwnerRepresentation.DisplayingView.ShowLinkRoleVariantLabels ? this.RepresentedLink.RoleVariant.ToString() : null); this.LabelArea = MasterDrawer.PutConnectorLabeling(Context, RelDef, DecoratorCenter, VisualSymbolFormat.GetTextFormat(this.OwnerRelationshipRepresentation.MainSymbol, ETextPurpose.Extra), VisualConnectorsFormat.GetMainBackground(this), VisualConnectorsFormat.GetLineBrush(this), LinkDescriptorLabel, LinkDefinitorLabel, LinkRoleVariantLabel); } } // Register Selection Indicators for drawing // NOTE: (selection indicators at the symbol's center interfere with in-place editing) if (ShowManipulationAdorners) { if (this.OwnerRepresentation.IsSelected) { var SizeFactor = (this.GetDisplayingView().SelectedObjects.Contains(this) ? 1.5 : 0.5); this.OwnerRepresentation.DisplayingView.AttachAdorner(this, GenerateSelectionIndicators(INDICATOR_SIZE * SizeFactor, SelectionIndicatorBackground, SelectionIndicatorForeground).Select(tup => tup.Item1)); } else { this.OwnerRepresentation.DisplayingView.DetachAdorner(this); } } if (this.OwnerRepresentation.IsVanished) { Result.Opacity = VisualRepresentation.SELECTION_VANISHING_OPACITY; } return(Result); }