LafManager.java 2.8 KB
Newer Older
1 2
package jadx.gui.utils;

3 4 5 6 7
import java.util.LinkedHashMap;
import java.util.Map;

import javax.swing.UIManager;

8 9 10
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

11 12 13
import com.formdev.flatlaf.FlatDarculaLaf;
import com.formdev.flatlaf.FlatDarkLaf;
import com.formdev.flatlaf.FlatIntelliJLaf;
14
import com.formdev.flatlaf.FlatLaf;
15
import com.formdev.flatlaf.FlatLightLaf;
16
import com.formdev.flatlaf.extras.FlatAnimatedLafChange;
17
import com.formdev.flatlaf.intellijthemes.FlatAllIJThemes;
S
Skylot 已提交
18 19
import com.formdev.flatlaf.themes.FlatMacDarkLaf;
import com.formdev.flatlaf.themes.FlatMacLightLaf;
20 21

import jadx.gui.settings.JadxSettings;
22 23 24 25 26

public class LafManager {
	private static final Logger LOG = LoggerFactory.getLogger(LafManager.class);

	public static final String SYSTEM_THEME_NAME = "default";
27 28
	public static final String INITIAL_THEME_NAME = FlatLightLaf.NAME;

29 30 31 32 33 34 35 36 37 38 39 40 41
	private static final Map<String, String> THEMES_MAP = initThemesMap();

	public static void init(JadxSettings settings) {
		if (setupLaf(getThemeClass(settings))) {
			return;
		}
		setupLaf(SYSTEM_THEME_NAME);
		settings.setLafTheme(SYSTEM_THEME_NAME);
		settings.sync();
	}

	public static void updateLaf(JadxSettings settings) {
		if (setupLaf(getThemeClass(settings))) {
42
			// update all components
43
			FlatLaf.updateUI();
44
			FlatAnimatedLafChange.hideSnapshotWithAnimation();
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
		}
	}

	public static String[] getThemes() {
		return THEMES_MAP.keySet().toArray(new String[0]);
	}

	private static String getThemeClass(JadxSettings settings) {
		return THEMES_MAP.get(settings.getLafTheme());
	}

	private static boolean setupLaf(String themeClass) {
		if (SYSTEM_THEME_NAME.equals(themeClass)) {
			return applyLaf(UIManager.getSystemLookAndFeelClassName());
		}
		if (themeClass != null && !themeClass.isEmpty()) {
			return applyLaf(themeClass);
		}
		return false;
	}

	private static Map<String, String> initThemesMap() {
		Map<String, String> map = new LinkedHashMap<>();
		map.put(SYSTEM_THEME_NAME, SYSTEM_THEME_NAME);

70 71 72
		// default flatlaf themes
		map.put(FlatLightLaf.NAME, FlatLightLaf.class.getName());
		map.put(FlatDarkLaf.NAME, FlatDarkLaf.class.getName());
S
Skylot 已提交
73 74
		map.put(FlatMacLightLaf.NAME, FlatMacLightLaf.class.getName());
		map.put(FlatMacDarkLaf.NAME, FlatMacDarkLaf.class.getName());
75 76 77 78 79 80
		map.put(FlatIntelliJLaf.NAME, FlatIntelliJLaf.class.getName());
		map.put(FlatDarculaLaf.NAME, FlatDarculaLaf.class.getName());

		// themes from flatlaf-intellij-themes
		for (FlatAllIJThemes.FlatIJLookAndFeelInfo themeInfo : FlatAllIJThemes.INFOS) {
			map.put(themeInfo.getName(), themeInfo.getClassName());
81
		}
82
		return map;
83 84 85 86
	}

	private static boolean applyLaf(String theme) {
		try {
87
			FlatAnimatedLafChange.showSnapshot();
88 89 90 91 92 93 94 95
			UIManager.setLookAndFeel(theme);
			return true;
		} catch (Exception e) {
			LOG.error("Failed to set laf to {}", theme, e);
			return false;
		}
	}
}