Esempio n. 1
0
        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));
        }
Esempio n. 4
0
        // ---------------------------------------------------------------------------------------------------------------------------------------------------------
        /// <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);
        }