public void Click(ScreenDrawingSurface surface, Point location)
{
ContextMenu menu = new ContextMenu();
// find a join to modify
var nearest = NearestJoin(surface, location);
if (nearest != null)
{
string typeText = (nearest.type == JoinType.Vertical)? "Left-Right" : "Up-Down";
menu.MenuItems.Add("Modify " + typeText + " Join from " + nearest.screenOne + " to " + nearest.screenTwo, (s, e) => EditJoin(surface, nearest));
menu.MenuItems.Add("Delete " + typeText + " Join from " + nearest.screenOne + " to " + nearest.screenTwo, (s, e) => DeleteJoin(surface, nearest));
}
else
{
if (location.X > surface.Width - surface.Screen.Tileset.TileSize)
{
menu.MenuItems.Add(new MenuItem("New Rightward Join from " + surface.Screen.Name,
(s, e) => NewJoin(surface, surface.Screen.Name, "", JoinType.Vertical, location.Y / surface.Screen.Tileset.TileSize)));
}
if (location.X < surface.Screen.Tileset.TileSize)
{
menu.MenuItems.Add(new MenuItem("New Leftward Join from " + surface.Screen.Name,
(s, e) => NewJoin(surface, "", surface.Screen.Name, JoinType.Vertical, location.Y / surface.Screen.Tileset.TileSize)));
}
if (location.Y > surface.Height - surface.Screen.Tileset.TileSize)
{
menu.MenuItems.Add(new MenuItem("New Downward Join from " + surface.Screen.Name,
(s, e) => NewJoin(surface, surface.Screen.Name, "", JoinType.Horizontal, location.X / surface.Screen.Tileset.TileSize)));
}
if (location.Y < surface.Screen.Tileset.TileSize)
{
menu.MenuItems.Add(new MenuItem("New Upward Join from " + surface.Screen.Name,
(s, e) => NewJoin(surface, "", surface.Screen.Name, JoinType.Horizontal, location.X / surface.Screen.Tileset.TileSize)));
}
}
menu.Show(surface, location);
}