예제 #1
0
        public GraphEntity([NotNull] IEntityShape shape, DpiState dpiState) : base()
        {
            _shape    = shape;
            _dpiState = dpiState;
            var identity = shape.Identity;

            if (identity is IEntity entity)
            {
                Initialize(Icons.Resources.ResourceManager, GetIconName(entity), entity.Name);
                if (_imageSize == ImageSize.Big)
                {
                    if (entity.BigImage != null && Icon is GoImage icon)
                    {
                        icon.Image = entity.BigImage;
                    }
                    Icon.Size = new SizeF(64.0f, 64.0f);
                }
                else
                {
                    if (entity.Image != null && Icon is GoImage icon)
                    {
                        icon.Image = entity.Image;
                    }
                    Icon.Size = new SizeF(32.0f, 32.0f);
                }
                entity.ImageChanged += OnEntityImageChanged;

                //InPort.ToSpot = GoObject.NoSpot;
                //InPort.IsValidSelfNode = false;
                //InPort.IsValidDuplicateLinks = false;
                //OutPort.FromSpot = GoObject.NoSpot;
                //OutPort.IsValidSelfNode = false;
                //OutPort.IsValidDuplicateLinks = false;

                Port.Size = new SizeF(15f, 15f);

                Icon.Resizable = false;
                Reshapable     = false;

                _threatsMarker = new AssociatedThreatsMarker(entity)
                {
                    Position = new PointF(Icon.Size.Width / 2.0f, Icon.Size.Height / 2.0f),
                };
                _threatsMarker.ThreatEventClicked += OnThreatEventClicked;
                Add(_threatsMarker);

                _diagramMarker = new AssociatedDiagramMarker(entity)
                {
                    Position = new PointF(16.0f * Dpi.Factor.Width, 0),
                };
                _diagramMarker.DiagramClicked += OnDiagramClicked;
                Add(_diagramMarker);

                _warningMarker = new WarningMarker()
                {
                    Position = new PointF(0.0f, 16.0f * Dpi.Factor.Height),
                };
                Add(_warningMarker);

                switch (_dpiState)
                {
                case DpiState.TooSmall:
                    Location = new PointF(_shape.Position.X * 2, _shape.Position.Y * 2);
                    break;

                case DpiState.TooBig:
                    Location = new PointF(_shape.Position.X / 2, _shape.Position.Y / 2);
                    break;

                default:
                    Location = _shape.Position;
                    break;
                }
                Copyable = false;

                AddObserver(this);

                // ReSharper disable once SuspiciousTypeConversion.Global
                ((INotifyPropertyChanged)identity).PropertyChanged += OnPropertyChanged;
            }
            else
            {
                throw new ArgumentException(Properties.Resources.ShapeNotEntityError);
            }
        }