Releases: edvin/tornadofx
TornadoFX 1.7.20
Fixed
- #991: App with NoPrimaryViewSpecified throws Exception in Application stop method
- #1026 whenDockedOnce/whenUndockedOnce did not deregister correctly
- #1115 Make InternalWindow aware of BorderPane parent (#1115)
- #1134 Allow negative numbers in stripNonNumeric
Changes
openInternalWindow()
was made public (#989)Scope.deregister()
clears EventBus subscriptions associated with a particular scopeApp.stop()
clears all EventBus subscriptions
Additions
subscene
builder- The
fxml()
delegate now accepts an InputStream, for loading FXML from DB orresources.stream("/my/classpath/to.fxml")
(edvin/tornadofx-guide#107) - Generic HttpEntity support in HttpClientRequest (#996)
- JsonConfig.AddEmptyStrings controls if empty strings are added to Json objects or treated as null
TornadoFX 1.7.19
Another bugfix and small enhancement release!
Fixed
- SmartResize takes invisible columns into account (#889)
- radiomenuitem didn't store value parameter properly (#737)
- fitToWidth/fitToHeigh binds prefWidth/prefHeight instead of minWidth/minHeight properties (#886)
- menu/item builders now observes FX.ignoreParentBuilder
- Renamed labelProperty to textProperty in AbstractField
- Wizard next button was enabled even when current page was not complete (#960)
- App primary view would continue to receive onDock/onUndock after its app instance was stopped and out of scope (#973)
Changes
- Opened up HttpClientEngine and HttpURLEngine for easier subclassing/configuration of the Rest engine
- Deprecated
observableList()
in favour ofobservableListOf()
, and[List, Set, Map].observable()
in favour of[List, Set, Map].asObservable()
to be consistent with the Kotlin standard library. - Subdelegation of workspace button states (#894)
- Kotlin 1.3.20
- Moved all css helper extension functions from Node/Tab/Menu etc to Styleable (#944)
Additions
FX.messagesNameProvider
property to dynamically compute the name of the resource bundle of a given component class. (#872)FX.fxmlLocator
function to provide custom FXML locations globally- Added top level functions for creating (
observableListOf()
, etc) and converting (List<T>.asObservable()
, etc) observable lists, sets and maps; and extension functions to work with them too (ObservableList<T>.shuffle()
, etc). - Submenu support for MenuButton (https://stackoverflow.com/questions/54393983/how-to-make-a-submenu-within-a-menubutton-in-javafx)
- Added
cubiccurveTo
builder (#911) - onLeftClick() and onRightClick()
- Convenience function builders for SimpleXXXProperty classes (#935)
- Added
splitmenubutton
builder togglegroup()
builder accepts property parameter (#956)- Added extensions and operators for vector math
TornadoFX 1.7.18
Fixed
config
no longer accepts null values, as the underlyingProperties
store won't allow them (#792). The set function that takes Pair still accepts null as the value, but will remove the key if the value is null.- the
di()
delegate no longer calls out to theDIContainer
for every access, effectively caching the lookup (#837) - More efficient timer for delayed
runLater
calls (#836) runAsyncWithProgress
cannot target an UI element with no parent, will no throw Exception with warning (#873)
Changes
App.scope
is overridableDefaultScope
deprecated, useFX.defaultScope
instead- The Workspace inside the
scope
of a UIComponents will assume the Workspace it is docked in (#806) - Kotlin 1.3.11
- bindSelected for ViewModel gets
out
modifier (#823) - Spinner.required() validator (#871)
Additions
- TableView.onEditStart() and TableColumn.cancel() functions which can be used to intercept editing events
- resources.media() to load a Media instance from resources
- Media.play() shortcut which creates a MediaPlayer and plays the Media
- Wipe and Dissolve view transitions
tab
builder assignsUIComponent.icon
as Tab graphicComboBox.bindSelected()
(#829)- TextInputControl.requiredWhen()
colorpicker
builder with property binding supportmovable
parameter foropenInternalWindow()
(#863)
TornadoFX 1.7.17
Fixed
- OnDock Called Twice In openInternalWindow (#772)
- TreeView.
lazypopulate
leafcheck logic was reversed (#773) onCancel()
is now called when reusing Wizard instance- Observable collection delegates removed because they shadow observable properties (See Properties.kt:L212)
- The
style
property ofListCell
will be cleared by the framework so it can be manipulated incellFormat
without side effects (https://stackoverflow.com/questions/51459371/custom-cell-format-listview-tornadofx-on-delete-item) - Escape closes window only works first time for Views (#764)
- Reused modal didn't get stage icons set (#779)
Changes
- Kotlin 1.2.60
- ViewModel binding dirty tracking for ListProperty (https://stackoverflow.com/questions/50364458/tornadofx-bind-dirty-properties-of-different-view-models)
- Workspace.dock() will log a warning message if a child is docked while the workspace is not showing
- SortedFilteredList.setAllPassThrough property controls if
setAll
should be forwarded to the underlying list (#344) and (#681) - EventBus deliveries will continue even after a subscriber throws exception
- UIComponent callback
onBeforeShow
is called for all top level UIComponents - Primary View
onDock
is now called after the stage is shown. Now it aligns with the timing for secondary windows. - All
asyncItems
function parameters operate onFXTask
removeFromParent
now supportsTreeItem
(#776)
Additions
UIComponent.whenUndockedOnce()
andwhenDockedOnce
callbacksonTabSelected
callback in UIComponent when connected to a TabPanefinally(callback)
for runAsync and other task buildersWindow.aboutToBeShown
property avoid false positives for invisible Workspace warning (#755)- Slideshow slides supports optional timeout, which will advance to the next slide using the Slide transition
importStylesheet
now supportsfile
,http
andhttps
in addition to classpath resources (#762)raduimenuiutem
builders now acceptsvalue
property (#737)
TornadoFX 1.7.16
Fixed
- runAsyncWithProgress must Unwrap ToolBar parent (#687)
- Calling
close()
insideInternalWindow
would also close the parent placeholder
for list type controls should not require list type parameter- Added warning log message when
WorkspaceApp
is called with aWorkspace
subclass as main view paramter - Fix bug caused by not properly removing nodes from
ToolBar
- Fixed issues generating CSS for dashed strokes in shapes and borders
contextmenu
builder returnsContextMenu
instance instead ofEventTarget
(#702)togglebutton
andradiobutton
builders moved fromNode
toEventTarget
(#716)- Workspace now undocks closed tabs correctly (#718)
Changes
- Kotlin 1.2.41
- Workspace.navigateForward() made public
- Added missing pseudoclasses to CSS DSL
- HostServices is now retrieved from
Application.getHostServices()
instead of sun/internal API
Additions
--dicontainer=diContainerClass
parameter allows assignment of DIContainer from command line (edvin/tornadofx-idea-plugin#56)readonly
andcancel
pseudoclasses added to type safe CSS- Added add/remove/toggle class for Tab
- ContextMenu.radiomenuitem (#646)
- mutableList can now be bound to an ObservableMap
- CssSelectionBlock now has all relation selectors (see
CssSubRule.Relation
) - TableView DND Reorder testapp
onCancel
callback inWizard
(#712)- combobox.editableWhen() - also works for DatePicker since it extends ComboBoxBase (#717)
- editableWhen() added for TableView, TreeTableView, ListView
TornadoFX 1.7.15
Another good mix of fixes and features, plus another round of huge internal refactorings to improve code quality and consistency.
Important note: The TableView column builder for readonly non-observable properties was renamed to readonlyColumn
because it shadowed the (much more important) builder for observable properties. This is a breaking, but nessescary change. Apologies for not catching this as the new builder was implemented. Read more about it in #599
Fixed
- onEditCommit {} listens for changes in nested columns
- UIComponent.close() should be able to close primary stage as well (#622)
- SmartResize.Policy manual resize broken (#570)
- TableView bound to ListProperty should rebind when value changes
- Allow calling Workspace.disableNavigation() when workspace is empty
- Thread pools are reinitialized on App.start() to support stop/start multiple times within the same JVM
- ServiceLoader provided interceptors were added every time an App class was initialized
- inheritParamHolder and inheritScopeHolder are cleared on Application stop (#602)
- smartResize throws exception for hidden columns (#606)
- The getters and setters of horizontalPadding and verticalPadding did not correspond
Changes
- Kotlin 1.2.21
- Many internal refactorings
- AnchorPaneConstraint properties now accept any Number, not just Double
- AbstractField.textProperty was renamed to labelProperty to avoid confusion with the textProperty() exposed by textfields inside of a field
- ItemViewModel.bind
defaultValue
parameter - Node builders inside of
MenuItem
will automatically assign the node to thegraphic
property of the menu item - The App class (main application entrypoint) no longer requires a primary view parameter, in case you want to show a tray icon or determinine what view to show some other way
- Renamed tableview column builder for readonly non-observable properties to
readonlyColumn
(#599) - Renamed Node.index to Node.indexInParent to avoid subtle bugs (Partly fixes #598)
- Removed CheckBoxCell in favor of inline cellFormat
- ValidationContext.validate has a new parameter failFast, which can optimize the validation-process.
- (Linked)HashMaps are generalized to (Mutable)Map
- ArrayList are generalized to (Mutable)List
Additions
- StackPane.connectWorkspaceActions() along with StackPane.contentProperty and various Workspace related functions and properties (#604)
- TextInputControl.filterInput allows you to discriminate what kind of input should be accepted for a text input control
- String.isLong(), isInt(), isDouble() and isFloat()
- checkmenuitem builder accepts string for keycombination and selected property
- Node.index will tell you the Node's index in the parent container
- placeholder builder for TableView, TreeTableView, ListView
- obserableList() creates FXCollections.observableArrayList
- ResourceBundle.format() provides a short way to insert translations with variables in them
- ocpr is now available as extension function: attachTo
- Insets.copy(), Intsets.horizontal, Intsets.vertical, Intsets.all
- SortedFilteredList forwards setAll() to backing list
- withEach/mapEach/mapEachTo are the receiver-functions of forEach/map/mapTo.
TornadoFX 1.7.14
This release brings amongst other things, a fix to the long standing runAsync
bug which could case the success
and fail
callbacks to not run if the work in runAsync
completed (very) fast.
Fixed
runAsync
would skip the success/fail steps if no work was done in the op block- TableView Pojo Column references support boolean "is" style properties (#560)
- TabPane.tab inside of an UIComponent is now scope aware
- TreeView.lazyPopulate should never assign null list if filter results in no items
Changes
- Kotlin 1.2.10
- Node builders inside of
ButtonBase
will automatically assign the node to thegraphic
property of the Button
Additions
- ConfigProperties (
config
) is nowClosable
so it can be used withuse
TornadoFX 1.7.13
Another bugfix and stability enhancement release as we're gearing up to Java 9 compatibility!
Fixed
- Navigation button issue when already docked view was docked again (#526)
- Internal thread pools are shutdown on app exit. Running threads in the default thread pool will still block application stop.
- ComboBox.makeAutoCompletable() inspects listView.prefWidth for being bound before attemting to set it (#530)
- Wizard.canGoBack override caused NPE (#211)
Changes
- Kotlin 1.2.0
- ItemViewModel.bindTo(itemFragment) supports all item fragments now, not just ListCellFragment
- lambda's that return unit are no longer nullable. use the default-lambda instead
- ChildInterceptor is now an Interface.
- Component.messages are fetched using the classloader that defined the Component subclass (#553)
Additions
cellFragment
support for DataGrid- ObservableValue.isBlank() and ObservableValue.isNotBlank() which returns BooleanBinding. Useful for binding to TextField enabled/visible state
- Added
owner
andtitle
parameters toalert
and other dialog builders (#522) - TextInputControl.editableWhen
multiSelect()
for TreeView, TreeTableView, TableView and ListView- Stylesheets can now be added specificly to a
Parent
- Node withaddStylesheet
TornadoFX 1.7.12
This release contains an enormous amount of internal refactoring (not mentioned in the changelog) as well as some neat new features and bug fixes :)
Fixed
- Fixed #434 leaf nodes are now getting set as expected for
lazypopulate
. - Style builder can be applied to PopupControl, Tab, TableColumnBase (#476)
- Better handling of Column.makeEditable() for properties that implement Property
Changes
- Refactoring: Moved all extension functions and properties targeting
TreeView
fromNodes.kt
toTreeView.kt
. alert
builder accepts optional owner parameter (#483)
Additions
fitToParentHeight/Width/Size
as well asfitToHeight/Width/Size(region)
helpers (#519)beforeShutdown
allows you to register shutdown hooksDataGridPaginator
component to help with pagination forDataGrid
- runAsync supports
daemon
parameter to control thread characteristics (#508) - Node.
runAsyncWithOverlay
Latch
, a subclass of CountdownLatch that exposes alockedProperty
and provides immediate release ability- Inline type safe stylesheet on Parent using the
stylesheet
builder - Tab.close()
- JsonBuilder.add() supports Iterable (Turned into JsonArray)
- Added
customitem
menu item builder (#488) - The default lefCheck for
lazypopulate
is now also recognizing an empty list as a leaf. - menubutton builder (#461)
- MenuButton.item builder
- Added Fragment support for
TreeCell
TornadoFX 1.7.11
Fixed
- Accessing last item in DataGridFocusModel was not possible
- Severe performance bug in SmartResize policy causing it to add exessive number of listeners (#460)
Changes
- Parameters passed to Views will now be updated if you do another find() (#443)
- SingleAssign now throws UninitializedPropertyAccessException instead of Exception
- Removed inc() and dec() from properties
- rangeTo from properties is now lazy
- loadFont size parameter is changed from Double to Number
- Lots of internal refactoring thanks to @tieskedh
- Kotlin 1.1.4
- Wizard and ViewModel are now internationalized
- imageview() builder accepts ObservableValue<Image?> (edvin/tornadofx-guide#43)
- added option to increment and decrement spinners by scrolling (#425)
- onUndock is now called for the View currently embedded as the scene root of a Window when it closes (#427)
- Launch helper for nicer main functions (#431)
Additions
- TreeTableView.bindSelected()
- CheckMenuItem.bind()
- Button builders with text property support
- Collection Property Delegates (#454)
- Workspace.create button and corresponding UIComponent onCreate callback and creatable property
- Lots of reified functions
- The default ErrorHandler shows structured information about failed HTTP requests
- RestException containing request, response and the underlying exception
- Added JsonBuilder.add(key, Iterable) to avoid having to call toJSON() on it (#414)
- ViewModel partial rollback (#420)
- FX.addChildInterceptor that can veto or custom add builder children to their parent. Useful for MigPane for example.
- Tab.select() for easier selection of tab without having to access tabPane.selectionModel
- TabPane.contains(UIComponent) and Iterable.contains(UIComponent)
- Override -fx-accent with type-safe CSS property accentColor
- Component.paramsProperty can be used to detec changes to incoming parameters (overriden on new find)