using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ArcGIS.Core.CIM;
using ArcGIS.Core.Data;
using ArcGIS.Core.Geometry;
using ArcGIS.Desktop.Catalog;
using ArcGIS.Desktop.Core;
using ArcGIS.Desktop.Editing;
using ArcGIS.Desktop.Extensions;
using ArcGIS.Desktop.Framework;
using ArcGIS.Desktop.Framework.Contracts;
using ArcGIS.Desktop.Framework.Dialogs;
using ArcGIS.Desktop.Framework.Threading.Tasks;
using ArcGIS.Desktop.Mapping;
using System.Windows.Input;
namespace ProAppModule1
{
internal class MapToolSelect : MapTool
{
public MapToolSelect()
{
}
protected override Task OnToolActivateAsync(bool active)
{
return base.OnToolActivateAsync(active);
}
protected override void OnToolMouseDown(MapViewMouseButtonEventArgs e)
{
// On mouse down check if the mouse button pressed is:
// the left mouse button to handle zoom in
// or the right mouse button to handle zoom out
// If it is handle the event.
switch (e.ChangedButton)
{
case MouseButton.Right:
e.Handled = true;
break;
case MouseButton.Left:
e.Handled = true;
break;
}
}
protected override Task HandleMouseDownAsync(MapViewMouseButtonEventArgs e)
{
// Get the map coordinates from the click point and change the Camera to zoom in or out.
return QueuedTask.Run(() =>
{
var mapClickPnt = MapView.Active.ClientToMap(e.ClientPoint);
ActiveMapView.LookAt(mapClickPnt, TimeSpan.FromSeconds(1));
// zoom out
if (e.ChangedButton == MouseButton.Right)
{
ActiveMapView.ZoomOutFixed(TimeSpan.FromSeconds(1));
}
// zoom in
else if (e.ChangedButton == MouseButton.Left)
{
ActiveMapView.ZoomInFixed(TimeSpan.FromSeconds(1));
}
});
}
protected override void OnToolKeyDown(MapViewKeyEventArgs k)
{
// using key up and down in order to zoom out and in
// if those keys are used we need to mark them as handled
if (k.Key == Key.Up || k.Key == Key.Down)
k.Handled = true;
base.OnToolKeyDown(k);
}
protected override Task HandleKeyDownAsync(MapViewKeyEventArgs k)
{
// only called when 'handled' in OnToolKeyDown
if (k.Key == Key.Up)
{
// Key.Up => zoom out
return ActiveMapView.ZoomOutFixedAsync(TimeSpan.FromSeconds(1));
}
// Key.Down => zoom in
//else if (k.Key == Key.Down)
{
return ActiveMapView.ZoomInFixedAsync(TimeSpan.FromSeconds(1));
}
}
}
}