12 Commits

Author SHA1 Message Date
Alessadro Parisi
f16e5ffb6b 💥 Ditch the user agent stylesheet system in favor of Theme API
One of the biggest issues MaterialFX has ever had since it's beginning was the difficulty in customizing the controls through CSS. The root cause of this has always been the bad and shitty management of stylesheets priority by JavaFX. While in the past patches were implemented to fix the issue, in more than one occasion they were just mitigations that would work or not depending on...I don't know. Because you see, another problem of using such shitty system is that it was actually quite hard to debug, a theme/stylesheet could work for me but not for the user, a nightmare

With this commit, we definitely ditch the garbage user agent system in favor of a theming API that is discussed in more details on the project's README

Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com>
2023-03-16 12:18:41 +01:00
Alessadro Parisi
f453137cf8 💚 Upgrade jlink and jdks 2023-03-15 16:12:55 +01:00
palexdev
c9f2e96f32 ♻️ Minor additions and fixes
🏗️ Finally publish new module-info.java, project should be buildable and usable at this point

🐛 MFXRectangleToggleNodeSkin, add some more width to the minWidth computation to take into account the caret width and be sure that the text node won't wobble around
♻️ MFXTextFieldSkin, use prefWidth as minWidth computation
 Added some new resources

Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
2022-01-14 15:15:41 +01:00
palexdev
c7fb383fca 📝 Fixed some JavaDoc warning
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
2022-01-13 21:58:08 +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
b3def05c55 Code style review part 1/2
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
2021-03-19 13:01:06 +01:00
PAlex404
8edea33938 Fixed jlink build
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
2021-02-21 23:11:08 +01:00
PAlex404
75f9b11573 Version 11.6.0
Updated plugins and libraries.
Demo: added previews for tree views and progress spinners.

MFXTreeView and MFXCheckTreeView: added no-arg constructors for usage in SceneBuilder and refactored the control initialization to allow no-arg.
Added bottom padding to root thus fixing selection of bottom items.

SelectionModel: scanTree added condition to check if element is already selected.

mfx-treeview.css: must set viewport background color, otherwise it will appear grey when items are expanded.

Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
2021-02-03 18:04:27 +01:00
PAlex404
c6442d37f1 Remove tests from run configuration. (They don't work with Gradle in IntelliJ throwing strange errors).
Renamed the tree view classes to match the library naming.
Added documentation for tree view classes and new methods of NodeUtils.

ISelectionModel: added scanTree method, removed useless boolean from clearSelection method.

MFXTreeItem: Added css stylesheet for MFXTreeItem, it fixes a weird layout bug that occurres when the item's border is set to whatever color.
Added new constructor and moved defaultCellFactory method to the first constructor which doesn't specify the cell factory.
Changed layout strategy, it's more correct to use the VBox margin instead of setting the padding.
Removed the buildEventDispatchChain as after testing it seems unnecessary.
Added a new event type: ADD_REMOVE_ITEM_EVENT which is fired to adjust the layout accordingly when one or more items are added/removed.

MFXTreeItemSkin: added fade in and fade out animations for all children items when expand/collapse, thus switched to a ParallelTransition
Fixed the layout when items are added/removed and the item is either expanded or set to start expanded.
Switched to event filter on disclosure node because we want to intercept the event as soon as possible, so we can decide if the event should be consumed or executed.

MFXSimpleTreeCell: use convenience class MFXIconWrapper for the disclosure node.

NodeUtils added more convenience methods.

Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
2021-01-29 00:25:50 +01:00
PAlex404
1e2c183f6e Version 11.5.6
Some improvements and bug fixes:
Moved cells to separate package.
MFXAnimationFactory added null check to resetNode().
MFXFontIcon added no-arg constructors for usage in SceneBuilder,
use Paint interface because SceneBuilder is stupid.
MFXTextFieldSkin, mfx-textfield.css fixed strange font size bug when clicking on the validation label.
mfx-dialog.css fixed font.

Added new resources

Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
2021-01-08 18:17:39 +01:00
PAlex404
0090c31ac1 Version 11.5.5-staging
Added 2 new controls: MFXDatePicker and MFXTextField.

Added custom implementation of DateCell, MFXDateCell.
Added MaterialFX font, FontHandler, FontResources and MFXFontIcon for better managing SVG resources.
Added new methods to NodeUtils, used for positioning MFXDatePicker's popup.
Added new method to StringUtils.
Added new method to MFXResourcesLoader.
Added new SVG resources to MFXResourcesManager.

Fixed getClassCssMetaDataList() method in many controls, if I'm not wrong it should be static.
MFXButton, moved RippleGenerator initialization in separate protected method for overriding.
Ripples clip, using factory pattern which is more flexible than just an enum.
RippleGenerator, use clip from factory for background animation instead of Rectangle.
MFXListViewSkin, fixed scrollbars not being initially hidden if hideScrollBars is set to true.
AbstractMFXValidator, always initialize properties.
MFXDialogValidator, use mapping for messages rather than relying on list indexes.
Fixed font.css
Fixed MFXScrollpane's bars not being completely hidden.

Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
2020-12-27 21:26:20 +01:00