using System; using System.ComponentModel; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Design; using System.IO; using FastReport.Utils; using FastReport.TypeEditors; using FastReport.Map.Import.Shp; using FastReport.Map.Import.Osm; namespace FastReport.Map { partial class MapObject { #region Fields private bool isPanning; private bool panned; private Point lastMousePoint; private bool needPreviewPageModify; private ShapeBase hotPoint; #endregion // Fields #region Properties internal ShapeBase HotPoint { get { return hotPoint; } set { if (hotPoint != value) Page.Refresh(); hotPoint = value; } } #endregion #region Preview mouse support /// public override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); lastMousePoint = e.Location; isPanning = true; panned = false; } /// public override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (!IsEmpty) { if (isPanning) { int deltaX = e.X - lastMousePoint.X; int deltaY = e.Y - lastMousePoint.Y; if (Math.Abs(deltaX) > 3 || Math.Abs(deltaY) > 3) { OffsetX += deltaX / Zoom; OffsetY += deltaY / Zoom; panned = true; lastMousePoint = e.Location; needPreviewPageModify = true; Page.Refresh(); } } else { if (Hyperlink.Kind == HyperlinkKind.DetailPage || Hyperlink.Kind == HyperlinkKind.DetailReport) { foreach (MapLayer layer in Layers) { ShapeBase shape = layer.HitTest(new PointF(e.X + AbsLeft, e.Y + AbsTop)); if (shape != null && !shape.IsValueEmpty) { HotPoint = shape; Hyperlink.Value = HotPoint.SpatialValue; Cursor = Cursors.Hand; return; } } HotPoint = null; Hyperlink.Value = ""; Cursor = Cursors.Default; } } } } /// public override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); // prevent hyperlink invoke while panning if (panned) Hyperlink.Value = ""; isPanning = false; panned = false; } /// public override void OnMouseWheel(MouseEventArgs e) { base.OnMouseWheel(e); if (e.Delta < 0) ZoomOut(); else ZoomIn(); needPreviewPageModify = true; } /// public override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); needPreviewPageModify = false; } /// public override void OnMouseLeave(EventArgs e) { base.OnMouseLeave(e); HotPoint = null; if (needPreviewPageModify) Page.Modify(); } #endregion } }