I'm not too happy with how I have to configure the step for each one separately, but it's the best I can do at the moment.
Interface is now Driver, and Widget is now a set of interfaces with a struct per widget type. This should make it easier to add other types.