…readsafe log window.
…duced a helper macro, signaller. This is a (minor) breaking change.
…y because seesaw.core is just too dang long.
The option handler map for each widget was constructed once and then stored in "meta" for the widget. Each call to config would lookup the map and use the setters/getters there. This made it tricky to use plain-old widgets with Seesaw since they weren't initially created by Seesaw. With the changes in this commit, handler maps are now looked up by type with an extra dispensation for layout type. So, you can create a widget, give it a layout, and the options for that layout magically become available. For example: (def lbl (label :text "hi")) (config! lbl :south (button)) ;=> Exception complaining about unknown option :south (.setLayout lbl (BorderLayout.)) (config! lbl :south (button)) ; works! The button's now embedded in the label Additionally with this change it will be much easier to build layouts in a UI builder and then use them from Seesaw. More later.
…ints, not public API.