Refactor Button class to push more of the logic into methods of button to allow for overiding