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
subscenebuilder- 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.messagesNameProviderproperty to dynamically compute the name of the resource bundle of a given component class. (#872)FX.fxmlLocatorfunction 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
cubiccurveTobuilder (#911) - onLeftClick() and onRightClick()
- Convenience function builders for SimpleXXXProperty classes (#935)
- Added
splitmenubuttonbuilder togglegroup()builder accepts property parameter (#956)- Added extensions and operators for vector math
TornadoFX 1.7.18
Fixed
configno longer accepts null values, as the underlyingPropertiesstore 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 theDIContainerfor every access, effectively caching the lookup (#837) - More efficient timer for delayed
runLatercalls (#836) runAsyncWithProgresscannot target an UI element with no parent, will no throw Exception with warning (#873)
Changes
App.scopeis overridableDefaultScopedeprecated, useFX.defaultScopeinstead- The Workspace inside the
scopeof a UIComponents will assume the Workspace it is docked in (#806) - Kotlin 1.3.11
- bindSelected for ViewModel gets
outmodifier (#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
tabbuilder assignsUIComponent.iconas Tab graphicComboBox.bindSelected()(#829)- TextInputControl.requiredWhen()
colorpickerbuilder with property binding supportmovableparameter foropenInternalWindow()(#863)
TornadoFX 1.7.17
Fixed
- OnDock Called Twice In openInternalWindow (#772)
- TreeView.
lazypopulateleafcheck 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
styleproperty ofListCellwill be cleared by the framework so it can be manipulated incellFormatwithout 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
setAllshould be forwarded to the underlying list (#344) and (#681) - EventBus deliveries will continue even after a subscriber throws exception
- UIComponent callback
onBeforeShowis called for all top level UIComponents - Primary View
onDockis now called after the stage is shown. Now it aligns with the timing for secondary windows. - All
asyncItemsfunction parameters operate onFXTask removeFromParentnow supportsTreeItem(#776)
Additions
UIComponent.whenUndockedOnce()andwhenDockedOncecallbacksonTabSelectedcallback in UIComponent when connected to a TabPanefinally(callback)for runAsync and other task buildersWindow.aboutToBeShownproperty avoid false positives for invisible Workspace warning (#755)- Slideshow slides supports optional timeout, which will advance to the next slide using the Slide transition
importStylesheetnow supportsfile,httpandhttpsin addition to classpath resources (#762)raduimenuiutembuilders now acceptsvalueproperty (#737)
TornadoFX 1.7.16
Fixed
- runAsyncWithProgress must Unwrap ToolBar parent (#687)
- Calling
close()insideInternalWindowwould also close the parent placeholderfor list type controls should not require list type parameter- Added warning log message when
WorkspaceAppis called with aWorkspacesubclass 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
contextmenubuilder returnsContextMenuinstance instead ofEventTarget(#702)togglebuttonandradiobuttonbuilders moved fromNodetoEventTarget(#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=diContainerClassparameter allows assignment of DIContainer from command line (edvin/tornadofx-idea-plugin#56)readonlyandcancelpseudoclasses 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
onCancelcallback 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
defaultValueparameter - Node builders inside of
MenuItemwill automatically assign the node to thegraphicproperty 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
runAsyncwould 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
ButtonBasewill automatically assign the node to thegraphicproperty of the Button
Additions
- ConfigProperties (
config) is nowClosableso 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
cellFragmentsupport for DataGrid- ObservableValue.isBlank() and ObservableValue.isNotBlank() which returns BooleanBinding. Useful for binding to TextField enabled/visible state
- Added
ownerandtitleparameters toalertand 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.kttoTreeView.kt. alertbuilder accepts optional owner parameter (#483)
Additions
fitToParentHeight/Width/Sizeas well asfitToHeight/Width/Size(region)helpers (#519)beforeShutdownallows you to register shutdown hooksDataGridPaginatorcomponent to help with pagination forDataGrid- runAsync supports
daemonparameter to control thread characteristics (#508) - Node.
runAsyncWithOverlay Latch, a subclass of CountdownLatch that exposes alockedPropertyand provides immediate release ability- Inline type safe stylesheet on Parent using the
stylesheetbuilder - Tab.close()
- JsonBuilder.add() supports Iterable (Turned into JsonArray)
- Added
customitemmenu item builder (#488) - The default lefCheck for
lazypopulateis 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)