Changelog History
Page 1
-
v1.7.20 Changes
February 05, 2020🛠 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
-
v1.7.19 Changes
May 12, 2019🛠 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
-
v1.7.18 Changes
December 28, 2018🛠 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 overridable- 🗄
DefaultScope
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 graphic ComboBox.bindSelected()
(#829)- TextInputControl.requiredWhen()
- 🏗
colorpicker
builder with property binding support movable
parameter foropenInternalWindow()
(#863)
- 🚚
-
v1.7.17 Changes
August 19, 2018🛠 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 TabPane- 🏗
finally(callback)
for runAsync and other task builders - ⚠
Window.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)
-
v1.7.16 Changes
May 13, 2018🛠 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
-
v1.7.15 Changes
February 18, 2018🔨 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
- 0️⃣ 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.
-
v1.7.14 Changes
December 16, 2017🚀 This release brings amongst other things, a fix to the long standing
runAsync
bug which could case thesuccess
andfail
callbacks to not run if the work inrunAsync
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
-
v1.7.13 Changes
December 08, 2017🛠 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)
- 0️⃣ 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
- 0️⃣ 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
-
v1.7.12 Changes
October 30, 2017🚀 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) - 0️⃣ 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
- 🛠 Fixed #434 leaf nodes are now getting set as expected for