Exemplo n.º 1
0
        protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
        {
            base.OnPreviewMouseDown(e);
            DesignerCanvas             designer     = VisualItemHelper.VisualUpwardSearch <DesignerCanvas>(this) as DesignerCanvas;
            IDiagramWorkspaceViewModel designerView = null;

            if (designer != null)
            {
                // update selection
                designerView = designer.DataContext as IDiagramWorkspaceViewModel;
                if ((Keyboard.Modifiers & (ModifierKeys.Shift | ModifierKeys.Control)) != ModifierKeys.None)
                {
                    if (this.IsSelected)
                    {
                        this.IsSelected = false;
                    }
                    else
                    {
                        this.IsSelected = true;
                    }
                }
                else if (!this.IsSelected)
                {
                    if (designerView != null)
                    {
                        designerView.ClearSelectedItems();
                    }
                    this.IsSelected = true;
                }
            }
            e.Handled = false;
        }
        private void UpdateSelection()
        {
            IDiagramWorkspaceViewModel designerView = designerCanvas.DataContext as IDiagramWorkspaceViewModel;

            if (designerView != null)
            {
                Rect rubberBand = new Rect(startPoint.Value, endPoint.Value);
                foreach (IDiagramWorkspaceViewModel item in designerView.Items)
                {
                    Control itemControl = VisualItemHelper.FindChild <DesignerItem>(designerCanvas, item) as Control;
                    // TODO: selecting connections creates issues
                    //if (itemControl == null)
                    //{
                    //    itemControl = VisualItemHelper.FindChild<Connection>(designerCanvas, item) as Control;
                    //}
                    if (itemControl != null)
                    {
                        Rect itemRect   = VisualTreeHelper.GetDescendantBounds(itemControl);
                        Rect itemBounds = itemControl.TransformToAncestor(designerCanvas).TransformBounds(itemRect);

                        if (rubberBand.Contains(itemBounds))
                        {
                            item.IsSelected = true;
                        }
                        else
                        {
                            item.IsSelected = false;
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        void Connection_Unloaded(object sender, RoutedEventArgs e)
        {
            // do some housekeeping when Connection is unloaded

            // remove event handler
            if (source != null)
            {
                source.PropertyChanged -= new PropertyChangedEventHandler(OnConnectorPositionChanged);
            }
            if (sink != null)
            {
                sink.PropertyChanged -= new PropertyChangedEventHandler(OnConnectorPositionChanged);
            }

            // remove adorner
            if (this.connectionAdorner != null)
            {
                DesignerCanvas designer = VisualItemHelper.VisualUpwardSearch <DesignerCanvas>(this) as DesignerCanvas;
                if (designer != null)
                {
                    AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(designer);
                    if (adornerLayer != null)
                    {
                        adornerLayer.Remove(this.connectionAdorner);
                        this.connectionAdorner = null;
                    }
                }
            }
        }
Exemplo n.º 4
0
        void DragThumb_DragCompleted(object sender, DragCompletedEventArgs e)
        {
            DesignerItem designerItem = VisualItemHelper.VisualUpwardSearch <DesignerItem>(this) as DesignerItem;

            if (designerItem != null)
            {
                EntityDiagramControl entityControl = VisualItemHelper.FindChild <EntityDiagramControl>(designerItem);
                if (entityControl != null)
                {
                    entityControl.UpdateConnections();
                }
            }
        }
Exemplo n.º 5
0
 protected override void OnMouseDown(System.Windows.Input.MouseButtonEventArgs e)
 {
     base.OnMouseDown(e);
     if (DataContext is IWorkspaceViewModel)
     {
         (DataContext as IWorkspaceViewModel).SetSelected();
         DesignerItem control = VisualItemHelper.VisualUpwardSearch <DesignerItem>(this) as DesignerItem;
         if (control != null)
         {
             control.Focus();
         }
     }
 }
Exemplo n.º 6
0
        private void ShowAdorner()
        {
            // the ConnectionAdorner is created once for each Connection
            if (this.connectionAdorner == null)
            {
                DesignerCanvas designer = VisualItemHelper.VisualUpwardSearch <DesignerCanvas>(this) as DesignerCanvas;

                AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(designer);
                if (adornerLayer != null)
                {
                    this.connectionAdorner = new ConnectionAdorner(designer, this);
                    adornerLayer.Add(this.connectionAdorner);
                }
            }
            this.connectionAdorner.Visibility = Visibility.Visible;
        }
Exemplo n.º 7
0
        public void UpdateSourceAndSink()
        {
            DiagramRelationshipViewModel view = DataContext as DiagramRelationshipViewModel;

            if (view != null)
            {
                DesignerCanvas       designer      = VisualItemHelper.VisualUpwardSearch <DesignerCanvas>(this) as DesignerCanvas;
                EntityDiagramControl sourceControl = VisualItemHelper.FindChild <EntityDiagramControl>(designer, view.SourceDiagramEntityViewModel) as EntityDiagramControl;
                EntityDiagramControl sinkControl   = VisualItemHelper.FindChild <EntityDiagramControl>(designer, view.SinkDiagramEntityViewModel) as EntityDiagramControl;
                if (sourceControl != null && sinkControl != null)
                {
                    Source = sourceControl.GetBestConnector(sinkControl, false);
                    Sink   = sinkControl.GetBestConnector(sourceControl, true);
                }
            }
        }
Exemplo n.º 8
0
        private static DataGrid GetParentDatagrid(UIElement element)
        {
            UIElement childElement;             //element from which to start the tree navigation, looking for a Datagrid parent

            if (element is ComboBoxItem)        //since ComboBoxItem.Parent is null, we must pass through ItemsPresenter in order to get the parent ComboBox
            {
                ItemsPresenter parentItemsPresenter = VisualItemHelper.FindParent <ItemsPresenter>((element as ComboBoxItem));
                ComboBox       combobox             = parentItemsPresenter.TemplatedParent as ComboBox;
                childElement = combobox;
            }
            else
            {
                childElement = element;
            }

            DataGrid parentDatagrid = VisualItemHelper.FindParent <DataGrid>(childElement);            //let's see if the new focused element is inside a datagrid

            return(parentDatagrid);
        }
Exemplo n.º 9
0
        private static void CalculateDragLimits(DesignerCanvas designer, IEnumerable <IDiagramWorkspaceViewModel> selectedDesignerItems, out double minLeft, out double minTop, out double minDeltaHorizontal, out double minDeltaVertical)
        {
            minLeft            = double.MaxValue;
            minTop             = double.MaxValue;
            minDeltaHorizontal = double.MaxValue;
            minDeltaVertical   = double.MaxValue;

            // drag limits are set by these parameters: canvas top, canvas left, minHeight, minWidth
            // calculate min value for each parameter for each item
            foreach (IDiagramWorkspaceViewModel item in selectedDesignerItems)
            {
                DesignerItem itemControl = VisualItemHelper.FindChild <DesignerItem>(designer, item) as DesignerItem;
                if (itemControl != null)
                {
                    minLeft = double.IsNaN(item.X) ? 0 : Math.Min(item.X, minLeft);
                    minTop  = double.IsNaN(item.Y) ? 0 : Math.Min(item.Y, minTop);

                    minDeltaVertical   = Math.Min(minDeltaVertical, itemControl.ActualHeight - itemControl.MinHeight);
                    minDeltaHorizontal = Math.Min(minDeltaHorizontal, itemControl.ActualWidth - itemControl.MinWidth);
                }
            }
        }
Exemplo n.º 10
0
        void DragThumb_DragDelta(object sender, DragDeltaEventArgs e)
        {
            DesignerItem   designerItem = VisualItemHelper.VisualUpwardSearch <DesignerItem>(this) as DesignerItem;
            DesignerCanvas designer     = VisualItemHelper.VisualUpwardSearch <DesignerCanvas>(designerItem) as DesignerCanvas;

            if (designerItem != null && designer != null && designerItem.IsSelected)
            {
                IDiagramWorkspaceViewModel designerView = designer.DataContext as IDiagramWorkspaceViewModel;
                if (designerView != null)
                {
                    double minLeft = double.MaxValue;
                    double minTop  = double.MaxValue;

                    foreach (IDiagramWorkspaceViewModel item in designerView.SelectedItems.OfType <IDiagramEntityWorkspaceViewModel>())
                    {
                        minLeft = double.IsNaN(item.X) ? 0 : Math.Min(item.X, minLeft);
                        minTop  = double.IsNaN(item.Y) ? 0 : Math.Min(item.Y, minTop);
                    }

                    double deltaHorizontal = Math.Max(-minLeft, e.HorizontalChange);
                    double deltaVertical   = Math.Max(-minTop, e.VerticalChange);

                    // move diagram entities (TODO: handle arcs later or a separate view model interface for arcs)
                    foreach (IDiagramEntityWorkspaceViewModel item in designerView.SelectedItems.OfType <IDiagramEntityWorkspaceViewModel>())
                    {
                        item.X += deltaHorizontal;
                        item.Y += deltaVertical;
                        if (item.ZIndex < designerView.ZIndex)
                        {
                            item.ZIndex = ++designerView.ZIndex;
                        }
                    }

                    designer.InvalidateMeasure();
                    e.Handled = true;
                }
            }
        }
Exemplo n.º 11
0
        void ResizeThumb_DragDelta(object sender, DragDeltaEventArgs e)
        {
            DesignerItem   designerItem = VisualItemHelper.VisualUpwardSearch <DesignerItem>(this) as DesignerItem;
            DesignerCanvas designer     = VisualItemHelper.VisualUpwardSearch <DesignerCanvas>(designerItem) as DesignerCanvas;

            if (designerItem != null && designer != null && designerItem.IsSelected)
            {
                IDiagramWorkspaceViewModel designerView = designer.DataContext as IDiagramWorkspaceViewModel;
                if (designerView != null)
                {
                    double minLeft, minTop, minDeltaHorizontal, minDeltaVertical;
                    double dragDeltaVertical, dragDeltaHorizontal;

                    CalculateDragLimits(designer, designerView.SelectedItems.OfType <DiagramEntityViewModel>(), out minLeft, out minTop,
                                        out minDeltaHorizontal, out minDeltaVertical);

                    // resize diagram entities (TODO: handle arcs later or a separate view model interface for arcs)
                    foreach (IDiagramEntityWorkspaceViewModel item in designerView.SelectedItems.OfType <IDiagramEntityWorkspaceViewModel>())
                    {
                        DesignerItem itemControl = VisualItemHelper.FindChild <DesignerItem>(designer, item) as DesignerItem;
                        if (itemControl != null)
                        {
                            switch (base.VerticalAlignment)
                            {
                            case VerticalAlignment.Bottom:
                                dragDeltaVertical = Math.Min(-e.VerticalChange, minDeltaVertical);
                                item.Height       = Math.Max(MinHeight, itemControl.ActualHeight - dragDeltaVertical);
                                break;

                            case VerticalAlignment.Top:
                                dragDeltaVertical = Math.Min(Math.Max(-minTop, e.VerticalChange), minDeltaVertical);
                                item.Y           += dragDeltaVertical;
                                item.Height       = Math.Max(MinHeight, itemControl.ActualHeight - dragDeltaVertical);
                                break;

                            default:
                                break;
                            }

                            switch (base.HorizontalAlignment)
                            {
                            case HorizontalAlignment.Left:
                                dragDeltaHorizontal = Math.Min(Math.Max(-minLeft, e.HorizontalChange), minDeltaHorizontal);
                                item.X    += dragDeltaHorizontal;
                                item.Width = Math.Max(MinWidth, itemControl.ActualWidth - dragDeltaHorizontal);
                                break;

                            case HorizontalAlignment.Right:
                                dragDeltaHorizontal = Math.Min(-e.HorizontalChange, minDeltaHorizontal);
                                item.Width          = Math.Max(MinWidth, itemControl.ActualWidth - dragDeltaHorizontal);
                                break;

                            default:
                                break;
                            }
                        }
                    }
                    e.Handled = true;
                }
            }
        }