private PointF Location(DesignerItem element) { float x = (float)DesignerCanvas.GetLeft(element); float y = (float)DesignerCanvas.GetTop(element); return(new PointF(x, y)); }
internal ConnectorInfo GetInfo() { ConnectorInfo info = new ConnectorInfo(); info.DesignerItemLeft = DesignerCanvas.GetLeft(this.ParentDesignerItem); info.DesignerItemTop = DesignerCanvas.GetTop(this.ParentDesignerItem); info.DesignerItemSize = new Size(this.ParentDesignerItem.ActualWidth, this.ParentDesignerItem.ActualHeight); info.Orientation = this.Orientation; info.Position = this.Position; return(info); }
/// <summary> /// Dragging /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnDragDelta(object sender, DragDeltaEventArgs e) { if (_item != null && _canvas != null && _item.IsSelected) { double maxDeltaVertical = _canvas.ActualHeight - (DesignerCanvas.GetTop(_item) + _item.ActualHeight); double maxDeltaHorizontal = _canvas.ActualWidth - (DesignerCanvas.GetLeft(_item) + _item.ActualWidth); var minDeltaVertical = _item.ActualHeight - _item.MinHeight; var minDeltaHorizontal = _item.ActualWidth - _item.MinWidth; double deltaVertical; switch (VerticalAlignment) { case VerticalAlignment.Bottom: deltaVertical = e.VerticalChange > 0 && e.VerticalChange >= maxDeltaVertical ? 0 : Math.Min(-e.VerticalChange, minDeltaVertical); _item.Height = _item.ActualHeight - (int)deltaVertical; _item.ViewModel.Height = _item.Height; break; case VerticalAlignment.Top: deltaVertical = (int)Math.Min(Math.Max(-DesignerCanvas.GetTop(_item), e.VerticalChange), minDeltaVertical); var topPos = DesignerCanvas.GetTop(_item) + deltaVertical; DesignerCanvas.SetTop(_item, topPos); _item.Height = _item.ActualHeight - deltaVertical; _item.ViewModel.Height = _item.Height; _item.ViewModel.Top = topPos; break; } double deltaHorizontal; switch (HorizontalAlignment) { case HorizontalAlignment.Left: deltaHorizontal = (int)Math.Min(Math.Max(-DesignerCanvas.GetLeft(_item), e.HorizontalChange), minDeltaHorizontal); var leftPos = DesignerCanvas.GetLeft(_item) + deltaHorizontal; DesignerCanvas.SetLeft(_item, leftPos); _item.Width = _item.ActualWidth - deltaHorizontal; _item.ViewModel.Width = _item.Width; _item.ViewModel.Left = leftPos; break; case HorizontalAlignment.Right: deltaHorizontal = e.HorizontalChange > 0 && e.HorizontalChange >= maxDeltaHorizontal ? 0 : (int)Math.Min(-e.HorizontalChange, minDeltaHorizontal); _item.Width = _item.ActualWidth - deltaHorizontal; _item.ViewModel.Width = _item.Width; break; } } }
private void CenterPointThumb_DragDelta(object sender, DragDeltaEventArgs e) { Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange); if (this.designerItem != null && this._parent != null) { if (this._transform != null) { dragDelta = _transform.Transform(dragDelta); } DesignerCanvas.SetLeft(this, DesignerCanvas.GetLeft(this) + dragDelta.X); DesignerCanvas.SetTop(this, DesignerCanvas.GetTop(this) + dragDelta.Y); e.Handled = true; } }
/// <summary> /// Dragging /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnDragDelta(object sender, DragDeltaEventArgs e) { if (_item != null && _canvas != null && _item.IsSelected) { double minLeft = double.MaxValue; double minTop = double.MaxValue; double maxTop = double.MinValue; double maxLeft = double.MinValue; LabelContent[] selected = _canvas.SelectedLabels.ToArray(); foreach (LabelContent item in selected) { minLeft = Math.Min(DesignerCanvas.GetLeft(item), minLeft); minTop = Math.Min(DesignerCanvas.GetTop(item), minTop); maxLeft = Math.Max(DesignerCanvas.GetLeft(item) + item.ActualWidth, maxLeft); maxTop = Math.Max(DesignerCanvas.GetTop(item) + item.ActualHeight, maxTop); } double deltaHorizontal = (int)Math.Max(-minLeft, e.HorizontalChange); double deltaVertical = (int)Math.Max(-minTop, e.VerticalChange); if (deltaHorizontal + maxLeft > _canvas.ActualWidth) { deltaHorizontal = 0; } if (deltaVertical + maxTop > _canvas.ActualHeight) { deltaVertical = 0; } foreach (LabelContent item in selected) { var leftPos = DesignerCanvas.GetLeft(item) + deltaHorizontal; var topPos = DesignerCanvas.GetTop(item) + deltaVertical; DesignerCanvas.SetLeft(item, leftPos); DesignerCanvas.SetTop(item, topPos); item.ViewModel.Left = leftPos; item.ViewModel.Top = topPos; } e.Handled = true; } }
protected override void ReadHeader(TileLoadInfo info) { info.OriginalPixelsPerMicron = 1.0; info.OverLapPercentageX = 0.0; info.OverLapPercentageY = 0.0; this.arranger = new ImageCollectionArrangerForm(); TextStringDialog nameDialog = new TextStringDialog(); nameDialog.Text = "Mosaic Name"; nameDialog.Description = "Please enter a name for this Mosaic."; nameDialog.ShowDialog(); this.dataSetName = nameDialog.TextString; info.Prefix = this.dataSetName; if (String.IsNullOrEmpty(this.dataSetName)) { MessageBox.Show("Invalid Dataset name", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } Tile.IsCompositeRGB = false; Tile.ThumbnailHeight = 0; // reset this so image aspect is correct //this.imageCollectionThreadController = new ThreadController(this.arranger); try { DisplayThumbnails(); } catch (Exception e) { throw; } this.arranger.ShowDialog(); List <DesignerItem> items = this.arranger.GetItemPositionsSortedFromMostTopLeft(); float x, y, top, left; Point position; FreeImageAlgorithmsWPFImage wpfImage; wpfImage = items[0].Content as FreeImageAlgorithmsWPFImage; if (wpfImage == null) { throw new MosaicReaderException("UIElement is not a FreeImageAlgorithmsWPFImage type"); } // Initialise left and top left = (float)DesignerCanvas.GetLeft(items[0]); top = (float)DesignerCanvas.GetTop(items[0]); foreach (DesignerItem item in items) { wpfImage = item.Content as FreeImageAlgorithmsWPFImage; if (wpfImage == null) { throw new MosaicReaderException("UIElement is not a FreeImageAlgorithmsWPFImage type"); } // Get position of item relative to the most top left x = (float)DesignerCanvas.GetLeft(item); y = (float)DesignerCanvas.GetTop(item); if (x < left) { left = x; } if (y < top) { top = y; } } // We now have the most top left position. foreach (DesignerItem item in items) { wpfImage = item.Content as FreeImageAlgorithmsWPFImage; if (wpfImage == null) { throw new MosaicReaderException("UIElement is not a FreeImageAlgorithmsWPFImage type"); } // Get position of item relative to the most top left x = (float)DesignerCanvas.GetLeft(item) - left; y = (float)DesignerCanvas.GetTop(item) - top; position = new Point((int)x, (int)y); Tile tile = new Tile(wpfImage.FilePath, position, wpfImage.Fib.Width, wpfImage.Fib.Height); x = (int)(x / tile.ThumbnailToFullWidthScaleFactor); y = (int)(y / tile.ThumbnailToFullHeightScaleFactor); position = new Point((int)x, (int)y); tile.OriginalPosition = position; tile.ColorDepth = wpfImage.Fib.ColorDepth; tile.FreeImageType = wpfImage.Fib.ImageType; info.Items.Add(tile); } }
/// <summary> /// Drag of thumb in progress /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ResizeThumb_DragDelta(object sender, DragDeltaEventArgs e) { if (_item != null && _canvas != null && _item.IsSelected) { double maxDeltaVertical = _canvas.ActualHeight - (DesignerCanvas.GetTop(_item) + _item.ActualHeight); double maxDeltaHorizontal = _canvas.ActualWidth - (DesignerCanvas.GetLeft(_item) + _item.ActualWidth); var minDeltaVertical = _item.ActualHeight - _item.MinHeight; var minDeltaHorizontal = _item.ActualWidth - _item.MinWidth; #region Bad approach //Bad approach //foreach(TableContent item in _canvas.SelectedTables) //{ // minLeft = Math.Min(DesignerCanvas.GetLeft(item), minLeft); // minTop = Math.Min(DesignerCanvas.GetTop(item), minTop); // maxLeft = Math.Max(DesignerCanvas.GetLeft(item) + item.ActualWidth, maxLeft); // maxTop = Math.Max(DesignerCanvas.GetTop(item) + item.ActualHeight, maxTop); // if (item.TableViewModel.ViewMode != TableViewMode.NameOnly) // { // minDeltaVertical = Math.Min(item.ActualHeight - item.MinHeight, minDeltaVertical); // } // minDeltaHorizontal = Math.Min(item.ActualWidth - item.MinWidth, minDeltaHorizontal); // maxDeltaVertical = Math.Min(_canvas.ActualHeight - (DesignerCanvas.GetTop(item) + item.ActualHeight), maxDeltaVertical); // maxDeltaHorizontal = Math.Min(_canvas.ActualWidth - (DesignerCanvas.GetLeft(item) + item.ActualWidth), maxDeltaHorizontal); //} #endregion double topConnectionLimit = double.MaxValue; double bottomConnectionLimit = double.MaxValue; double leftConnectionLimit = double.MaxValue; double rightConnectionLimit = double.MaxValue; foreach (ConnectionInfoViewModel model in _connections.Where(t => t.SourceViewModel.Equals(_item.TableViewModel))) { ConnectionInfoViewModel.GetConnectionLimits(ref topConnectionLimit, ref bottomConnectionLimit, ref leftConnectionLimit, ref rightConnectionLimit, model.SourceConnector, model); } foreach (ConnectionInfoViewModel model in _connections.Where(t => t.DestinationViewModel.Equals(_item.TableViewModel))) { ConnectionInfoViewModel.GetConnectionLimits(ref topConnectionLimit, ref bottomConnectionLimit, ref leftConnectionLimit, ref rightConnectionLimit, model.DestinationConnector, model); } if (_item.TableViewModel.ViewMode != TableViewMode.NameOnly) { double deltaVertical; switch (VerticalAlignment) { case VerticalAlignment.Bottom: deltaVertical = e.VerticalChange > 0 && e.VerticalChange >= maxDeltaVertical ? 0 : Math.Min(-e.VerticalChange, minDeltaVertical); if (bottomConnectionLimit < double.MaxValue) { if (DesignerCanvas.GetTop(_item) + _item.ActualHeight - deltaVertical >= (DesignerCanvas.GetTop(_item) + _item.ActualHeight) + bottomConnectionLimit) { deltaVertical = 0; } } _item.Height = _item.ActualHeight - (int)deltaVertical; _item.TableViewModel.Height = _item.Height; break; case VerticalAlignment.Top: deltaVertical = (int)Math.Min(Math.Max(-DesignerCanvas.GetTop(_item), e.VerticalChange), minDeltaVertical); if (topConnectionLimit < double.MaxValue) { if (deltaVertical < 0 && DesignerCanvas.GetTop(_item) + deltaVertical <= DesignerCanvas.GetTop(_item) - topConnectionLimit) { deltaVertical = 0; } } var topPos = DesignerCanvas.GetTop(_item) + deltaVertical; DesignerCanvas.SetTop(_item, topPos); _item.Height = _item.ActualHeight - deltaVertical; _item.TableViewModel.Height = _item.Height; _item.TableViewModel.Top = topPos; break; } } double deltaHorizontal; switch (HorizontalAlignment) { case HorizontalAlignment.Left: deltaHorizontal = (int)Math.Min(Math.Max(-DesignerCanvas.GetLeft(_item), e.HorizontalChange), minDeltaHorizontal); if (leftConnectionLimit < double.MaxValue) { if (deltaHorizontal < 0 && DesignerCanvas.GetLeft(_item) + deltaHorizontal <= DesignerCanvas.GetLeft(_item) - leftConnectionLimit) { deltaHorizontal = 0; } } var leftPos = DesignerCanvas.GetLeft(_item) + deltaHorizontal; DesignerCanvas.SetLeft(_item, leftPos); _item.Width = _item.ActualWidth - deltaHorizontal; _item.TableViewModel.Width = _item.Width; _item.TableViewModel.Left = leftPos; break; case HorizontalAlignment.Right: deltaHorizontal = e.HorizontalChange > 0 && e.HorizontalChange >= maxDeltaHorizontal ? 0 : (int)Math.Min(-e.HorizontalChange, minDeltaHorizontal); if (rightConnectionLimit < double.MaxValue) { if (DesignerCanvas.GetLeft(_item) + _item.ActualWidth - deltaHorizontal >= DesignerCanvas.GetLeft(_item) + _item.ActualWidth + rightConnectionLimit) { deltaHorizontal = 0; } } _item.Width = _item.ActualWidth - deltaHorizontal; _item.TableViewModel.Width = _item.Width; break; } } e.Handled = true; }
/// <summary> /// Mouse drag in progress /// </summary> /// <param name="sender"></param> /// <param name="dragDeltaEventArgs"></param> private void OnDragDelta(object sender, DragDeltaEventArgs dragDeltaEventArgs) { if (_item != null && _canvas != null && _item.IsSelected) { double minLeft = double.MaxValue; double minTop = double.MaxValue; double maxTop = double.MinValue; double maxLeft = double.MinValue; foreach (TableContent item in _canvas.SelectedTables) { minLeft = Math.Min(DesignerCanvas.GetLeft(item), minLeft); minTop = Math.Min(DesignerCanvas.GetTop(item), minTop); maxLeft = Math.Max(DesignerCanvas.GetLeft(item) + item.ActualWidth, maxLeft); maxTop = Math.Max(DesignerCanvas.GetTop(item) + item.ActualHeight, maxTop); } double deltaHorizontal = (int)Math.Max(-minLeft, dragDeltaEventArgs.HorizontalChange); double deltaVertical = (int)Math.Max(-minTop, dragDeltaEventArgs.VerticalChange); //Limit movement by connection position double topConnectionLimit = double.MaxValue; double bottomConnectionLimit = double.MaxValue; double leftConnectionLimit = double.MaxValue; double rightConnectionLimit = double.MaxValue; foreach (TableContent item in _canvas.SelectedTables) { foreach (ConnectionInfoViewModel model in _connections.Where(t => t.SourceViewModel.Equals(item.TableViewModel))) { ConnectionInfoViewModel.GetConnectionLimits(ref topConnectionLimit, ref bottomConnectionLimit, ref leftConnectionLimit, ref rightConnectionLimit, model.SourceConnector, model); } foreach (ConnectionInfoViewModel model in _connections.Where(t => t.DestinationViewModel.Equals(item.TableViewModel))) { ConnectionInfoViewModel.GetConnectionLimits(ref topConnectionLimit, ref bottomConnectionLimit, ref leftConnectionLimit, ref rightConnectionLimit, model.DestinationConnector, model); } } if (_item.TableViewModel.AreLimitsEnabled) { if (topConnectionLimit < double.MaxValue) { if (deltaVertical < 0 && minTop + deltaVertical <= minTop - topConnectionLimit) { deltaVertical = 0; } } if (bottomConnectionLimit < double.MaxValue) { if (deltaVertical > 0 && maxTop + deltaVertical >= maxTop + bottomConnectionLimit) { deltaVertical = 0; } } if (leftConnectionLimit < double.MaxValue) { if (deltaHorizontal < 0 && minLeft + deltaHorizontal <= minLeft - leftConnectionLimit) { deltaHorizontal = 0; } } if (rightConnectionLimit < double.MaxValue) { if (deltaHorizontal > 0 && maxLeft + deltaHorizontal >= maxLeft + rightConnectionLimit) { deltaHorizontal = 0; } } if (maxLeft >= _canvas.ActualWidth && dragDeltaEventArgs.HorizontalChange > 0) { deltaHorizontal = 0; } if (maxTop >= _canvas.ActualHeight && dragDeltaEventArgs.VerticalChange > 0) { deltaVertical = 0; } } var selected = _canvas.SelectedTables.ToArray(); foreach (TableContent item in selected) { var leftPos = DesignerCanvas.GetLeft(item) + deltaHorizontal; var topPos = DesignerCanvas.GetTop(item) + deltaVertical; DesignerCanvas.SetLeft(item, leftPos); DesignerCanvas.SetTop(item, topPos); item.TableViewModel.Left = leftPos; item.TableViewModel.Top = topPos; } dragDeltaEventArgs.Handled = true; } }