Custom move logic. With which tool?


I wonder form which tool would I have to inherit and which method of it would I have to override to achieve custom moving logic for the elements in my diagrams (after the move there shouldn’t be any overlapping elements). I handle the dragging logic, which enables to drag my elements into/out of SubGraphs in a custom tool that inherits from GoToolDragging (in the overridden method DoDragging()). The option to override the DoMove() method of my elements is not expectable, because I want all the custom behavior saved in tools, so the design of my program is more clear.

If you really need to have the code in a tool, then your custom GoToolDragging subclass is the right place.
But I would just implement a GoView.SelectionMoved (and maybe a GoView.SelectionCopied, if appropriate) event handler to check each of the nodes in the GoView.Selection.

Dragging is moving an element with the SHIFT key pressed, to manipulate that I override: GoToolDragging.DoDragging()!

Moving is moving an element without any key pressed, which method in which tool is called when I do that??? That is the method I would have to override!

The same method gets called in either case, and in other cases too, such as when copying.
In other words, dragging is moving or copying.