예제 #1
0
        protected virtual void OnEdgePointsChanged(DetailedPropertyChangedEventArgs e)
        {
            if (e.Kind == PropertyChangeKind.Set)
            {
                /// EdgePointsがAddされたりRemoveされたときにはfireしない
                if (e.Index == 0)
                {
                    _SourceAnchor.OnAnchorMoved((Point)e.OldValue, (Point)e.NewValue);
                }
                else if (e.Index == EdgePointCount - 1)
                {
                    _TargetAnchor.OnAnchorMoved((Point)e.OldValue, (Point)e.NewValue);
                }
            }

            if (!_isInEdgePointsMoving)
            {
                UpdateEdgePointRefs(e);
                DirtyBoundsCache(null);
                InvalidateLayout();
                InvalidatePaint();
            }

            var handler = EdgePointsChanged;

            if (handler != null)
            {
                handler(this, e);
            }
        }
예제 #2
0
        // --- event ---
        protected virtual void OnParentChanged(DetailedPropertyChangedEventArgs e)
        {
            _rootCache = null;

            if (_resourceCache != null)
            {
                /// 親がnullすなわちCanvasから切り離されたら
                if (Parent == null && this != Root)
                {
                    /// ResourceCacheを解放する
                    DisposeResourceCacheAll();
                }
                var enabled = Parent != null;
                Accept(
                    fig => {
                    var af = fig as AbstractFigure;
                    if (af != null)
                    {
                        af._ResourceCache.Enabled = enabled;
                    }
                    return(false);
                }
                    );
            }

            var handler = ParentChanged;

            if (handler != null)
            {
                handler(this, e);
            }
        }
예제 #3
0
 protected virtual void OnFigureEdgePointsChanged(DetailedPropertyChangedEventArgs e)
 {
     using (Figure.DirtManager.BeginDirty()) {
         RelocateAllHandles();
         RelocateFocus();
     }
 }
예제 #4
0
 protected override void OnPropertyChanged(object sender, DetailedPropertyChangedEventArgs e)
 {
     if (!SuppressNotification)
     {
         _modifiedDate = DateTime.Now;
     }
     base.OnPropertyChanged(sender, e);
 }
예제 #5
0
 protected virtual void OnPropertyChanged(object sender, DetailedPropertyChangedEventArgs e, bool isModification)
 {
     if (!SuppressNotification && isModification)
     {
         _modifiedDate = DateTime.Now;
     }
     base.OnPropertyChanged(sender, e);
 }
예제 #6
0
        protected virtual void OnDescendantChanged(DetailedPropertyChangedEventArgs e)
        {
            var handler = DescendantChanged;

            if (handler != null)
            {
                handler(this, e);
            }
        }
예제 #7
0
        protected virtual void OnIncomingsChanged(DetailedPropertyChangedEventArgs e)
        {
            var handler = IncomingsChanged;

            if (handler != null)
            {
                handler(this, e);
            }
        }
예제 #8
0
        protected virtual void OnMemoSmartFolderChanged(MemoSmartFolder changed, DetailedPropertyChangedEventArgs cause)
        {
            var handler = MemoSmartFolderChanged;

            if (handler != null)
            {
                handler(this, new MemoSmartFolderChangedEventArgs(changed, cause));
            }
        }
예제 #9
0
        protected override void OnDescendantChanged(DetailedPropertyChangedEventArgs e)
        {
            base.OnDescendantChanged(e);

            switch (e.Kind)
            {
            case PropertyChangeKind.Add: {
                (e.NewValue as IFigure).Accept(
                    fig => {
                        fig.ForwardMouseEvents(this);
                        return(false);
                    }
                    );
                break;
            }

            case PropertyChangeKind.Remove: {
                (e.OldValue as IFigure).Accept(
                    fig => {
                        fig.StopForwardMouseEvents(this);
                        return(false);
                    }
                    );
                break;
            }

            case PropertyChangeKind.Clear: {
                foreach (var child in (IFigure[])e.OldValue)
                {
                    child.Accept(
                        fig => {
                            fig.StopForwardMouseEvents(this);
                            return(false);
                        }
                        );
                }
                break;
            }

            case PropertyChangeKind.Set: {
                (e.OldValue as IFigure).Accept(
                    fig => {
                        fig.StopForwardMouseEvents(this);
                        return(false);
                    }
                    );
                (e.NewValue as IFigure).Accept(
                    fig => {
                        fig.ForwardMouseEvents(this);
                        return(false);
                    }
                    );
                break;
            }
            }
        }
예제 #10
0
        protected virtual void OnChildrenChanged(DetailedPropertyChangedEventArgs e)
        {
            using (Figure.DirtManager.BeginDirty()) {
                /// Figureの構造をEditorの構造に同期
                switch (e.Kind)
                {
                case PropertyChangeKind.Add: {
                    var newChild = e.NewValue as Editor;
                    if (newChild != null && e.IsIndexed)
                    {
                        _figureMaintainer.InsertChildEditorFigure(newChild.Figure, e.Index);
                    }
                    break;
                }

                case PropertyChangeKind.Remove: {
                    var oldChild = e.OldValue as Editor;
                    if (oldChild != null)
                    {
                        _figureMaintainer.RemoveChildEditorFigure(oldChild.Figure);
                    }
                    break;
                }

                case PropertyChangeKind.Clear: {
                    _figureMaintainer.ClearChildEditorFigure();
                    break;
                }

                case PropertyChangeKind.Set: {
                    var oldChild = e.OldValue as Editor;
                    var newChild = e.NewValue as Editor;
                    if (oldChild != null)
                    {
                        _figureMaintainer.RemoveChildEditorFigure(oldChild.Figure);
                    }
                    if (newChild != null && e.IsIndexed)
                    {
                        _figureMaintainer.InsertChildEditorFigure(newChild.Figure, e.Index);
                    }
                    break;
                }

                default: {
                    break;
                }
                }

                if (Root != null)
                {
                    Site.UpdateHandleLayer();
                }
            }
        }
예제 #11
0
        // ------------------------------
        // protected
        // ------------------------------
        // --- event ---
        protected virtual void OnChildrenChanged(DetailedPropertyChangedEventArgs e)
        {
            switch (e.Kind)
            {
            case PropertyChangeKind.Add: {
                var newHandle = e.NewValue as IAuxiliaryHandle;
                newHandle.Figure.IsVisible = _figure.IsVisible;
                newHandle.Figure.ForwardMouseEvents(Figure);
                _figure.Children.Insert(e.Index, newHandle.Figure);
                break;
            }

            case PropertyChangeKind.Remove: {
                var oldHandle = e.OldValue as IAuxiliaryHandle;
                Figure.Children.Remove(oldHandle.Figure);
                oldHandle.Figure.StopForwardMouseEvents(Figure);
                break;
            }

            case PropertyChangeKind.Clear: {
                var oldHandles = e.OldValue as IAuxiliaryHandle[];
                foreach (var handle in oldHandles)
                {
                    handle.Figure.StopForwardMouseEvents(Figure);
                }
                _figure.Children.Clear();
                break;
            }

            case PropertyChangeKind.Set: {
                var oldHandle = e.OldValue as IAuxiliaryHandle;
                var newHandle = e.NewValue as IAuxiliaryHandle;

                oldHandle.Figure.StopForwardMouseEvents(Figure);

                newHandle.Figure.IsVisible = Figure.IsVisible;
                newHandle.Figure.ForwardMouseEvents(Figure);

                _figure.Children[e.Index] = newHandle.Figure;
                break;
            }
            }
        }
예제 #12
0
        private void HandleChildrenChanged(object sender, DetailedPropertyChangedEventArgs e)
        {
            if (e.PropertyName == "Children")
            {
                switch (e.Kind)
                {
                case PropertyChangeKind.Add: {
                    var newChild = e.NewValue as AbstractCommand;
                    if (newChild != null && !(newChild is CompositeCommand))
                    {
                        newChild._Parent = this;
                    }
                    break;
                }

                case PropertyChangeKind.Remove: {
                    var oldChild = e.OldValue as AbstractCommand;
                    if (oldChild != null && !(oldChild is CompositeCommand))
                    {
                        oldChild._Parent = null;
                    }
                    break;
                }

                case PropertyChangeKind.Clear: {
                    var oldChildren = e.OldValue as AbstractCommand[];
                    if (oldChildren != null)
                    {
                        foreach (var child in oldChildren)
                        {
                            if (!(child is CompositeCommand))
                            {
                                child._Parent = null;
                            }
                        }
                    }
                    break;
                }
                }
            }
        }
예제 #13
0
        protected virtual void UpdateEdgePointRefs(DetailedPropertyChangedEventArgs e)
        {
            if (_edgePointRefs != null && e != null && e.IsIndexed)
            {
                int changedIndex = e.Index;
                switch (e.Kind)
                {
                case PropertyChangeKind.Add: {
                    _edgePointRefs.Insert(changedIndex, new EdgePointRef(this, changedIndex));
                    for (int i = changedIndex + 1; i < _edgePointRefs.Count; ++i)
                    {
                        ++_edgePointRefs[i].Index;
                    }
                    break;
                }

                case PropertyChangeKind.Remove: {
                    _edgePointRefs.RemoveAt(changedIndex);
                    for (int i = changedIndex; i < _edgePointRefs.Count; ++i)
                    {
                        --_edgePointRefs[i].Index;
                    }
                    break;
                }

                case PropertyChangeKind.Clear: {
                    _edgePointRefs = null;
                    break;
                }

                case PropertyChangeKind.Set: {
                    /// do nothing
                    break;
                }

                default: {
                    throw new ArgumentException();
                }
                }
            }
        }
예제 #14
0
        // ------------------------------
        // protected
        // ------------------------------
        // === AbstractFigure ==========
        protected override void OnChildrenChanged(DetailedPropertyChangedEventArgs e)
        {
            switch (e.Kind)
            {
            case PropertyChangeKind.Add: {
                var child = e.NewValue as IFigure;
                child.BoundsChanged += HandleChildrenBoundsChanged;
                break;
            }

            case PropertyChangeKind.Remove: {
                var child = e.OldValue as IFigure;
                child.BoundsChanged -= HandleChildrenBoundsChanged;
                break;
            }

            case PropertyChangeKind.Clear: {
                var children = e.OldValue as IFigure[];
                foreach (var child in children)
                {
                    child.BoundsChanged -= HandleChildrenBoundsChanged;
                }
                break;
            }

            case PropertyChangeKind.Set: {
                var oldChild = e.OldValue as IFigure;
                var newChild = e.NewValue as IFigure;
                oldChild.BoundsChanged -= HandleChildrenBoundsChanged;
                newChild.BoundsChanged += HandleChildrenBoundsChanged;
                break;
            }

            default: {
                throw new ArgumentException("kind");
            }
            }
            DirtyBoundsCache(null);
            base.OnChildrenChanged(e);
        }
예제 #15
0
 protected virtual void OnParentChanged(DetailedPropertyChangedEventArgs e)
 {
 }
예제 #16
0
 // ========================================
 // constructor
 // ========================================
 public MemoFolderChangedEventArgs(MemoFolder folder, DetailedPropertyChangedEventArgs cause)
     : base(folder)
 {
     _cause = cause;
 }
예제 #17
0
 // ========================================
 // constructor
 // ========================================
 public MemoTagChangedEventArgs(MemoTag tag, DetailedPropertyChangedEventArgs cause)
     : base(tag)
 {
     _cause = cause;
 }
예제 #18
0
 // ========================================
 // constructor
 // ========================================
 public MemoSmartFolderChangedEventArgs(MemoSmartFolder smartFolder, DetailedPropertyChangedEventArgs cause)
     : base(smartFolder)
 {
     _cause = cause;
 }
예제 #19
0
 private void HandleSmartFolderPropChanged(object sender, DetailedPropertyChangedEventArgs e)
 {
     OnMemoSmartFolderChanged(sender as MemoSmartFolder, e);
 }
예제 #20
0
 private void HandleTagPropChanged(object sender, DetailedPropertyChangedEventArgs e)
 {
     OnMemoTagChanged(sender as MemoTag, e);
 }
예제 #21
0
 // --- event handler ---
 protected virtual void HandleChildrenDescendantChanged(object sender, DetailedPropertyChangedEventArgs e)
 {
     OnDescendantChanged(e);
 }
예제 #22
0
        protected virtual void OnChildrenChanged(DetailedPropertyChangedEventArgs e)
        {
            using (DirtManager.BeginDirty()) {
                switch (e.Kind)
                {
                case PropertyChangeKind.Add: {
                    var child = e.NewValue as IFigure;
                    child.DescendantChanged += HandleChildrenDescendantChanged;
                    child.InvalidatePaint();
                    child.InvalidateLayout();
                    break;
                }

                case PropertyChangeKind.Remove: {
                    var child = e.OldValue as IFigure;
                    if (_layoutConstraints != null && _layoutConstraints.ContainsKey(child))
                    {
                        _layoutConstraints.Remove(child);
                    }
                    child.DescendantChanged -= HandleChildrenDescendantChanged;
                    InvalidatePaint();
                    break;
                }

                case PropertyChangeKind.Clear: {
                    var children = e.OldValue as IFigure[];
                    if (_layoutConstraints != null)
                    {
                        _layoutConstraints.Clear();
                    }
                    foreach (var child in children)
                    {
                        child.DescendantChanged -= HandleChildrenDescendantChanged;
                    }
                    InvalidatePaint();
                    break;
                }

                case PropertyChangeKind.Set: {
                    var oldChild = e.OldValue as IFigure;
                    var newChild = e.NewValue as IFigure;
                    if (_layoutConstraints != null && _layoutConstraints.ContainsKey(oldChild))
                    {
                        _layoutConstraints.Remove(oldChild);
                    }
                    oldChild.DescendantChanged -= HandleChildrenDescendantChanged;
                    newChild.DescendantChanged += HandleChildrenDescendantChanged;
                    oldChild.InvalidatePaint();
                    newChild.InvalidatePaint();
                    newChild.InvalidateLayout();
                    break;
                }

                default: {
                    throw new ArgumentException("kind");
                }
                }

                InvalidateLayout();

                var handler = ChildrenChanged;
                if (handler != null)
                {
                    handler(this, e);
                }

                OnDescendantChanged(e);
            }
        }
예제 #23
0
 private void HandleFigureEdgePointsChanged(object sender, DetailedPropertyChangedEventArgs e)
 {
     OnFigureEdgePointsChanged(e);
 }
예제 #24
0
 protected override void OnChildrenChanged(DetailedPropertyChangedEventArgs e)
 {
     base.OnChildrenChanged(e);
     _dug = null;
 }