add predicate conditions to event

Predicates living in the `Tool` implementations will make code easier to read through localization.
It will also and reduce the stress in SelectionTool.