-
-
Notifications
You must be signed in to change notification settings - Fork 126
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
💥 Version 11.13.0 #125
Merged
💥 Version 11.13.0 #125
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Controls/Skins Packages MFXContextMenu: :bug: Fixed context menu not closing if pressed mouse button was not the secondary button MFXTextField: :bug: Fixed selection being cleared when opening the context menu. The fix has some drawbacks (read the documentation) so I made sure that it can be disabled with a boolean flag. This affects all subclasses too MFXPasswordField: :recycle: Made password property not read-only, this way you can set the password by using setPassword() MFXPasswordFieldSkin: :recycle: Completely reviewed the password field's skin. Removed useless "fakeText" property, compute the text to show (password or masked) using a StringBinding, removed unnecessary KeyCodes actions :bug: Fixed caret being wrongly positioned when deleting backwards (with DEL) Utils Package :sparkles: RandomInstance, class that offers an instance of Random ColorUtils: :recycle: Use RandomInstance StringUtils: :sparkles: Added two new methods to generate random strings Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com>
Skins Packages MFXLegacyTableViewSkin/MFXListViewSkin: :bug: Fixed scroll bars not hiding when needed CSS MFXListView.css: :bug: Fixed and improved scroll bars layout :memo: Added usage example in MFXCircleRippleGenerator documentation Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com>
💥 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) :recycle: 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) :recycle: 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: :recycle: 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 :sparkles: Added a helper class, ListChangeProcessor, to easily compute changes in ObservableList, especially useful is combined with ListChangeHelper from VirtualizedFX :sparkles: Added TriConsumer interface ExecutionUtils: :sparkles: Added new method to listen to a generic observable changes NodeUtils: :sparkles: Added new inHierarchy method and replace usages where convenient :recycle: waitForScene() allow passing generic Nodes rather than just Controls ScrollUtils: :fire: Removed methods for Flowless listviews Resources :truck: Moves css files for legacy listviews to legacy package MFXListView.css and MFXCheckListView.css: :recycle: Keep the -mfx-thumb-hover-color if the mouse is not of the scrollbar's thumb anymore but it is still pressed MFXCheckListCell.css: :recycle: Hide the ripple of checkboxes MFXFilterDialog.css: :recycle: Set cells' background on hover to be transparent Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com>
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 😉 :arrow_up: Upgraded VirtualizedFX to version 11.2.1 Demo :construction: Temporarily "disabled" or non-functional some showcases :white_check_mark: Added new tests MaterialFX Beans Package :sparkles: Added convenience properties for Java's functions :sparkles: Added convenience property to represent a NumberRange :sparkles: Added many new beans :recycle: NumberRange: implemented hashCode, equals and toString, added two new methods to convert a range on integers to a List or a Set :truck: Renamed RipplePosition ti PositionBean and moved to this package Collections Package :sparkles: TransformableList is a new kind of ObservableList that combines JavaFX's FilteredList and SortedList functionalities into one :sparkles: 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 :fire: Removed AbstractMFXNotificationPane :fire: Removed MFXNotification :fire: Removed SimpleMFXNotificationPane :sparkles: Added a new cell to contain notifications :sparkles: FilterPane, a new control that allows to build Predicate filters interactively :sparkles: 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 :sparkles: 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 :sparkles: MFXSimpleNotification, a simple implementation of INotification Effects Package :sparkles: ConsumerTransition, an implementation of Transition that uses a consumer to perform some action when the interpolate method is called :sparkles: Interpolators, a new enumerator that offers some new interpolators for JavaFX's animations Enums Package :recycle: Moved all MaterialFX enumerators to this top level package :sparkles: ChainMode, a new enumerator mainly used by PredicateUtils to chain two predicates :sparkles: NotificationCounterStyle, a new enumerator to specify MFXNotificationCenter's counter style :sparkles: NotificationPos, a new enumerator to specify at which position a notification system should place the notification :sparkles: NotificationState, a new enumerator to represent the read state of a notification Factories Package :recycle: Moved all MaterialFX factories to this top level package :sparkles: InsetsFactory, a new factory tp build JavaFX's Insets objects Filter Package :boom: 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 :construction: MFXFilterDialog has been completely commented, will be reworked for the new API Font Package :sparkles: Added new resources Notifications Package :boom: 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 :sparkles: FunctionalStringConverter, a functional alternative to JavaFX's StringConverter :sparkles: 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 :sparkles: EnumStringConverter, an implementation of JavaFX's StringConverter to work with enumerators :sparkles: Added a new method to ExecutionUtils :sparkles: FXCollectors, a class that contains some new collectors for JavaFX's observable collections :sparkles: PredicateUtils, utils for Predicates :sparkles: StringUtils, added a new method to convert an elapsed time in seconds to a String :recycle: AnimationUtils, added some new methods to PauseTransitionBuilder and KeyFrames classes :bug: ExceptionUtils, fixed getStackTraceString method as StringWriters are not reusable Resources :sparkles: Added new CSS files for new controls :recycle: MFXColors.css, added a new color Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com> Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Beans Package :sparkles: Added comparator property Controls Package :sparkles: Added new features to MFXCheckbox :fire: MFXCheckbox, removed mark type and size from CSS as there's no need (see MFXCheckBox.css to learn how to style the icon) :sparkles: LabeledControlWrapper, this new control will soon be used in all eligible MaterialFX controls. It's basically a Label that has all its properties bound to a labeled Control. This way the control's text is fully customizable with CSS. :recycle: MFXIconWrapper is now capable of auto-sizing itself, just use -1 as size Font Package :bug: MFXFontIcon, fixed a very annoying bug that prevented icons from being styled with CSS if properties were set with code (via setters/constructors). To be precise rather than a bug it's the normal behavior of JavaFX's styleable properties, but it's annoying so I added a workaround to make it work always :sparkles: Added new resources Skin Package :boom: MFXCheckboxSkin has been reworked MFXCheckBox.css has been reworked too, since now most of the MFXCheckbox appearance is determined by its stylesheet Other changed files that are not mentioned here are a consequence of the above changes Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Controls Package :sparkles: Added new features to MFXCheckbox :fire: MFXCheckbox, removed all styleable properties as there's no need (see MFXCheckBox.css to learn how to style the icon) :sparkles: LabeledControlWrapper, this new control will soon be used in all eligible MaterialFX controls. It's basically a Label that has all its properties bound to a labeled Control. This way the control's text is fully customizable with CSS. :recycle: MFXIconWrapper is now capable of auto-sizing itself, just use -1 as size Font Package :bug: MFXFontIcon, fixed a very annoying bug that prevented icons from being styled with CSS if properties were set with code (via setters/constructors). To be precise rather than a bug it's the normal behavior of JavaFX's styleable properties, but it's annoying so I added a workaround to make it always work :sparkles: Added new resources Skin Package :boom: MFXCheckboxSkin has been reworked MFXCheckBox.css has been reworked too, since now most of the MFXCheckbox appearance is determined by its stylesheet Other changed files that are not mentioned here are a consequence of the above changes Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Controls Package :sparkles: Added new features to MFXRadioButton :fire: MFXRadioButton, removed all styleable properties as they were not needed (see MFXRadioButton.css to learn how to style the control) :recycle: MFXCheckbox, converted content disposition property to styleable property, for usage in CSS Skins Package :boom: MFXRadioButtonSkin has been reworked MFXRadioButton.css has been reworked too, since now most of the MFXRadioButton appearance is determined by its stylesheet Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Controls Package :recycle: LabeledControlWrapper, added alignment property to bindings :sparkles: MFXCheckbox, added textExpand feature :sparkles: MFXRadioButton, added radioGap and textExpand features :boom: MFXToggleButton has been remade completely from scratch by extending Labeled and implementing Toggle, why? Because those 'awesome' JavaFX devs decided that the toggle button would work on some mysterious internal API to trigger the :selected state Enums Package :truck: NotificationPos, moved method to PositionUtils Skins Package :recycle: MFXCheckboxSkin and MFXRadioButton, a little refactor to implement the textExpand feature :boom: MFXToggleButtonSkin has been reworked Utils Package :sparkles: Added new utils class, PositionUtils MFXToggleButton.css has been reworked too, since now most of the MFXToggleButton appearance is determined by its stylesheet Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
…to extend from a common class Controls Package :sparkles: MFXLabeled, interface that specifies all the features a MaterialFX control which has text, should have. This is necessary to also create a common skin for this type of controls :sparkles: MFXToggleButton, added two methods to set the toggle button's color when selected/unselected without using CSS. For how the user agent stylesheet is made by setting a single CSS property all colors are automatically adjusted too Effects Package :sparkles: MFXCircleRippleGenerator, added the possibility to specify the initial opacity of generated ripples via CSS Skins Package :sparkles: MFXLabeledSkinBase, common skin for all MFXLabeled controls :recycle: MFXCheckboxSkin, MFXRadioButtonSkin, MFXToggleButtonSkin, lot of code removed since it's now part of MFXLabeledSkinBase. Also, the computeMinWidth method has been fixed for all these controls, the content disposition must be taken into account :recycle: MFXToggleButtonSkin, slightly better animation MFXToggleButton.css: Avoid using the derive() function since the result is not 100% reliable. As a replacement we can play with the opacity property which is more consistent Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Beans Properties :sparkles: Added new styleable properties which override the getStyleOrigin to fix an annoying issue that causes CSS not to work if a property is set via code Controls Package :truck: Renamed LabeledControlWrapper to BoundLabel :sparkles: Added BoundTextField for creating custom TextField controls :boom: MFXTextField, the aim is to fix styling inconsistencies and to replace MFXLabel. The new text field allows specifying up to two icons (leading and trailing), allows disabling selection (in combination with editable "false" acts as a Label), but the main new feature is floating text (in two modes!!, three if considering DISABLED too) Effects Package :sparkles: Added new methods to ConsumerTransition Skins Package :boom: MFXTextFieldSkin has been reworked. Not gonna lie, it's been really hard. Implementing floating text in JavaFX is really hard. I made the skin/layout as stable as possible, however try to not mess too much with floating properties, especially at runtime MFXColors.css: Added new colors MFXTextField.css: has been reworked too, since now most of the MFXTextField appearance is defined by its stylesheet. Please note that since MFXTextField basically wraps a JavaFX's TextField some properties of the actual field are styleable only by selecting it in CSS: '.mfx-text-field .text-field {...}' Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Beans Package :boom: SynchronizedProperties, reviewed the binding mechanism to be much easier and understandable :bug: SynchronizedProperties, instead of using a change listener for the awakening, it's better to use an InvalidationListener (managed by ExecutionUtils ofc) :recycle: Functional properties, added constructors :recycle: PopupPositionBean, use Alignment bean to specify the popup position Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Bindings Package :boom: Completely reviewed the new binding mechanism to be more immediate, easy to use and efficient Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Collections Package :recycle: TransformableListWrapper, added a method to retrieve the wrapped TransformableList :bug: TransformableList, ensure that the indexes List is updated upon creation Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Selection Package :recycle: SingleSelectionManager, adapt to the new binding mechanism :bug: SingleSelectionManager, ensure that the index and item property are awakened after updating the selection. This could occur in case the index or the items were equal but not the same pair Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Utils Package :sparkles: Added new methods to FunctionalStringConverter :sparkles: Added a new method to NodeUtils Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Controls Package :recycle: AbstractMFXListCell, setter methods should be protected for index and selected properties :recycle: MFXListCell and MFXCheckListCell minor refactor :recycle: BoundTextField now also 'binds' the caret position and the selection. Also fixes the -fx-caret-visible for MFXTextFields :recycle: MFXPopup now implements MFXStyleablePopup. Also major refactor for the position computation that is now more accurate :sparkles: MFXTextField, added caretVisible styleable property to hide/show the caret, and allowEdit styleable properties to allow setting the editable property with CSS :sparkles: MFXCombo, new interface every combo box should implement :sparkles: MFXStyleablePopup, new interface that fixes that shitty PopupControl to really make it styleable with CSS :boom: MFXComboBox and MFXFilterComboBox have been reviewed from scratch :sparkles: Combo boxes now have their own cells, MFXComboBoxCell and MFXFilterComboBoxCell :wastebasket: MFXLabel is now deprecated and will be completely removed in a future commit as MFXTextField now replaces it Skins Package :recycle: MFXPopupSkin, since now MFXPopup implements MFXStyleablePopup it's needed to add all the parsed stylesheets to the container to make it styleable. Properly handle the reposition upon shown and the Scale transform upon hidden :recycle: MFXTextFieldSkin, textProperty and promptTextProperty ignore the focus state to check if the floating text should be repositioned. Min height computation completely reviewed to make the control as compact as possible if needed :boom: MFXComboBoxSkin and MFXFilterComboBoxSkin have been reworked :bug: MFXNotificationCenterSkin, fixed popup bug... I hope Utils Package :bug: FunctionalStringConverter, convert null values to empty String to avoid NullPointerException Resources :recycle: MFXTextField.css, setting the cursor is not necessary :recycle: MFXComboBoxStyle1.css and MFXFilterComboBox.css have been reworked too since now most of their appearance is determined by their stylesheet :bug: MFXTextField.css, fix border width and insets as it caused the control to reposition its children on focused Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
✨ BindingManager and BiBindingManager added isEmpty() method ♻️ BindingsMap, reviewed the way the keys LinkedList is updated to avoid duplicate keys ✨ MFXTextField added some convenience static methods to easily create a text field that acts as a label Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Project :arrow_up: Upgraded JavaFX to 17.0.1 :arrow_up: Upgraded VirtualizedFX to 11.2.3 :recycle: Make JavaFX dependencies transitive as a consequence/request of PR #116 Controls Package :boom: AbstractMFXToggleNode, MFXCircleToggleNode, MFXRectangleToggleNode have been reworked :recycle: MFXTextField whoops :recycle: MFXPopup, adapt to new changes of MFXCSSBridge CSS Package :truck: Renamed and moved CSSBridge to separate class Skins Package :boom: MFXCircleToggleNodeSkin and MFXRectangleToggleNodeSkin have been slightly changed too Resources :boom: MFXCircleToggleNode.css, MFXRectangleToggleNode.css have been reviewed too :fire: Completed the removal of MFXLabel Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Beans Package :recycle: NumberRangeProperty, added constructors Collections Package :recycle: TransformableList, correct name Controls Package :recycle: MFXComboBox, removed popup max height property, now it is set via CSS. Disable edit and selection by default :recycle: MFXFilterPane, use the userAgentStylesheet functionality rather than adding to the stylesheet list :recycle: MFXPopup, override the getStyleableParent() method to use the parent specified by the MFXCSSBridge (if available), this allows to customize the popup by also adding the parent selector in CSS (for example, instead of doing combo-popup, you can do .mfx-combo-box .combo-popup, which is better) :sparkles: MFXTextField, now you easily change the text color via code or CSS Skins Package :bug: MFXComboBoxSkin, check if an item is selected and set the value during initialization :bug: MFXFilterPaneSkin, avoid exception when the filterCombo changes its value by selecting the first item of the predicatesCombo. Avoid resetting the query string when using Boolean or Enum filters :recycle: MFXFilterPaneSkin, wrap the built filters in an MFXScrollPane. Make all custom controls styleable via CSS :bug: MFXTextFieldSkin, improved behavior of shouldFloat() :sparkles: MFXTextFieldSkin, added method responsible for updating the text's color Effects Package :sparkles: MFXCircleRippleGenerator, slightly reviewed the clip mechanism to be more convenient. Added an AUTO_CLIP property that attempts to automatically determine the properties of the clip depending on the Region. This has a lot of caveats though, in fact it can only be used in specific contexts since it's nearly impossible to easily and efficiently parse all the Region's information to correctly build the clip. It is convenient for example for buttons with round corners, the method will try to parse the radius and build the clip accordingly :recycle: MFXScrimEffect, added new method. Improved scrim methods for Windows Utils Package :recycle: DragResizer, completely reviewed the DragResizer to be more accurate, reliable and customizable :bug: EnumStringConverter, valueOf() is a case-sensitive method, but in some cases the enum string is manipulated (maybe something like this CONSTANT1 -> Constant1), for this reason by default use a case-insensitive method :sparkles: EnumUtils, new utils class for enumerators :sparkles: NodeUtils, added some new methods :sparkles: Added new resources CSS MFXColors.css: added new colors, modified purple MFXComboBox.css: deleted old stylesheets, using this one now MFXFilterPane.css: changed stylesheet accordingly to recent changes, also organize it a bit MFXScrollPane.css: removed white background for all children MFXTextField.css: removed text color as default color is now set via code, smooth font for LCD Signed-off-by: palexdev <17q0GKy-X>
By default, now the table view is scrollable, and the whole architecture is simpler and more organized :fire: Removed ITableSelectionModel, TableSelectionModel and MFXTableSortModel as not needed anymore :fire: Removed MFXTableColumn.css, MFXTableRow.css and MFXTableRowCell.css as the table style is all specified and organized in the MFXTableView.css stylesheet Signed-off-by: palexdev <17q0GKy-X>
Signed-off-by: palexdev <17q0GKy-X>
Signed-off-by: palexdev <17q0GKy-X>
Beans Package :sparkles: Added new EventHandlerProperty :recycle: PopupPositionBean, allow to set the x and y properties, however this is not meant to be used by the user, but by the MFXPopup Controls Package :boom: MFXContextMenu and MFXContextMenuItem have been reviewed :sparkles: MFXMenuControl, new interface that every control having a default MFXContextMenu should implement :recycle: MFXIconWrapper, made the size property styleable :recycle: MFXPopup, allow the popup to be repositioned if ending outside the screen :recycle: MFXNotificationCenter, simplified the MFXContextMenu system by removing the context menu supplier. The context menu can now be disabled in another way, and it still remains customizable since the items list can be modified :bug: MFXNotificationCenter, the popup and the context menu now are fully customizable via CSS :recycle: MFXNotificationCell, set the default height to 80 :bug: MFXNotificationCell, expand the cell if needed during initialization :bug: MFXNotificationCell, for some reason sometimes the checkbox was badly positioned. Ensure the cell is properly expanded after layout Notifications Package :recycle: MFXNotificationCenterSystem, invoke close() when the notification center is not showing anymore Skins Package :boom: MFXContextMenuItemSkin has been reviewed. MFXContextMenu has its own skin now :recycle: MFXNotificationCenterSkin, unwrap the popup content. The notification center hover property now will also take into account if the context menu is open :recycle: MFXPopupSkin, use the popup's userAgentStylesheet for the container :bug: MFXTextFieldSkin, fix text being clipped in some cases Utils Package :sparkles: EnumUtils, added new method to get a random enum constant for a given Enumerator :sparkles: NodeUtils, added new method to get a Node's Screen Resources MFXNotificationCenter.css: reviewed and organized MFXScrollPane.css: reviewed Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Controls Package :boom: MFXDatePicker, not a simple wrapper for the JavaFX's DatePicker, but it's now independent, made from scratch, more efficient, more material, more features :sparkles: MFXCombo, added onCancel action :sparkles: MFXComboBox, added delegate methods for selection. Added flag to make the combo's list scroll to the selected value on open Skins Package :boom: MFXDatePickerSkin has been reworked as well (previously MFXDatePickerContent) :recycle: MFXComboBoxSkin, cache the virtual flow node. Adapt to changes made to MFXComboBox. Removed event handler on the virtual flow to close the popup and move the code to the value property listener :recycle: MFXTextFieldSkin, better compute control's bounds Utils Package :sparkles: Added new utilities to work with Java date/time API Resources Added some new icons, reworked/modifies some stylesheets Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Controls Package :boom: Dialogs have been remade from scratch and are now located in their own package Skins Package :recycle: Mainly code refactor due to dialogs changes Utils Package :sparkles: ExceptionUtils, added new method to format exceptions Resources MFXScrollPane.css: make the viewport transparent Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Beans Package :recycle: PositionBean, added equals, hashCode and toString methods Controls Package :sparkles: AbstractMFXListView, implemented the StringConverter feature for cells. IListView, list views should expose the StringConverter property :recycle: MFXListCell and MFXCheckListCell, make use of the StringConverter :recycle: BoundTextField, added the prefColumnCount to the bound properties. Removed the caret position and selection "bindings" as inconsistent, the best way to make it work properly is to keep an instance of this field in the control and delegate the relevant methods to this. The skin now has been adapted to work as a password field too :memo: MFXContextMenu, added warning in JavaDoc :recycle: MFXDatePicker, set default float mode to disabled via code rather than CSS :bug: MFXFilterComboBox, fixes items in the TransformableList not being updated on changes from the source list :sparkles: MFXFilterComboBox, expose a property that is bound bidirectionally to the search field's text. This means that the filter text can now be set via code or typed in the field, this also allows to keep the text if needed (see #119), note thought that for this to work you must set isResetOnPopupHidden() to false (boolean flag to keep the old behavior) :recycle: MFXListView, added null checks and fix listener for items list :bug: MFXPaginatedTableView, consume all scroll events. When the table is filtered it's better to reset the table, so re-compute the number of max pages, set the current page to 1 and ensure that the VirtualFlow is positioned at the top :boom: MFXPasswordField, due to changes to MFXTextField and BoundTextField it's not needed anymore to have a dedicated skin, it's enough to override some methods and add some listeners/event handlers. Also convert its properties to styleable properties for usage in CSS :sparkles: MFXProgressSpinner, implemented the possibility of choosing its colors :bug: MFXTableView, fixes items in the TransformableList not being updated on changes from the source list :recycle: MFXTableView, added workaround to autosize the columns automatically as soon as the table view is laid out :boom: MFXTextField has been reviewed yet again and vastly improved. There's only a caveat. Since the caret position and selection properties cannot be bound most of the methods related to those must be overridden (when possible, almost never) or delegated to the BoundTextField instance, for more info check class JavaDoc :sparkles: MFXToggleButton, added method to set both the main and secondary colors Skins Package :recycle: MFXCircleToggleNodeSkin, bind the label's text fill to the toggle's text fill. Set the label to take all the space possible. Better handle ripple generation. Properly compute the minimum required width :bug: MFXComboBoxSkin, the handler to detect key presses must be an EventFilter in order to intercept the events before the text field :recycle: MFXFilterComboBoxSkin, add needed code for the new search text and resetOnPopupHidden features :recycle: MFXListViewSkin, make the list view request focus on mouse clicked :recycle: MFXNotificationCenterSkin, added new button to show the options (same as the context menu) :bug: MFXPaginatedTableView, constrain the VirtualFlow's height to use the PREF_SIZE :recycle: MFXPaginatedTableView, make use of the new virtualFlowInitialized property to initialize the layout rather than using layoutChildren. Properly compute the minimum width :bug: MFXPaginationSkin, pages were not added/removed after a supply due to return statement, use a Binding rather than setAll :fire: MFXPasswordFieldSkin, the skin for the password field is not required anymore :bug: MFXProgressBarSkin, properly handle the disabled and visible states :bug: MFXProgressSpinnerSkin, properly handle the disabled and visible states. Use getStartingAngle() value or reset rather than 90 (why the heck was like that :\) :recycle: MFXProgressSpinnerSkin, implement necessary code to use the new color properties :recycle: MFXRectangleToggleNodeSkin, bind the label's alignment, graphic text gap and text fill properties to the toggle ones. Set the label to take all the space possible. Properly compute the minimum required width :recycle: MFXStepperToggleSkin, adapt skin to recent changes :bug: MFXTableViewSkin, make the filter dialog APPLICATION_MODAL Effects Package :sparkles: MFXCircleRippleGenerator, implemented the possibility of pausing the ripple generation (can be set even via CSS). Before this the only way to stop the generator was to set the ripples to be transparent but the generation process was triggered anyway, with this new property the process doesn't even start, drastically improving the performance in such cases Enums Package :sparkles: FloatMode, added new mode for floating labels in text fields (and subclasses), now you can set the label to be above the field, just like you would do with two separate controls Notifications Package :bug: MFXNotificationCenterSystem, initialize the system in the init() method rather than in the constructor and also call the init() method during the owner initialization, this fixes an annoying bug which caused the notification center to be shown for a split second even if no notifications were published, and also another annoying bug that caused the notification center to be in the wrong initial position capturing all mouse events even if not visible :bug: MFXNotificationSystem, fixed same bug described above (last one) Utils Package :sparkles: Added new utils for ObservableValues, similar to the methods offered by ExecutionUtils :sparkles: LabelUtils, added method to retrieve both the sizes of a Label :recycle: LabelUtils, use the convenient methods offered by NodeUtils to retrieve the sizes :sparkles: PositionUtils, added methods to compute the position of a Node inside a Region according to the given parameters. These methods are copied from the Region class (positionInArea() methods) but they also have been slightly reviewed to be independent (can compute x and y separately or in one go) and still efficient :truck: Renamed RandomInstance to RandomUtils :sparkles: RandomUtils, added new useful methods Validation Package :boom: The validation API has been reworked from the ground up. The API is much inspired by the famous YAVI library, at least the basic architecture, there are also personal changes and of course it is adapted to JavaFX. Previously conditions(BooleanProperties) were directly stored in an ObservableList, now there's the concept of Constraint which allows storing more details about the condition. The default implementation allows to specify the Severity of the condition, the message that the invalid condition should carry and finally the BooleanExpression that is the condition itself. This construct makes the MFXValidator super flexible. Speaking of flexible I made some important design choices for the new validator. In all this time working on MaterialFX I definitely improved my programming skills but also gained some basic knowledge of design. Validation in UIs can vary a lot depending on the context and necessities, this is why MFXValidator unlike many other validation frameworks for JavaFX does not offer any way of decorating a control. The validation UI is completely entrusted to the user, it's also a matter of good programming as validation has nothing to do with UI, Single Responsibility Principle. For this reason all controls that previously were validated do not include any component to show the validator' state and do not define anymore the "triggers" to query the validator. The new Validated interface now serves the only purpose of telling the user "hey this control offers a MFXValidator if you need it", and also offers the PseudoClass to change the control's appearance in CSS according to the validator's state. Like the old validator, since it uses JavaFX properties, the state is automatically updated but since defining "triggers" is now a user task you have several ways of querying the validator's state. Examples on how to use the new Validation API will be included in the new MaterialFX Demo Resources :sparkles: Added some new icons :recycle: Minor changes to stylesheets Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
🏗️ 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>
The idea is to make the loading mechanism independent of UI. The previous architecture forced the user to create a VBox/HBox. With the new design the user can decide not only where to put the loaded views and how to manage them, but he can also specify per each view how to convert the loaded bean to a Node, which still makes fairly easy to create nav-bars/dashboards (see new DemoController once published for an example) Controls Package :recycle: MFXCheckListView, MFXListView, use constructor for building the virtual flow since latest VirtualizedFX version deprecated the Builder class Skins Package :recycle: MFXComboBoxSkin, MFXFilterComboBoxSkin, use constructor for building the virtual flow since latest VirtualizedFX version deprecated the Builder class :recycle: MFXRectangleToggleNodeSkin, better handle mouse events Utils Package :truck: Moved some classes to new specific packages, to keep the project more organized :fire: NodeUtils, removed all methods related to JavaFX's popups since not needed anymore, plus some API utilized will be deprecated in future Java releases Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
New demo finally available README.md updated Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Beans Package :sparkles: NumberRange, added new utility methods Controls Package :boom: AbstractMFXListCell, MFXTableRow, improved selection algorithm to also support "extend selection" behavior :boom: MFXComboBox, MFXTextField, MFXPasswordField, added default MFXContextMenu :boom: MFXTooltip, completely remade from scratch, shares structure with MFXContextMenu Dialogs Package :sparkles: MFXStageDialog, added center in owner node feature, also added a way to specify who to scrim, the owner node or the owner window, namely the ScrimPriority Notifications Package :recycle: MFXNotificationSystem, do not auto-hide the notification is the mouse is hover it Selection Package :boom: IMultipleSelectionModel and subclasses, implemented code to support "expand selection" feature Utils Package :sparkles: FXCollectors, added new util to create ObservableMaps Resources :recycle: Improved some stylesheets Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
📝 Added Wiki pages to the project 📝 Update README 📝 Added CHANGELOG Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
💥 Finally release version 11.13.0 on the main branch