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.
Fixed a-save-as function (spit).
…cher for them instead of starting manually from the command-line. lein run -m seesaw.test.examples.launcher
…hey're run from the command-line, they exit correctly, etc.
…n. That way it's possible to tell whether a frame needs packing before display.
…g result in one step.
…widgets that support it.
…ass or widget, print out info about all supported events.
…t support it now throws an exception rather than StackOverflowError. Also extended combobox to support (text). It returns the (str (selection cb)) or nil.
…ly names on the system.