7 Commits

Author SHA1 Message Date
palexdev
156dc9713b ⬆️ Upgrade Gradle to v8.4 and some dependencies
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
2023-10-17 10:23:23 +02:00
Alessadro Parisi
27446093db 🔖 Version 11.13.6
This minor version includes a bunch of kindly submitted PRs and some minor refactor.
Also, Gradle has been updated to version 7.6

Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com>
2023-01-02 12:31:02 +01:00
palexdev
e5d8e31058 💚 Fix GitHub actions (temporary workaround)
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
2022-01-22 18:36:35 +01:00
palexdev
160bc46473 💥 Huge Update [Part 2]
Disclaimer: I recently switched to Linux for production because I was tired of Bugdows but because they use different line endings IntelliJ is showing me that all files are changed, also the ones with identical content. I re-normalized the project and added a .gitattributes file. I'm not sure how GitHub will visualize this commit, if it's messed sorry in advance... but don't worry, as always all changes are listed here 😉

⬆️ Upgraded VirtualizedFX to version 11.2.1

Demo
🚧 Temporarily "disabled" or non-functional some showcases
 Added new tests

MaterialFX
Beans Package
 Added convenience properties for Java's functions
 Added convenience property to represent a NumberRange
 Added many new beans
♻️ NumberRange: implemented hashCode, equals and toString, added two new methods to convert a range on integers to a List or a Set
🚚 Renamed RipplePosition ti PositionBean and moved to this package

Collections Package
 TransformableList is a new kind of ObservableList that combines JavaFX's FilteredList and SortedList functionalities into one
 TransformableListWrapper is an ObservableList which wraps both the source list and the transformable list in the same class. This makes using TransformableLists less verbose as modifications to the source list can be made directly from this wrapper

Controls Package
🔥 Removed AbstractMFXNotificationPane
🔥 Removed MFXNotification
🔥 Removed SimpleMFXNotificationPane
 Added a new cell to contain notifications
 FilterPane, a new control that allows to build Predicate filters interactively
 MFXNotificationCenter, a new control that allows to display multiple notifications. It is basically an icon that opens a popup which contains not only the list of notifications but also controls to manage them
 MFXPopup, extension of PopupControl to easily set the popup's content and position it by using HPos and VPos enumerations. It also introduces a hover functionality
 MFXSimpleNotification, a simple implementation of INotification

Effects Package
 ConsumerTransition, an implementation of Transition that uses a consumer to perform some action when the interpolate method is called
 Interpolators, a new enumerator that offers some new interpolators for JavaFX's animations

Enums Package
♻️ Moved all MaterialFX enumerators to this top level package
 ChainMode, a new enumerator mainly used by PredicateUtils to chain two predicates
 NotificationCounterStyle, a new enumerator to specify MFXNotificationCenter's counter style
 NotificationPos, a new enumerator to specify at which position a notification system should place the notification
 NotificationState, a new enumerator to represent the read state of a notification

Factories Package
♻️ Moved all MaterialFX factories to this top level package
 InsetsFactory, a new factory tp build JavaFX's Insets objects

Filter Package
💥 The filter API has been completely remade and now it's super flexible, super useful, super amazin haha. I won't describe it here as there are a LOT of new classes and concepts to be described so I recommend you to read AbstractFilter, FilterBean and BiPredicateBean documentations, usage examples can be also found in the demo (not yet at time of writing) and in the documentation of MFXFilterPane
🚧 MFXFilterDialog has been completely commented, will be reworked for the new API

Font Package
 Added new resources

Notifications Package
💥 The notification API has been completely remade. Now there are to notification systems, one is very similar to the old one but it is limited to one notification at a time at a given position. This restriction helper to keep the system simple and efficient. To show multiple notifications at one time I recommend the usage of MFXNotificationCenterSystem which uses a MFXNotificationCenter to show the notifications. Or, you could implement you own notification system since the notification API now offers some base classes to build on top.
AbstractMFXNotificationSystem and INotificationSystem specify the base features all notification systems should have, INotification specifies the base features all notifications should have

Skin Package
No notable change aside from new skins for the new controls and minor changes due to classes renamed/moved

Utils Package
 FunctionalStringConverter, a functional alternative to JavaFX's StringConverter
 ReusableScheduledExecutor, a wrapper class to make a ScheduledExecutorService reusable. To stop/restart a ScheduledExecutorService it's needed to keep a reference to the ScheduledFuture task but this often result in boilerplate code, this wrapper fixes this
 EnumStringConverter, an implementation of JavaFX's StringConverter to work with enumerators
 Added a new method to ExecutionUtils
 FXCollectors, a class that contains some new collectors for JavaFX's observable collections
 PredicateUtils, utils for Predicates
 StringUtils, added a new method to convert an elapsed time in seconds to a String
♻️ AnimationUtils, added some new methods to PauseTransitionBuilder and KeyFrames classes
🐛 ExceptionUtils, fixed getStackTraceString method as StringWriters are not reusable

Resources
 Added new CSS files for new controls
♻️ MFXColors.css, added a new color

Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
2021-11-02 21:28:07 +01:00
Alessadro Parisi
9dc00340a2 💥 Huge Update [Part 1]
💥 Ditched Flowless and ReactFX in favor of VirtualizedFX

⬆️ Upgraded Gradle to version 7.2
⬆️ Upgraded JavaFX to version 17
⬆️ Upgraded plugins
⬆️ Upgraded to JUnit 5
🔥 Removed jcenter() as it is deprecated

🏗️ Added shadowJar plugin to also build a shadow jar which contains needed dependencies. This jar works only for non-modular projects tough as the plugin removes the module-info.class from the produced jar

Demo
ListViewsDemoController:
♻️ Make the listviews show huge amount of items to also showcase the performance
♻️ Added method to get random FontAwesome icons

 Added tests for the new Binding classes
 Added tests to check comboboxes selection/text bindings behavior
 Added tests for the new properties
 Added tests for the new selection models

MaterialFX
Beans Package
 Introduced synchronized properties. Synchronized properties are specialized properties that allow you to set a value and wait for another property to change as well before firing a change event, this can be useful for mimicking "atomic" behaviors. You can even chain multiple synchronized property, the only conditions are that a synchronized property can wait for at most one other property, and the other property must not be already waiting for some other property (check testChain() methods in SynchronizedIntegerTests for some examples)

Bindings Package
🚚 Moved BooleanListBinding to this package
 Added helper classes for bindings. Unidirectional bindings and Bidirectional bindings are managed by the BindingManager class, it is mostly relevant for synchronized properties because those properties override the default bindings mechanism but since it uses JavaFX base classes (Property and ObservableValue) it should be usable for everything

Controls Package
🔥 Removed flowless package
🔥 Removed all classes related to Flowless, this means that listviews have been remade
🚚 Renamed MFXListView and MFXListCell to MFXLegacyListView and MFXLegacyListCell, resource file are also affected, moved to legacy packages
♻️ Remade the abstract class for all listviews
♻️ Refactored the IListView interface
♻️ Remade the abstract class for all list cells
♻️ Remade both simple cells (MFXListCells) and cells with checkboxes (MFXCheckListCell)

MFXAnimationFactory:
♻️ Make interpolators global constants

MFXContextMenuItem:
📝 Update documentation for more clarity on accelerator property

MFXTextField:
🔥 Removed workaround for MFXContextMenu and selection being cleared
♻️ Improved the event dispatcher to solve the above issue in a better way. Now the right click event will be consumed only if the MFXContextMenu is not null and the selection is not empty. I have a better understanding of the EventDispatchers now :)

Filter Package
MFXFilterDialog:
♻️ Use the new MFXListView instead of the legacy one
♻️ Make evaluation boxes take all the space left in the cell

Selection Package
💥 Huge changes for the selection API
💥 Comboboxes, do not rely on a "mock" selection model anymore but use a SingleSelectionModel. This allows also to bind per index or per item (make sure to read the documentation for the new binding mechanism)
💥 Single selection models now allow to bind the selected index or item, they also offer method to easily bind to other selection models. You can even customize how to compute the updates, be sure to check the documentation
💥 Single selection models now use SynchronizedProperties, this means that when index changes and you have a listener to the index property the selected item will be already updated too (works the other way around too)

Skins Package
🚚 Moved MFXLegacyListViewSkin to legacy package

MFXComboBoxSkin and MFXFilterComboBoxSkin:
♻️ Adapted to the new listviews and cells
♻️ Allow binding selection or text (Fix for issue #84)
♻️ Make the popup autohide instead of manually managing all possible events, this is also better because as far as I know there's no way in JavaFX to easily check if the mouse was pressed on the window frame or the window was moved (can be detected but very inconvenient to do), all cases that must close the popup. Setting is to autohide fixes also this cases (probably internal APIs)
♻️ Specific to MFXFilterComboBoxSkin. Removed the filtered list in favor of a Map, this helps with duplicates too, of course because of this change the FilterListCell must be adapted as well

MFXListViewSkin:
♻️ Pretty much the same to be fair, but there's a difference though. The VirtualFlow is not a member of the skin anymore but it's a field of the control (passed to the skin with the constructor), this allows to easily expose some methods of the VirtualFlow, like manual scrolling or the Features class to customize the VirtualFlow, also allows to set the speed of the scroll bars

Utils Package
 Added a helper class, ListChangeProcessor, to easily compute changes in ObservableList, especially useful is combined with ListChangeHelper from VirtualizedFX
 Added TriConsumer interface

ExecutionUtils:
 Added new method to listen to a generic observable changes

NodeUtils:
 Added new inHierarchy method and replace usages where convenient
♻️ waitForScene() allow passing generic Nodes rather than just Controls

ScrollUtils:
🔥 Removed methods for Flowless listviews

Resources
🚚 Moves css files for legacy listviews to legacy package

MFXListView.css and MFXCheckListView.css:
♻️ Keep the -mfx-thumb-hover-color if the mouse is not of the scrollbar's thumb anymore but it is still pressed

MFXCheckListCell.css:
♻️ Hide the ripple of checkboxes

MFXFilterDialog.css:
♻️ Set cells' background on hover to be transparent

Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com>
2021-09-18 12:56:59 +02:00
PAlex404
6e3ad2866b Update Gradle to 6.8.1
Little refactor here and there, copyright update

Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
2021-02-11 17:03:29 +01:00
PAlex404
a16d2431a5 Add new material control: MFXButton 2020-10-19 23:15:09 +02:00