Skip to content

Latest commit

 

History

History
678 lines (558 loc) · 39.4 KB

CHANGELOG.md

File metadata and controls

678 lines (558 loc) · 39.4 KB

Change Log

[1.7.4-SNAPSHOT]

Additions

  • Improved Java interop
  • Java version of FX.find() can be called without specifying scope

Fixed

  • Java version of Component.find() defaults to current component scope instead of DefaultScope
  • NPE in layout debugger (edvin#305)

Changes

  • findParentOfType accepts subclasses

[1.7.3] - 2017-04-19

Additions

Changes

  • Improved Java interop
  • Removed faulty choicebox builder and replaced it with one similar to the combobox builder
  • authInterceptor was deprecated in favor of better named requestInterceptor

Fixes

  • Fixed ViewModel validation bug for ComboBox, ChoiceBox and Spinner
  • Autocomplete ComboBox listview matches width of ComboBox by default
  • JsonStructure.save(path) actually saves (edvin#300)

[1.7.2] - 2017-04-14

  • shortpress/longpress actions (edvin#286)
  • Form layout supports arbitrary layout containers inside fieldsets (to support multiple rows of fields or any other form layout)
  • radiomenuitem builder default argument for keyCombination (edvin#298)
  • ViewModel bindings configured with autocommit must pass validation before the value is committed
  • find takes op block to let you operate on the found Component directly
  • Node.toggleButton behaves correctly if no togglegroup is available (edvin#296)
  • ViewModel partial commit and validate: commit(field1, field2)
  • Wizard component
  • ViewModel.valid property will be updated as validators are added
  • UIComponent.closeable property and corresponding default configuration in Workspace.defaultCloseable
  • TabPane.add(SomeView::class) will bind towards title and closeable state of the UIComponent (edvin#294)
  • TreeView.populate() is now data driven. If the returned list is observable, changes will be reflected in the tree

[1.7.1] - 2017-04-06

  • 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 (edvin#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 (edvin#262)
  • Functions to load and save Json objects and JsonModel
  • Rest Client supports absolute URI's without appending base URI (edvin#289)
  • replaceWith gets sizeToScene boolean parameter, defaults to false (edvin#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 (edvin#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 (edvin#253)
  • DataGrid correctly calculates horizontal scrollbar
  • DataGrid.maxRows will constrain the max number of rows and override maxCellsInRow if needed (edvin#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) (edvin#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 (edvin#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

[1.7.0] - 2017-03-04

  • 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 in form now creates and operates on a ButtonBar
  • contextmenu builder now works on any Node, not just Control
  • EventBus subscribe(times = n) parameter will unregister listener after it has fired n 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 optional millis parameter to convert to/from milliseconds since epoch instead of seconds
  • JsonConfig.DefaultDateTimeMillis = true will cause datetime 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()

[1.6.2] - 2017-02-21

  • 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 via fxid() (name of controller is fx: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 (edvin#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
  • Workspace has NavigationMode Stack (default) and Tabs
  • closeModal() deprecated in favor of close() since it will also close tabs and non-modal + internal windows
  • 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
  • openModal/openWindow defaults to currentWindow as owner (edvin#246)
  • Accordion.fold has expanded parameter
  • Fixed: ComboBox with cellFormat does not show bound element (edvin#245)

[1.6.1] -2017-01-26

  • 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 useed (edvin#237)
  • UIComponent disableSave() and disableRefresh()
  • 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 supports orientation parameter which will cause input container to be a VBox instead of an HBox (edvin#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 (!)

[1.6.0] - 2017-01-18

  • 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 (edvin#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 of menuitem, 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
  • InternalWindow now has overlayPaint that defaults `c("#000", 0.4)
  • builderInternalWindow added
  • ItemViewModel constructor takes optional initial value
  • ObservableList.asyncItems and ListProperty.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 and builderWindow builders - fragment and window by just supplying a title and builder
  • ObservableList<T>.onChange to easy listening to change events from observable lists
  • setInScope() now uses correct KClass when entering the injectable into the components map
  • ItemViewModel.isEmpty boolean, complements empty property
  • setStageIcon(icon) will replace all existing icons with the supplied (edvin#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 parameter forceObjectProperty to avoid creating IntegerProperty 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) or MyController::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 exposes TaskStatus model for binding towards task states: running, message, title, progress, value
  • runAsync now run in the context of Task so you can access updateMessage() etc
  • progressbar and progressindicator builders binds to Property<Number> instead of Property<Double> to support DoubleProperty
  • Added insets() builder
  • Fixed a race condition in Slideshow with overlapping transitions (edvin#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 using fold()
  • 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

[1.5.9] - 2016-12-24

  • UIComponent has isdockedProperty and isDocked 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 with subscribe(), unsubscribe and fire 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
  • 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

[1.5.8] - 2016-11-24

  • WritableValue.assignIfNull(creatorFn) assigns to the value by calling creator unless it is already non-null
  • Button.accelerator(KeyCombination) adds shortcuts to buttons (edvin#205)
  • Slideshow component and slideshow builder
  • openInternalWindow(SomeOtherView::class) opens a window ontop of the current scene graph
  • bindStringProperty respects given format (edvin#210)
  • Proxy support for Rest client (Set client.proxy = Proxy())
  • Pane builder (edvin#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) (edvin#206)
  • Added Node.hgrow and Node.vgrow properties (edvin#204)
  • 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 (edvin#200)
  • Removed deprecated findFragment - use find instead
  • ViewModel.ignoreDirtyStateProperties list of properties that should not be considered when calculating dirty state
  • Removed deprecated replaceWith overloads (edvin#199)
  • Scope support
  • ViewModel is now Component and Injectable so it supports injection.
  • addClass/removeClass/toggleClass now also works for pseudo classes (edvin#198)
  • ItemViewModel().bindTo(listCellFragment)
  • resources.stream("some-resource") locates InputStream for resource
  • Added custom renderers to custom CSS Properties (edvin#203)

[1.5.7] - 2016-10-21

  • Fixed LayoutDebugger not showing debugged scene correctly (edvin#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 (edvin#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 for cellCache. The cell could change, so taking it into account was a mistake.
  • App MainView parameter can now be a Fragment as well as View
  • ListView cellCache provider to create a cached graphic node per item
  • Kotlin 1.0.4
  • The di() delegate no longer calls out to the DIContainer for every access, effectively caching the lookup
  • The fxid() delegate can now inject any type, not just EventTarget subclasses
  • Added non-null onChange overrides for primitive ObservableValues
  • Fixed bug with Node.fade reversed animations (was also affecting ViewTransitions)
  • Deprecated confusing CSS add function if favor of and

[1.5.6] - 2016-09-19

  • 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 any Node, not just Views and Fragments).
    • Also added several new built in ViewTransitions
  • Added new Node animation helper functions for various transformations
  • FXML files can now contain fx:controller attribute to help with content assist, if hasControllerAttribute = true is passed to the fxml delegate (edvin#179)
  • Fix exception in chooseFile when user cancels in Multi mode

[1.5.5] - 2016-08-19

  • Stylesheets can be loaded via ServiceLoader (META-INF/services/tornadofx.Stylesheet with reference to the stylesheet class)
  • Default constructor was re-added to tornadofx.App to support Run View in IDEA Plugin
  • resizeColumnsToFitContent has afterResize callback parameter
  • SortedFilteredList.asyncItems function
  • SortedFilteredList can now be assigned as items to tableview/listview builder without calling bindTo
  • 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

[1.5.4] - 2016-08-03

This release fixes an issue with type safe stylesheets. importStylesheet(Styles::class) would fail unless an OSGi runtime was available.

[1.5.3] - 2016-08-02

Added

  • App.createPrimaryScene overridable function to specify how the scene for the primary View is created
  • OSGI manifest metadata
  • LayoutDebugger can edit new Node properties: spacing
  • Stylesheets can be dynamically added at runtime and will affect all active scenes
  • Convenience methods for creating bindings on any object. e.g. stringBinding(person, person.firstNameProperty, person.lastNameProperty) { "$firstName, #lastName" }
  • View/Fragment takes optional title in constructor

Changed

  • UIComponent.showModal now supports reopening even if modalStage was never removed
  • fieldset block now operates on an HBox instead of Pane so you can write alignment = Pos.BASELINE_RIGHT to right-align buttons etc
  • Set modalStage before showAndWait() (edvin#151)
  • Parent.find and UIComponent.find renamed to lookup for better alignment with JavaFX lookup and to avoid confusion with find(View::class)
  • Improved BorderPane builders, they also now accept UIComponent references instead of instances
  • Builders now operate on EventTarget instead of Pane and as a result, many builders have improved syntax and functionality
  • Reduced boilerplate for App creation (you can now use class MyApp : App(MyView::class, Styles::class)
  • ViewModel commit and rollback run on the UI thread because decorators might be invoked
  • ViewModel commit accepts a function that will be run if the commit is successful
  • find can now also find Fragments, so findFragment is deprecated
  • lookup takes an optional op that operates on the UIComponent it found
  • TreeTableView/TableView.populate accepts any kind of Iterable<T> instead of List

[1.5.2] - 2016-07-21

Added

  • Validation support
  • Decoration support
  • Node.removeFromParent()
  • Dimension arithmetics (edvin#146)
  • Get a reference to objects in other Components via get(ComponentType::propertyName) and set them via set(ComponentType::propertyName, value
  • Node.replaceChildren replaces current children with new ones created with builder
  • Node.runAsyncWithProgress shows a progress indicator instead of while async task is running
  • runAsync on Injectable class references (CustomerController::class.runAsync { listContacts(customerId) })
  • runAsync on Injectable class function references (CustomerController::listContacts.runAsync(customerId))
  • ObservableValue.onChange listener
  • UIComponent.whenDocked and UIComponent.whenUndocked
  • LayoutDebugger (https://github.com/edvin/tornadofx/wiki/Layout-Debugger)
  • ViewModel (https://github.com/edvin/tornadofx/wiki/ViewModel)
  • TableView cellDecorator
  • ComboBox cellFormat formatter function
  • TreeView lazyPopulate alternative to populate that lazily creates children as needed
  • TreeItem nesting extension functions (edvin#134)
  • TableView selectWhere(), moveToTopWhere() and moveToBottomWhere() (edvin#134)
  • Group builder group
  • Improved tab for tabpane builder tab("Name") { operateOnTab(); content { .. } }
  • Create bindings dependent on an ObservableValue: objectBinding + integerBinding, longBinding etc for all applicable types
  • New, simplified method of creating properties val nameProperty = SimpleStringProperty(); var name by nameProperty (edvin#143)
  • Extract a JsonObject and turn it into a JsonModel by with json.jsonModel("key")
  • kotlin-reflect.jar is now a default dependency. It can be removed if you don't use any of the TableView.column functions. Over time, more features will probably require it.
  • Replace View function UIComponent.replaceWith now accepts KClass<View> and KClass<Fragment> as well as UIComponent instances
  • label() and text() builders now accepts an ObservableValue for unidirectional binding
  • Added non-null JSON getters (getLong(key) returns Long while long(key) returns Long?)
  • Improved compatibility with ScenicView by not creating inline/crossinline cellformatters (https://youtrack.jetbrains.com/issue/KT-13148)

Changed

  • ImageView builder now loads image lazily by default
  • CSSUrlHandler force install moved to CSS.CompanionObject to make sure it happens in time
  • addClass/removeClass now accepts vararg
  • alert() function now returns Alert object
  • Fixed bug: Inherited properties cannot be accessed via getProperty - NoSuchFieldException (edvin#141)
  • Uncaught exceptions will now be logged to the console to ensure error message delivery even when UI is not initialized
  • Fixed CheckBoxCell binding (edvin#140)
  • Builder op block made optional on many builders (edvin#126)
  • Fixed bug in chooseFile (returned list with null instead of empty list when nothing was selected

[1.5.1] - 2016-06-29

Added

  • Shape builders (edvin#129)
  • Animation builders (edvin#131)
  • Replace View function: UIComponent.replaceWith
  • fxid() specific fx:id name as optional parameter
  • webview builder

Changed

  • Call onUndock when UIComponent.modalStage closes
  • Rewrite of the CSS sub structure, cleaner selector syntax, negative dimensions, no need for select keyword for single selectors

[1.5.0] - 2016-06-10

Added

  • Multivalue property support in type safe stylesheets (API break)
  • UIComponent.onDock and UIComponent.onUndock

[1.4.10] - 2016-06-02

Added

  • Default Rest Engine supports gzip/deflate
  • Default Rest Engine adds Accept: application/json by default

Changed

  • Moved box/c functions outside CssBlock so they can be used in Stylesheet companion object
  • Better error reporting and logging for missing or wrong fx:id vs fxid() usage

[1.4.9] - 2016-05-29

Added

  • Convert Iterable to JsonArray (Iterable<JsonModel>.toJSON())
  • Clipboard functions (edvin#110)
  • ContextMenu builder
  • TreeTableView column builder that takes an observable value creator
  • TreeTableView rowItem accessor
  • TreeTableView onUserSelect
  • Preferences can be saved and loaded using the prefences function, see edvin#107

[1.4.8] - 2016-05-20

Added

  • Inline type safe styles
  • Easier navigation of View to Node and Node to View (edvin#112)
  • Fragments can be declaratively created via fragment delegate
  • Type Safe CSS URL Handler will be force-installed if the JVM does not pick it up

Changed

  • Upgrade to Kotlin 1.0.2

[1.4.7] - 2016-05-10

Added

[1.4.6] - 2016-05-06

Added

  • openModal supports new optional block and owner parameters
  • Spinner builder (edvin#106)
  • POJO Binding Support (edvin#104)

Changed

  • App can be started without overriding primaryView -> startup parameter --view-class=package.View
  • addClass, removeClass, toggleClass returns the Node it was applied to (for chaining support)

[1.4.5] - 2016-04-29

Changed

  • Live Views no longer reloads nested UIComponents twice (edvin#98)
  • Added log info message when a View is reloaded
  • openModal did not configure tornadofx.scene correctly, causing issues with Live Views
  • Node.setId(Styles.someId) did not set the correct value

Removed

  • SingleViewApp increased framework complexity and had too many caveats so it was removed
  • UIComponent.pack/unpack was removed because their function was not needed and not intuitive (edvin#98 (comment))

[1.4.4] - 2016-04-27

Added

  • Program parameters --live-stylesheets, --live-views, --dump-stylesheets and --dev-mode
  • Hot View Reload (edvin#96)
  • children(nodeList) builder helper to redirect built children to a specific node list (edvin#95)
  • buttonbar builder (edvin#95)
  • ButtonBar.button builder (edvin#95)
  • togglegroup builder

[1.4.3] - 2016-04-23

Added

  • Type Safe CSS Builders (edvin#80) Docs here
  • TableColumn/TreeTableColumn addClass/hasClass/removeClass/toggleClass functions
  • Binding support (edvin#91)
  • FX.registerApplication(app, stage) function for easy integration with existing apps (edvin#89) Docs here
  • colorpicker builder (edvin#76)
  • chooseFile File Chooser (edvin#76)
  • pagination builder (edvin#76)
  • Configurable alert dialog
  • Node.bindClass applies an observable style class to a node (edvin#88)
  • Toolbar.spacer and ToolBar.separator builders

Changed

  • Fixed dual instantiation of SingleViewApp
  • runAsync replaces background to avoid collisions with Region.background. background is now deprecated

[1.4.2] - 2016-04-14

Added

  • External dependency injection support - Guice, Spring++ (edvin#79)
  • SingleViewApp for small/example applications (edvin#74)
  • SortedFilteredList for sorting and filtering data in list controls (edvin#62)
  • TableView.makeIndexColumn (edvin#64)
  • tableview builder accepts optional item list
  • TableColumn cell factories: useComboBox, useTextField, useChoiceBox, useProgressBar, useCheckbox and useDatePicker (edvin#67)
  • TableColumn.enableTextWrap (edvin#65)
  • TableColumn cell factory that wraps PropertyValueFactory for better POJO support (edvin#75)
  • splitpane builder (edvin#72)
  • anchorpane builder (edvin#84)
  • accordion builder (edvin#73)
  • JsonStructure.toPrettyString (edvin#77)
  • text builder (edvin#76)
  • textflow builder (edvin#76)
  • htmleditor builder (edvin#83)
  • hyperlink builder (edvin#78)
  • passwordfield builder (edvin#78)
  • radiobutton builder (edvin#78)
  • togglebutton builder (edvin#78)
  • slider builder (edvin#81)
  • separator builder (edvin#82)
  • choicebox builder (edvin#82)

Changed

  • Upgrade to Kotlin 1.0.1-2
  • Node.toggleClass could potentially add duplicates
  • TableView/TreeTableView.resizeColumnsToFitContent scans 50 rows by default
  • HttpURLEngine correctly sets Content-Type header
  • Som builders were not all lowercase (titledPane renamed to titledpane)

[1.4.1] - 2016-03-28

Added

[1.4.0] - 2016-03-26

This version is binary incompatible if you used the REST Client, perform a clean build when upgrading.

As Apache HttpClient is no longer required, most of the HttpResponse extension functions has been removed and reimplemented in the Rest.Response interface. If you accessed HttpClient classes directly, you will need to adjust some code. See the REST Client documentation for updated information.

Added

  • Injection support in the App class (edvin#54)
  • TableView/TreeTableView.resizeColumnsToFitContent function (edvin#48)
  • TreeTableView and TreeView builders (edvin#47)
  • Easy access to application resources (edvin#44)
  • Alternative view location for fxml() delegate

Changed

  • Upgrade to Kotlin 1.0.1
  • Apache HttpClient is now an optional dependency. Rest API uses HttpURLConnection by default (edvin#40)

[1.3.2] - 2016-03-07

Added

  • @FXML delegate (edvin#34)
  • i18n Support (edvin#29)
  • TableView.column() support for ObservableValue member fields
  • FX.runAndWait sync execution helper
  • TableColumn.makeEditable extension
  • JsonModelAuto automatically converts from JavaFX Properties to JSON (requires kotlin-reflect)
  • Menu/MenuItem builders
  • More layout builders
  • More constraints for builders
  • ListView builder
  • ScrollPane builder

Changed

  • Fragment should not be injectable (edvin#31)

Removed

  • FXTableView removed, column functions are now extensions on TableView
  • TableView.addColumn removed, replaced by the new column functions

[1.3.1] - 2016-02-28

Added

  • Arbitrary properties per Component (edvin#23)
  • singleAssign() property delegates (edvin#17)
  • Tests for singleAssign()
  • BorderPane builder (edvin#16)
  • Node.gridpaneConstraints extension function (edvin#12)
  • Node.vboxConstraints extension function
  • Node.hboxConstraints extension function
  • TableView builder (edvin#11)
  • Async loading of items for datadriven components (edvin#14)
  • task/ui to run async jobs outside of Component

Changed

  • Builder for Tab now require the content pane as input parameter to avoid confusion (edvin#8)
  • UIComponent#openModal() no longer requests focus for root component - caller can decide instead
  • Property delegate now produces non-nullable property types
  • GridPane.row() no long hogs the GridPane userData object to track rowId

[1.3.0] - 2016-02-19

Added

  • Delegates for JavaFX Properties (edvin#3)

Changed

  • Changed Maven coordinates to no.tornado:tornadofx
  • Recompiled for Kotlin 1.0

[1.2.3] - 2016-02-15

Added

  • Property support for builders, i.e textfield(customer.nameProperty)
  • More builders

Changed

  • Rest client now uses PoolingHttpClientConnectionManager to support multiple threads
  • HttpResponse.consume() never throws exception

[1.2.2] - 2016-02-08

  • Recompiled for Kotlin RC