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; } } } } }
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; } } } }
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(); } } }
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(); } } }
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; }
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); } } }
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); }
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); } } }
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; } } }
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; } } }