All Versions
51
Latest Version
Avg Release Cycle
48 days
Latest Release
-
Changelog History
Page 3
Changelog History
Page 3
-
v1.7.1 Changes
April 06, 2017- Node.findParentOfType will now also find UIComponents
- ๐ง Configurable default states for
savable
,refreshable
anddeletable
(Workspace.defaultXXX property) Workspace.delete
button andonDelete
,deletableWhen
andonDelete
onUIComponent
TabPane.connectWorkspaceActions
makes theTabPane
a target for save/refresh/delete actions- Autocomplete tooltip mode for non editable ComboBox (https://github.com/edvin/tornadofx/pull/293)
UIComponent.app
points to the current application instance- ๐ง
config
base path configurable viaApp.configBasePath
- ๐ง Per component
config
path configurable viaUIComponent.configPath
- ๐ง Global configuration object
app.config
works like the one inUIComponent
, saves toconf/app.properties
by default - TabPane.contentUiComponent will retrieve the UIComponent embedded in the selected tab
- UIComponent callbacks for
onNavigateBack
andonNavigateForward
can veto Workspace navigation - ๐ Improved TableView.selectOnDrag (https://github.com/edvin/tornadofx/issues/262)
- Functions to load and save Json objects and JsonModel
- ๐ Rest Client supports absolute URI's without appending base URI (https://github.com/edvin/tornadofx/issues/289)
- 0๏ธโฃ
replaceWith
getssizeToScene
boolean parameter, defaults to false (https://github.com/edvin/tornadofx/issues/283) - ๐ง
shortcut("keyCombo") { .. }
andshortcut(KeyCombo) { .. }
configures key press initiated actions - UIComponent.accelerators map now works from any View, not just Views embedded in a Workspace (https://github.com/edvin/tornadofx/issues/253)
- โ Added Scope.hasActiveWorkspace to check if the workspace inside the current scope has been activated
Button.shortcut
also works when button is embedded in sub view (https://github.com/edvin/tornadofx/issues/253)- DataGrid correctly calculates horizontal scrollbar
- DataGrid.maxRows will constrain the max number of rows and override maxCellsInRow if needed (https://github.com/edvin/tornadofx/issues/287)
- DataGrid properties are now StylableObjectProperties to make them bindable
config
can now read and write JsonObject and JsonArray- TableView.bindSelected uses listener instead of unidirectional binding
- Simplified ItemViewModel binding:
val name = bind(Customer::nameProperty)
instead of the oldval name = bind { item?.nameProperty }
- Any?.toProperty() will wrap any value in an observable property, even nullable properties
- ๐ TableColumnBase.style builder
- ๐ Node.managedWhen builder binding
- ๐ Int/Double Spinner builders merged into one Number builder for better compatibility
- ๐ Spinner builders have defaults for min (0), max(100), initialValue (property.value if supplied) (https://github.com/edvin/tornadofx/issues/274)
- paddingLeft/paddingRight converted from Double to Number
- JsonObject.contains(text) and JsonModel.contains(text)
- Button.action() shortcut istead of Button.setOnAction()
- ObservableList.invalidate()
- Dialog.toFront()
- Node.whenVisible
- ListCellFragment.onEdit
- ItemViewModel allows passing in the itemProperty
- ๐ First togglebutton builder inside a togglegroup will be selected by default (disable with
selectFirst = false
) - ToggleButton.whenSelected
- ๐ SortedFilteredList refilters when items change (add, remove, permutate)
- ๐ SortedFilteredList is editable and supports all functions of the ObservableList interface
- ๐ ObservableXXXValue.onChange functions should support nullable values
- ๐ Changed semantics of
Node.removeWhen
to switch visible/managed state instead of adding/removing from parent - ๐ Internal: ViewModel maintains a map between bound properties towards the ViewModel to support validators in a cleaner way without reflection calls to private APIs (https://github.com/edvin/tornadofx/issues/276)
- Kotlin 1.1.1 and JvmTarget 1.8
- SortedFilteredList.refilter() causes the existing predicate to be reevaluated
- openModal(resizable) and openWindow(resizable) optional parameter
- TextInputControl.trimWhitespace() enforces on focus lost instead of onChange (prevented adding words with whitespace)
- ViewModel.bind accepts cast to IntegerProperty/DoubleProperty/FloatProperty/BooleanProperty even when binding is null at construction time
- โ Added
loadFont
helper function
-
v1.7.0 Changes
March 04, 2017- ๐ EventTarget.bindComponents(sourceList, converter) syncs the child nodes of the event target to the given observable list of UIComponents via the converter
- ๐ EventTarget.bindChildren(sourceList, converter) syncs the child nodes of the event target to the given observable list via the converter
- ๐ ObservableList.bind(sourceList, converter) syncs two lists and converts from one type to another on the fly
- ๐ API Break: Removed Node.margin helper because it shadowed margin property on Nodes which had their own margin property
- ValidationContext.validate() has optional
decorateErrors
parameter - ValidationContext and ViewModel has
valid
observable boolean value - Kotlin 1.1 dependency
- โ Added MenuItem.visibleWhen
- ๐ Fixed:
workspace.dockInNewScope(params)
operates on current scope instead of the new - ๐
buttonbar
builder inform
now creates and operates on aButtonBar
- ๐
contextmenu
builder now works on any Node, not just Control - EventBus
subscribe(times = n)
parameter will unregister listener after it has firedn
times (http://stackoverflow.com/questions/42465786/how-to-unsubscribe-events-in-tornadofx) - TextInputControl
trimWhitespace()
,stripWhitespace()
,stripNonNumeric()
,stripNonInteger
continually strips or trims whitespace in inputs - JSON
datetime
function has optionalmillis
parameter to convert to/from milliseconds since epoch instead of seconds - 0๏ธโฃ
JsonConfig.DefaultDateTimeMillis = true
will causedatetime
to convert to/from milliseconds since epoch by default - ๐ Improved Form prefWidth calculations
- MenuItem.enableWhen function
- ๐ Custom tab support for Views. Views can be docked in tabs and even delegate to refreshable and savable for the surrounding View
- resources stream/url/get helpers are not non-nullable
- โ Added resources helper to App class
- โ Added TrayIcon support (https://gitallhub.com/edvin/tornadofx/issues/255)
- EventBus
fire()
function is now available from the App class ComboBox.makeAutocompletable()
-
v1.6.2 Changes
February 21, 2017- resizeColumnsToFitContent takes nested columns into account
- SmartResize.POLICY takes nested columns into account
- ๐ scrollpane builder now has fitToWidth and fitToHeight params
- ๐ typesafe pojo column builders for TableView and TreeTableView eg. column( "Name", MyPojo::getName )
- ๐ spinner builders takes property param
- ๐
include(fxmlFile)
builder support - ๐
fxml()
Views now supports nested includes / controllers injected viafxid()
(name of controller isfx:id
+ "Controler") - SqueezeBox.fillHeight property
- โ Added svgicon builder
- โ Removed Node.alignment helper, it was misleading
- โ Added collapsible parameter to titledpane builder
- โ Added Component.hostServices property to access a JavaFX HostServices instance
- ๐ Improved TableView.column builder so it finds mutable properties even when constructor params with same name is present (https://github.com/edvin/tornadofx/issues/247)
- Workspace.viewStack is public
- Workspace detects dynamic components anywhere inside the WorkspaceArea
- TableView.selectOnDrag() will select rows or columns depending on the current selection mode
- resources.text, resources.image and resources.imageview helpers
- 0๏ธโฃ Workspace has NavigationMode Stack (default) and Tabs
- ๐
closeModal()
deprecated in favor ofclose()
since it will also close tabs and non-modal + internal windows - 0๏ธโฃ SqueezeBox has multiselect option (still defaults to true)
- ๐ ContextMenu.checkboxmenuitem builder
- UIComponent.icon property used by Workspace and Drawer
- ๐ Workspace Drawer support (workspace.leftDrawer/rightDrawer)
- Drawer component
- SqueezeBox panes are now
closeable
- Form buttonbar alignment is now working correctly
- UIComponent.currentWindow property
- 0๏ธโฃ openModal/openWindow defaults to currentWindow as owner (https://github.com/edvin/tornadofx/issues/246)
- Accordion.fold has
expanded
parameter - ๐ Fixed: ComboBox with cellFormat does not show bound element (https://github.com/edvin/tornadofx/issues/245)
-
v1.6.1 Changes
January 26, 2017- whenSaved and whenRefreshed lambdas as alternative to overriding onSave and onRefresh
- Workspace onSave and onDock delegates to the docked View
- InputStream.toJSON and .toJSONArray + resources.json(key) and resources.jsonArray(key)
- Color.derive and Color.ladder
- Rest.Response implements Closeable so it can be
use
ed (https://github.com/edvin/tornadofx/issues/237) - UIComponent
disableSave()
anddisableRefresh()
- can now bind to a pojo by providing only a single getter ( eg. person.observable( JavaPerson::getId ) )
- API break: previously returned a PojoProperty - now returns an ObjectProperty
- uses javafx.beans.property.adapter.JavaBeanObjectPropertyBuilder and will now propogate PropertyChangeEvents from the pojo
- UIComponent.headingProperty is ObservableValue for easier binding
- ๐
field
builder supportsorientation
parameter which will cause input container to be a VBox instead of an HBox (https://github.com/edvin/tornadofx/issues/190) - UIComponents can now be instantiated manually instead of via inject() and find()
- ๐ Input Control builders now support ObservableValue instead of just Property for automatic binding
- ListView.useCheckbox()
- ItemViewModel.asyncItem helper to reload the underlying item
- Corrected Workspace.dockInNewScope, docking was performed in the old scope (!)
-
v1.6.0 Changes
January 18, 2017- Workspaces (https://edvin.gitbooks.io/tornadofx-guide/content/16.%20Workspaces.html)
- ๐ OpenXXX functions: Windows opens centered over owner if owner is passed in as parameter (https://github.com/edvin/tornadofx/issues/231)
- API break: View params are now map(property-ref, value) instead of vararg Pair(String, value)
- ๐ menu builder correctly supports sub-menus
- ๐ Introduced
item
menu item builder, should be used in favor ofmenuitem
, which took the onAction callback insteadof an operation on the MenuItem as the op block parameter (breaks with the other builders) - ๐ menu builder accepts graphic parameter
- ViewModel autocommit bindings doesn't affect dirty state any more
- ๐ buttonbar builder for forms
- 0๏ธโฃ InternalWindow now has
overlayPaint
that defaults `c("#000", 0.4) - ๐ builderInternalWindow added
- ItemViewModel constructor takes optional initial value
ObservableList.asyncItems
andListProperty.asyncItems
confirm()
function that executes an action if the user confirms- ๐ di delegate overload to support injecting a dependency by name (in addition to type)
- ๐
builderFragment
andbuilderWindow
builders - fragment and window by just supplying a title and builder ObservableList<T>.onChange
to easy listening to change events from observable listssetInScope()
now uses correct KClass when entering the injectable into the components mapItemViewModel.isEmpty
boolean, complementsempty
propertysetStageIcon(icon)
will replace all existing icons with the supplied (https://github.com/edvin/tornadofx/issues/228)TableColumn.useCheckbox(editable = true)
now fires edit/commit events when value is changed- Create nested, observable, writable properties using the
observableValue.select()
function - ViewModel
bind
has optional parameterforceObjectProperty
to avoid creatingIntegerProperty
for ints etc, so you can have nullable values TableView.onEditCommit()
handler fires when a cell is edited. No need to manage domain object value, just add your business logic- ๐ Fixed scope support.
DefaultScope(MyController::class)
orMyController::class.scope(DefaultScope)
- ๐ TableColumn hasClass/addClass/removeClass/toggleClass supports type safe stylesheets
- Lots of functions that earlier accepted Double now accept Number
- TableView.enableCellEditing() makes table editable and enables cell selection
- TableView.regainFocusAfterEdit() - make sure TableView doesn't look focus after cell edit
- TableColumn.makeEditable(converter) - supply specific converter for editable fields
- TableColumn.converter(converter) - supply specific converter for read only text fields
- ๐ TableColumn.makeEditable() supports BigDecimal
- โ Added scope.set(injectable) as easier alternative to setInScope(injectable, scope)
- ๐ tableview builder that takes
ObservableValue<ObservableList<T>>
, supporting automatic rebind when items change - ๐ vbox and hbox builders supports any Number as spacing parameter, not just Double
runAsync
exposesTaskStatus
model for binding towards task states: running, message, title, progress, value- โก๏ธ
runAsync
now run in the context ofTask
so you can accessupdateMessage()
etc - ๐ progressbar and progressindicator builders binds to
Property<Number>
instead ofProperty<Double>
to supportDoubleProperty
- โ Added
insets()
builder - ๐ Fixed a race condition in Slideshow with overlapping transitions (https://github.com/edvin/tornadofx/issues/225)
- Node
onHover { doSomething() }
helper, param is boolean indicating hover state - ๐ Node builder bindings: disableWhen, enableWhen, visibleWhen, hiddenWhen, removeWhen
- ObservableValue.toBinding() converts observable boolean to BooleanBinding
- ๐ TableCell.useCombobox now supports every kind of Property (bug)
- Observable padding properties for Region
paddingXXXProperty
(top/right/bottom/left/vertical/horizontal/all) - Padding vars for Region: `paddingXXX' (top/right/bottom/left/vertical/horizontal/all)
- โ Added
proxyprop
helper to create proxied properties - ๐
DataGrid
maxCellsInRow
property (also CSS styleable as-fx-max-cells-in-row
) - โ Added
DataGrid.asyncItems
to load items async with more concise syntax - โ Added
DataGrid.bindSelected
to bind selected item to another property or ViewModel - ๐ Fixed a ViewModel binding bug causing errors if external changes were made to a bound facade
- โ Added
squeezebox
builder. SqueezeBox is an accordion that allows multiple open titledpanes, added usingfold()
- ๐
cellCache
supports builders. Earlier, builders would be appended to the ListView, creating undesirable results - ๐
Scene.reloadViews()
is removed from the public API, no need to call it manually - ๐
titledpane
builder now accepts op parameter like every other builder. node parameter is now optional - Fieldset.wrapWidth is now Number instead of Double
-
v1.5.9 Changes
December 24, 2016- ๐ป UIComponent has
isdockedProperty
andisDocked
boolean telling you if the ui component is currently docked - โ Added CSS elements to type safe stylesheets so you can now target f.ex HBox even if it doesn't have a CSS class
- ๐ป Pass parameters to ui components using inject/find. Inject params via
val myParam : Int by param()
in target view. - booleanBinding and stringBinding now adds observable receiver as dependency
- Eventbus:
FXEvent
class withsubscribe()
,unsubscribe
andfire
functions (https://edvin.gitbooks.io/tornadofx-guide/content/15.%20EventBus.html) - InternalWindow is public, close() will also close InternalWindow
- ๐ง
setInScope(value, scope)
allows you to preemptively configure an injectable property - ๐ Allow Labeled.bind() to work on ObservableValue instead of just Property
- 0๏ธโฃ HttpClientEngine now adds default json headers to request
- ๐ Fixed Bug: Unconsumed POST requests are not posted to the server completely
- โ Add Connection: Keep-Alive and User-Agent headers to the default rest client engine
- ๐ป UIComponent has
-
v1.5.8 Changes
November 24, 2016- WritableValue.assignIfNull(creatorFn) assigns to the value by calling creator unless it is already non-null
- Button.accelerator(KeyCombination) adds shortcuts to buttons (https://github.com/edvin/tornadofx/issues/205)
- ๐ Slideshow component and slideshow builder
- openInternalWindow(SomeOtherView::class) opens a window ontop of the current scene graph
- bindStringProperty respects given format (https://github.com/edvin/tornadofx/issues/210)
- ๐ Proxy support for Rest client (Set
client.proxy = Proxy()
) - ๐ Pane builder (https://github.com/edvin/tornadofx/issues/208)
- ๐ Iterable.style will apply styles to all elements in collection
- โ Added
Node.alignment
property that knows how to apply alignment depending on the parent - โ Added
Node.margin
property that knows how to apply margin depending on the parent - ๐ canvas builder
- ๐ All constraint builders no longer set default values for properties that are not overridden
- โ Added canvas() builder
- Kotlin 1.0.5-2
- โ Added
stackpaneConstraints
builder (margin/alignment) (https://github.com/edvin/tornadofx/issues/206) - โ Added
Node.hgrow
andNode.vgrow
properties (https://github.com/edvin/tornadofx/issues/204) - 0๏ธโฃ ComboBox.cellFormat also formats button cell by default with option to override
- UIComponent.openWindow() opens a new modeless Window
- TreeView.bindSelected(itemProperty) and TreeView.bindSelected(itemViewModel)
- ๐ Rest POST supports InputStream (https://github.com/edvin/tornadofx/pull/200)
- โ Removed deprecated
findFragment
- usefind
instead - ViewModel.ignoreDirtyStateProperties list of properties that should not be considered when calculating dirty state
- โ Removed deprecated
replaceWith
overloads (https://github.com/edvin/tornadofx/issues/199) - ๐ Scope support
- ๐ ViewModel is now
Component
andInjectable
so it supports injection. - โ addClass/removeClass/toggleClass now also works for pseudo classes (https://github.com/edvin/tornadofx/issues/198)
- ItemViewModel().bindTo(listCellFragment)
- resources.stream("some-resource") locates InputStream for resource
- โ Added custom renderers to custom CSS Properties (https://github.com/edvin/tornadofx/issues/203)
-
v1.5.7 Changes
October 21, 2016- ๐ Fixed LayoutDebugger not showing debugged scene correctly (https://github.com/edvin/tornadofx/issues/192)
- App.shouldShowPrimaryStage() can be used to initially hide the primary stage
- Node.onDoubleClick handler
- chooseDirectory function
- ListView.bindSelected(itemProperty) and ListView.bindSelected(itemViewModel)
- TableView.bindSelected(itemProperty) and TableView.bindSelected(itemViewModel)
- โ Added ItemViewModel to reduce boiler plate for ViewModels with one source object
- ๐ SortedFilteredList now supports editing writeback to the underlying observable list
- โก๏ธ View.replaceWith now updates scene property to support Live Views (https://github.com/edvin/tornadofx/issues/191)
- ๐ ViewModel bind return value is now optional to support eventually available items
- ViewModel detects changes to the source object and applies to the model counterpart automatically
- ViewModel
bind(autocommit = true) { .. }
option - Mnemonic in Field labels (form -> field -> input.mnemonicTarget())
- โ Added ItemFragment and ListCellFragment. Will add TableCellFragment etc shortly.
- โ Added TreeView.cellDecorator
- Node.hide and Node.show
- Node.toggleClass(class, observableBooleanValue)
- โ Removed cell as
this
forcellCache
. The cell could change, so taking it into account was a mistake. - App MainView parameter can now be a
Fragment
as well asView
- ListView
cellCache
provider to create a cached graphic node per item - Kotlin 1.0.4
- The
di()
delegate no longer calls out to theDIContainer
for every access, effectively caching the lookup - The
fxid()
delegate can now inject any type, not justEventTarget
subclasses - โ Added non-null
onChange
overrides for primitiveObservableValue
s - ๐ Fixed bug with
Node.fade
reversed animations (was also affectingViewTransitions
) - ๐ Deprecated confusing CSS
add
function if favor ofand
-
v1.5.6 Changes
September 19, 2016- ViewModel.onCommit() function that will be called after a successful commit
- TableView SmartResize Policy (https://github.com/edvin/tornadofx/wiki/TableView-SmartResize)
- ๐
dynamicContent
builder that will replace content in a Node when an observable value changes - ๐ Alternative
TableView.column
builder with auto-conversion to observable value (column("Title", ReturnType::class) { value { it.value.somePropertyOrValue })
- DataGrid component
- TableColumn
cellCache
provider to create a cached graphic node per item - Padding shortcuts (paddingRight, paddingLeft, paddingTop, paddingBottom) to Region
- ๐ TableView support for Nested Columns (
nestedColumn(title) { // add child columns here }
) - ๐ TableView support for expanded row node (
rowExpander { // create node to show on expand here }
) (https://edvin.gitbooks.io/tornadofx-guide/content/5.%20Builders%20II%20-%20Data%20Controls.html#row-expanders) - ๐ Fixed bug where image URLs defined in CSS were rendered wrong
- โ Added support for skipping snake-casing in CSS rules (names still have to be valid css identifiers)
- ๐ Fixed bug where CSS selectors defined with strings would have their capitalization changed (
".testThing"
=>".test-thing"
,cssclass("testThing")
=>.test-thing
) - โก๏ธ Updated the
ViewTransition
code to be more flexible (including now working with anyNode
, not justView
s andFragment
s).- Also added several new built in
ViewTransition
s
- Also added several new built in
- โ Added new
Node
animation helper functions for various transformations - FXML files can now contain
fx:controller
attribute to help with content assist, ifhasControllerAttribute = true
is passed to thefxml
delegate (https://github.com/edvin/tornadofx/issues/179) - ๐ Fix exception in chooseFile when user cancels in Multi mode
-
v1.5.5 Changes
August 19, 2016- ๐
Stylesheets can be loaded via ServiceLoader (
META-INF/services/tornadofx.Stylesheet
with reference to the stylesheet class) - 0๏ธโฃ Default constructor was re-added to
tornadofx.App
to supportRun View
in IDEA Plugin resizeColumnsToFitContent
hasafterResize
callback parameter- SortedFilteredList.asyncItems function
- ๐ SortedFilteredList can now be assigned as items to tableview/listview builder without calling
bindTo
- 0๏ธโฃ
DefaultErrorHandler.filter
listens to uncaught errors and can consume them to avoid the default error dialog. json.add(key, JsonModel)
automatically converts to JSON- ๐
CSS DSL now supports imports through constructor parameters. e.g.
class DialogStyle : StyleSheet(BaseStyle::class) { ... }
- ๐ Fixed a bug in
View.replaceWith
which caused the whole scene to change even when for sub views
- ๐
Stylesheets can be loaded via ServiceLoader (