mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-12 23:07:15 -06:00
FlatDefaultsAddon: added afterDefaultsLoading() method to allow modification of UI defaults by Addons
This commit is contained in:
@@ -17,6 +17,8 @@
|
|||||||
package com.formdev.flatlaf;
|
package com.formdev.flatlaf;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import javax.swing.LookAndFeel;
|
||||||
|
import javax.swing.UIDefaults;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Addon for FlatLaf UI defaults.
|
* Addon for FlatLaf UI defaults.
|
||||||
@@ -50,6 +52,13 @@ public abstract class FlatDefaultsAddon
|
|||||||
return addonClass.getResourceAsStream( propertiesName );
|
return addonClass.getResourceAsStream( propertiesName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows modifying UI defaults after loading UI defaults.
|
||||||
|
* The default implementation does nothing.
|
||||||
|
*/
|
||||||
|
public void afterDefaultsLoading( LookAndFeel laf, UIDefaults defaults ) {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the priority used to sort addon loading.
|
* Returns the priority used to sort addon loading.
|
||||||
* The order is only important if you want overwrite UI defaults of other addons.
|
* The order is only important if you want overwrite UI defaults of other addons.
|
||||||
|
|||||||
@@ -31,8 +31,10 @@ import java.beans.PropertyChangeEvent;
|
|||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.ServiceLoader;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@@ -266,12 +268,19 @@ public abstract class FlatLaf
|
|||||||
initIconColors( defaults, isDark() );
|
initIconColors( defaults, isDark() );
|
||||||
FlatInputMaps.initInputMaps( defaults );
|
FlatInputMaps.initInputMaps( defaults );
|
||||||
|
|
||||||
|
// get addons and sort them by priority
|
||||||
|
ServiceLoader<FlatDefaultsAddon> addonLoader = ServiceLoader.load( FlatDefaultsAddon.class );
|
||||||
|
List<FlatDefaultsAddon> addons = new ArrayList<>();
|
||||||
|
for( FlatDefaultsAddon addon : addonLoader )
|
||||||
|
addons.add( addon );
|
||||||
|
addons.sort( (addon1, addon2) -> addon1.getPriority() - addon2.getPriority() );
|
||||||
|
|
||||||
// load defaults from properties
|
// load defaults from properties
|
||||||
List<Class<?>> lafClassesForDefaultsLoading = getLafClassesForDefaultsLoading();
|
List<Class<?>> lafClassesForDefaultsLoading = getLafClassesForDefaultsLoading();
|
||||||
if( lafClassesForDefaultsLoading != null )
|
if( lafClassesForDefaultsLoading != null )
|
||||||
UIDefaultsLoader.loadDefaultsFromProperties( lafClassesForDefaultsLoading, defaults );
|
UIDefaultsLoader.loadDefaultsFromProperties( lafClassesForDefaultsLoading, addons, defaults );
|
||||||
else
|
else
|
||||||
UIDefaultsLoader.loadDefaultsFromProperties( getClass(), defaults );
|
UIDefaultsLoader.loadDefaultsFromProperties( getClass(), addons, defaults );
|
||||||
|
|
||||||
// use Aqua MenuBarUI if Mac screen menubar is enabled
|
// use Aqua MenuBarUI if Mac screen menubar is enabled
|
||||||
if( SystemInfo.IS_MAC && Boolean.getBoolean( "apple.laf.useScreenMenuBar" ) )
|
if( SystemInfo.IS_MAC && Boolean.getBoolean( "apple.laf.useScreenMenuBar" ) )
|
||||||
@@ -283,6 +292,10 @@ public abstract class FlatLaf
|
|||||||
// apply additional defaults (e.g. from IntelliJ themes)
|
// apply additional defaults (e.g. from IntelliJ themes)
|
||||||
applyAdditionalDefaults( defaults );
|
applyAdditionalDefaults( defaults );
|
||||||
|
|
||||||
|
// allow addons modifying UI defaults
|
||||||
|
for( FlatDefaultsAddon addon : addons )
|
||||||
|
addon.afterDefaultsLoading( this, defaults );
|
||||||
|
|
||||||
if( postInitialization != null ) {
|
if( postInitialization != null ) {
|
||||||
postInitialization.accept( defaults );
|
postInitialization.accept( defaults );
|
||||||
postInitialization = null;
|
postInitialization = null;
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import java.util.List;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.ServiceLoader;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.swing.UIDefaults;
|
import javax.swing.UIDefaults;
|
||||||
@@ -69,7 +68,9 @@ class UIDefaultsLoader
|
|||||||
private static final String OPTIONAL_PREFIX = "?";
|
private static final String OPTIONAL_PREFIX = "?";
|
||||||
private static final String GLOBAL_PREFIX = "*.";
|
private static final String GLOBAL_PREFIX = "*.";
|
||||||
|
|
||||||
static void loadDefaultsFromProperties( Class<?> lookAndFeelClass, UIDefaults defaults ) {
|
static void loadDefaultsFromProperties( Class<?> lookAndFeelClass, List<FlatDefaultsAddon> addons,
|
||||||
|
UIDefaults defaults )
|
||||||
|
{
|
||||||
// determine classes in class hierarchy in reverse order
|
// determine classes in class hierarchy in reverse order
|
||||||
ArrayList<Class<?>> lafClasses = new ArrayList<>();
|
ArrayList<Class<?>> lafClasses = new ArrayList<>();
|
||||||
for( Class<?> lafClass = lookAndFeelClass;
|
for( Class<?> lafClass = lookAndFeelClass;
|
||||||
@@ -79,10 +80,12 @@ class UIDefaultsLoader
|
|||||||
lafClasses.add( 0, lafClass );
|
lafClasses.add( 0, lafClass );
|
||||||
}
|
}
|
||||||
|
|
||||||
loadDefaultsFromProperties( lafClasses, defaults );
|
loadDefaultsFromProperties( lafClasses, addons, defaults );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void loadDefaultsFromProperties( List<Class<?>> lafClasses, UIDefaults defaults ) {
|
static void loadDefaultsFromProperties( List<Class<?>> lafClasses, List<FlatDefaultsAddon> addons,
|
||||||
|
UIDefaults defaults )
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
// load core properties files
|
// load core properties files
|
||||||
Properties properties = new Properties();
|
Properties properties = new Properties();
|
||||||
@@ -94,15 +97,8 @@ class UIDefaultsLoader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// get addons and sort them by priority
|
|
||||||
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
|
// load properties from addons
|
||||||
for( FlatDefaultsAddon addon : addonList ) {
|
for( FlatDefaultsAddon addon : addons ) {
|
||||||
for( Class<?> lafClass : lafClasses ) {
|
for( Class<?> lafClass : lafClasses ) {
|
||||||
try( InputStream in = addon.getDefaults( lafClass ) ) {
|
try( InputStream in = addon.getDefaults( lafClass ) ) {
|
||||||
if( in != null )
|
if( in != null )
|
||||||
@@ -113,7 +109,7 @@ class UIDefaultsLoader
|
|||||||
|
|
||||||
// collect addon class loaders
|
// collect addon class loaders
|
||||||
List<ClassLoader> addonClassLoaders = new ArrayList<>();
|
List<ClassLoader> addonClassLoaders = new ArrayList<>();
|
||||||
for( FlatDefaultsAddon addon : addonList ) {
|
for( FlatDefaultsAddon addon : addons ) {
|
||||||
ClassLoader addonClassLoader = addon.getClass().getClassLoader();
|
ClassLoader addonClassLoader = addon.getClass().getClassLoader();
|
||||||
if( !addonClassLoaders.contains( addonClassLoader ) )
|
if( !addonClassLoaders.contains( addonClassLoader ) )
|
||||||
addonClassLoaders.add( addonClassLoader );
|
addonClassLoaders.add( addonClassLoader );
|
||||||
|
|||||||
Reference in New Issue
Block a user