mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-07 06:20:53 +03:00
UIDefaultsLoader: changed .properties file loading order: now all core .properties files are loaded before loading addon .properties files, which makes it easier to overwrite core values in addons; also, addon loading order can be specified
This commit is contained in:
@@ -3,6 +3,9 @@ FlatLaf Change Log
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
- Changed `.properties` file loading order: Now all core `.properties` files are
|
||||||
|
loaded before loading addon `.properties` files. This makes it easier to
|
||||||
|
overwrite core values in addons. Also, addon loading order can be specified.
|
||||||
- TableHeader: Paint column borders if renderer has changed, but delegates to
|
- TableHeader: Paint column borders if renderer has changed, but delegates to
|
||||||
the system default renderer (e.g. done in NetBeans).
|
the system default renderer (e.g. done in NetBeans).
|
||||||
|
|
||||||
|
|||||||
@@ -45,8 +45,18 @@ public abstract class FlatDefaultsAddon
|
|||||||
*/
|
*/
|
||||||
public InputStream getDefaults( Class<?> lafClass ) {
|
public InputStream getDefaults( Class<?> lafClass ) {
|
||||||
Class<?> addonClass = this.getClass();
|
Class<?> addonClass = this.getClass();
|
||||||
String propertiesName = "/" + addonClass.getPackage().getName().replace( '.', '/' )
|
String propertiesName = '/' + addonClass.getPackage().getName().replace( '.', '/' )
|
||||||
+ '/' + lafClass.getSimpleName() + ".properties";
|
+ '/' + lafClass.getSimpleName() + ".properties";
|
||||||
return addonClass.getResourceAsStream( propertiesName );
|
return addonClass.getResourceAsStream( propertiesName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the priority used to sort addon loading.
|
||||||
|
* The order is only important if you want overwrite UI defaults of other addons.
|
||||||
|
* Lower numbers mean higher priority.
|
||||||
|
* Returns 10000 by default.
|
||||||
|
*/
|
||||||
|
public int getPriority() {
|
||||||
|
return 10000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,32 +84,41 @@ class UIDefaultsLoader
|
|||||||
|
|
||||||
static void loadDefaultsFromProperties( List<Class<?>> lafClasses, UIDefaults defaults ) {
|
static void loadDefaultsFromProperties( List<Class<?>> lafClasses, UIDefaults defaults ) {
|
||||||
try {
|
try {
|
||||||
List<ClassLoader> addonClassLoaders = new ArrayList<>();
|
// load core properties files
|
||||||
|
|
||||||
// load properties files
|
|
||||||
Properties properties = new Properties();
|
Properties properties = new Properties();
|
||||||
ServiceLoader<FlatDefaultsAddon> addonLoader = ServiceLoader.load( FlatDefaultsAddon.class );
|
|
||||||
for( Class<?> lafClass : lafClasses ) {
|
for( Class<?> lafClass : lafClasses ) {
|
||||||
// load core properties
|
String propertiesName = '/' + lafClass.getName().replace( '.', '/' ) + ".properties";
|
||||||
String propertiesName = "/" + lafClass.getName().replace( '.', '/' ) + ".properties";
|
|
||||||
try( InputStream in = lafClass.getResourceAsStream( propertiesName ) ) {
|
try( InputStream in = lafClass.getResourceAsStream( propertiesName ) ) {
|
||||||
if( in != null )
|
if( in != null )
|
||||||
properties.load( in );
|
properties.load( in );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// load properties from addons
|
// get addons and sort them by priority
|
||||||
for( FlatDefaultsAddon addon : addonLoader ) {
|
ServiceLoader<FlatDefaultsAddon> addonLoader = ServiceLoader.load( FlatDefaultsAddon.class );
|
||||||
|
List<FlatDefaultsAddon> addonList = new ArrayList<>();
|
||||||
|
for( FlatDefaultsAddon addon : addonLoader )
|
||||||
|
addonList.add( addon );
|
||||||
|
addonList.sort( (addon1, addon2) -> addon1.getPriority() - addon2.getPriority() );
|
||||||
|
|
||||||
|
// load properties from addons
|
||||||
|
for( FlatDefaultsAddon addon : addonList ) {
|
||||||
|
for( Class<?> lafClass : lafClasses ) {
|
||||||
try( InputStream in = addon.getDefaults( lafClass ) ) {
|
try( InputStream in = addon.getDefaults( lafClass ) ) {
|
||||||
if( in != null )
|
if( in != null )
|
||||||
properties.load( in );
|
properties.load( in );
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassLoader addonClassLoader = addon.getClass().getClassLoader();
|
|
||||||
if( !addonClassLoaders.contains( addonClassLoader ) )
|
|
||||||
addonClassLoaders.add( addonClassLoader );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// collect addon class loaders
|
||||||
|
List<ClassLoader> addonClassLoaders = new ArrayList<>();
|
||||||
|
for( FlatDefaultsAddon addon : addonList ) {
|
||||||
|
ClassLoader addonClassLoader = addon.getClass().getClassLoader();
|
||||||
|
if( !addonClassLoaders.contains( addonClassLoader ) )
|
||||||
|
addonClassLoaders.add( addonClassLoader );
|
||||||
|
}
|
||||||
|
|
||||||
// collect all platform specific keys (but do not modify properties)
|
// collect all platform specific keys (but do not modify properties)
|
||||||
ArrayList<String> platformSpecificKeys = new ArrayList<>();
|
ArrayList<String> platformSpecificKeys = new ArrayList<>();
|
||||||
for( Object key : properties.keySet() ) {
|
for( Object key : properties.keySet() ) {
|
||||||
|
|||||||
@@ -46,6 +46,11 @@ public class FlatJideOssDefaultsAddon
|
|||||||
return super.getDefaults( lafClass );
|
return super.getDefaults( lafClass );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPriority() {
|
||||||
|
return 11;
|
||||||
|
}
|
||||||
|
|
||||||
//---- class FlatJideUIDefaultsCustomizer ---------------------------------
|
//---- class FlatJideUIDefaultsCustomizer ---------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -29,4 +29,8 @@ import com.formdev.flatlaf.FlatDefaultsAddon;
|
|||||||
public class FlatSwingXDefaultsAddon
|
public class FlatSwingXDefaultsAddon
|
||||||
extends FlatDefaultsAddon
|
extends FlatDefaultsAddon
|
||||||
{
|
{
|
||||||
|
@Override
|
||||||
|
public int getPriority() {
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user