-
Notifications
You must be signed in to change notification settings - Fork 145
Release Notes
daveray edited this page Nov 17, 2011
·
49 revisions
- Basic SwingX support in
seesaw.swingx
. This is not comprehensive, but covers the biggies. Let me know if there's something missing that deserves wrapping. - All widget constructor functions now how publicly visible partner option maps. For example,
label
andlabel-options
. This allows them to be reused as well as inspected. The wholewith-widget
thing just isn't working out. - Added a simple exception reporter for debugging. Call
(seesaw.debug/debug!)
to initialize. After that, any unhandled exceptions in the UI thread will pop up a window with info, rather than possibly being lost or not noticed in the console. - Major refactoring of event handling code. No API or functional change though.
- Made sure that all tests and examples work on Clojure 1.3
- Fixed issue 61, a Clojure 1.3 compatibility issue
- Spinner support. See test/seesaw/test/examples/spinner.clj
- Added
group-by-id
to easily grab several widgets in a hierarchy. See doc and notes in Selectors. - Added
invoke-soon
which runs code immediately if already on the swing thread, otherwise sends it over with `invoke-later. - Support for binding to agents, i.e. as the value of the agent changes, route that value through a binding chain
- Support for marshalling values to the swing thread in a binding chain.
bind/notify-later
,bind/notify-now
, andnotify-soon
. - Added
:mnemonic
support for all buttons, not just actions. This includes all buttons, menu items, etc. - Added
(all-frames)
function that nominally returns all frames in the JVM. Only useful for debugging and live editing. See doc. - Support for creating custom-drawn borders
(custom-border)
. - Convenience function
(select-with)
which acts a more powerful version of(partial (to-widget x) select)
.
- Support for resource bundles and i18n. Resource bundles and i18n. Special thanks to Meikel Brandmeyer for j18n and Seesaw integration help.
- Basic drag-n-drop support. See dnd.clj and the example.
- Added
(bind/funnel)
support. Multiplex multiple binding chains together into a vector. - Added
(bind/b-swap!)
support. Friendlier use of atoms as in binding chains. (seesaw.chooser/choose-color)
- Support for custom file filters in
(seesaw.chooser/choose-file)
. Thanks to Odyssomay
- Implemented
(config)
function which is dual of(config!)
, i.e. it can read options from widgets. For example,(config my-panel :items)
will return a sequence of the items in the given panel. The implementation isn't complete for every option on every widget type, but the biggies are covered. If you hit one that's missing, let me know. - Selection support,
(selection)
,(selection!)
and(listen :selection)
, for text widgets. - Support for programmatic scrolling, e.g.
(scroll! table :to :end)
. Seeseesaw.examples.scroll
. - Passing a "slurpable" value (URL, File, Reader, etc) to the
:text
option of any widget will now slurp that value into the text value. So, you can point text areas at files or URLs or whatever to populate them. - Minor graphics improvements
- A paint app example, seesaw.examples.scribble
- Improved arg checking so maybe debugging is a little less painful
Breaking Changes:
- The
ToWidget
protocol was broken into two pieces,ToWidget
andMakeWidget
. This should only affect users that implementedToWidget
. - Originally any non-string values passed to the
:text
option were automatically passed through(str)
. This is no longer the case. If you want a non-string value in a label or whatever, convert it manually. -
(id-of)
now always returns a keyword regardless of whether a string or keyword was given as the:id
option on widget construction. This makes for more readable, consistent code.
- Fix for issue 49, crash when removing last row from table
- text selection support
- CaretListener support
- :divider-size, :resize-weight, and :one-touch-expandable? for splitter
- Support for corners, row headers and column headers and scrollables
- :selection-mode support of lists and trees
- TreeExpansionListener and TreeWillExpandListener support
- Eliminated almost all reflection
Well, that's embarrassing:
- Fixed pretty major bug in
(progress-bar :value)
and a couple broken examples. - Another bind example
Lots of outside help on this one:
- Support for JTextPane
(seesaw.core/styled-text)
. Contributed by [Odyssomay] (https://github.com/odyssomay) - Support for CardLayout
(seesaw.core/card-panel)
. Contributed by [Odyssomay] (https://github.com/odyssomay) - Widget data flow binding. See [here] (http://blog.darevay.com/2011/07/seesaw-widget-binding/)
- Started working on removing all the reflection
- Added :selection-mode support for
(seesaw.chooser/choose-file)
. Conributed by [frericksm] (https://github.com/frericksm) - Support for [JGoodies forms] (http://www.jgoodies.com/freeware/forms/),
(seesaw.forms)
. Contributed by [Meikel Brandmeyer] (http://kotka.de/) - Support for CSS color names and 3-digit hex colors
- Row keys not present in a table's column spec are still remembered and returned by
(seesaw.table/value-at)
. This provides an easy mechanism for associating hidden data with rows.
Breaking changes:
- There was support for passing an atom to an option and syncing the value of that atom with the property on the widget. This has been removed in favor of the binding framework in
(seesaw.bind)
.
- Much improved API
(paintable)
for custom painting on widgets - Cursor support, e.g.
(flow-panel :cursor :hand)
to use the "hand" cursor on a panel. - Breaking change: Mig support is now in its own namespace, not in core. So you'll have to use/require seesaw.mig from now on.
- Proportional
:divider-location
now works on split panels, use a double or ratio. - Other cleanup and tests.