mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
GP-1981 Moved Most Theming classes from Docking to Generic module
This commit is contained in:
parent
d588daaca6
commit
b4d2271474
153 changed files with 466 additions and 333 deletions
|
@ -18,7 +18,7 @@ package ghidra;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import ghidra.framework.options.Options;
|
import ghidra.framework.options.Options;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -26,11 +26,11 @@ import javax.swing.event.ChangeEvent;
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
import docking.action.DockingAction;
|
import docking.action.DockingAction;
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.fieldpanel.*;
|
import docking.widgets.fieldpanel.*;
|
||||||
import docking.widgets.fieldpanel.field.Field;
|
import docking.widgets.fieldpanel.field.Field;
|
||||||
import docking.widgets.fieldpanel.support.FieldLocation;
|
import docking.widgets.fieldpanel.support.FieldLocation;
|
||||||
import docking.widgets.fieldpanel.support.FieldSelection;
|
import docking.widgets.fieldpanel.support.FieldSelection;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.GhidraOptions;
|
import ghidra.GhidraOptions;
|
||||||
import ghidra.app.events.ProgramHighlightPluginEvent;
|
import ghidra.app.events.ProgramHighlightPluginEvent;
|
||||||
import ghidra.app.events.ProgramSelectionPluginEvent;
|
import ghidra.app.events.ProgramSelectionPluginEvent;
|
||||||
|
|
|
@ -26,10 +26,10 @@ import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.fieldpanel.field.FieldElement;
|
import docking.widgets.fieldpanel.field.FieldElement;
|
||||||
import docking.widgets.fieldpanel.support.FieldLocation;
|
import docking.widgets.fieldpanel.support.FieldLocation;
|
||||||
import docking.widgets.fieldpanel.support.Highlight;
|
import docking.widgets.fieldpanel.support.Highlight;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.GhidraOptions;
|
import ghidra.GhidraOptions;
|
||||||
import ghidra.GhidraOptions.CURSOR_MOUSE_BUTTON_NAMES;
|
import ghidra.GhidraOptions.CURSOR_MOUSE_BUTTON_NAMES;
|
||||||
import ghidra.app.plugin.processors.generic.PcodeFieldFactory;
|
import ghidra.app.plugin.processors.generic.PcodeFieldFactory;
|
||||||
|
|
|
@ -18,8 +18,8 @@ package ghidra.app.plugin.core.codebrowser;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.fieldpanel.support.BackgroundColorModel;
|
import docking.widgets.fieldpanel.support.BackgroundColorModel;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.app.services.MarkerService;
|
import ghidra.app.services.MarkerService;
|
||||||
import ghidra.app.util.viewer.listingpanel.ListingBackgroundColorModel;
|
import ghidra.app.util.viewer.listingpanel.ListingBackgroundColorModel;
|
||||||
import ghidra.app.util.viewer.listingpanel.ListingPanel;
|
import ghidra.app.util.viewer.listingpanel.ListingPanel;
|
||||||
|
|
|
@ -19,8 +19,8 @@ import java.awt.*;
|
||||||
|
|
||||||
import javax.swing.Icon;
|
import javax.swing.Icon;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import docking.theme.GThemeDefaults.Colors.Palette;
|
import generic.theme.GThemeDefaults.Colors.Palette;
|
||||||
|
|
||||||
class BackgroundIcon implements Icon {
|
class BackgroundIcon implements Icon {
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ import javax.swing.text.*;
|
||||||
|
|
||||||
import docking.DockingUtils;
|
import docking.DockingUtils;
|
||||||
import docking.actions.KeyBindingUtils;
|
import docking.actions.KeyBindingUtils;
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import generic.util.WindowUtilities;
|
import generic.util.WindowUtilities;
|
||||||
import ghidra.app.plugin.core.console.CodeCompletion;
|
import ghidra.app.plugin.core.console.CodeCompletion;
|
||||||
import ghidra.framework.options.OptionsChangeListener;
|
import ghidra.framework.options.OptionsChangeListener;
|
||||||
|
|
|
@ -26,12 +26,12 @@ import javax.swing.*;
|
||||||
import javax.swing.event.TableModelEvent;
|
import javax.swing.event.TableModelEvent;
|
||||||
|
|
||||||
import docking.action.builder.ActionBuilder;
|
import docking.action.builder.ActionBuilder;
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.filechooser.GhidraFileChooser;
|
import docking.widgets.filechooser.GhidraFileChooser;
|
||||||
import docking.widgets.filechooser.GhidraFileChooserMode;
|
import docking.widgets.filechooser.GhidraFileChooserMode;
|
||||||
import docking.widgets.table.GTable;
|
import docking.widgets.table.GTable;
|
||||||
import docking.widgets.table.GTableFilterPanel;
|
import docking.widgets.table.GTableFilterPanel;
|
||||||
import generic.jar.ResourceFile;
|
import generic.jar.ResourceFile;
|
||||||
|
import generic.theme.GColor;
|
||||||
import generic.util.Path;
|
import generic.util.Path;
|
||||||
import ghidra.app.services.ConsoleService;
|
import ghidra.app.services.ConsoleService;
|
||||||
import ghidra.framework.plugintool.ComponentProviderAdapter;
|
import ghidra.framework.plugintool.ComponentProviderAdapter;
|
||||||
|
|
|
@ -27,9 +27,9 @@ import javax.swing.event.TableModelEvent;
|
||||||
|
|
||||||
import org.osgi.framework.Bundle;
|
import org.osgi.framework.Bundle;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.table.*;
|
import docking.widgets.table.*;
|
||||||
import generic.jar.ResourceFile;
|
import generic.jar.ResourceFile;
|
||||||
|
import generic.theme.GColor;
|
||||||
import generic.util.Path;
|
import generic.util.Path;
|
||||||
import ghidra.docking.settings.Settings;
|
import ghidra.docking.settings.Settings;
|
||||||
import ghidra.framework.plugintool.ServiceProvider;
|
import ghidra.framework.plugintool.ServiceProvider;
|
||||||
|
|
|
@ -22,8 +22,8 @@ import java.util.*;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.tree.DefaultTreeCellRenderer;
|
import javax.swing.tree.DefaultTreeCellRenderer;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.GComponent;
|
import docking.widgets.GComponent;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.program.model.listing.Group;
|
import ghidra.program.model.listing.Group;
|
||||||
import resources.ResourceManager;
|
import resources.ResourceManager;
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,9 @@ import javax.swing.*;
|
||||||
|
|
||||||
import docking.*;
|
import docking.*;
|
||||||
import docking.widgets.label.GLabel;
|
import docking.widgets.label.GLabel;
|
||||||
|
import generic.util.action.ReservedKeyBindings;
|
||||||
import ghidra.framework.plugintool.Plugin;
|
import ghidra.framework.plugintool.Plugin;
|
||||||
import ghidra.util.HelpLocation;
|
import ghidra.util.HelpLocation;
|
||||||
import ghidra.util.ReservedKeyBindings;
|
|
||||||
|
|
||||||
class KeyBindingInputDialog extends DialogComponentProvider implements KeyEntryListener {
|
class KeyBindingInputDialog extends DialogComponentProvider implements KeyEntryListener {
|
||||||
private KeyEntryTextField kbField;
|
private KeyEntryTextField kbField;
|
||||||
|
|
|
@ -17,7 +17,7 @@ package ghidra.app.util;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Miscellaneous defined constants
|
* Miscellaneous defined constants
|
||||||
|
|
|
@ -20,8 +20,8 @@ import java.math.BigInteger;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.fieldpanel.support.BackgroundColorModel;
|
import docking.widgets.fieldpanel.support.BackgroundColorModel;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.app.util.viewer.util.AddressIndexMap;
|
import ghidra.app.util.viewer.util.AddressIndexMap;
|
||||||
import ghidra.framework.model.DomainObjectChangedEvent;
|
import ghidra.framework.model.DomainObjectChangedEvent;
|
||||||
import ghidra.framework.model.DomainObjectListener;
|
import ghidra.framework.model.DomainObjectListener;
|
||||||
|
|
|
@ -27,7 +27,6 @@ import java.util.stream.IntStream;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.checkbox.GCheckBox;
|
import docking.widgets.checkbox.GCheckBox;
|
||||||
import docking.widgets.combobox.GComboBox;
|
import docking.widgets.combobox.GComboBox;
|
||||||
import docking.widgets.fieldpanel.*;
|
import docking.widgets.fieldpanel.*;
|
||||||
|
@ -36,6 +35,7 @@ import docking.widgets.fieldpanel.listener.LayoutModelListener;
|
||||||
import docking.widgets.fieldpanel.support.*;
|
import docking.widgets.fieldpanel.support.*;
|
||||||
import docking.widgets.indexedscrollpane.IndexedScrollPane;
|
import docking.widgets.indexedscrollpane.IndexedScrollPane;
|
||||||
import docking.widgets.label.GDLabel;
|
import docking.widgets.label.GDLabel;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.GhidraOptions;
|
import ghidra.GhidraOptions;
|
||||||
import ghidra.util.SystemUtilities;
|
import ghidra.util.SystemUtilities;
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,8 @@ import javax.help.HelpSetException;
|
||||||
|
|
||||||
import docking.help.*;
|
import docking.help.*;
|
||||||
import generic.jar.ResourceFile;
|
import generic.jar.ResourceFile;
|
||||||
|
import generic.theme.Gui;
|
||||||
|
import generic.theme.ThemeListener;
|
||||||
import ghidra.framework.Application;
|
import ghidra.framework.Application;
|
||||||
import ghidra.util.Msg;
|
import ghidra.util.Msg;
|
||||||
import help.HelpService;
|
import help.HelpService;
|
||||||
|
@ -36,6 +38,7 @@ import resources.ResourceManager;
|
||||||
public class GhidraHelpService extends HelpManager {
|
public class GhidraHelpService extends HelpManager {
|
||||||
|
|
||||||
private static final String MASTER_HELP_SET_HS = "Base_HelpSet.hs";
|
private static final String MASTER_HELP_SET_HS = "Base_HelpSet.hs";
|
||||||
|
private ThemeListener listener = t -> reload();
|
||||||
|
|
||||||
public static void install() {
|
public static void install() {
|
||||||
try {
|
try {
|
||||||
|
@ -50,6 +53,7 @@ public class GhidraHelpService extends HelpManager {
|
||||||
super(findMasterHelpSetUrl());
|
super(findMasterHelpSetUrl());
|
||||||
loadHelpSets();
|
loadHelpSets();
|
||||||
registerHelp();
|
registerHelp();
|
||||||
|
Gui.addThemeListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static URL findMasterHelpSetUrl() {
|
private static URL findMasterHelpSetUrl() {
|
||||||
|
|
|
@ -19,8 +19,9 @@ import docking.DockingErrorDisplay;
|
||||||
import docking.DockingWindowManager;
|
import docking.DockingWindowManager;
|
||||||
import docking.framework.ApplicationInformationDisplayFactory;
|
import docking.framework.ApplicationInformationDisplayFactory;
|
||||||
import docking.framework.SplashScreen;
|
import docking.framework.SplashScreen;
|
||||||
import docking.theme.Gui;
|
|
||||||
import docking.widgets.PopupKeyStorePasswordProvider;
|
import docking.widgets.PopupKeyStorePasswordProvider;
|
||||||
|
import generic.theme.Gui;
|
||||||
|
import ghidra.docking.util.LookAndFeelUtils;
|
||||||
import ghidra.formats.gfilesystem.crypto.CryptoProviders;
|
import ghidra.formats.gfilesystem.crypto.CryptoProviders;
|
||||||
import ghidra.formats.gfilesystem.crypto.PopupGUIPasswordProvider;
|
import ghidra.formats.gfilesystem.crypto.PopupGUIPasswordProvider;
|
||||||
import ghidra.framework.main.GhidraApplicationInformationDisplayFactory;
|
import ghidra.framework.main.GhidraApplicationInformationDisplayFactory;
|
||||||
|
@ -43,6 +44,7 @@ public class GhidraApplicationConfiguration extends HeadlessGhidraApplicationCon
|
||||||
@Override
|
@Override
|
||||||
protected void initializeApplication() {
|
protected void initializeApplication() {
|
||||||
Gui.initialize();
|
Gui.initialize();
|
||||||
|
LookAndFeelUtils.platformSpecificFixups();
|
||||||
|
|
||||||
if (showSplashScreen) {
|
if (showSplashScreen) {
|
||||||
showUserAgreement();
|
showUserAgreement();
|
||||||
|
@ -51,8 +53,8 @@ public class GhidraApplicationConfiguration extends HeadlessGhidraApplicationCon
|
||||||
|
|
||||||
super.initializeApplication();
|
super.initializeApplication();
|
||||||
|
|
||||||
ApplicationKeyManagerFactory.setKeyStorePasswordProvider(
|
ApplicationKeyManagerFactory
|
||||||
new PopupKeyStorePasswordProvider());
|
.setKeyStorePasswordProvider(new PopupKeyStorePasswordProvider());
|
||||||
CryptoProviders.getInstance().registerCryptoProvider(new PopupGUIPasswordProvider());
|
CryptoProviders.getInstance().registerCryptoProvider(new PopupGUIPasswordProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ import java.util.LinkedList;
|
||||||
import javax.swing.JTextPane;
|
import javax.swing.JTextPane;
|
||||||
import javax.swing.text.*;
|
import javax.swing.text.*;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import ghidra.framework.options.*;
|
import ghidra.framework.options.*;
|
||||||
import ghidra.framework.plugintool.PluginTool;
|
import ghidra.framework.plugintool.PluginTool;
|
||||||
import ghidra.util.Msg;
|
import ghidra.util.Msg;
|
||||||
|
|
|
@ -25,9 +25,9 @@ import javax.swing.event.HyperlinkEvent;
|
||||||
import javax.swing.text.View;
|
import javax.swing.text.View;
|
||||||
|
|
||||||
import docking.DockingUtils;
|
import docking.DockingUtils;
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.*;
|
import docking.widgets.*;
|
||||||
import docking.widgets.label.*;
|
import docking.widgets.label.*;
|
||||||
|
import generic.theme.GColor;
|
||||||
import generic.util.WindowUtilities;
|
import generic.util.WindowUtilities;
|
||||||
import ghidra.framework.Application;
|
import ghidra.framework.Application;
|
||||||
import ghidra.framework.ApplicationProperties;
|
import ghidra.framework.ApplicationProperties;
|
||||||
|
|
|
@ -21,8 +21,8 @@ import java.awt.Font;
|
||||||
import javax.swing.JTable;
|
import javax.swing.JTable;
|
||||||
import javax.swing.table.TableModel;
|
import javax.swing.table.TableModel;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.table.GTableCellRenderer;
|
import docking.widgets.table.GTableCellRenderer;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.program.model.address.Address;
|
import ghidra.program.model.address.Address;
|
||||||
import ghidra.program.model.listing.Program;
|
import ghidra.program.model.listing.Program;
|
||||||
import ghidra.program.model.mem.Memory;
|
import ghidra.program.model.mem.Memory;
|
||||||
|
|
|
@ -25,7 +25,7 @@ import java.util.List;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
|
|
||||||
import docking.action.ToggleDockingAction;
|
import docking.action.ToggleDockingAction;
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import ghidra.GhidraOptions;
|
import ghidra.GhidraOptions;
|
||||||
import ghidra.GhidraOptions.CURSOR_MOUSE_BUTTON_NAMES;
|
import ghidra.GhidraOptions.CURSOR_MOUSE_BUTTON_NAMES;
|
||||||
import ghidra.app.plugin.core.format.*;
|
import ghidra.app.plugin.core.format.*;
|
||||||
|
|
|
@ -23,7 +23,7 @@ import java.util.List;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.event.*;
|
import javax.swing.event.*;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
import docking.help.HelpService;
|
||||||
import docking.widgets.fieldpanel.*;
|
import docking.widgets.fieldpanel.*;
|
||||||
import docking.widgets.fieldpanel.field.EmptyTextField;
|
import docking.widgets.fieldpanel.field.EmptyTextField;
|
||||||
import docking.widgets.fieldpanel.field.Field;
|
import docking.widgets.fieldpanel.field.Field;
|
||||||
|
@ -32,6 +32,7 @@ import docking.widgets.fieldpanel.support.*;
|
||||||
import docking.widgets.indexedscrollpane.*;
|
import docking.widgets.indexedscrollpane.*;
|
||||||
import docking.widgets.label.GDLabel;
|
import docking.widgets.label.GDLabel;
|
||||||
import docking.widgets.label.GLabel;
|
import docking.widgets.label.GLabel;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.app.plugin.core.format.*;
|
import ghidra.app.plugin.core.format.*;
|
||||||
import ghidra.app.util.viewer.listingpanel.AddressSetDisplayListener;
|
import ghidra.app.util.viewer.listingpanel.AddressSetDisplayListener;
|
||||||
import ghidra.program.model.address.AddressSet;
|
import ghidra.program.model.address.AddressSet;
|
||||||
|
@ -42,7 +43,6 @@ import ghidra.util.exception.InvalidInputException;
|
||||||
import ghidra.util.layout.HorizontalLayout;
|
import ghidra.util.layout.HorizontalLayout;
|
||||||
import ghidra.util.layout.PairLayout;
|
import ghidra.util.layout.PairLayout;
|
||||||
import help.Help;
|
import help.Help;
|
||||||
import help.HelpService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Top level component that contains has a scrolled pane for the panel of components that show the
|
* Top level component that contains has a scrolled pane for the panel of components that show the
|
||||||
|
|
|
@ -24,7 +24,7 @@ import java.awt.Font;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import ghidra.GhidraOptions.CURSOR_MOUSE_BUTTON_NAMES;
|
import ghidra.GhidraOptions.CURSOR_MOUSE_BUTTON_NAMES;
|
||||||
import ghidra.app.util.HelpTopics;
|
import ghidra.app.util.HelpTopics;
|
||||||
import ghidra.framework.options.Options;
|
import ghidra.framework.options.Options;
|
||||||
|
|
|
@ -24,7 +24,7 @@ import org.jdom.Element;
|
||||||
import docking.ComponentPlaceholder;
|
import docking.ComponentPlaceholder;
|
||||||
import docking.DockingWindowManager;
|
import docking.DockingWindowManager;
|
||||||
import docking.options.editor.GhidraColorChooser;
|
import docking.options.editor.GhidraColorChooser;
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.vertex.FGVertex;
|
import ghidra.app.plugin.core.functiongraph.graph.vertex.FGVertex;
|
||||||
import ghidra.app.plugin.core.functiongraph.mvc.FunctionGraphVertexAttributes;
|
import ghidra.app.plugin.core.functiongraph.mvc.FunctionGraphVertexAttributes;
|
||||||
import ghidra.framework.options.SaveState;
|
import ghidra.framework.options.SaveState;
|
||||||
|
|
|
@ -21,12 +21,12 @@ import java.util.Map.Entry;
|
||||||
|
|
||||||
import org.jdom.Element;
|
import org.jdom.Element;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import edu.uci.ics.jung.algorithms.layout.Layout;
|
import edu.uci.ics.jung.algorithms.layout.Layout;
|
||||||
import edu.uci.ics.jung.visualization.RenderContext;
|
import edu.uci.ics.jung.visualization.RenderContext;
|
||||||
import edu.uci.ics.jung.visualization.picking.PickedState;
|
import edu.uci.ics.jung.visualization.picking.PickedState;
|
||||||
import edu.uci.ics.jung.visualization.renderers.Renderer;
|
import edu.uci.ics.jung.visualization.renderers.Renderer;
|
||||||
import edu.uci.ics.jung.visualization.util.Caching;
|
import edu.uci.ics.jung.visualization.util.Caching;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.jung.renderer.FGVertexRenderer;
|
import ghidra.app.plugin.core.functiongraph.graph.jung.renderer.FGVertexRenderer;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.jung.transformer.FGVertexPickableBackgroundPaintTransformer;
|
import ghidra.app.plugin.core.functiongraph.graph.jung.transformer.FGVertexPickableBackgroundPaintTransformer;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.layout.FGLayout;
|
import ghidra.app.plugin.core.functiongraph.graph.layout.FGLayout;
|
||||||
|
|
|
@ -21,8 +21,8 @@ import java.util.Objects;
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
|
|
||||||
import docking.theme.Gui;
|
|
||||||
import edu.uci.ics.jung.visualization.picking.PickedInfo;
|
import edu.uci.ics.jung.visualization.picking.PickedInfo;
|
||||||
|
import generic.theme.Gui;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.FGVertexType;
|
import ghidra.app.plugin.core.functiongraph.graph.FGVertexType;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.vertex.FGVertex;
|
import ghidra.app.plugin.core.functiongraph.graph.vertex.FGVertex;
|
||||||
import ghidra.program.util.ProgramSelection;
|
import ghidra.program.util.ProgramSelection;
|
||||||
|
|
|
@ -21,8 +21,8 @@ import java.awt.geom.Point2D;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
import docking.theme.GThemeDefaults.Colors;
|
|
||||||
import edu.uci.ics.jung.visualization.VisualizationViewer;
|
import edu.uci.ics.jung.visualization.VisualizationViewer;
|
||||||
|
import generic.theme.GThemeDefaults.Colors;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
||||||
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
|
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
|
||||||
import ghidra.app.plugin.core.functiongraph.mvc.FGView;
|
import ghidra.app.plugin.core.functiongraph.mvc.FGView;
|
||||||
|
|
|
@ -20,7 +20,7 @@ import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
|
|
||||||
import docking.theme.GThemeDefaults.Colors;
|
import generic.theme.GThemeDefaults.Colors;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.FGVertexType;
|
import ghidra.app.plugin.core.functiongraph.graph.FGVertexType;
|
||||||
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
|
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
|
||||||
|
|
|
@ -27,7 +27,7 @@ import docking.ActionContext;
|
||||||
import docking.GenericHeader;
|
import docking.GenericHeader;
|
||||||
import docking.action.DockingAction;
|
import docking.action.DockingAction;
|
||||||
import docking.action.ToolBarData;
|
import docking.action.ToolBarData;
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
|
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
||||||
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
|
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
|
||||||
|
|
|
@ -32,13 +32,13 @@ import docking.ActionContext;
|
||||||
import docking.GenericHeader;
|
import docking.GenericHeader;
|
||||||
import docking.action.DockingAction;
|
import docking.action.DockingAction;
|
||||||
import docking.action.ToolBarData;
|
import docking.action.ToolBarData;
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.theme.GThemeDefaults.Colors;
|
|
||||||
import docking.widgets.fieldpanel.FieldPanel;
|
import docking.widgets.fieldpanel.FieldPanel;
|
||||||
import docking.widgets.fieldpanel.Layout;
|
import docking.widgets.fieldpanel.Layout;
|
||||||
import docking.widgets.fieldpanel.field.Field;
|
import docking.widgets.fieldpanel.field.Field;
|
||||||
import docking.widgets.fieldpanel.support.BackgroundColorModel;
|
import docking.widgets.fieldpanel.support.BackgroundColorModel;
|
||||||
import docking.widgets.label.GDLabel;
|
import docking.widgets.label.GDLabel;
|
||||||
|
import generic.theme.GColor;
|
||||||
|
import generic.theme.GThemeDefaults.Colors;
|
||||||
import ghidra.app.plugin.core.codebrowser.hover.ListingHoverService;
|
import ghidra.app.plugin.core.codebrowser.hover.ListingHoverService;
|
||||||
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
|
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
||||||
|
|
|
@ -25,7 +25,7 @@ import docking.ActionContext;
|
||||||
import docking.action.*;
|
import docking.action.*;
|
||||||
import docking.menu.MultiActionDockingAction;
|
import docking.menu.MultiActionDockingAction;
|
||||||
import docking.menu.MultipleActionDockingToolbarButton;
|
import docking.menu.MultipleActionDockingToolbarButton;
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import ghidra.app.plugin.core.functiongraph.FGColorProvider;
|
import ghidra.app.plugin.core.functiongraph.FGColorProvider;
|
||||||
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
|
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
|
||||||
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
|
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
|
||||||
|
|
|
@ -19,8 +19,8 @@ import java.awt.Color;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import docking.theme.GThemeDefaults.Colors.Palette;
|
import generic.theme.GThemeDefaults.Colors.Palette;
|
||||||
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
|
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.layout.FGLayoutOptions;
|
import ghidra.app.plugin.core.functiongraph.graph.layout.FGLayoutOptions;
|
||||||
import ghidra.framework.options.Options;
|
import ghidra.framework.options.Options;
|
||||||
|
|
|
@ -26,8 +26,8 @@ import org.junit.*;
|
||||||
|
|
||||||
import docking.ActionContext;
|
import docking.ActionContext;
|
||||||
import docking.action.DockingActionIf;
|
import docking.action.DockingActionIf;
|
||||||
import docking.theme.GThemeDefaults.Colors.Palette;
|
|
||||||
import edu.uci.ics.jung.graph.Graph;
|
import edu.uci.ics.jung.graph.Graph;
|
||||||
|
import generic.theme.GThemeDefaults.Colors.Palette;
|
||||||
import ghidra.app.plugin.core.clear.ClearPlugin;
|
import ghidra.app.plugin.core.clear.ClearPlugin;
|
||||||
import ghidra.app.plugin.core.codebrowser.CodeBrowserPlugin;
|
import ghidra.app.plugin.core.codebrowser.CodeBrowserPlugin;
|
||||||
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
||||||
|
|
|
@ -32,12 +32,12 @@ import docking.ActionContext;
|
||||||
import docking.ComponentProvider;
|
import docking.ComponentProvider;
|
||||||
import docking.action.DockingAction;
|
import docking.action.DockingAction;
|
||||||
import docking.dnd.GClipboard;
|
import docking.dnd.GClipboard;
|
||||||
import docking.theme.GThemeDefaults.Colors.Palette;
|
|
||||||
import edu.uci.ics.jung.algorithms.layout.Layout;
|
import edu.uci.ics.jung.algorithms.layout.Layout;
|
||||||
import edu.uci.ics.jung.visualization.VisualizationModel;
|
import edu.uci.ics.jung.visualization.VisualizationModel;
|
||||||
import edu.uci.ics.jung.visualization.VisualizationViewer;
|
import edu.uci.ics.jung.visualization.VisualizationViewer;
|
||||||
import edu.uci.ics.jung.visualization.util.Caching;
|
import edu.uci.ics.jung.visualization.util.Caching;
|
||||||
import generic.test.TestUtils;
|
import generic.test.TestUtils;
|
||||||
|
import generic.theme.GThemeDefaults.Colors.Palette;
|
||||||
import ghidra.app.cmd.label.AddLabelCmd;
|
import ghidra.app.cmd.label.AddLabelCmd;
|
||||||
import ghidra.app.events.ProgramSelectionPluginEvent;
|
import ghidra.app.events.ProgramSelectionPluginEvent;
|
||||||
import ghidra.app.nav.LocationMemento;
|
import ghidra.app.nav.LocationMemento;
|
||||||
|
|
|
@ -27,9 +27,9 @@ import javax.swing.JComponent;
|
||||||
import org.junit.*;
|
import org.junit.*;
|
||||||
|
|
||||||
import docking.action.DockingActionIf;
|
import docking.action.DockingActionIf;
|
||||||
import docking.theme.GThemeDefaults.Colors.Palette;
|
|
||||||
import edu.uci.ics.jung.graph.Graph;
|
import edu.uci.ics.jung.graph.Graph;
|
||||||
import generic.test.TestUtils;
|
import generic.test.TestUtils;
|
||||||
|
import generic.theme.GThemeDefaults.Colors.Palette;
|
||||||
import ghidra.app.cmd.label.AddLabelCmd;
|
import ghidra.app.cmd.label.AddLabelCmd;
|
||||||
import ghidra.app.cmd.label.DeleteLabelCmd;
|
import ghidra.app.cmd.label.DeleteLabelCmd;
|
||||||
import ghidra.app.cmd.refs.AddMemRefCmd;
|
import ghidra.app.cmd.refs.AddMemRefCmd;
|
||||||
|
|
|
@ -23,8 +23,8 @@ import java.util.List;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
import docking.DialogComponentProvider;
|
import docking.DialogComponentProvider;
|
||||||
import docking.theme.GThemeDefaults;
|
|
||||||
import docking.widgets.checkbox.GCheckBox;
|
import docking.widgets.checkbox.GCheckBox;
|
||||||
|
import generic.theme.GThemeDefaults;
|
||||||
import ghidra.feature.fid.db.FidFile;
|
import ghidra.feature.fid.db.FidFile;
|
||||||
import ghidra.util.HelpLocation;
|
import ghidra.util.HelpLocation;
|
||||||
import ghidra.util.layout.VerticalLayout;
|
import ghidra.util.layout.VerticalLayout;
|
||||||
|
|
|
@ -26,11 +26,11 @@ import javax.swing.*;
|
||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
import javax.swing.border.LineBorder;
|
import javax.swing.border.LineBorder;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.theme.GThemeDefaults.Colors.Palette;
|
|
||||||
import docking.theme.Gui;
|
|
||||||
import docking.widgets.EmptyBorderButton;
|
import docking.widgets.EmptyBorderButton;
|
||||||
import docking.widgets.label.GDLabel;
|
import docking.widgets.label.GDLabel;
|
||||||
|
import generic.theme.GColor;
|
||||||
|
import generic.theme.Gui;
|
||||||
|
import generic.theme.GThemeDefaults.Colors.Palette;
|
||||||
import ghidra.graph.viewer.vertex.AbstractVisualVertex;
|
import ghidra.graph.viewer.vertex.AbstractVisualVertex;
|
||||||
import ghidra.graph.viewer.vertex.VertexShapeProvider;
|
import ghidra.graph.viewer.vertex.VertexShapeProvider;
|
||||||
import ghidra.program.model.address.Address;
|
import ghidra.program.model.address.Address;
|
||||||
|
|
|
@ -15,12 +15,12 @@
|
||||||
*/
|
*/
|
||||||
package functioncalls.graph.view;
|
package functioncalls.graph.view;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import edu.uci.ics.jung.visualization.renderers.Renderer;
|
import edu.uci.ics.jung.visualization.renderers.Renderer;
|
||||||
import functioncalls.graph.*;
|
import functioncalls.graph.*;
|
||||||
import functioncalls.graph.renderer.FcgEdgePaintTransformer;
|
import functioncalls.graph.renderer.FcgEdgePaintTransformer;
|
||||||
import functioncalls.graph.renderer.FcgVertexPaintTransformer;
|
import functioncalls.graph.renderer.FcgVertexPaintTransformer;
|
||||||
import functioncalls.plugin.FunctionCallGraphPlugin;
|
import functioncalls.plugin.FunctionCallGraphPlugin;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.graph.viewer.*;
|
import ghidra.graph.viewer.*;
|
||||||
import ghidra.graph.viewer.edge.VisualEdgeRenderer;
|
import ghidra.graph.viewer.edge.VisualEdgeRenderer;
|
||||||
import ghidra.graph.viewer.layout.VisualGraphLayout;
|
import ghidra.graph.viewer.layout.VisualGraphLayout;
|
||||||
|
|
|
@ -50,9 +50,9 @@ import docking.action.builder.*;
|
||||||
import docking.menu.ActionState;
|
import docking.menu.ActionState;
|
||||||
import docking.menu.MultiStateDockingAction;
|
import docking.menu.MultiStateDockingAction;
|
||||||
import docking.options.editor.OptionsDialog;
|
import docking.options.editor.OptionsDialog;
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.EventTrigger;
|
import docking.widgets.EventTrigger;
|
||||||
import docking.widgets.OptionDialog;
|
import docking.widgets.OptionDialog;
|
||||||
|
import generic.theme.GColor;
|
||||||
import generic.util.WindowUtilities;
|
import generic.util.WindowUtilities;
|
||||||
import ghidra.framework.options.Options;
|
import ghidra.framework.options.Options;
|
||||||
import ghidra.framework.options.ToolOptions;
|
import ghidra.framework.options.ToolOptions;
|
||||||
|
|
|
@ -26,13 +26,14 @@ import javax.swing.text.*;
|
||||||
import javax.swing.tree.TreeSelectionModel;
|
import javax.swing.tree.TreeSelectionModel;
|
||||||
|
|
||||||
import docking.DockingUtils;
|
import docking.DockingUtils;
|
||||||
import docking.theme.GColor;
|
import docking.help.HelpService;
|
||||||
import docking.widgets.EventTrigger;
|
import docking.widgets.EventTrigger;
|
||||||
import docking.widgets.OptionDialog;
|
import docking.widgets.OptionDialog;
|
||||||
import docking.widgets.fieldpanel.FieldPanel;
|
import docking.widgets.fieldpanel.FieldPanel;
|
||||||
import docking.widgets.fieldpanel.field.Field;
|
import docking.widgets.fieldpanel.field.Field;
|
||||||
import docking.widgets.fieldpanel.listener.FieldMouseListener;
|
import docking.widgets.fieldpanel.listener.FieldMouseListener;
|
||||||
import docking.widgets.fieldpanel.support.FieldLocation;
|
import docking.widgets.fieldpanel.support.FieldLocation;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.GhidraOptions;
|
import ghidra.GhidraOptions;
|
||||||
import ghidra.app.CorePluginPackage;
|
import ghidra.app.CorePluginPackage;
|
||||||
import ghidra.app.events.*;
|
import ghidra.app.events.*;
|
||||||
|
@ -62,7 +63,6 @@ import ghidra.util.exception.CancelledException;
|
||||||
import ghidra.util.exception.VersionException;
|
import ghidra.util.exception.VersionException;
|
||||||
import ghidra.util.task.*;
|
import ghidra.util.task.*;
|
||||||
import help.Help;
|
import help.Help;
|
||||||
import help.HelpService;
|
|
||||||
import resources.ResourceManager;
|
import resources.ResourceManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -37,7 +37,7 @@ import docking.widgets.list.GList;
|
||||||
import docking.widgets.list.GListCellRenderer;
|
import docking.widgets.list.GListCellRenderer;
|
||||||
import docking.widgets.table.GTableCellRenderer;
|
import docking.widgets.table.GTableCellRenderer;
|
||||||
import docking.widgets.tree.support.GTreeRenderer;
|
import docking.widgets.tree.support.GTreeRenderer;
|
||||||
import ghidra.docking.util.LookAndFeelUtils;
|
import generic.theme.Gui;
|
||||||
import ghidra.util.HTMLUtilities;
|
import ghidra.util.HTMLUtilities;
|
||||||
import resources.ResourceManager;
|
import resources.ResourceManager;
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ public class DockingUtils {
|
||||||
public static JSeparator createToolbarSeparator() {
|
public static JSeparator createToolbarSeparator() {
|
||||||
Dimension sepDim = new Dimension(2, ICON_SIZE + 2);
|
Dimension sepDim = new Dimension(2, ICON_SIZE + 2);
|
||||||
JSeparator separator = new JSeparator(SwingConstants.VERTICAL);
|
JSeparator separator = new JSeparator(SwingConstants.VERTICAL);
|
||||||
if (LookAndFeelUtils.isUsingAquaUI(separator.getUI())) {
|
if (Gui.isUsingAquaUI(separator.getUI())) {
|
||||||
separator.setUI(new BasicSeparatorUI());
|
separator.setUI(new BasicSeparatorUI());
|
||||||
}
|
}
|
||||||
separator.setPreferredSize(sepDim); // ugly work around to force height of separator
|
separator.setPreferredSize(sepDim); // ugly work around to force height of separator
|
||||||
|
|
|
@ -26,10 +26,10 @@ import org.jdesktop.animation.timing.TimingTargetAdapter;
|
||||||
import org.jdesktop.animation.timing.interpolation.PropertySetter;
|
import org.jdesktop.animation.timing.interpolation.PropertySetter;
|
||||||
|
|
||||||
import docking.action.DockingActionIf;
|
import docking.action.DockingActionIf;
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.util.AnimationUtils;
|
import docking.util.AnimationUtils;
|
||||||
import docking.widgets.VariableHeightPanel;
|
import docking.widgets.VariableHeightPanel;
|
||||||
import docking.widgets.label.GDLabel;
|
import docking.widgets.label.GDLabel;
|
||||||
|
import generic.theme.GColor;
|
||||||
|
|
||||||
// TODO: should this be put into generic?
|
// TODO: should this be put into generic?
|
||||||
public class GenericHeader extends JPanel {
|
public class GenericHeader extends JPanel {
|
||||||
|
|
|
@ -29,8 +29,8 @@ import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import docking.ActionContext;
|
import docking.ActionContext;
|
||||||
import docking.DockingWindowManager;
|
import docking.DockingWindowManager;
|
||||||
|
import generic.util.action.ReservedKeyBindings;
|
||||||
import ghidra.util.Msg;
|
import ghidra.util.Msg;
|
||||||
import ghidra.util.ReservedKeyBindings;
|
|
||||||
|
|
||||||
public class ComponentThemeInspectorAction extends DockingAction {
|
public class ComponentThemeInspectorAction extends DockingAction {
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ import javax.swing.Action;
|
||||||
import javax.swing.KeyStroke;
|
import javax.swing.KeyStroke;
|
||||||
|
|
||||||
import docking.*;
|
import docking.*;
|
||||||
import ghidra.util.ReservedKeyBindings;
|
import generic.util.action.ReservedKeyBindings;
|
||||||
import ghidra.util.exception.AssertException;
|
import ghidra.util.exception.AssertException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -24,7 +24,7 @@ import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import docking.ActionContext;
|
import docking.ActionContext;
|
||||||
import docking.DockingWindowManager;
|
import docking.DockingWindowManager;
|
||||||
import ghidra.util.ReservedKeyBindings;
|
import generic.util.action.ReservedKeyBindings;
|
||||||
|
|
||||||
public class ShowFocusCycleAction extends DockingAction {
|
public class ShowFocusCycleAction extends DockingAction {
|
||||||
static final Logger log = LogManager.getLogger(ShowFocusCycleAction.class);
|
static final Logger log = LogManager.getLogger(ShowFocusCycleAction.class);
|
||||||
|
|
|
@ -25,7 +25,7 @@ import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import docking.*;
|
import docking.*;
|
||||||
import ghidra.util.ReservedKeyBindings;
|
import generic.util.action.ReservedKeyBindings;
|
||||||
|
|
||||||
public class ShowFocusInfoAction extends DockingAction {
|
public class ShowFocusInfoAction extends DockingAction {
|
||||||
static final Logger log = LogManager.getLogger(ShowFocusInfoAction.class);
|
static final Logger log = LogManager.getLogger(ShowFocusInfoAction.class);
|
||||||
|
|
|
@ -27,8 +27,8 @@ import docking.KeyEntryTextField;
|
||||||
import docking.action.*;
|
import docking.action.*;
|
||||||
import docking.tool.ToolConstants;
|
import docking.tool.ToolConstants;
|
||||||
import docking.widgets.label.GIconLabel;
|
import docking.widgets.label.GIconLabel;
|
||||||
|
import generic.util.action.ReservedKeyBindings;
|
||||||
import ghidra.util.HelpLocation;
|
import ghidra.util.HelpLocation;
|
||||||
import ghidra.util.ReservedKeyBindings;
|
|
||||||
import resources.ResourceManager;
|
import resources.ResourceManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -32,6 +32,7 @@ import org.apache.commons.collections4.map.LazyMap;
|
||||||
import docking.*;
|
import docking.*;
|
||||||
import docking.action.*;
|
import docking.action.*;
|
||||||
import docking.tool.util.DockingToolConstants;
|
import docking.tool.util.DockingToolConstants;
|
||||||
|
import generic.util.action.ReservedKeyBindings;
|
||||||
import ghidra.framework.options.*;
|
import ghidra.framework.options.*;
|
||||||
import ghidra.util.*;
|
import ghidra.util.*;
|
||||||
import ghidra.util.exception.AssertException;
|
import ghidra.util.exception.AssertException;
|
||||||
|
|
|
@ -16,8 +16,9 @@
|
||||||
package docking.framework;
|
package docking.framework;
|
||||||
|
|
||||||
import docking.DockingErrorDisplay;
|
import docking.DockingErrorDisplay;
|
||||||
import docking.theme.Gui;
|
|
||||||
import docking.widgets.PopupKeyStorePasswordProvider;
|
import docking.widgets.PopupKeyStorePasswordProvider;
|
||||||
|
import generic.theme.Gui;
|
||||||
|
import ghidra.docking.util.LookAndFeelUtils;
|
||||||
import ghidra.framework.ApplicationConfiguration;
|
import ghidra.framework.ApplicationConfiguration;
|
||||||
import ghidra.net.ApplicationKeyManagerFactory;
|
import ghidra.net.ApplicationKeyManagerFactory;
|
||||||
import ghidra.util.ErrorDisplay;
|
import ghidra.util.ErrorDisplay;
|
||||||
|
@ -49,13 +50,14 @@ public class DockingApplicationConfiguration extends ApplicationConfiguration {
|
||||||
super.initializeApplication();
|
super.initializeApplication();
|
||||||
|
|
||||||
Gui.initialize();
|
Gui.initialize();
|
||||||
|
LookAndFeelUtils.platformSpecificFixups();
|
||||||
|
|
||||||
if (showSplashScreen) {
|
if (showSplashScreen) {
|
||||||
SplashScreen.showSplashScreen();
|
SplashScreen.showSplashScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplicationKeyManagerFactory.setKeyStorePasswordProvider(
|
ApplicationKeyManagerFactory
|
||||||
new PopupKeyStorePasswordProvider());
|
.setKeyStorePasswordProvider(new PopupKeyStorePasswordProvider());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,9 @@ import javax.swing.*;
|
||||||
import javax.swing.border.BevelBorder;
|
import javax.swing.border.BevelBorder;
|
||||||
|
|
||||||
import docking.*;
|
import docking.*;
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.label.GDLabel;
|
import docking.widgets.label.GDLabel;
|
||||||
import docking.widgets.label.GLabel;
|
import docking.widgets.label.GLabel;
|
||||||
|
import generic.theme.GColor;
|
||||||
import generic.util.WindowUtilities;
|
import generic.util.WindowUtilities;
|
||||||
import ghidra.framework.Application;
|
import ghidra.framework.Application;
|
||||||
import ghidra.util.Msg;
|
import ghidra.util.Msg;
|
||||||
|
|
|
@ -24,7 +24,7 @@ import javax.swing.KeyStroke;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import docking.action.DockingActionIf;
|
import docking.action.DockingActionIf;
|
||||||
import ghidra.docking.util.LookAndFeelUtils;
|
import generic.theme.Gui;
|
||||||
import ghidra.util.StringUtilities;
|
import ghidra.util.StringUtilities;
|
||||||
|
|
||||||
class DockingToolBarUtils {
|
class DockingToolBarUtils {
|
||||||
|
@ -96,7 +96,7 @@ class DockingToolBarUtils {
|
||||||
builder.append(InputEvent.getModifiersExText(modifiers));
|
builder.append(InputEvent.getModifiersExText(modifiers));
|
||||||
|
|
||||||
// The Aqua LaF does not use the '+' symbol between modifiers
|
// The Aqua LaF does not use the '+' symbol between modifiers
|
||||||
if (!LookAndFeelUtils.isUsingAquaUI(button.getUI())) {
|
if (!Gui.isUsingAquaUI(button.getUI())) {
|
||||||
builder.append('+');
|
builder.append('+');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,15 +17,24 @@ package docking.options.editor;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.beans.PropertyEditorSupport;
|
import java.beans.PropertyEditorSupport;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
import docking.theme.gui.ProtectedIcon;
|
import docking.theme.gui.ProtectedIcon;
|
||||||
import docking.widgets.*;
|
import docking.widgets.*;
|
||||||
|
import docking.widgets.filechooser.GhidraFileChooser;
|
||||||
|
import docking.widgets.filechooser.GhidraFileChooserMode;
|
||||||
import docking.widgets.label.GDLabel;
|
import docking.widgets.label.GDLabel;
|
||||||
import docking.widgets.list.GListCellRenderer;
|
import docking.widgets.list.GListCellRenderer;
|
||||||
|
import ghidra.framework.Application;
|
||||||
|
import ghidra.util.Msg;
|
||||||
|
import ghidra.util.filechooser.ExtensionFileFilter;
|
||||||
import resources.ResourceManager;
|
import resources.ResourceManager;
|
||||||
import resources.icons.ScaledImageIcon;
|
import resources.icons.ScaledImageIcon;
|
||||||
import resources.icons.UrlImageIcon;
|
import resources.icons.UrlImageIcon;
|
||||||
|
@ -86,8 +95,6 @@ public class IconPropertyEditor extends PropertyEditorSupport {
|
||||||
updateDropDownDataModel(icon);
|
updateDropDownDataModel(icon);
|
||||||
updatePreviewLabel(icon);
|
updatePreviewLabel(icon);
|
||||||
|
|
||||||
// iconTextField.addActionListener(listener);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateDropDownDataModel(Icon icon) {
|
private void updateDropDownDataModel(Icon icon) {
|
||||||
|
@ -114,27 +121,11 @@ public class IconPropertyEditor extends PropertyEditorSupport {
|
||||||
return super.getMatchingData(searchText);
|
return super.getMatchingData(searchText);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// dropDown.setConsumeEnterKeyPress(false);
|
|
||||||
// dropDown.addActionListener(e -> iconChanged());
|
|
||||||
dropDown.addDropDownSelectionChoiceListener(choiceListener);
|
dropDown.addDropDownSelectionChoiceListener(choiceListener);
|
||||||
// dropDown.addCellEditorListener(new CellEditorListener() {
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void editingStopped(ChangeEvent e) {
|
|
||||||
// Msg.debug(this, "Stopped");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void editingCanceled(ChangeEvent e) {
|
|
||||||
// Msg.debug(this, "Cancelled");
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
panel.add(dropDown, BorderLayout.CENTER);
|
panel.add(dropDown, BorderLayout.CENTER);
|
||||||
// JButton browseButton = ButtonPanelFactory.createButton(ButtonPanelFactory.BROWSE_TYPE);
|
JButton browseButton = ButtonPanelFactory.createButton(ButtonPanelFactory.BROWSE_TYPE);
|
||||||
// panel.add(browseButton, BorderLayout.EAST);
|
panel.add(browseButton, BorderLayout.EAST);
|
||||||
// browseButton.addActionListener(e -> browse());
|
browseButton.addActionListener(e -> browse());
|
||||||
// iconTextField.addActionListener(listener);
|
|
||||||
|
|
||||||
return panel;
|
return panel;
|
||||||
}
|
}
|
||||||
|
@ -154,7 +145,59 @@ public class IconPropertyEditor extends PropertyEditorSupport {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void browse() {
|
private void browse() {
|
||||||
//TODO
|
GhidraFileChooser chooser = new GhidraFileChooser(iconChooserPanel);
|
||||||
|
chooser.setTitle("Import Icon");
|
||||||
|
chooser.setApproveButtonToolTipText("Import Icon");
|
||||||
|
chooser.setFileSelectionMode(GhidraFileChooserMode.FILES_ONLY);
|
||||||
|
chooser.setSelectedFileFilter(
|
||||||
|
ExtensionFileFilter.forExtensions("Icon Files", ".png", "gif"));
|
||||||
|
File file = chooser.getSelectedFile();
|
||||||
|
if (file != null) {
|
||||||
|
importIconFile(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void importIconFile(File file) {
|
||||||
|
|
||||||
|
if (!isValidIcon(file)) {
|
||||||
|
Msg.error(this, "File is not a valid icon: " + file.getAbsolutePath());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
File dir = Application.getUserSettingsDirectory();
|
||||||
|
File destinationDir = new File(dir, "themes/images");
|
||||||
|
File destinationFile = new File(destinationDir, file.getName());
|
||||||
|
if (destinationFile.exists()) {
|
||||||
|
int result = OptionDialog.showYesNoDialog(dropDown, "Overwrite?",
|
||||||
|
"An icon with that name already exists.\n Do you want to overwrite it?");
|
||||||
|
if (result == OptionDialog.NO_OPTION) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
FileUtils.copyFile(file, destinationFile);
|
||||||
|
ImageIcon icon = ResourceManager.loadImage("themes/images/" + file.getName());
|
||||||
|
setValue(icon);
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
Msg.showError(this, dropDown, "Error importing file", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isValidIcon(File file) {
|
||||||
|
if (!file.exists()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
UrlImageIcon icon = new UrlImageIcon(file.getAbsolutePath(), file.toURI().toURL());
|
||||||
|
icon.getIconWidth();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
Msg.showError(this, dropDown, "Invalid Icon File",
|
||||||
|
"The file is not a valid icon: " + file.getAbsolutePath());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Component buildPreviewLabel() {
|
private Component buildPreviewLabel() {
|
||||||
|
|
|
@ -20,6 +20,7 @@ import java.beans.PropertyChangeListener;
|
||||||
|
|
||||||
import docking.options.editor.ColorPropertyEditor;
|
import docking.options.editor.ColorPropertyEditor;
|
||||||
import docking.theme.*;
|
import docking.theme.*;
|
||||||
|
import generic.theme.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Editor for Theme colors
|
* Editor for Theme colors
|
||||||
|
|
|
@ -29,6 +29,7 @@ import docking.widgets.checkbox.GCheckBox;
|
||||||
import docking.widgets.filechooser.GhidraFileChooser;
|
import docking.widgets.filechooser.GhidraFileChooser;
|
||||||
import docking.widgets.filechooser.GhidraFileChooserMode;
|
import docking.widgets.filechooser.GhidraFileChooserMode;
|
||||||
import docking.widgets.label.GLabel;
|
import docking.widgets.label.GLabel;
|
||||||
|
import generic.theme.*;
|
||||||
import ghidra.util.MessageType;
|
import ghidra.util.MessageType;
|
||||||
import ghidra.util.Msg;
|
import ghidra.util.Msg;
|
||||||
import ghidra.util.filechooser.GhidraFileFilter;
|
import ghidra.util.filechooser.GhidraFileFilter;
|
||||||
|
@ -51,13 +52,20 @@ public class ExportThemeDialog extends DialogComponentProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void okCallback() {
|
protected void okCallback() {
|
||||||
|
if (exportTheme()) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean exportTheme() {
|
||||||
File file = new File(fileTextField.getText());
|
File file = new File(fileTextField.getText());
|
||||||
String themeName = nameField.getText();
|
String themeName = nameField.getText();
|
||||||
if (themeName.isBlank()) {
|
if (themeName.isBlank()) {
|
||||||
setStatusText("Missing Theme Name", MessageType.ERROR, true);
|
setStatusText("Missing Theme Name", MessageType.ERROR, true);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
boolean includeDefaults = includeDefaultsCheckbox.isSelected();
|
boolean includeDefaults = includeDefaultsCheckbox.isSelected();
|
||||||
|
|
||||||
GTheme activeTheme = Gui.getActiveTheme();
|
GTheme activeTheme = Gui.getActiveTheme();
|
||||||
FileGTheme fileTheme = new FileGTheme(file, themeName, activeTheme.getLookAndFeelType(),
|
FileGTheme fileTheme = new FileGTheme(file, themeName, activeTheme.getLookAndFeelType(),
|
||||||
activeTheme.useDarkDefaults());
|
activeTheme.useDarkDefaults());
|
||||||
|
@ -68,12 +76,14 @@ public class ExportThemeDialog extends DialogComponentProvider {
|
||||||
else {
|
else {
|
||||||
fileTheme.load(Gui.getNonDefaultValues());
|
fileTheme.load(Gui.getNonDefaultValues());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
fileTheme.save();
|
fileTheme.save();
|
||||||
close();
|
return true;
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
Msg.error("Error Exporting Theme", "I/O Error encountered trying to export theme!", e);
|
Msg.error("Error Exporting Theme", "I/O Error encountered trying to export theme!", e);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ import javax.swing.plaf.UIResource;
|
||||||
|
|
||||||
import docking.options.editor.FontPropertyEditor;
|
import docking.options.editor.FontPropertyEditor;
|
||||||
import docking.theme.*;
|
import docking.theme.*;
|
||||||
|
import generic.theme.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Editor for Theme fonts
|
* Editor for Theme fonts
|
||||||
|
|
|
@ -21,6 +21,7 @@ import javax.swing.Icon;
|
||||||
|
|
||||||
import docking.options.editor.IconPropertyEditor;
|
import docking.options.editor.IconPropertyEditor;
|
||||||
import docking.theme.*;
|
import docking.theme.*;
|
||||||
|
import generic.theme.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Editor for Theme fonts
|
* Editor for Theme fonts
|
||||||
|
|
|
@ -25,6 +25,7 @@ import javax.swing.JLabel;
|
||||||
|
|
||||||
import docking.theme.*;
|
import docking.theme.*;
|
||||||
import docking.widgets.table.*;
|
import docking.widgets.table.*;
|
||||||
|
import generic.theme.*;
|
||||||
import ghidra.docking.settings.Settings;
|
import ghidra.docking.settings.Settings;
|
||||||
import ghidra.framework.plugintool.ServiceProvider;
|
import ghidra.framework.plugintool.ServiceProvider;
|
||||||
import ghidra.framework.plugintool.ServiceProviderStub;
|
import ghidra.framework.plugintool.ServiceProviderStub;
|
||||||
|
|
|
@ -39,6 +39,7 @@ import docking.widgets.filechooser.GhidraFileChooser;
|
||||||
import docking.widgets.filechooser.GhidraFileChooserMode;
|
import docking.widgets.filechooser.GhidraFileChooserMode;
|
||||||
import docking.widgets.table.GFilterTable;
|
import docking.widgets.table.GFilterTable;
|
||||||
import docking.widgets.table.GTable;
|
import docking.widgets.table.GTable;
|
||||||
|
import generic.theme.*;
|
||||||
import ghidra.framework.Application;
|
import ghidra.framework.Application;
|
||||||
import ghidra.util.*;
|
import ghidra.util.*;
|
||||||
import ghidra.util.filechooser.ExtensionFileFilter;
|
import ghidra.util.filechooser.ExtensionFileFilter;
|
||||||
|
|
|
@ -25,6 +25,7 @@ import javax.swing.JLabel;
|
||||||
|
|
||||||
import docking.theme.*;
|
import docking.theme.*;
|
||||||
import docking.widgets.table.*;
|
import docking.widgets.table.*;
|
||||||
|
import generic.theme.*;
|
||||||
import ghidra.docking.settings.Settings;
|
import ghidra.docking.settings.Settings;
|
||||||
import ghidra.framework.plugintool.ServiceProvider;
|
import ghidra.framework.plugintool.ServiceProvider;
|
||||||
import ghidra.framework.plugintool.ServiceProviderStub;
|
import ghidra.framework.plugintool.ServiceProviderStub;
|
||||||
|
|
|
@ -25,6 +25,7 @@ import javax.swing.*;
|
||||||
|
|
||||||
import docking.theme.*;
|
import docking.theme.*;
|
||||||
import docking.widgets.table.*;
|
import docking.widgets.table.*;
|
||||||
|
import generic.theme.*;
|
||||||
import ghidra.docking.settings.Settings;
|
import ghidra.docking.settings.Settings;
|
||||||
import ghidra.framework.plugintool.ServiceProvider;
|
import ghidra.framework.plugintool.ServiceProvider;
|
||||||
import ghidra.framework.plugintool.ServiceProviderStub;
|
import ghidra.framework.plugintool.ServiceProviderStub;
|
||||||
|
|
|
@ -22,7 +22,7 @@ import javax.swing.*;
|
||||||
|
|
||||||
import docking.DialogComponentProvider;
|
import docking.DialogComponentProvider;
|
||||||
import docking.DockingWindowManager;
|
import docking.DockingWindowManager;
|
||||||
import docking.theme.ThemeValue;
|
import generic.theme.ThemeValue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for Theme properties (Colors, Fonts, and Icons)
|
* Base class for Theme properties (Colors, Fonts, and Icons)
|
||||||
|
|
|
@ -21,8 +21,8 @@ import javax.swing.BorderFactory;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.label.GDHtmlLabel;
|
import docking.widgets.label.GDHtmlLabel;
|
||||||
|
import generic.theme.GColor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A common base class for list and table renderer objects, unifying the Ghidra look and feel.
|
* A common base class for list and table renderer objects, unifying the Ghidra look and feel.
|
||||||
|
|
|
@ -26,9 +26,9 @@ import javax.swing.event.*;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.label.GDHtmlLabel;
|
import docking.widgets.label.GDHtmlLabel;
|
||||||
import docking.widgets.list.GList;
|
import docking.widgets.list.GList;
|
||||||
|
import generic.theme.GColor;
|
||||||
import generic.util.WindowUtilities;
|
import generic.util.WindowUtilities;
|
||||||
import ghidra.util.StringUtilities;
|
import ghidra.util.StringUtilities;
|
||||||
import ghidra.util.SystemUtilities;
|
import ghidra.util.SystemUtilities;
|
||||||
|
|
|
@ -24,7 +24,7 @@ import javax.swing.border.EmptyBorder;
|
||||||
import javax.swing.event.ChangeEvent;
|
import javax.swing.event.ChangeEvent;
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
import ghidra.docking.util.LookAndFeelUtils;
|
import generic.theme.Gui;
|
||||||
import resources.ResourceManager;
|
import resources.ResourceManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -45,8 +45,8 @@ public class EmptyBorderButton extends JButton {
|
||||||
/**
|
/**
|
||||||
* An empty border.
|
* An empty border.
|
||||||
*/
|
*/
|
||||||
public static final Border NO_BUTTON_BORDER = new EmptyBorder(
|
public static final Border NO_BUTTON_BORDER =
|
||||||
RAISED_BUTTON_BORDER.getBorderInsets(new JButton()));
|
new EmptyBorder(RAISED_BUTTON_BORDER.getBorderInsets(new JButton()));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A lowered border beveled border.
|
* A lowered border beveled border.
|
||||||
|
@ -123,7 +123,7 @@ public class EmptyBorderButton extends JButton {
|
||||||
|
|
||||||
// Mac OSX LNF doesn't give us rollover callbacks, so we have to add a mouse listener to
|
// Mac OSX LNF doesn't give us rollover callbacks, so we have to add a mouse listener to
|
||||||
// do the work
|
// do the work
|
||||||
if (LookAndFeelUtils.isUsingAquaUI(getUI())) {
|
if (Gui.isUsingAquaUI(getUI())) {
|
||||||
addMouseListener(new MouseAdapter() {
|
addMouseListener(new MouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseEntered(MouseEvent e) {
|
public void mouseEntered(MouseEvent e) {
|
||||||
|
|
|
@ -30,8 +30,8 @@ import javax.swing.text.Caret;
|
||||||
|
|
||||||
import docking.DockingUtils;
|
import docking.DockingUtils;
|
||||||
import docking.DockingUtils.TreeTraversalResult;
|
import docking.DockingUtils.TreeTraversalResult;
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.textfield.TextFieldLinker;
|
import docking.widgets.textfield.TextFieldLinker;
|
||||||
|
import generic.theme.GColor;
|
||||||
import generic.util.WindowUtilities;
|
import generic.util.WindowUtilities;
|
||||||
import ghidra.util.task.SwingUpdateManager;
|
import ghidra.util.task.SwingUpdateManager;
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ import javax.swing.event.ChangeEvent;
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
import docking.DockingUtils;
|
import docking.DockingUtils;
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.util.GraphicsUtils;
|
import docking.util.GraphicsUtils;
|
||||||
import docking.widgets.EventTrigger;
|
import docking.widgets.EventTrigger;
|
||||||
import docking.widgets.fieldpanel.field.Field;
|
import docking.widgets.fieldpanel.field.Field;
|
||||||
|
@ -39,6 +38,7 @@ import docking.widgets.fieldpanel.listener.*;
|
||||||
import docking.widgets.fieldpanel.support.*;
|
import docking.widgets.fieldpanel.support.*;
|
||||||
import docking.widgets.indexedscrollpane.IndexScrollListener;
|
import docking.widgets.indexedscrollpane.IndexScrollListener;
|
||||||
import docking.widgets.indexedscrollpane.IndexedScrollable;
|
import docking.widgets.indexedscrollpane.IndexedScrollable;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.util.Msg;
|
import ghidra.util.Msg;
|
||||||
import ghidra.util.SystemUtilities;
|
import ghidra.util.SystemUtilities;
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ package docking.widgets.fieldpanel.internal;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Miscellaneous information needed by fields to paint.
|
* Miscellaneous information needed by fields to paint.
|
||||||
|
|
|
@ -31,12 +31,12 @@ import javax.swing.event.ChangeEvent;
|
||||||
import javax.swing.filechooser.FileSystemView;
|
import javax.swing.filechooser.FileSystemView;
|
||||||
|
|
||||||
import docking.*;
|
import docking.*;
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.*;
|
import docking.widgets.*;
|
||||||
import docking.widgets.combobox.GComboBox;
|
import docking.widgets.combobox.GComboBox;
|
||||||
import docking.widgets.label.GDLabel;
|
import docking.widgets.label.GDLabel;
|
||||||
import docking.widgets.label.GLabel;
|
import docking.widgets.label.GLabel;
|
||||||
import docking.widgets.list.GListCellRenderer;
|
import docking.widgets.list.GListCellRenderer;
|
||||||
|
import generic.theme.GColor;
|
||||||
import ghidra.framework.OperatingSystem;
|
import ghidra.framework.OperatingSystem;
|
||||||
import ghidra.framework.Platform;
|
import ghidra.framework.Platform;
|
||||||
import ghidra.framework.preferences.Preferences;
|
import ghidra.framework.preferences.Preferences;
|
||||||
|
|
|
@ -23,8 +23,8 @@ import javax.swing.event.DocumentEvent;
|
||||||
import javax.swing.event.DocumentListener;
|
import javax.swing.event.DocumentListener;
|
||||||
|
|
||||||
import docking.DockingUtils;
|
import docking.DockingUtils;
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import docking.theme.GThemeDefaults.Colors.Palette;
|
import generic.theme.GThemeDefaults.Colors.Palette;
|
||||||
import ghidra.util.SystemUtilities;
|
import ghidra.util.SystemUtilities;
|
||||||
import ghidra.util.datastruct.WeakDataStructureFactory;
|
import ghidra.util.datastruct.WeakDataStructureFactory;
|
||||||
import ghidra.util.datastruct.WeakSet;
|
import ghidra.util.datastruct.WeakSet;
|
||||||
|
|
|
@ -23,7 +23,7 @@ import javax.swing.*;
|
||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
import javax.swing.table.*;
|
import javax.swing.table.*;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
import resources.*;
|
import resources.*;
|
||||||
import resources.icons.EmptyIcon;
|
import resources.icons.EmptyIcon;
|
||||||
import resources.icons.TranslateIcon;
|
import resources.icons.TranslateIcon;
|
||||||
|
|
|
@ -20,11 +20,11 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.jdom.Element;
|
import org.jdom.Element;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.theme.GThemeDefaults.Colors.Palette;
|
|
||||||
import docking.widgets.table.*;
|
import docking.widgets.table.*;
|
||||||
import docking.widgets.table.constraint.ColumnConstraint;
|
import docking.widgets.table.constraint.ColumnConstraint;
|
||||||
import docking.widgets.table.constraint.TableFilterContext;
|
import docking.widgets.table.constraint.TableFilterContext;
|
||||||
|
import generic.theme.GColor;
|
||||||
|
import generic.theme.GThemeDefaults.Colors.Palette;
|
||||||
import ghidra.framework.options.SaveState;
|
import ghidra.framework.options.SaveState;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -19,11 +19,11 @@ import java.util.*;
|
||||||
|
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.theme.GThemeDefaults.Colors.Palette;
|
|
||||||
import docking.widgets.table.DiscoverableTableUtils;
|
import docking.widgets.table.DiscoverableTableUtils;
|
||||||
import docking.widgets.table.RowObjectTableModel;
|
import docking.widgets.table.RowObjectTableModel;
|
||||||
import docking.widgets.table.constraint.*;
|
import docking.widgets.table.constraint.*;
|
||||||
|
import generic.theme.GColor;
|
||||||
|
import generic.theme.GThemeDefaults.Colors.Palette;
|
||||||
import ghidra.framework.options.SaveState;
|
import ghidra.framework.options.SaveState;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -22,7 +22,7 @@ import javax.swing.JTextField;
|
||||||
import javax.swing.event.DocumentEvent;
|
import javax.swing.event.DocumentEvent;
|
||||||
import javax.swing.event.DocumentListener;
|
import javax.swing.event.DocumentListener;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
import generic.theme.GColor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple text field that shows a text hint when the field is empty.
|
* Simple text field that shows a text hint when the field is empty.
|
||||||
|
|
|
@ -22,10 +22,10 @@ import javax.swing.JTree;
|
||||||
import javax.swing.plaf.ColorUIResource;
|
import javax.swing.plaf.ColorUIResource;
|
||||||
import javax.swing.tree.DefaultTreeCellRenderer;
|
import javax.swing.tree.DefaultTreeCellRenderer;
|
||||||
|
|
||||||
import docking.theme.GColor;
|
|
||||||
import docking.widgets.GComponent;
|
import docking.widgets.GComponent;
|
||||||
import docking.widgets.tree.GTree;
|
import docking.widgets.tree.GTree;
|
||||||
import docking.widgets.tree.GTreeNode;
|
import docking.widgets.tree.GTreeNode;
|
||||||
|
import generic.theme.GColor;
|
||||||
|
|
||||||
public class GTreeRenderer extends DefaultTreeCellRenderer implements GComponent {
|
public class GTreeRenderer extends DefaultTreeCellRenderer implements GComponent {
|
||||||
|
|
||||||
|
|
|
@ -15,15 +15,18 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.docking.util;
|
package ghidra.docking.util;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.awt.Font;
|
||||||
import java.util.List;
|
import java.awt.Taskbar;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.UIDefaults;
|
||||||
import javax.swing.plaf.ComponentUI;
|
import javax.swing.UIManager;
|
||||||
|
|
||||||
import org.apache.commons.collections4.IteratorUtils;
|
import docking.framework.ApplicationInformationDisplayFactory;
|
||||||
|
import ghidra.framework.preferences.Preferences;
|
||||||
import docking.theme.LafType;
|
import ghidra.util.SystemUtilities;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A utility class to manage LookAndFeel (LaF) settings.
|
* A utility class to manage LookAndFeel (LaF) settings.
|
||||||
|
@ -34,53 +37,48 @@ public class LookAndFeelUtils {
|
||||||
// utils class, cannot create
|
// utils class, cannot create
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
/**
|
||||||
// * Loads settings from {@link Preferences}.
|
* Loads settings from {@link Preferences}.
|
||||||
// */
|
*/
|
||||||
// public static void installGlobalOverrides() {
|
public static void installGlobalOverrides() {
|
||||||
//
|
|
||||||
// //
|
|
||||||
// // Users can change this via the SystemUtilities.FONT_SIZE_OVERRIDE_PROPERTY_NAME
|
|
||||||
// // system property.
|
|
||||||
// //
|
|
||||||
// Integer fontOverride = SystemUtilities.getFontSizeOverrideValue();
|
|
||||||
// if (fontOverride != null) {
|
|
||||||
// setGlobalFontSizeOverride(fontOverride);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
public static List<String> getLookAndFeelIdsForType(UIDefaults defaults, Class<?> clazz) {
|
//
|
||||||
List<String> colorKeys = new ArrayList<>();
|
// Users can change this via the SystemUtilities.FONT_SIZE_OVERRIDE_PROPERTY_NAME
|
||||||
List<Object> keyList = IteratorUtils.toList(defaults.keys().asIterator());
|
// system property.
|
||||||
for (Object key : keyList) {
|
//
|
||||||
if (key instanceof String) {
|
Integer fontOverride = SystemUtilities.getFontSizeOverrideValue();
|
||||||
Object value = defaults.get(key);
|
if (fontOverride != null) {
|
||||||
if (clazz.isInstance(value)) {
|
setGlobalFontSizeOverride(fontOverride);
|
||||||
colorKeys.add((String) key);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Allows you to globally set the font size (don't use this method!) */
|
||||||
|
private static void setGlobalFontSizeOverride(int fontSize) {
|
||||||
|
UIDefaults defaults = UIManager.getDefaults();
|
||||||
|
|
||||||
|
Set<Entry<Object, Object>> set = defaults.entrySet();
|
||||||
|
Iterator<Entry<Object, Object>> iterator = set.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Entry<Object, Object> entry = iterator.next();
|
||||||
|
Object key = entry.getKey();
|
||||||
|
|
||||||
|
if (key.toString().toLowerCase().indexOf("font") != -1) {
|
||||||
|
Font currentFont = defaults.getFont(key);
|
||||||
|
if (currentFont != null) {
|
||||||
|
Font newFont = currentFont.deriveFont((float) fontSize);
|
||||||
|
UIManager.put(key, newFont);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return colorKeys;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public static void platformSpecificFixups() {
|
||||||
* Returns true if the given UI object is using the Aqua Look and Feel.
|
// Set the dock icon for macOS
|
||||||
* @param UI the UI to examine.
|
if (Taskbar.isTaskbarSupported()) {
|
||||||
* @return true if the UI is using Aqua
|
Taskbar taskbar = Taskbar.getTaskbar();
|
||||||
*/
|
if (taskbar.isSupported(Taskbar.Feature.ICON_IMAGE)) {
|
||||||
public static boolean isUsingAquaUI(ComponentUI UI) {
|
taskbar.setIconImage(ApplicationInformationDisplayFactory.getLargestWindowIcon());
|
||||||
Class<? extends ComponentUI> clazz = UI.getClass();
|
}
|
||||||
String name = clazz.getSimpleName();
|
}
|
||||||
return name.startsWith("Aqua");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if 'Nimbus' is the current Look and Feel
|
|
||||||
* @return true if 'Nimbus' is the current Look and Feel
|
|
||||||
*/
|
|
||||||
public static boolean isUsingNimbusUI() {
|
|
||||||
LookAndFeel lookAndFeel = UIManager.getLookAndFeel();
|
|
||||||
return LafType.NIMBUS.equals(lookAndFeel.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ import java.net.URL;
|
||||||
import javax.swing.Icon;
|
import javax.swing.Icon;
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
|
|
||||||
import docking.theme.GIcon;
|
import generic.theme.GIcon;
|
||||||
import ghidra.util.Msg;
|
import ghidra.util.Msg;
|
||||||
import resources.icons.RotateIcon;
|
import resources.icons.RotateIcon;
|
||||||
import resources.icons.TranslateIcon;
|
import resources.icons.TranslateIcon;
|
||||||
|
|
|
@ -22,6 +22,7 @@ import org.apache.commons.collections4.map.HashedMap;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
||||||
import docking.test.AbstractDockingTest;
|
import docking.test.AbstractDockingTest;
|
||||||
|
import generic.theme.*;
|
||||||
|
|
||||||
public class GuiTest extends AbstractDockingTest {
|
public class GuiTest extends AbstractDockingTest {
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,8 @@ dependencies {
|
||||||
api 'org.bouncycastle:bcpkix-jdk15on:1.69' // requires bcutil and bcprov
|
api 'org.bouncycastle:bcpkix-jdk15on:1.69' // requires bcutil and bcprov
|
||||||
api 'org.bouncycastle:bcprov-jdk15on:1.69'
|
api 'org.bouncycastle:bcprov-jdk15on:1.69'
|
||||||
api 'org.bouncycastle:bcutil-jdk15on:1.69'
|
api 'org.bouncycastle:bcutil-jdk15on:1.69'
|
||||||
|
api 'com.formdev:flatlaf:2.2'
|
||||||
|
|
||||||
|
|
||||||
compileOnly "junit:junit:4.12"
|
compileOnly "junit:junit:4.12"
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
public class DefaultTheme extends DiscoverableGTheme {
|
public class DefaultTheme extends DiscoverableGTheme {
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import ghidra.util.classfinder.ExtensionPoint;
|
import ghidra.util.classfinder.ExtensionPoint;
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.color.ColorSpace;
|
import java.awt.color.ColorSpace;
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import javax.swing.plaf.UIResource;
|
import javax.swing.plaf.UIResource;
|
||||||
|
|
|
@ -13,14 +13,14 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
|
||||||
import javax.swing.Icon;
|
import javax.swing.Icon;
|
||||||
|
|
||||||
import docking.theme.Refreshable;
|
import generic.theme.Refreshable;
|
||||||
import ghidra.util.datastruct.WeakStore;
|
import ghidra.util.datastruct.WeakStore;
|
||||||
|
|
||||||
public class GIcon implements Icon, Refreshable {
|
public class GIcon implements Icon, Refreshable {
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import javax.swing.plaf.UIResource;
|
import javax.swing.plaf.UIResource;
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
@ -21,16 +21,17 @@ import java.util.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import javax.swing.plaf.ComponentUI;
|
||||||
|
|
||||||
import com.formdev.flatlaf.*;
|
import com.formdev.flatlaf.*;
|
||||||
|
|
||||||
import docking.framework.ApplicationInformationDisplayFactory;
|
import generic.theme.builtin.JavaColorMapping;
|
||||||
import docking.help.Help;
|
|
||||||
import docking.theme.builtin.JavaColorMapping;
|
|
||||||
import ghidra.framework.Application;
|
import ghidra.framework.Application;
|
||||||
import ghidra.framework.preferences.Preferences;
|
import ghidra.framework.preferences.Preferences;
|
||||||
import ghidra.util.Msg;
|
import ghidra.util.Msg;
|
||||||
import ghidra.util.classfinder.ClassSearcher;
|
import ghidra.util.classfinder.ClassSearcher;
|
||||||
|
import ghidra.util.datastruct.WeakDataStructureFactory;
|
||||||
|
import ghidra.util.datastruct.WeakSet;
|
||||||
import resources.ResourceManager;
|
import resources.ResourceManager;
|
||||||
import utilities.util.reflection.ReflectionUtilities;
|
import utilities.util.reflection.ReflectionUtilities;
|
||||||
|
|
||||||
|
@ -52,24 +53,21 @@ public class Gui {
|
||||||
private static ThemePropertiesLoader themePropertiesLoader = new ThemePropertiesLoader();
|
private static ThemePropertiesLoader themePropertiesLoader = new ThemePropertiesLoader();
|
||||||
|
|
||||||
private static Map<String, GColorUIResource> gColorMap = new HashMap<>();
|
private static Map<String, GColorUIResource> gColorMap = new HashMap<>();
|
||||||
|
private static boolean isInitialized;
|
||||||
private static Map<String, GIconUIResource> gIconMap = new HashMap<>();
|
private static Map<String, GIconUIResource> gIconMap = new HashMap<>();
|
||||||
private static boolean isInitialzed;
|
private static WeakSet<ThemeListener> themeListeners =
|
||||||
|
WeakDataStructureFactory.createCopyOnWriteWeakSet();
|
||||||
static void setPropertiesLoader(ThemePropertiesLoader loader) {
|
|
||||||
themePropertiesLoader = loader;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Gui() {
|
private Gui() {
|
||||||
// static utils class, can't construct
|
// static utils class, can't construct
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void initialize() {
|
public static void initialize() {
|
||||||
isInitialzed = true;
|
isInitialized = true;
|
||||||
installFlatLookAndFeels();
|
installFlatLookAndFeels();
|
||||||
loadThemeDefaults();
|
loadThemeDefaults();
|
||||||
setTheme(getThemeFromPreferences());
|
setTheme(getThemeFromPreferences());
|
||||||
// LookAndFeelUtils.installGlobalOverrides();
|
// LookAndFeelUtils.installGlobalOverrides();
|
||||||
platformSpecificFixups();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void installFlatLookAndFeels() {
|
private static void installFlatLookAndFeels() {
|
||||||
|
@ -102,12 +100,9 @@ public class Gui {
|
||||||
lookAndFeel.install();
|
lookAndFeel.install();
|
||||||
saveThemeToPreferences(theme);
|
saveThemeToPreferences(theme);
|
||||||
fixupJavaDefaults();
|
fixupJavaDefaults();
|
||||||
// The help may produce errors when switching the theme, such as if there is an
|
|
||||||
// active search in the help. We have added this call to allow the help system
|
|
||||||
// to cleanup some internal state.
|
|
||||||
Help.getHelpService().reload();
|
|
||||||
buildCurrentValues();
|
buildCurrentValues();
|
||||||
updateUIs();
|
updateUIs();
|
||||||
|
notifyThemeListeners();
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Msg.error(Gui.class, "Error setting LookAndFeel: " + lookAndFeel.getName(), e);
|
Msg.error(Gui.class, "Error setting LookAndFeel: " + lookAndFeel.getName(), e);
|
||||||
|
@ -115,6 +110,12 @@ public class Gui {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void notifyThemeListeners() {
|
||||||
|
for (ThemeListener listener : themeListeners) {
|
||||||
|
listener.themeChanged(activeTheme);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void addTheme(GTheme newTheme) {
|
public static void addTheme(GTheme newTheme) {
|
||||||
allThemes.remove(newTheme);
|
allThemes.remove(newTheme);
|
||||||
allThemes.add(newTheme);
|
allThemes.add(newTheme);
|
||||||
|
@ -202,17 +203,6 @@ public class Gui {
|
||||||
return activeTheme.getLookAndFeelType();
|
return activeTheme.getLookAndFeelType();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void platformSpecificFixups() {
|
|
||||||
|
|
||||||
// Set the dock icon for macOS
|
|
||||||
if (Taskbar.isTaskbarSupported()) {
|
|
||||||
Taskbar taskbar = Taskbar.getTaskbar();
|
|
||||||
if (taskbar.isSupported(Taskbar.Feature.ICON_IMAGE)) {
|
|
||||||
taskbar.setIconImage(ApplicationInformationDisplayFactory.getLargestWindowIcon());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Color getRawColor(String id) {
|
public static Color getRawColor(String id) {
|
||||||
return getRawColor(id, true);
|
return getRawColor(id, true);
|
||||||
}
|
}
|
||||||
|
@ -221,7 +211,7 @@ public class Gui {
|
||||||
ColorValue color = currentValues.getColor(id);
|
ColorValue color = currentValues.getColor(id);
|
||||||
|
|
||||||
if (color == null) {
|
if (color == null) {
|
||||||
if (validate && isInitialzed) {
|
if (validate && isInitialized) {
|
||||||
// Throwable t = getFilteredTrace();
|
// Throwable t = getFilteredTrace();
|
||||||
Msg.error(Gui.class, "No color value registered for: " + id);
|
Msg.error(Gui.class, "No color value registered for: " + id);
|
||||||
}
|
}
|
||||||
|
@ -233,7 +223,7 @@ public class Gui {
|
||||||
public static Icon getRawIcon(String id, boolean validate) {
|
public static Icon getRawIcon(String id, boolean validate) {
|
||||||
IconValue icon = currentValues.getIcon(id);
|
IconValue icon = currentValues.getIcon(id);
|
||||||
if (icon == null) {
|
if (icon == null) {
|
||||||
if (validate && isInitialzed) {
|
if (validate && isInitialized) {
|
||||||
Throwable t = getFilteredTrace();
|
Throwable t = getFilteredTrace();
|
||||||
Msg.error(Gui.class, "No icon value registered for: " + id, t);
|
Msg.error(Gui.class, "No icon value registered for: " + id, t);
|
||||||
}
|
}
|
||||||
|
@ -456,4 +446,34 @@ public class Gui {
|
||||||
return currentDefaults;
|
return currentDefaults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the given UI object is using the Aqua Look and Feel.
|
||||||
|
* @param UI the UI to examine.
|
||||||
|
* @return true if the UI is using Aqua
|
||||||
|
*/
|
||||||
|
public static boolean isUsingAquaUI(ComponentUI UI) {
|
||||||
|
return activeTheme.getLookAndFeelType() == LafType.MAC;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if 'Nimbus' is the current Look and Feel
|
||||||
|
* @return true if 'Nimbus' is the current Look and Feel
|
||||||
|
*/
|
||||||
|
public static boolean isUsingNimbusUI() {
|
||||||
|
return activeTheme.getLookAndFeelType() == LafType.NIMBUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addThemeListener(ThemeListener listener) {
|
||||||
|
themeListeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeThemeListener(ThemeListener listener) {
|
||||||
|
themeListeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
// for testing
|
||||||
|
public static void setPropertiesLoader(ThemePropertiesLoader loader) {
|
||||||
|
themePropertiesLoader = loader;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import javax.swing.Icon;
|
import javax.swing.Icon;
|
||||||
|
|
|
@ -13,12 +13,12 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import javax.swing.UIManager;
|
import javax.swing.UIManager;
|
||||||
import javax.swing.UIManager.LookAndFeelInfo;
|
import javax.swing.UIManager.LookAndFeelInfo;
|
||||||
|
|
||||||
import docking.theme.laf.*;
|
import generic.theme.laf.*;
|
||||||
import ghidra.framework.OperatingSystem;
|
import ghidra.framework.OperatingSystem;
|
||||||
import ghidra.framework.Platform;
|
import ghidra.framework.Platform;
|
||||||
import ghidra.util.exception.AssertException;
|
import ghidra.util.exception.AssertException;
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
public interface Refreshable {
|
public interface Refreshable {
|
||||||
public void refresh();
|
public void refresh();
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* ###
|
||||||
|
* IP: GHIDRA
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package generic.theme;
|
||||||
|
|
||||||
|
public interface ThemeListener {
|
||||||
|
public void themeChanged(GTheme newTheme);
|
||||||
|
}
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -26,7 +26,7 @@ public class ThemePropertiesLoader {
|
||||||
GThemeValueMap defaults = new GThemeValueMap();
|
GThemeValueMap defaults = new GThemeValueMap();
|
||||||
GThemeValueMap darkDefaults = new GThemeValueMap();
|
GThemeValueMap darkDefaults = new GThemeValueMap();
|
||||||
|
|
||||||
ThemePropertiesLoader() {
|
public ThemePropertiesLoader() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load() {
|
public void load() {
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
|
@ -13,7 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme;
|
package generic.theme;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme.builtin;
|
package generic.theme.builtin;
|
||||||
|
|
||||||
import docking.theme.DiscoverableGTheme;
|
import generic.theme.DiscoverableGTheme;
|
||||||
import docking.theme.LafType;
|
import generic.theme.LafType;
|
||||||
|
|
||||||
public class CDEMotifTheme extends DiscoverableGTheme {
|
public class CDEMotifTheme extends DiscoverableGTheme {
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme.builtin;
|
package generic.theme.builtin;
|
||||||
|
|
||||||
import docking.theme.DiscoverableGTheme;
|
import generic.theme.DiscoverableGTheme;
|
||||||
import docking.theme.LafType;
|
import generic.theme.LafType;
|
||||||
|
|
||||||
public class FlatDarculaTheme extends DiscoverableGTheme {
|
public class FlatDarculaTheme extends DiscoverableGTheme {
|
||||||
public FlatDarculaTheme() {
|
public FlatDarculaTheme() {
|
|
@ -13,10 +13,10 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package docking.theme.builtin;
|
package generic.theme.builtin;
|
||||||
|
|
||||||
import docking.theme.DiscoverableGTheme;
|
import generic.theme.DiscoverableGTheme;
|
||||||
import docking.theme.LafType;
|
import generic.theme.LafType;
|
||||||
|
|
||||||
public class FlatDarkTheme extends DiscoverableGTheme {
|
public class FlatDarkTheme extends DiscoverableGTheme {
|
||||||
public FlatDarkTheme() {
|
public FlatDarkTheme() {
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue