private void OnGraphCanvasLoaded(object sender, RoutedEventArgs e) { visualHost = new GraphVisualHost(this, this.graphControl, this.startupFile); visualHost.IsInRecordingMode = graphControl.IsInRecordingMode; graphCanvas.Children.Add(visualHost); graphControl.GraphControllerLoaded(this.Controller.Identifier); graphCanvas.KeyDown += new KeyEventHandler(OnCanvasKeyDown); graphCanvas.KeyUp += new KeyEventHandler(OnCanvasKeyUp); graphCanvas.MouseMove += new MouseEventHandler(OnCanvasMouseMove); graphCanvas.MouseDown += OnCanvasMouseButtonDown; graphCanvas.PreviewMouseDown += OnCanvasPreviewMouseDown; graphCanvas.MouseUp += OnCanvasMouseButtonUp; //for libraryview graphCanvas.AllowDrop = true; graphCanvas.Drop += new DragEventHandler(OnCanvasDrop); //for Zoom and Pan graphCanvas.MouseWheel += OnMouseWheel; //if (!string.IsNullOrEmpty(this.startupFile)) // this.visualHost.HandleZoomToFit(); graphCanvas.Focus(); }
//Ctrl/Shift Pan Animation public ZoomAndPanAnimationHelper(double newOffsetX, double newOffsetY, GraphVisualHost visualHost, GraphControl graphControl) { mousePosition = graphControl.canvasScrollViewer.TranslatePoint(GetMousePosition(), graphControl.CurrentGraphCanvas); this.currentCursor = graphControl.GetCursor(); //System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.None; staticGraphControl = graphControl; this.visualHost = visualHost; staticScrollViewer = staticGraphControl.canvasScrollViewer; ZoomAndPanAnimationHelper.newOffsetX = newOffsetX; ZoomAndPanAnimationHelper.newOffsetY = newOffsetY; ZoomAndPanAnimationHelper.newScale = double.MinValue; double offsetX = staticGraphControl.canvasScrollViewer.HorizontalOffset; double offsetY = staticGraphControl.canvasScrollViewer.VerticalOffset; double shiftX = newOffsetX - offsetX; double shiftY = newOffsetY - offsetY; if (Math.Abs(shiftX) < 0.01 && Math.Abs(shiftY) < 0.01) { return; } DoubleAnimation xOffsetAnimation = new DoubleAnimation(); xOffsetAnimation.From = offsetX; xOffsetAnimation.To = newOffsetX; xOffsetAnimation.Duration = TimeSpan.FromMilliseconds(Configurations.ShortAnimationTime); Storyboard.SetTarget(xOffsetAnimation, visualHost); Storyboard.SetTargetProperty(xOffsetAnimation, new PropertyPath("XOffset")); DoubleAnimation yOffsetAnimation = new DoubleAnimation(); yOffsetAnimation.From = offsetY; yOffsetAnimation.To = newOffsetY; yOffsetAnimation.Duration = TimeSpan.FromMilliseconds(Configurations.ShortAnimationTime); Storyboard.SetTarget(yOffsetAnimation, visualHost); Storyboard.SetTargetProperty(yOffsetAnimation, new PropertyPath("YOffset")); zoomAndPanStoryboard = new Storyboard(); zoomAndPanStoryboard.Children.Add(xOffsetAnimation); zoomAndPanStoryboard.Children.Add(yOffsetAnimation); zoomAndPanStoryboard.Completed += new EventHandler(OnAnimationCompleted); BeginAnimation(); }
public ExtendedPreview(String text, double width, double height, GraphControl graphControl, GraphVisualHost visualHost) { InitializeComponent(); this.graphControl = graphControl; this.visualHost = visualHost; this.InternalTextBox.Text = text; this.Focusable = true; this.IsEnabled = true; PreviewPanel.Focusable = true; PreviewPanel.IsEnabled = true; InternalTextBox.Focusable = true; InternalTextBox.IsEnabled = true; InternalTextBox.IsReadOnly = true; InternalTextBox.FontFamily = new FontFamily(Configurations.Font); InternalTextBox.FontWeight = FontWeights.Normal; InternalTextBox.FontSize = Configurations.InfoBubbleText; FormattedText formattedText = new FormattedText(text, Configurations.culture, FlowDirection.LeftToRight, Configurations.TypeFace, Configurations.InfoBubbleText, Configurations.PreviewBubbleExtendedTextColor); double textWidth = formattedText.WidthIncludingTrailingWhitespace + 2 * Configurations.InfoBubbleMargin + Configurations.PreviewBubbleExtendedScrollBarWidth; double extendedPreviewWidth; // the minimum width should allow the first value to be shown in one line if (text.Contains(',')) { double minimumTextWidth = double.MinValue; string tempText = text.Substring(0, text.IndexOf(',')); FormattedText tempFormattedText = new FormattedText(tempText, Configurations.culture, FlowDirection.LeftToRight, Configurations.TypeFace, Configurations.InfoBubbleText, Configurations.PreviewBubbleExtendedTextColor); minimumTextWidth = tempFormattedText.WidthIncludingTrailingWhitespace + 2 * Configurations.InfoBubbleMargin + Configurations.PreviewBubbleExtendedScrollBarWidth + 3; extendedPreviewWidth = Math.Max(width, minimumTextWidth); } else // if there is only one data member, need to fit in it { extendedPreviewWidth = Math.Max(width, textWidth); } //leave space for scrollbar and radial menu this.InternalTextBox.Width = extendedPreviewWidth - Configurations.PreviewBubbleExtendedScrollBarWidth; if (height > 0) { InternalTextBox.Height = height; } if (textWidth <= InternalTextBox.Width) { InternalTextBox.TextAlignment = TextAlignment.Center; InternalTextBox.Padding = new Thickness(Configurations.PreviewBubbleExtendedScrollBarWidth, Configurations.InfoBubbleMargin, 0, Configurations.InfoBubbleMargin); } else { InternalTextBox.MaxHeight = Configurations.InfoBubbleMaxHeight; InternalTextBox.TextWrapping = TextWrapping.Wrap; InternalTextBox.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; InternalTextBox.Padding = new Thickness(Configurations.InfoBubbleMargin, Configurations.InfoBubbleMargin, 0, Configurations.InfoBubbleMargin); } }
//Zoom to Fit Animation public ZoomAndPanAnimationHelper(double newOffsetX, double newOffsetY, double newScale, GraphVisualHost visualHost, GraphControl graphControl, bool captureMouse) { staticGraphControl = graphControl; this.visualHost = visualHost; staticScrollViewer = staticGraphControl.canvasScrollViewer; ZoomAndPanAnimationHelper.newOffsetX = newOffsetX; ZoomAndPanAnimationHelper.newOffsetY = newOffsetY; ZoomAndPanAnimationHelper.newScale = newScale; double offsetX = staticGraphControl.canvasScrollViewer.HorizontalOffset; double offsetY = staticGraphControl.canvasScrollViewer.VerticalOffset; double scale = staticGraphControl.scaleTransform.ScaleX; double shiftX = newOffsetX - offsetX; double shiftY = newOffsetY - offsetY; double scaleChange = newScale - scale; if (captureMouse) { Point mousePositionOnScreen = GetMousePosition(); mousePosition = new Point((mousePositionOnScreen.X + offsetX) / scale, (mousePositionOnScreen.Y + offsetY) / scale); this.currentCursor = staticGraphControl.GetCursor(); //System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.None; } if (Math.Abs(shiftX) < 0.05 && Math.Abs(shiftY) < 1 && Math.Abs(scaleChange) < 1) { return; } zoomAndPanStoryboard = new Storyboard(); if (Math.Abs(shiftX) >= 0.05) { DoubleAnimation scaleAnimation = new DoubleAnimation(); scaleAnimation.From = scale; scaleAnimation.To = newScale; scaleAnimation.Duration = TimeSpan.FromMilliseconds(Configurations.ShortAnimationTime); Storyboard.SetTarget(scaleAnimation, visualHost); Storyboard.SetTargetProperty(scaleAnimation, new PropertyPath("Scale")); zoomAndPanStoryboard.Children.Add(scaleAnimation); } if (Math.Abs(shiftX) >= 1) { DoubleAnimation xOffsetAnimation = new DoubleAnimation(); xOffsetAnimation.From = offsetX; xOffsetAnimation.To = newOffsetX; xOffsetAnimation.Duration = TimeSpan.FromMilliseconds(Configurations.ShortAnimationTime); Storyboard.SetTarget(xOffsetAnimation, visualHost); Storyboard.SetTargetProperty(xOffsetAnimation, new PropertyPath("XOffset")); zoomAndPanStoryboard.Children.Add(xOffsetAnimation); } if (Math.Abs(shiftY) >= 1) { DoubleAnimation yOffsetAnimation = new DoubleAnimation(); yOffsetAnimation.From = offsetY; yOffsetAnimation.To = newOffsetY; yOffsetAnimation.Duration = TimeSpan.FromMilliseconds(Configurations.ShortAnimationTime); Storyboard.SetTarget(yOffsetAnimation, visualHost); Storyboard.SetTargetProperty(yOffsetAnimation, new PropertyPath("YOffset")); zoomAndPanStoryboard.Children.Add(yOffsetAnimation); } zoomAndPanStoryboard.Completed += new EventHandler(OnAnimationCompleted); BeginAnimation(); }