AbstractButton and ButtonEvent struct refactored