コード例 #1
0
        internal void DeleteDiagramAndLines()
        {
            if (DepartureLines != null && DepartureLines.Any())
            {
                foreach (var dline in DepartureLines)
                {
                    dline.TerminalDiagram.ArrivalLines.Remove(dline);

                    WPFUtility.FindVisualParent <Canvas>(dline).Children.Remove(dline);
                }
            }

            if (ArrivalLines != null && ArrivalLines.Any())
            {
                foreach (var aline in ArrivalLines)
                {
                    aline.OriginDiagram.DepartureLines.Remove(aline);

                    WPFUtility.FindVisualParent <Canvas>(aline).Children.Remove(aline);
                }
            }

            this.ArrivalLines.Clear();
            this.DepartureLines.Clear();

            WPFUtility.FindVisualParent <Canvas>(this).Children.Remove(this);
        }
コード例 #2
0
        public DrawLineAdorner(UIElement element, double opacity, Point point) : base(element)
        {
            _startPoint = point;
            _line       = new Line()
            {
                Stroke          = (SolidColorBrush)Application.Current.Resources["AdornerLineBrush"],
                StrokeThickness = 2,
                StrokeDashArray = new DoubleCollection(new double[] { 1, 1, 1, 1, }), //破線のスタイル
                X1 = point.X,
                Y1 = point.Y,
                X2 = point.X,
                Y2 = point.Y,
            };


            _move = (Vector)Window.GetWindow(element).PointFromScreen(element.PointToScreen(point));
            _move.Negate();

            AdornerLayer adorner = AdornerLayer.GetAdornerLayer((Visual)WPFUtility.FindVisualParent <Window>(this.AdornedElement).Content);

            if (adorner != null)
            {
                adorner.Add(this);
            }
        }
コード例 #3
0
        public DraggingAdorner(UIElement element, double opacity, Point point) : base(element)
        {
            Rect bounds = VisualTreeHelper.GetDescendantBounds(element);

            _ghost = new Rectangle()
            {
                Height = bounds.Height,
                Width  = bounds.Width,
                Fill   = new VisualBrush(element)
                {
                    Opacity = opacity
                }
            };

            CenterPoint = point;

            _move = (Vector)Window.GetWindow(element).PointFromScreen(element.PointToScreen(point));
            _move.Negate();

            AdornerLayer adorner = AdornerLayer.GetAdornerLayer((Visual)WPFUtility.FindVisualParent <Window>(this.AdornedElement).Content);

            if (adorner != null)
            {
                adorner.Add(this);
            }
        }
コード例 #4
0
        private void AssociatedObject_MouseMove(object sender, MouseEventArgs e)
        {
            UIElement element = sender as UIElement;

            if (e.LeftButton == MouseButtonState.Released)
            {
                element.SetValue(StartPointProperty, null);
            }
            if (element.GetValue(StartPointProperty) == null)
            {
                return;
            }

            Point startPoint = (Point)element.GetValue(StartPointProperty);
            Point point      = e.GetPosition(element as UIElement);

            if (!WPFUtility.IsDragging(startPoint, point))
            {
                return;
            }


            DraggingAdorner adorner = new DraggingAdorner(element, 0.5, point);

            SetDragAdorner(element, adorner);

            DataObject data = new DataObject();

            //set the adorner for drop action and create the clone element.
            data.SetData(typeof(DraggingAdorner), adorner);
            data.SetData(typeof(UIElement), element);

            ICommand dragcommand = GetDragCommand(element);

            //cann't drag without command
            if (dragcommand != null)
            {
                object parameter = GetDragCommandParameter(element); // ?? this.AssociatedObject.DataContext;

                if (parameter != null)
                {
                    data.SetData(DataFormats.Serializable, parameter);
                }

                if (dragcommand.CanExecute(parameter))
                {
                    dragcommand.Execute(parameter);
                    DragDrop.DoDragDrop(element, data, DragDropEffects.Copy | DragDropEffects.Move);
                }
            }

            adorner.Remove();

            SetDragAdorner(element, null);
        }
コード例 #5
0
        private void AssociatedObject_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
        {
            UIElement       element = sender as UIElement;
            DraggingAdorner adorner = GetDragAdorner(element);
            Point           point   = WPFUtility.GetMousePosition(element);

            if (adorner != null)
            {
                adorner.Position = point;
            }
        }
コード例 #6
0
        internal void DeleteLine()
        {
            if (OriginDiagram != null && OriginDiagram.DepartureLines.Any())
            {
                OriginDiagram.DepartureLines.Remove(this);
            }

            if (TerminalDiagram != null && TerminalDiagram.ArrivalLines.Any())
            {
                TerminalDiagram.ArrivalLines.Remove(this);
            }

            WPFUtility.FindVisualParent <Canvas>(this).Children.Remove(this);
        }
コード例 #7
0
        private ConnectionDiagramBase GetSenderDiagram(object sender)
        {
            ConnectionDiagramBase element = null;

            if (!(sender is ConnectionDiagramBase))
            {
                element = WPFUtility.FindVisualParent <ConnectionDiagramBase>(sender as UIElement);
            }
            else
            {
                element = sender as ConnectionDiagramBase;
            }
            return(element);
        }
コード例 #8
0
        private void AssociatedObject_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
        {
            var element = GetSenderDiagram(sender) ?? sender as UIElement;

            if (element == null)
            {
                return;
            }

            DrawLineAdorner adorner = GetDraggingLineAdorner(element);
            Point           point   = WPFUtility.GetMousePosition(element);

            if (adorner != null)
            {
                adorner.Position = point;
            }
        }
コード例 #9
0
ファイル: SheetTabControl.cs プロジェクト: waconline/ReoGrid
        public void InsertTab(int index, string title)
        {
            var tab = new SheetTabItem(this, title)
            {
                Height = this.canvas.Height,
            };

            this.canvas.Width += tab.Width + 1;
            this.canvas.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(tab.Width + 1)
            });

            this.canvas.Children.Add(tab);

            Grid.SetColumn(tab, index);

            tab.MouseDown += (s, e) =>
            {
                var arg = new SheetTabMouseEventArgs()
                {
                    Handled      = false,
                    Location     = e.GetPosition(this),
                    Index        = index,
                    MouseButtons = WPFUtility.ConvertToUIMouseButtons(e),
                };

                if (this.TabMouseDown != null)
                {
                    this.TabMouseDown(this, arg);
                }

                if (!arg.Handled)
                {
                    this.SelectedIndex = index;
                }
            };

            if (this.canvas.Children.Count == 1)
            {
                tab.IsSelected = true;
            }
        }
コード例 #10
0
        private void Tab_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            var index = this.canvas.Children.IndexOf((UIElement)sender);

            var arg = new SheetTabMouseEventArgs()
            {
                Handled      = false,
                Location     = e.GetPosition(this),
                Index        = index,
                MouseButtons = WPFUtility.ConvertToUIMouseButtons(e),
            };

            if (this.TabMouseDown != null)
            {
                this.TabMouseDown(this, arg);
            }

            if (!arg.Handled)
            {
                this.SelectedIndex = index;
            }
        }
コード例 #11
0
        private void AssociatedObject_Drop(object sender, DragEventArgs e)
        {
            //if the data type can be dropped
            if (e.Data.GetDataPresent(typeof(DraggingAdorner)))
            {
                UIElement element = sender as FrameworkElement;

                ICommand dropcommand = GetDropCommand(element);

                if (dropcommand != null)
                {
                    object parameter = GetDropCommandParameter(element);

                    //if (this.AssociatedObject.DataContext is IDragged)
                    //{
                    //    (this.AssociatedObject.DataContext as IDragged).DraggedDataContext = (e.Data.GetDataPresent(DataFormats.Serializable) ? e.Data.GetData(DataFormats.Serializable) : null);
                    //}
                    SetDraggedDataContext(this.AssociatedObject, (e.Data.GetDataPresent(DataFormats.Serializable) ? e.Data.GetData(DataFormats.Serializable) : null));

                    if (dropcommand.CanExecute(parameter))
                    {
                        Point point = e.GetPosition(element);

                        //it is will be to DroopedCanvas is not exist
                        Canvas droppedcanvas = GetDroppedCanvas(element);

                        UIElement dragelement = e.Data.GetDataPresent(typeof(UIElement)) ? e.Data.GetData(typeof(UIElement)) as UIElement : null;

                        Type droppedcontroltype = dragelement != null?GetDroppedControlType(dragelement) : null;

                        if (droppedcontroltype != null && !WPFUtility.IsCorrectType(droppedcontroltype, typeof(ContentControl)))
                        {
                            throw new ArgumentException("DroppedControlType is base on ContentControl.");
                        }

                        if (e.Data.GetDataPresent(typeof(DraggingAdorner)))
                        {
                            var adn = e.Data.GetData(typeof(DraggingAdorner)) as DraggingAdorner;

                            UIElement clnele = null;

                            bool iscopy = false;

                            if (droppedcontroltype != null)
                            {
                                //TODO: Copy Control or create new control
                                if (GetIsDuplication(dragelement))
                                {
                                    clnele = CreateNewContentControl(droppedcontroltype, adn.GetGhostElement() as UIElement);
                                }
                                else
                                {
                                    clnele = Activator.CreateInstance(droppedcontroltype) as UIElement;
                                }
                                iscopy = true;
                            }
                            else
                            {
                                clnele = dragelement;
                            }


                            //add the clone element
                            if (clnele != null)
                            {
                                Point canvaspoint = (Point)(point - adn.CenterPoint);

                                Point oldpoint = new Point(Canvas.GetLeft(dragelement), Canvas.GetTop(dragelement));

                                SetConnectionLinePosition(clnele as ConnectionDiagramBase, (Point)(canvaspoint - oldpoint));


                                Canvas.SetLeft(clnele, canvaspoint.X);
                                Canvas.SetTop(clnele, canvaspoint.Y);

                                var duuid = $"{clnele.GetType().Name}_{Guid.NewGuid().ToString()}";
                                if (clnele is ConnectionDiagramBase)
                                {
                                    (clnele as ConnectionDiagramBase).DiagramUUID = duuid;
                                }
                                else
                                {
                                    FrameworkElementAssist.SetDiagramUUID(clnele, duuid);
                                }

                                if (iscopy)
                                {
                                    if (droppedcanvas != null)
                                    {
                                        droppedcanvas.Children.Add(clnele);
                                    }
                                }
                                else
                                {
                                    //???
                                }

                                if (parameter != null)
                                {
                                    dropcommand.Execute(parameter);
                                }
                                else
                                {
                                    dropcommand.Execute((clnele as ContentControl)?.DataContext);
                                }
                            }
                        }

                        //  }
                    }

                    SetDraggedDataContext(this.AssociatedObject, null);

                    //if (this.AssociatedObject.DataContext is IDragged)
                    //{
                    //    (this.AssociatedObject.DataContext as IDragged).DraggedDataContext = null;
                    //}
                }
            }


            if (this._adorner != null)
            {
                this._adorner.Remove();
            }


            e.Handled = true;
            return;
        }
コード例 #12
0
        private void AssociatedObject_Drop(object sender, DragEventArgs e)
        {
            if (_dataType != null)
            {
                //if the data type can be dropped
                if (e.Data.GetDataPresent(_dataType))
                {
                    FrameworkElement element = sender as FrameworkElement;

                    ICommand dropcommand = GetDropLineCommand(element);

                    if (dropcommand != null)
                    {
                        object parameter = GetDropLineCommandParameter(element);



                        Point point = e.GetPosition(element);

                        var   adn      = e.Data.GetData(_dataType) as DrawLineAdorner;
                        Point adnPoint = adn.Position;

                        Canvas droppedcanvas = GetDroppedLineCanvas(element);

                        var originelement = (e.Data.GetData(typeof(UIElement)) as FrameworkElement);

                        //the object for ConnectionDiagram
                        ConnectionDiagramBase origindiagram   = originelement as ConnectionDiagramBase;
                        ConnectionDiagramBase terminaldiagram = element as ConnectionDiagramBase;

                        SetDraggedDataContext(this.AssociatedObject, e.Data.GetData(DataFormats.Serializable));

                        if (droppedcanvas != null)
                        {
                            double x1, y1, x2, y2 = 0.0;

                            if (ConnectorPositionType.Custom.Equals(origindiagram?.ConnectorPositionType))
                            {
                                //the Ghost line position
                                x1 = adn.GetLineStartEndPosition().Item1;
                                y1 = adn.GetLineStartEndPosition().Item2;
                            }
                            else
                            {
                                x1 = WPFUtility.GetCenterPosition(originelement, droppedcanvas).X;
                                y1 = WPFUtility.GetCenterPosition(originelement, droppedcanvas).Y;
                            }

                            if (ConnectorPositionType.Custom.Equals(terminaldiagram?.ConnectorPositionType))
                            {
                                //the Ghost line position
                                x2 = adn.GetLineStartEndPosition().Item3;
                                y2 = adn.GetLineStartEndPosition().Item4;
                            }
                            else
                            {
                                x2 = WPFUtility.GetCenterPosition(element, droppedcanvas).X;
                                y2 = WPFUtility.GetCenterPosition(element, droppedcanvas).Y;
                            }

                            //the line type of custom
                            Type linetype = GetDropLineControlType(element);

                            if (!WPFUtility.IsCorrectType(linetype, typeof(ConnectionLineBase)))
                            {
                                throw new ArgumentException($"DropLineControlType is base on {nameof(ConnectionLineBase)}.");
                            }

                            dynamic conline;

                            if (!typeof(DrawLineThump).Equals(linetype))
                            {
                                conline = Activator.CreateInstance(linetype);

                                if (conline is ConnectionLineBase)
                                {
                                    //if inherit from ILinePosition
                                    if (conline is ILinePosition)
                                    {
                                        (conline as ILinePosition).X1 = x1;
                                        (conline as ILinePosition).Y1 = y1;
                                        (conline as ILinePosition).X2 = x2;
                                        (conline as ILinePosition).Y2 = y2;
                                    }
                                }
                            }
                            else
                            {
                                conline = new Line()
                                {
                                    X1 = x1,
                                    Y1 = y1,
                                    X2 = x2,
                                    Y2 = y2,
                                };
                            }

                            FrameworkElementAssist.SetOriginDiagram(conline, originelement);
                            FrameworkElementAssist.SetTerminalDiagram(conline, element);


                            //set the parameter
                            //var dropparam = parameter ?? conline.DataContext;
                            string lineuuid = $"{conline.GetType().Name}_{Guid.NewGuid().ToString()}";

                            if (dropcommand.CanExecute(parameter))
                            {
                                Canvas.SetTop(conline, 0);
                                Canvas.SetLeft(conline, 0);

                                //add the relation of the diagram
                                if (origindiagram != null)
                                {
                                    origindiagram.DepartureLines.Add(conline);
                                }
                                if (terminaldiagram != null)
                                {
                                    terminaldiagram.ArrivalLines.Add(conline);
                                }

                                //TODO:FrameworkElement????
                                if (droppedcanvas != null)
                                {
                                    droppedcanvas.Children.Add(conline);
                                }


                                //Set the Dropping Line DataContext
                                SetDroppingDataContext(this.AssociatedObject, conline.DataContext);

                                dropcommand.Execute(parameter);

                                if (conline is ConnectionLineBase)
                                {
                                    (conline as ConnectionLineBase).LineUUID = lineuuid;
                                }
                                else if (conline is Line)
                                {
                                    FrameworkElementAssist.SetLineUUID(conline, lineuuid);
                                }
                            }
                        }
                        else
                        {
                            dropcommand.Execute(parameter);
                        }
                    }
                }
            }

            if (this._adorner != null)
            {
                this._adorner.Remove();
            }


            e.Handled = true;
            return;
        }
コード例 #13
0
 public object GetGhostElement()
 {
     //return (_ghost?.Fill as VisualBrush).Visual as UIElement;
     return(WPFUtility.GetUIElementSimpleClone((_ghost?.Fill as VisualBrush).Visual as UIElement));
 }
コード例 #14
0
        private void AssociatedObject_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Released)
            {
                return;
            }

            //use the connection object base on ConnectionDiagramBase
            var element = GetSenderDiagram(sender) ?? sender as UIElement;

            if (element == null)
            {
                return;
            }

            Point point = e.GetPosition(element as UIElement);


            Point startPoint = (element as ConnectionDiagramBase)?.CenterPosition ?? new Point(0, 0);

            //change the draw line center position
            int centerradius = (element as ConnectionDiagramBase)?.CenterPositionRadius ?? 0;

            if (!WPFUtility.IsCenterDragging(startPoint, point, centerradius))
            {
                return;
            }

            if (!WPFUtility.IsDragging(startPoint, point))
            {
                return;
            }

            DrawLineAdorner adorner = new DrawLineAdorner(element, 0.7, point);

            SetDraggingLineAdorner(element, adorner);

            DataObject data = new DataObject();

            //set the adorner for drop action and create the clone element.
            data.SetData(typeof(UIElement), element);
            data.SetData(typeof(DrawLineAdorner), adorner);

            ICommand dragcommand = GetDragLineCommand(element);

            //cann't drag without command
            if (dragcommand != null)
            {
                object parameter = GetDragLineCommandParameter(element); //?? this.AssociatedObject.DataContext;

                if (parameter != null)
                {
                    data.SetData(DataFormats.Serializable, parameter);
                }

                if (dragcommand.CanExecute(parameter))
                {
                    dragcommand.Execute(parameter);
                    DragDrop.DoDragDrop(element, data, DragDropEffects.Copy | DragDropEffects.Move);
                }
            }

            adorner.Remove();

            SetDraggingLineAdorner(element, null);
        }