tornadofx v1.7.1 Release Notes

Release Date: 2017-04-06 // about 7 years ago
    • Node.findParentOfType will now also find UIComponents
    • ๐Ÿ”ง Configurable default states for savable, refreshable and deletable (Workspace.defaultXXX property)
    • Workspace.delete button and onDelete, deletableWhen and onDelete on UIComponent
    • TabPane.connectWorkspaceActions makes the TabPane 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 via App.configBasePath
    • ๐Ÿ”ง Per component config path configurable via UIComponent.configPath
    • ๐Ÿ”ง Global configuration object app.config works like the one in UIComponent, saves to conf/app.properties by default
    • TabPane.contentUiComponent will retrieve the UIComponent embedded in the selected tab
    • UIComponent callbacks for onNavigateBack and onNavigateForward 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 gets sizeToScene boolean parameter, defaults to false (https://github.com/edvin/tornadofx/issues/283)
    • ๐Ÿ”ง shortcut("keyCombo") { .. } and shortcut(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 old val 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