diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemoryBox.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemoryBox.java
index b1865930d9..bb29c66e42 100644
--- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemoryBox.java
+++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemoryBox.java
@@ -20,7 +20,7 @@ import java.awt.Graphics;
import java.util.HashMap;
import java.util.Map;
-import generic.theme.GThemeDefaults.Colors.Java;
+import generic.theme.GThemeDefaults.Colors;
import ghidra.program.model.address.AddressRange;
import ghidra.trace.model.Lifespan;
@@ -137,7 +137,7 @@ public class MemoryBox {
int w = vertical ? getTimePixelWidth() : getAddressPixelWidth();
int y = vertical ? getAddressPixelStart() : getTimePixelStart();
int h = vertical ? getAddressPixelWidth() : getTimePixelWidth();
- g.setColor(Java.BORDER);
+ g.setColor(Colors.BORDER);
g.fillRect(x - 1, y - 1, w + 2, h + 2);
g.setColor(color);
g.fillRect(x, y, w, h);
@@ -148,7 +148,7 @@ public class MemoryBox {
int w = vertical ? sz : getAddressPixelWidth();
int y = vertical ? getAddressPixelStart() : 0;
int h = vertical ? getAddressPixelWidth() : sz;
- g.setColor(Java.BORDER);
+ g.setColor(Colors.BORDER);
g.fillRect(x - 1, y - 1, w + 2, h + 2);
g.setColor(color);
g.fillRect(x, y, w, h);
@@ -159,7 +159,7 @@ public class MemoryBox {
int w = vertical ? 1 : sz;
int y = vertical ? 0 : getTimePixelStart();
int h = vertical ? sz : 1;
- g.setColor(Java.BORDER);
+ g.setColor(Colors.BORDER);
g.fillRect(x - 1, y - 1, w + 2, h + 2);
g.setColor(color);
g.fillRect(x, y, w, h);
diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemviewPanel.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemviewPanel.java
index a141efafe2..341289f903 100644
--- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemviewPanel.java
+++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemviewPanel.java
@@ -23,7 +23,7 @@ import java.util.List;
import javax.swing.*;
import generic.theme.GColor;
-import generic.theme.GThemeDefaults.Colors.Java;
+import generic.theme.GThemeDefaults.Colors;
import ghidra.program.model.address.Address;
import ghidra.program.model.address.AddressRange;
@@ -64,7 +64,7 @@ public class MemviewPanel extends JPanel implements MouseListener, MouseMotionLi
this.provider = provider;
setPreferredSize(new Dimension(barWidth, barHeight));
setSize(getPreferredSize());
- setBorder(BorderFactory.createLineBorder(Java.BORDER, 1));
+ setBorder(BorderFactory.createLineBorder(Colors.BORDER, 1));
setFocusable(true);
addMouseListener(this);
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/VariousChoicesPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/VariousChoicesPanel.java
index db28e89df4..1349d0c742 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/VariousChoicesPanel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/VariousChoicesPanel.java
@@ -29,7 +29,7 @@ import docking.widgets.button.GRadioButton;
import docking.widgets.checkbox.GCheckBox;
import docking.widgets.label.GDHtmlLabel;
import docking.widgets.label.GLabel;
-import generic.theme.GThemeDefaults.Colors.Java;
+import generic.theme.GThemeDefaults.Colors;
import ghidra.app.merge.util.ConflictUtility;
import ghidra.util.HTMLUtilities;
import ghidra.util.layout.MaximizeSpecificColumnGridLayout;
@@ -46,7 +46,7 @@ public class VariousChoicesPanel extends ConflictPanel {
private final static long serialVersionUID = 1;
private static final Border UNDERLINE_BORDER =
- BorderFactory.createMatteBorder(0, 0, 1, 0, Java.BORDER);
+ BorderFactory.createMatteBorder(0, 0, 1, 0, Colors.BORDER);
private JPanel rowPanel;
private GDHtmlLabel headerLabel;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/VerticalChoicesPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/VerticalChoicesPanel.java
index b131ab07e7..d37221dc91 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/VerticalChoicesPanel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/VerticalChoicesPanel.java
@@ -29,7 +29,7 @@ import docking.widgets.button.GRadioButton;
import docking.widgets.checkbox.GCheckBox;
import docking.widgets.label.GDHtmlLabel;
import docking.widgets.label.GDLabel;
-import generic.theme.GThemeDefaults.Colors.Java;
+import generic.theme.GThemeDefaults.Colors;
import ghidra.app.merge.util.ConflictUtility;
import ghidra.util.HTMLUtilities;
import ghidra.util.datastruct.LongArrayList;
@@ -190,7 +190,7 @@ public class VerticalChoicesPanel extends ConflictPanel {
headerComps[i] = new MyLabel(items[i]);
headerComps[i].setName(getComponentName(0, i));
setRowComponent(headerComps[i], 0, i, defaultInsets);
- headerComps[i].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Java.BORDER));
+ headerComps[i].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Colors.BORDER));
}
}
rowPanel.validate();
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/StoredAnalyzerTimesPropertyEditor.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/StoredAnalyzerTimesPropertyEditor.java
index 44296a8617..96fb94982e 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/StoredAnalyzerTimesPropertyEditor.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/StoredAnalyzerTimesPropertyEditor.java
@@ -21,7 +21,7 @@ import java.beans.PropertyEditorSupport;
import javax.swing.*;
import docking.widgets.label.GDLabel;
-import generic.theme.GThemeDefaults.Colors.Java;
+import generic.theme.GThemeDefaults.Colors;
import ghidra.framework.options.CustomOptionsEditor;
import ghidra.util.layout.PairLayout;
@@ -116,7 +116,7 @@ public class StoredAnalyzerTimesPropertyEditor extends PropertyEditorSupport
new JTextField(StoredAnalyzerTimes.formatTimeMS(times.getTotalTime()));
valueField.setEditable(false);
valueField.setHorizontalAlignment(SwingConstants.RIGHT);
- valueField.setBorder(BorderFactory.createLineBorder(Java.BORDER, 2));
+ valueField.setBorder(BorderFactory.createLineBorder(Colors.BORDER, 2));
panel.add(valueField);
return panel;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/cparser/ParseDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/cparser/ParseDialog.java
index 3b13c69e75..298463fff2 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/cparser/ParseDialog.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/cparser/ParseDialog.java
@@ -26,8 +26,6 @@ import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.TableModel;
-import org.apache.commons.lang3.ObjectUtils;
-
import docking.*;
import docking.action.*;
import docking.widgets.OptionDialog;
@@ -41,11 +39,8 @@ import docking.widgets.pathmanager.PathnameTablePanel;
import docking.widgets.table.GTableCellRenderer;
import docking.widgets.table.GTableCellRenderingData;
import generic.jar.ResourceFile;
-import generic.theme.GThemeDefaults.Colors.Tables;
import ghidra.app.plugin.core.processors.SetLanguageDialog;
-import ghidra.app.util.Option;
import ghidra.app.util.cparser.C.CParserUtils;
-import ghidra.app.util.exporter.Exporter;
import ghidra.framework.Application;
import ghidra.framework.options.SaveState;
import ghidra.framework.preferences.Preferences;
@@ -59,17 +54,17 @@ import ghidra.util.filechooser.ExtensionFileFilter;
import resources.Icons;
/**
- * Dialog that shows files used for parsing C header files. The profile has a list of
- * source header files to parse, followed by parse options (compiler directives).
- * Ghidra supplies a Windows profile by default in core/parserprofiles. The user can do
- * "save as" on this default profile to create new profiles that will be written to the
- * user's /userprofiles directory. The CParserPlugin creates this directory if it
+ * Dialog that shows files used for parsing C header files. The profile has a list of
+ * source header files to parse, followed by parse options (compiler directives).
+ * Ghidra supplies a Windows profile by default in core/parserprofiles. The user can do
+ * "save as" on this default profile to create new profiles that will be written to the
+ * user's /userprofiles directory. The CParserPlugin creates this directory if it
* doesn't exist.
- *
+ *
* The data types resulting from the parse operation can either be added to the data type
* manager in the current program, or written to an archive data file.
- *
- *
+ *
+ *
*
*/
class ParseDialog extends ReusableDialogComponentProvider {
@@ -88,13 +83,13 @@ class ParseDialog extends ReusableDialogComponentProvider {
private PathnameTablePanel pathPanel;
private JTextArea parseOptionsField;
-
+
protected JComponent languagePanel;
protected JTextField languageTextField;
protected JButton languageButton;
protected String languageIDString = null;
protected String compilerIDString = null;
-
+
private GhidraComboBox comboBox;
private DefaultComboBoxModel comboModel;
private DockingAction saveAction;
@@ -106,7 +101,7 @@ class ParseDialog extends ReusableDialogComponentProvider {
private TableModelListener tableListener;
private ItemListener comboItemListener;
private TableModel tableModel;
-
+
private PathnameTablePanel includePathPanel;
private TableModel parsePathTableModel;
private TableModelListener parsePathTableListener;
@@ -116,7 +111,7 @@ class ParseDialog extends ReusableDialogComponentProvider {
private ResourceFile parentUserFile;
private boolean saveAsInProgress;
private boolean initialBuild = true;
-
+
private boolean userDefined = false;
private String currentProfileName = null;
@@ -134,27 +129,29 @@ class ParseDialog extends ReusableDialogComponentProvider {
addDismissButton();
createActions();
setActionsEnabled();
-
+
// setup based on save state
if (currentProfileName != null) {
for (int i = 0; i < itemList.size(); i++) {
ComboBoxItem item = itemList.get(i);
- if (userDefined == item.isUserDefined && currentProfileName.equals(item.file.getName())) {
+ if (userDefined == item.isUserDefined &&
+ currentProfileName.equals(item.file.getName())) {
comboBox.setSelectedIndex(i);
break;
}
}
}
- } else {
+ }
+ else {
toFront();
}
}
-
+
void writeState(SaveState saveState) {
// Get the current state if the dialog has been displayed
if (!initialBuild) {
ComboBoxItem item = (ComboBoxItem) comboBox.getSelectedItem();
-
+
currentProfileName = item.file.getName();
userDefined = item.isUserDefined;
@@ -188,7 +185,7 @@ class ParseDialog extends ReusableDialogComponentProvider {
protected JPanel buildMainPanel() {
initialBuild = true;
-
+
mainPanel = new JPanel(new BorderLayout(10, 5));
comboModel = new DefaultComboBoxModel<>();
@@ -217,7 +214,7 @@ class ParseDialog extends ReusableDialogComponentProvider {
pathPanel.setFileChooserProperties("Choose Source Files", LAST_IMPORT_C_DIRECTORY,
GhidraFileChooserMode.FILES_AND_DIRECTORIES, true,
new ExtensionFileFilter(new String[] { "h" }, "C Header Files"));
-
+
// Set default render to display red if file would not we found
// Using include paths
pathPanel.getTable().setDefaultRenderer(String.class, new GTableCellRenderer() {
@@ -229,7 +226,7 @@ class ParseDialog extends ReusableDialogComponentProvider {
String pathName = (String) value;
pathName = (pathName == null ? "" : pathName.trim());
-
+
if (pathName.length() == 0 || pathName.startsWith("#")) {
return label;
}
@@ -237,7 +234,7 @@ class ParseDialog extends ReusableDialogComponentProvider {
boolean fileExists = true;
File file = new File(pathName);
fileExists = file.exists();
-
+
// file not found directly, see if one of the include paths will find the file
if (!fileExists) {
fileExists = doesFileExist(pathName, fileExists);
@@ -245,14 +242,13 @@ class ParseDialog extends ReusableDialogComponentProvider {
label.setText(pathName.toString());
if (!fileExists) {
- label.setForeground(data.isSelected() ? Tables.FG_ERROR_SELECTED
- : Tables.FG_ERROR_UNSELECTED);
+ label.setForeground(getErrorForegroundColor(data.isSelected()));
}
return label;
}
});
-
+
tableListener = e -> {
ComboBoxItem item = (ComboBoxItem) comboBox.getSelectedItem();
item.isChanged = !initialBuild;
@@ -260,7 +256,7 @@ class ParseDialog extends ReusableDialogComponentProvider {
};
tableModel = pathPanel.getTable().getModel();
tableModel.addTableModelListener(tableListener);
-
+
includePathPanel = new PathnameTablePanel(null, true, false);
includePathPanel.setBorder(BorderFactory.createTitledBorder("Include paths"));
includePathPanel.setFileChooserProperties("Choose Source Files", LAST_IMPORT_C_DIRECTORY,
@@ -285,13 +281,13 @@ class ParseDialog extends ReusableDialogComponentProvider {
JScrollPane pane = new JScrollPane(parseOptionsField);
pane.getViewport().setPreferredSize(new Dimension(300, 200));
optionsPanel.add(pane, BorderLayout.CENTER);
-
+
JPanel archPanel = new JPanel(new BorderLayout());
archPanel.setBorder(BorderFactory.createTitledBorder("Program Architecture:"));
archPanel.add(new GLabel(" ", SwingConstants.RIGHT));
languagePanel = buildLanguagePanel();
archPanel.add(languagePanel);
-
+
// create Parse Button
parseButton = new JButton("Parse to Program");
@@ -304,19 +300,19 @@ class ParseDialog extends ReusableDialogComponentProvider {
parseToFileButton.setToolTipText("Parse files and output to archive file");
addButton(parseToFileButton);
-
mainPanel.add(comboPanel, BorderLayout.NORTH);
-
+
includePathPanel.setPreferredSize(new Dimension(pathPanel.getPreferredSize().width, 200));
- JSplitPane optionsPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, includePathPanel, optionsPanel);
+ JSplitPane optionsPane =
+ new JSplitPane(JSplitPane.VERTICAL_SPLIT, includePathPanel, optionsPanel);
optionsPane.setResizeWeight(0.50);
-
+
pathPanel.setPreferredSize(new Dimension(pathPanel.getPreferredSize().width, 200));
JSplitPane outerPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, pathPanel, optionsPane);
outerPane.setResizeWeight(0.50);
-
+
mainPanel.add(outerPane, BorderLayout.CENTER);
-
+
mainPanel.add(archPanel, BorderLayout.SOUTH);
setHelpLocation(new HelpLocation(plugin.getName(), "Parse_C_Source"));
@@ -340,8 +336,8 @@ class ParseDialog extends ReusableDialogComponentProvider {
}
}
return fileExists;
- }
-
+ }
+
private JComponent buildLanguagePanel() {
languageTextField = new JTextField();
languageTextField.setEditable(false);
@@ -349,31 +345,31 @@ class ParseDialog extends ReusableDialogComponentProvider {
languageButton = new BrowseButton();
languageButton.addActionListener(e -> {
- SetLanguageDialog dialog = new SetLanguageDialog(plugin.getTool(), languageIDString, compilerIDString,
- "Select Program Architecture for File DataType Archive");
- LanguageID languageId = dialog.getLanguageDescriptionID();
- CompilerSpecID compilerSpecId = dialog.getCompilerSpecDescriptionID();
- if ((languageId == null) || (compilerSpecId == null)) {
- return;
- }
-
- String newLanguageIDString = languageId.getIdAsString();
- String newCompilerIDString = compilerSpecId.getIdAsString();
-
- if (!Objects.equals(newLanguageIDString, languageIDString) ||
- !Objects.equals(newCompilerIDString, compilerIDString)) {
- itemChanged();
- }
-
- languageIDString = newLanguageIDString;
+ SetLanguageDialog dialog = new SetLanguageDialog(plugin.getTool(), languageIDString,
+ compilerIDString, "Select Program Architecture for File DataType Archive");
+ LanguageID languageId = dialog.getLanguageDescriptionID();
+ CompilerSpecID compilerSpecId = dialog.getCompilerSpecDescriptionID();
+ if ((languageId == null) || (compilerSpecId == null)) {
+ return;
+ }
+
+ String newLanguageIDString = languageId.getIdAsString();
+ String newCompilerIDString = compilerSpecId.getIdAsString();
+
+ if (!Objects.equals(newLanguageIDString, languageIDString) ||
+ !Objects.equals(newCompilerIDString, compilerIDString)) {
+ itemChanged();
+ }
+
+ languageIDString = newLanguageIDString;
compilerIDString = newCompilerIDString;
- updateArchitectureDescription();
+ updateArchitectureDescription();
});
-
- updateArchitectureDescription();
- languageButton.setName("Set Processor Architecture");
+ updateArchitectureDescription();
+
+ languageButton.setName("Set Processor Architecture");
Font font = languageButton.getFont();
languageButton.setFont(font.deriveFont(Font.BOLD));
@@ -387,13 +383,13 @@ class ParseDialog extends ReusableDialogComponentProvider {
String newProgramArchitectureSummary = "64/32 (primarily for backward compatibility)";
if (languageIDString != null) {
- StringBuilder buf = new StringBuilder();
- buf.append(languageIDString);
- buf.append(" / ");
- buf.append(compilerIDString != null ? compilerIDString : "none");
- newProgramArchitectureSummary = buf.toString();
+ StringBuilder buf = new StringBuilder();
+ buf.append(languageIDString);
+ buf.append(" / ");
+ buf.append(compilerIDString != null ? compilerIDString : "none");
+ newProgramArchitectureSummary = buf.toString();
}
-
+
languageTextField.setText(newProgramArchitectureSummary);
}
@@ -656,30 +652,30 @@ class ParseDialog extends ReusableDialogComponentProvider {
String line = null;
while ((line = br.readLine()) != null && line.trim().length() > 0) {
line = line.trim();
-
+
pathList.add(line);
}
-
+
while ((line = br.readLine()) != null && line.trim().length() > 0) {
line = line.trim();
-
+
sb.append(line + "\n");
}
// get paths
while ((line = br.readLine()) != null && line.trim().length() > 0) {
line = line.trim();
-
+
includeList.add(line);
}
-
+
// get language
while ((line = br.readLine()) != null) {
line = line.trim();
if (line.length() > 0) {
langString = (line.length() == 0 ? null : line);
break;
- }
+ }
}
// get compiler spec
@@ -688,25 +684,24 @@ class ParseDialog extends ReusableDialogComponentProvider {
if (line.length() > 0) {
compileString = (line.length() == 0 ? null : line);
break;
- }
+ }
}
-
String[] paths = new String[pathList.size()];
paths = pathList.toArray(paths);
pathPanel.setPaths(paths);
-
+
String[] incpaths = new String[includeList.size()];
incpaths = includeList.toArray(incpaths);
includePathPanel.setPaths(incpaths);
-
+
parseOptionsField.setText(sb.toString());
-
+
languageIDString = langString;
-
+
compilerIDString = compileString;
-
- updateArchitectureDescription();
+
+ updateArchitectureDescription();
br.close();
}
@@ -726,7 +721,7 @@ class ParseDialog extends ReusableDialogComponentProvider {
setActionsEnabled();
}
}
-
+
private void writeProfile(ResourceFile outputFile) {
// write the pathnames
try {
@@ -749,27 +744,27 @@ class ParseDialog extends ReusableDialogComponentProvider {
writer.newLine();
// Write paths
- String [] includePaths = includePathPanel.getPaths();
+ String[] includePaths = includePathPanel.getPaths();
for (String path : includePaths) {
writer.write(path.trim());
writer.newLine();
}
writer.newLine();
-
+
// Write Language ID Spec
if (languageIDString != null) {
writer.write(languageIDString);
}
writer.newLine();
writer.newLine();
-
+
// Write Compiler ID Spec
if (compilerIDString != null) {
writer.write(compilerIDString);
}
writer.newLine();
writer.newLine();
-
+
writer.close();
}
catch (IOException e) {
@@ -808,17 +803,18 @@ class ParseDialog extends ReusableDialogComponentProvider {
paths = expandPaths(paths);
pathPanel.setPaths(paths);
-
- if (languageIDString == null || compilerIDString == null ) {
+
+ if (languageIDString == null || compilerIDString == null) {
Msg.showWarn(getClass(), rootPanel, "Program Architecture not Specified",
- "A Program Architecture must be specified in order to parse to a file.");
- return;
+ "A Program Architecture must be specified in order to parse to a file.");
+ return;
}
if (parseToFile) {
File file = getSaveFile();
if (file != null) {
- plugin.parse(paths, includePaths, options, languageIDString, compilerIDString, file.getAbsolutePath());
+ plugin.parse(paths, includePaths, options, languageIDString, compilerIDString,
+ file.getAbsolutePath());
}
}
else {
@@ -996,11 +992,7 @@ class ParseDialog extends ReusableDialogComponentProvider {
@Override
public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((file == null) ? 0 : file.hashCode());
- result = prime * result + (isUserDefined ? 1231 : 1237);
- return result;
+ return Objects.hash(file, isUserDefined);
}
}
@@ -1017,55 +1009,54 @@ class ParseDialog extends ReusableDialogComponentProvider {
return 1;
}
}
-
+
//==================================================================================================
// Methods for Testing
//==================================================================================================
+ GhidraComboBox getParseComboBox() {
+ return comboBox;
+ }
- GhidraComboBox getParseComboBox() {
- return comboBox;
- }
+ PathnameTablePanel getSourceFiles() {
+ return this.pathPanel;
+ }
- PathnameTablePanel getSourceFiles() {
- return this.pathPanel;
- }
-
- PathnameTablePanel getIncludePaths() {
- return this.includePathPanel;
- }
-
- JTextArea getParseOptionsTextField() {
- return this.parseOptionsField;
- }
-
- JButton getLanguageButton() {
- return this.languageButton;
- }
-
- JTextField getLanguageText() {
- return this.languageTextField;
- }
-
- JButton getParseButton() {
- return this.parseButton;
- }
-
- JButton getParseToFileButton() {
- return this.parseToFileButton;
- }
-
- ArrayList getProfiles() {
- return this.itemList;
- }
-
- ComboBoxItem getCurrentItem() {
- ComboBoxItem item = (ComboBoxItem) comboBox.getSelectedItem();
-
- return item;
- }
-
- ResourceFile getUserProfileParent() {
- return parentUserFile;
- }
+ PathnameTablePanel getIncludePaths() {
+ return this.includePathPanel;
+ }
+
+ JTextArea getParseOptionsTextField() {
+ return this.parseOptionsField;
+ }
+
+ JButton getLanguageButton() {
+ return this.languageButton;
+ }
+
+ JTextField getLanguageText() {
+ return this.languageTextField;
+ }
+
+ JButton getParseButton() {
+ return this.parseButton;
+ }
+
+ JButton getParseToFileButton() {
+ return this.parseToFileButton;
+ }
+
+ ArrayList getProfiles() {
+ return this.itemList;
+ }
+
+ ComboBoxItem getCurrentItem() {
+ ComboBoxItem item = (ComboBoxItem) comboBox.getSelectedItem();
+
+ return item;
+ }
+
+ ResourceFile getUserProfileParent() {
+ return parentUserFile;
+ }
}
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableModel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableModel.java
index ed31aaa02b..42d37ff792 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableModel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableModel.java
@@ -25,7 +25,6 @@ import javax.swing.JTable;
import docking.widgets.table.*;
import generic.theme.GColor;
-import generic.theme.GThemeDefaults.Colors.Tables;
import ghidra.app.util.ToolTipUtils;
import ghidra.docking.settings.FormatSettingsDefinition;
import ghidra.docking.settings.Settings;
@@ -156,8 +155,7 @@ class EquateTableModel extends GDynamicColumnTableModel {
JTable table = data.getTable();
if (!eq.isValidUUID()) { // Error equate
- label.setForeground(
- (isSelected) ? table.getSelectionForeground() : Tables.FG_ERROR_UNSELECTED);
+ label.setForeground(getErrorForegroundColor(isSelected));
}
else if (!eq.isEnumBased()) { // User label
label.setForeground(
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionEditorDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionEditorDialog.java
index e44761a424..bde43ea7e2 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionEditorDialog.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionEditorDialog.java
@@ -39,7 +39,7 @@ import docking.widgets.label.GLabel;
import docking.widgets.table.*;
import generic.theme.GIcon;
import generic.theme.GThemeDefaults.Colors;
-import generic.theme.GThemeDefaults.Colors.*;
+import generic.theme.GThemeDefaults.Colors.Palette;
import generic.util.WindowUtilities;
import ghidra.app.services.DataTypeManagerService;
import ghidra.app.util.ToolTipUtils;
@@ -213,7 +213,7 @@ public class FunctionEditorDialog extends DialogComponentProvider implements Mod
thunkedText.setEditable(false);
DockingUtils.setTransparent(thunkedText);
CompoundBorder border =
- BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Java.BORDER),
+ BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Colors.BORDER),
BorderFactory.createEmptyBorder(0, 5, 0, 5));
thunkedText.setBorder(border);
thunkedText.setForeground(FunctionColors.THUNK);
@@ -652,13 +652,12 @@ public class FunctionEditorDialog extends DialogComponentProvider implements Mod
DataType dataType = (DataType) value;
Color color = isSelected ? table.getSelectionForeground() : table.getForeground();
if (!tableModel.isCellEditable(row, column)) {
- color =
- isSelected ? Tables.FG_UNEDITABLE_SELECTED : Tables.FG_UNEDITABLE_UNSELECTED;
+ color = getUneditableForegroundColor(isSelected);
}
if (dataType != null) {
setText(dataType.getName());
if (dataType.isNotYetDefined()) {
- color = isSelected ? Tables.FG_ERROR_SELECTED : Tables.FG_ERROR_UNSELECTED;
+ color = getErrorForegroundColor(isSelected);
}
String toolTipText = ToolTipUtils.getToolTipText(dataType);
String headerText = "" +
@@ -782,8 +781,7 @@ public class FunctionEditorDialog extends DialogComponentProvider implements Mod
boolean isInvalidStorage =
!storage.isValid() || rowData.getFormalDataType().getLength() != storage.size();
if (isInvalidStorage) {
- setForeground(
- isSelected ? Tables.FG_ERROR_SELECTED : Tables.FG_ERROR_UNSELECTED);
+ setForeground(getErrorForegroundColor(isSelected));
setToolTipText("Invalid Parameter Storage");
}
else {
@@ -818,8 +816,7 @@ public class FunctionEditorDialog extends DialogComponentProvider implements Mod
ParameterTableModel tableModel = (ParameterTableModel) table.getModel();
if (!tableModel.isCellEditable(row, column)) {
- setForeground(
- isSelected ? Tables.FG_UNEDITABLE_SELECTED : Tables.FG_UNEDITABLE_UNSELECTED);
+ setForeground(getUneditableForegroundColor(isSelected));
}
else {
if (isSelected) {
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageTableCellEditor.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageTableCellEditor.java
index cd89ebe0fe..ca6283b2bb 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageTableCellEditor.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageTableCellEditor.java
@@ -15,6 +15,7 @@
*/
package ghidra.app.plugin.core.function.editor;
+import java.awt.Color;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.util.EventObject;
@@ -53,8 +54,7 @@ class StorageTableCellEditor extends AbstractCellEditor implements TableCellEdit
boolean isSelected, int row, int column) {
String stringValue = value == null ? "" : value.toString();
JTextField field = new JTextField(stringValue);
- field.setBackground(
- isSelected ? Tables.FG_UNEDITABLE_SELECTED : Tables.FG_UNEDITABLE_UNSELECTED);
+ field.setBackground(getUneditableForegroundColor(isSelected));
field.setEditable(false);
ParameterTableModel tableModel = (ParameterTableModel) table.getModel();
FunctionVariableData rowData = tableModel.getRowObject(row);
@@ -78,4 +78,9 @@ class StorageTableCellEditor extends AbstractCellEditor implements TableCellEdit
});
return field;
}
+
+ protected Color getUneditableForegroundColor(boolean isSelected) {
+ return isSelected ? Tables.UNEDITABLE_SELECTED : Tables.UNEDITABLE_UNSELECTED;
+ }
+
}
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagProvider.java
index 7c5ed34091..1c69ed1822 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagProvider.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagProvider.java
@@ -27,7 +27,7 @@ import org.apache.commons.lang3.StringUtils;
import docking.widgets.label.GLabel;
import docking.widgets.textfield.HintTextField;
-import generic.theme.GThemeDefaults.Colors.Java;
+import generic.theme.GThemeDefaults.Colors;
import ghidra.app.cmd.function.CreateFunctionTagCmd;
import ghidra.app.context.ProgramActionContext;
import ghidra.framework.cmd.Command;
@@ -239,9 +239,9 @@ public class FunctionTagProvider extends ComponentProviderAdapter
targetPanel = new TargetTagsPanel(this, tool, "Assigned To Function");
allFunctionsPanel = new AllFunctionsPanel(program, this, "Functions with Selected Tag");
buttonPanel = new FunctionTagButtonPanel(sourcePanel, targetPanel);
- sourcePanel.setBorder(BorderFactory.createLineBorder(Java.BORDER));
- targetPanel.setBorder(BorderFactory.createLineBorder(Java.BORDER));
- allFunctionsPanel.setBorder(BorderFactory.createLineBorder(Java.BORDER));
+ sourcePanel.setBorder(BorderFactory.createLineBorder(Colors.BORDER));
+ targetPanel.setBorder(BorderFactory.createLineBorder(Colors.BORDER));
+ allFunctionsPanel.setBorder(BorderFactory.createLineBorder(Colors.BORDER));
// If we don't set this, then the splitter won't be able to shrink the
// target panels below the size required by its header, which can be large
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/hover/AbstractReferenceHover.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/hover/AbstractReferenceHover.java
index 458f6c0297..21885dcd8e 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/hover/AbstractReferenceHover.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/hover/AbstractReferenceHover.java
@@ -24,8 +24,8 @@ import javax.swing.JToolTip;
import docking.widgets.fieldpanel.field.Field;
import docking.widgets.fieldpanel.support.FieldLocation;
-import generic.theme.GThemeDefaults.Colors;
import generic.theme.GThemeDefaults.Colors.Messages;
+import generic.theme.GThemeDefaults.Colors.Tooltips;
import ghidra.app.plugin.core.gotoquery.GoToHelper;
import ghidra.app.services.CodeFormatService;
import ghidra.app.util.*;
@@ -46,7 +46,7 @@ import ghidra.util.bean.opteditor.OptionsVetoException;
public abstract class AbstractReferenceHover extends AbstractConfigurableHover {
private static final int WINDOW_OFFSET = 50;
- private static final Color BACKGROUND_COLOR = Colors.BG_TOOLTIP;
+ private static final Color BACKGROUND_COLOR = Tooltips.BACKGROUND;
private static final Color FG_COLOR_NOT_IN_MEMORY = Messages.HINT;
private CodeFormatService codeFormatService;
@@ -251,21 +251,21 @@ public abstract class AbstractReferenceHover extends AbstractConfigurableHover {
/*
Format
-
+
Address: ram:1234
Address not in memory
-
-
+
+
Or, when multiple symbols at destination
-
-
+
+
Address: ram:1234
- Symbols (3):
+ Symbols (3):
foo
bar
baz
Address not in memory
-
+
*/
String newline = HTMLUtilities.HTML_NEW_LINE;
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/ControlPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/ControlPanel.java
index ac8c4fb3f5..a6e80668e0 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/ControlPanel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/ControlPanel.java
@@ -21,7 +21,7 @@ import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
-import generic.theme.GThemeDefaults.Colors.Java;
+import generic.theme.GThemeDefaults.Colors;
import ghidra.app.plugin.core.instructionsearch.InstructionSearchPlugin;
/**
@@ -57,7 +57,7 @@ public class ControlPanel extends JPanel {
gbc.weightx = 1.0;
this.add(directionWidget, gbc);
- this.setBorder(BorderFactory.createLineBorder(Java.BORDER));
+ this.setBorder(BorderFactory.createLineBorder(Colors.BORDER));
}
public SelectionScopeWidget getRangeWidget() {
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/interpreter/CodeCompletionWindow.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/interpreter/CodeCompletionWindow.java
index 00a4efe5d4..cadedb4ce8 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/interpreter/CodeCompletionWindow.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/interpreter/CodeCompletionWindow.java
@@ -25,20 +25,14 @@ import javax.swing.border.EmptyBorder;
import javax.swing.event.ListDataListener;
import docking.widgets.list.GListCellRenderer;
-import generic.theme.GThemeDefaults.Colors;
+import generic.theme.GThemeDefaults.Colors.Tooltips;
import generic.util.WindowUtilities;
import ghidra.app.plugin.core.console.CodeCompletion;
/**
* This class encapsulates a code completion popup Window for the ConsolePlugin.
- *
- *
- *
*/
public class CodeCompletionWindow extends JDialog {
- private static final long serialVersionUID = 1L;
- /* from ReferenceHoverPlugin */
- private static final Color BACKGROUND_COLOR = Colors.BG_TOOLTIP;
protected final InterpreterPanel console;
protected final JTextPane outputTextField;
@@ -50,17 +44,6 @@ public class CodeCompletionWindow extends JDialog {
/* current list of completions */
protected JList jlist;
- /**
- * Constructs a new CodeCompletionWindow.
- *
- * We pass in the PluginTool so we can get a reference to the Frame we are
- * popping up over, as well as the text field we are coming from (so we
- * can fine-tune where we pop up).
- *
- * @param tool the PluginTool the has the Frame we are popping up over
- * @param console the ConsolePlugin we are providing services for
- * @param outputTextField the JTextField from whence we came
- */
public CodeCompletionWindow(Window parent, InterpreterPanel cp, JTextPane textField) {
super(parent);
@@ -73,7 +56,7 @@ public class CodeCompletionWindow extends JDialog {
/* don't steal focus from text input! */
setFocusableWindowState(false);
- jlist.setBackground(BACKGROUND_COLOR);
+ jlist.setBackground(Tooltips.BACKGROUND);
jlist.setCellRenderer(new CodeCompletionListCellRenderer());
/* add the ability to double-click a code completion */
MouseListener mouseListener = new MouseAdapter() {
@@ -105,11 +88,11 @@ public class CodeCompletionWindow extends JDialog {
/**
* Process a KeyEvent for this Window.
- *
+ *
* This method is located here so that others (e.g. ConsolePlugin) can
* forward KeyEvents to us, or we can process KeyEvents that were directed
* to us (because we had focus instead).
- *
+ *
* @param e KeyEvent
*/
@Override
@@ -119,22 +102,22 @@ public class CodeCompletionWindow extends JDialog {
/**
* Updates the completion list with the given completion mapping.
- *
+ *
* The format, as mentioned above, is:
* "attribute" -> "substitution value"
* If the substitution value is null, then that attribute will not be
* selectable for substitution.
- *
+ *
* After updating the mapping, this Window then updates its size as
* appropriate.
- *
+ *
* The Window also will attempt to move out of the way of the cursor/caret
* in the textField. However, if the caret's position had recently been
* changed and the caret had not been repainted yet, then the caret's
* location can be null. In this case, the Window will not move.
* You can avoid this condition by calling this method in a
* SwingUtilities.invokeLater(Runnable).
- *
+ *
* @param list List of code completions
*/
public void updateCompletionList(List list) {
@@ -257,9 +240,9 @@ public class CodeCompletionWindow extends JDialog {
/**
* Sets the Font on this CodeCompletionWindow.
- *
+ *
* Basically sets the Font in the completion list.
- *
+ *
* @param font the new Font
*/
@Override
@@ -303,9 +286,9 @@ public class CodeCompletionWindow extends JDialog {
/**
* Returns the currently selected code completion.
- *
+ *
* Returns "" if there is none.
- *
+ *
* @return the currently selected code completion, or null if none selected
*/
public CodeCompletion getCompletion() {
@@ -359,12 +342,12 @@ class CodeCompletionListModel implements ListModel {
/**
* This data type handles selection changes in the CodeCompletionWindow.
- *
+ *
* This contains all the "smarts" to determine whether or not indices can be
* selected. So when the user clicks on an entry with the mouse, we choose
* whether or not that index can actually be highlighted/selected.
- *
- *
+ *
+ *
*
*/
class CodeCompletionListSelectionModel extends DefaultListSelectionModel {
@@ -372,7 +355,7 @@ class CodeCompletionListSelectionModel extends DefaultListSelectionModel {
/**
* Constructs a new CodeCompletionListSelectionModel using the given List.
- *
+ *
* @param l the List to use
*/
public CodeCompletionListSelectionModel(List l) {
@@ -382,10 +365,10 @@ class CodeCompletionListSelectionModel extends DefaultListSelectionModel {
/**
* Called when the selection needs updating.
- *
+ *
* Here we will check the value of the new index and determine whether or
* not we actually want to select it.
- *
+ *
* @param index0 old index
* @param index1 new index
*/
@@ -405,9 +388,6 @@ class CodeCompletionListSelectionModel extends DefaultListSelectionModel {
/**
* Renders CodeCompletions for the CodeCompletionWindow.
- *
- *
- *
*/
class CodeCompletionListCellRenderer extends GListCellRenderer {
@@ -418,21 +398,21 @@ class CodeCompletionListCellRenderer extends GListCellRenderer {
/**
* Render either a default list cell, or use the one provided.
- *
+ *
* If the CodeCompletion we got has a Component to be used, then use that.
* Otherwise, we use the DefaultListCellRenderer routine.
*/
@Override
public Component getListCellRendererComponent(JList extends CodeCompletion> list,
CodeCompletion codeCompletion, int index, boolean isSelected, boolean cellHasFocus) {
- if (null == codeCompletion.getComponent()) {
+ if (codeCompletion.getComponent() == null) {
return super.getListCellRendererComponent(list, codeCompletion, index, isSelected,
cellHasFocus);
}
- /* ooh, we have a fancy component! */
JComponent component = codeCompletion.getComponent();
- /* if it's selected, make sure it shows up that way */
+
+ // if it's selected, make sure it shows up that way
component.setOpaque(true);
if (isSelected) {
component.setBackground(list.getSelectionBackground());
@@ -440,7 +420,7 @@ class CodeCompletionListCellRenderer extends GListCellRenderer {
else {
component.setBackground(list.getBackground());
}
- /* other nice formatting stuff */
+
component.setEnabled(list.isEnabled());
component.setFont(list.getFont());
component.setComponentOrientation(list.getComponentOrientation());
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/locationreferences/LocationReferencesTableModel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/locationreferences/LocationReferencesTableModel.java
index 671955bdab..5736acd5ec 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/locationreferences/LocationReferencesTableModel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/locationreferences/LocationReferencesTableModel.java
@@ -21,7 +21,6 @@ import java.util.*;
import org.apache.commons.lang3.StringUtils;
import docking.widgets.table.GTableCellRenderingData;
-import generic.theme.GThemeDefaults.Colors.Tables;
import ghidra.docking.settings.Settings;
import ghidra.framework.plugintool.ServiceProvider;
import ghidra.program.model.address.Address;
@@ -127,8 +126,7 @@ class LocationReferencesTableModel extends AddressBasedTableModel {
+ extends AbstractProgramBasedDynamicTableColumn {
private ContextCellRenderer renderer = new ContextCellRenderer();
@@ -189,8 +187,7 @@ class LocationReferencesTableModel extends AddressBasedTableModel knots = palette.getKnots();
- g.setColor(Java.BORDER);
+ g.setColor(Colors.BORDER);
g.drawLine(5, topBottomMargin - 6, 10, topBottomMargin - ascent + 2);
g.drawString("min entropy (0.0)", 20, topBottomMargin - ascent - descent);
@@ -70,7 +70,7 @@ public class KnotLabelPanel extends JPanel {
g.drawLine(5, y, 10, y);
}
- g.setColor(Java.BORDER);
+ g.setColor(Colors.BORDER);
g.drawLine(5, height + topBottomMargin + 4, 10, height + topBottomMargin + 8);
g.drawString("max entropy (8.0)", 20, topBottomMargin + height + ascent + descent);
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/entropy/PalettePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/entropy/PalettePanel.java
index 3ab95ed958..1b609c8b1c 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/entropy/PalettePanel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/entropy/PalettePanel.java
@@ -19,7 +19,7 @@ import java.awt.*;
import javax.swing.JPanel;
-import generic.theme.GThemeDefaults.Colors.Java;
+import generic.theme.GThemeDefaults.Colors;
public class PalettePanel extends JPanel {
@@ -47,7 +47,7 @@ public class PalettePanel extends JPanel {
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
- g.setColor(Java.BORDER);
+ g.setColor(Colors.BORDER);
if (palette == null) {
g.drawRect(0, 0, width - 1, height - 1);
return;
@@ -64,7 +64,7 @@ public class PalettePanel extends JPanel {
g.setColor(c);
g.fillRect(0, topBottomMargin + i, width, 1);
}
- g.setColor(Java.BORDER);
+ g.setColor(Colors.BORDER);
g.drawRect(0, topBottomMargin, width - 1, height);
}
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/ProgramListPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/ProgramListPanel.java
index 9efa618862..d1ba660ebe 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/ProgramListPanel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/ProgramListPanel.java
@@ -31,7 +31,7 @@ import javax.swing.text.Document;
import docking.widgets.list.GListCellRenderer;
import generic.theme.GColor;
-import generic.theme.GThemeDefaults.Colors.Java;
+import generic.theme.GThemeDefaults.Colors;
import ghidra.program.model.listing.Program;
/**
@@ -154,7 +154,7 @@ class ProgramListPanel extends JPanel {
// add some padding around the panel
Border innerBorder = BorderFactory.createEmptyBorder(5, 5, 5, 5);
- Border outerBorder = BorderFactory.createLineBorder(Java.BORDER);
+ Border outerBorder = BorderFactory.createLineBorder(Colors.BORDER);
Border compoundBorder = BorderFactory.createCompoundBorder(outerBorder, innerBorder);
setBorder(compoundBorder);
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditMemoryReferencePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditMemoryReferencePanel.java
index 4b52614ca0..9eb5dd2f9b 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditMemoryReferencePanel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditMemoryReferencePanel.java
@@ -36,7 +36,6 @@ import docking.widgets.label.GDLabel;
import docking.widgets.label.GLabel;
import generic.theme.GColor;
import generic.theme.GThemeDefaults.Colors;
-import generic.theme.GThemeDefaults.Colors.Java;
import ghidra.app.util.AddressInput;
import ghidra.program.model.address.*;
import ghidra.program.model.listing.*;
@@ -534,7 +533,7 @@ class EditMemoryReferencePanel extends EditReferencePanel {
model = new HistoryTableModel(fromCodeUnit.getProgram());
displayTable = new JTable(model);
displayTable.setTableHeader(null);
- displayTable.setBorder(new LineBorder(Java.BORDER));
+ displayTable.setBorder(new LineBorder(Colors.BORDER));
displayTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
displayTable.addMouseListener(new MouseAdapter() {
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditReferencesProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditReferencesProvider.java
index 39dd6b7022..600a8cc99e 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditReferencesProvider.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditReferencesProvider.java
@@ -37,7 +37,6 @@ import docking.widgets.checkbox.GCheckBox;
import docking.widgets.table.*;
import generic.theme.GColor;
import generic.theme.GIcon;
-import generic.theme.GThemeDefaults.Colors.Tables;
import ghidra.app.events.ProgramSelectionPluginEvent;
import ghidra.app.util.SelectionTransferData;
import ghidra.app.util.SelectionTransferable;
@@ -115,7 +114,7 @@ public class EditReferencesProvider extends ComponentProviderAdapter
/**
* Set drag feedback according to the ok parameter.
- *
+ *
* @param ok true means the drop action is OK
* @param e event that has current state of drag and drop operation
*/
@@ -127,7 +126,7 @@ public class EditReferencesProvider extends ComponentProviderAdapter
/**
* Return true if is OK to drop the transferable at the location
* specified the event.
- *
+ *
* @param e event that has current state of drag and drop operation
*/
@Override
@@ -136,8 +135,7 @@ public class EditReferencesProvider extends ComponentProviderAdapter
Memory memory = currentCodeUnit.getProgram().getMemory();
try {
Object data = e.getTransferable()
- .getTransferData(
- SelectionTransferable.localProgramSelectionFlavor);
+ .getTransferData(SelectionTransferable.localProgramSelectionFlavor);
AddressSetView view = ((SelectionTransferData) data).getAddressSet();
if (memory.contains(view)) {
return true;
@@ -164,7 +162,7 @@ public class EditReferencesProvider extends ComponentProviderAdapter
/**
* Add the object to the droppable component. The DropTargetAdapter
* calls this method from its drop() method.
- *
+ *
* @param obj Transferable object that is to be dropped; in this case,
* it is an AddressSetView
* @param e has current state of drop operation
@@ -289,8 +287,8 @@ public class EditReferencesProvider extends ComponentProviderAdapter
enableGotoReferenceLocation(gotoReferenceLocationToggleAction.isSelected());
}
};
- gotoReferenceLocationToggleAction.setToolBarData(
- new ToolBarData(SEND_LOCATION_ICON, "NavAction"));
+ gotoReferenceLocationToggleAction
+ .setToolBarData(new ToolBarData(SEND_LOCATION_ICON, "NavAction"));
gotoReferenceLocationToggleAction.setEnabled(true);
tool.addLocalAction(this, gotoReferenceLocationToggleAction);
@@ -527,7 +525,7 @@ public class EditReferencesProvider extends ComponentProviderAdapter
/**
* Find the Data at the currentCuAddress
- *
+ *
* @param data place to begin searching
* @return Data starting at currentCuAddress
*/
@@ -852,7 +850,7 @@ public class EditReferencesProvider extends ComponentProviderAdapter
//==================================================================================================
// Inner Classes
-//==================================================================================================
+//==================================================================================================
/** Fun little storage object */
private class ReferenceInfo {
@@ -890,8 +888,8 @@ public class EditReferencesProvider extends ComponentProviderAdapter
}
Reference ref = tableModel.getReference(row);
- RefType[] refTypes = EditReferencesModel.getAllowedRefTypes(
- EditReferencesProvider.this.currentProgram, ref);
+ RefType[] refTypes = EditReferencesModel
+ .getAllowedRefTypes(EditReferencesProvider.this.currentProgram, ref);
comboBox.removeAllItems();
int selectedIndex = -1;
@@ -913,10 +911,6 @@ public class EditReferencesProvider extends ComponentProviderAdapter
private class CellEditComboBox extends JComboBox {
- public CellEditComboBox() {
- super();
- }
-
@Override
public void setSelectedIndex(int anIndex) {
if (refsTable.getRowCount() == 0) {
@@ -1035,40 +1029,27 @@ public class EditReferencesProvider extends ComponentProviderAdapter
super.getTableCellRendererComponent(data);
- JTable table = data.getTable();
int row = data.getRowViewIndex();
boolean isSelected = data.isSelected();
Reference ref = tableModel.getReference(row);
-
Address addr = ref.getToAddress();
Memory memory = tableModel.getProgram().getMemory();
boolean bad = addr.isMemoryAddress() ? !memory.contains(addr) : false;
- setOpaque(false); // disable table striping
- setFont(table.getFont());
+ // disable table striping when not selected to reduce clutter
+ setOpaque(isSelected);
- if (isSelected) {
- if (bad) {
- setForeground(Tables.FG_ERROR_SELECTED);
- setFont(boldFont);
- }
- else {
- setFont(defaultFont);
- }
-
- setOpaque(true);
+ if (bad) {
+ setForeground(getErrorForegroundColor(isSelected));
+ setFont(boldFont);
}
else {
- // set color to red if address does not exist in memory
+ setFont(defaultFont);
+ }
- if (bad) {
- setForeground(Tables.FG_ERROR_UNSELECTED);
- setFont(boldFont);
- }
- else {
- setFont(defaultFont);
- }
+ // use a special color when not selected to show which row matches the operand
+ if (!isSelected) {
if (ref.getOperandIndex() == instrPanel.getSelectedOpIndex()) {
setBackground(BG_COLOR_ACTIVE_OPERAND);
setOpaque(true);
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptTableModel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptTableModel.java
index ebb81e91ad..ac44f948d6 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptTableModel.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptTableModel.java
@@ -372,7 +372,7 @@ class GhidraScriptTableModel extends GDynamicColumnTableModelWe have to set this to true painting, but then false when we are done (Java
- * components will not paint themselves if the are not showing).
- *
+ *
+ *
We have to set this to true painting, but then false when we are done (Java
+ * components will not paint themselves if the are not showing).
+ *
* @param isShowing true if the component is showing
*/
public void setShowing(boolean isShowing);
diff --git a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/ListingGraphComponentPanel.java b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/ListingGraphComponentPanel.java
index 0bf64aa90b..dd891e06f3 100644
--- a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/ListingGraphComponentPanel.java
+++ b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/ListingGraphComponentPanel.java
@@ -40,6 +40,7 @@ import docking.widgets.label.GDLabel;
import generic.theme.GColor;
import generic.theme.GIcon;
import generic.theme.GThemeDefaults.Colors;
+import generic.theme.GThemeDefaults.Colors.Tooltips;
import ghidra.app.plugin.core.codebrowser.hover.ListingHoverService;
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
@@ -203,7 +204,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
boolean useFullSizeTooltip = options.useFullSizeTooltip();
previewListingPanel = new FGVertexListingPanel(controller,
getFormatManager(useFullSizeTooltip), program, addressSet);
- previewListingPanel.setTextBackgroundColor(FGVertex.TOOLTIP_BACKGROUND_COLOR);
+ previewListingPanel.setTextBackgroundColor(Tooltips.BACKGROUND);
previewListingPanel.getFieldPanel().setCursorOn(false);
// keep the tooltip window from getting too big; use an arbitrary, reasonable max
@@ -216,14 +217,14 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
tooltipTitleLabel = new GDLabel();
tooltipTitleLabel.setHorizontalAlignment(SwingConstants.LEADING);
- tooltipTitleLabel.setBackground(FGVertex.TOOLTIP_BACKGROUND_COLOR);
+ tooltipTitleLabel.setBackground(Tooltips.BACKGROUND);
tooltipTitleLabel.setOpaque(true);
Font labelFont = tooltipTitleLabel.getFont();
tooltipTitleLabel.setFont(labelFont.deriveFont(Font.BOLD));
JPanel headerPanel = new JPanel(new BorderLayout());
headerPanel.add(tooltipTitleLabel);
- headerPanel.setBorder(BorderFactory.createLineBorder(Colors.Java.BORDER));
+ headerPanel.setBorder(BorderFactory.createLineBorder(Colors.BORDER));
panel.add(headerPanel, BorderLayout.NORTH);
panel.add(previewListingPanel, BorderLayout.CENTER);
diff --git a/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidFunctionDebugPanel.java b/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidFunctionDebugPanel.java
index 68d6a58835..f638525265 100644
--- a/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidFunctionDebugPanel.java
+++ b/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidFunctionDebugPanel.java
@@ -21,7 +21,7 @@ import java.awt.event.ActionListener;
import javax.swing.*;
import docking.widgets.label.GDLabel;
-import generic.theme.GThemeDefaults;
+import generic.theme.GThemeDefaults.Ids.Fonts;
import generic.theme.Gui;
import ghidra.feature.fid.db.*;
import ghidra.feature.fid.service.FidService;
@@ -38,6 +38,7 @@ public class FidFunctionDebugPanel extends JPanel {
/**
* Creates the panel.
* @param service the FID database service
+ * @param fidQueryService the query service
* @param functionRecord the function record to debug
*/
public FidFunctionDebugPanel(FidService service, FidQueryService fidQueryService,
@@ -57,7 +58,7 @@ public class FidFunctionDebugPanel extends JPanel {
JButton button = new JButton(text);
button.addActionListener(listener);
button.setHorizontalAlignment(SwingConstants.LEFT);
- Gui.registerFont(button, GThemeDefaults.Ids.Fonts.MONOSPACED);
+ Gui.registerFont(button, Fonts.MONOSPACED);
add(button);
}
@@ -68,7 +69,7 @@ public class FidFunctionDebugPanel extends JPanel {
private void addLabel(String text) {
JLabel label = new GDLabel(text);
label.setHorizontalAlignment(SwingConstants.LEFT);
- label.setFont(Gui.getFont("font.monospaced"));
+ Gui.registerFont(label, Fonts.MONOSPACED);
add(label);
}
@@ -85,16 +86,14 @@ public class FidFunctionDebugPanel extends JPanel {
libraryRecord.getLibraryVersion(), libraryRecord.getLibraryVariant(),
languageID.getIdAsString()));
- addButton(String.format("0x%016x", functionRecord.getID()),
- e -> FidDebugUtils.searchByFunctionID(functionRecord.getID(), service,
- fidQueryService));
+ addButton(String.format("0x%016x", functionRecord.getID()), e -> FidDebugUtils
+ .searchByFunctionID(functionRecord.getID(), service, fidQueryService));
addButton(functionRecord.getName(),
e -> FidDebugUtils.searchByName(functionRecord.getName(), service, fidQueryService));
- addButton(shorten(functionRecord.getDomainPath()),
- e -> FidDebugUtils.searchByDomainPath(functionRecord.getDomainPath(), service,
- fidQueryService));
+ addButton(shorten(functionRecord.getDomainPath()), e -> FidDebugUtils
+ .searchByDomainPath(functionRecord.getDomainPath(), service, fidQueryService));
addLabel(String.format("Entry Point: 0x%x", functionRecord.getEntryPoint()));
diff --git a/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidSearchDebugDialog.java b/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidSearchDebugDialog.java
index 3ba1bb1279..e0d938b420 100644
--- a/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidSearchDebugDialog.java
+++ b/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidSearchDebugDialog.java
@@ -77,13 +77,13 @@ public class FidSearchDebugDialog extends DialogComponentProvider {
private JLabel getPreparedLabel(String text) {
JLabel label = new GDLabel(text, SwingConstants.RIGHT);
- label.setFont(Gui.getFont(Fonts.MONOSPACED));
+ Gui.registerFont(label, Fonts.MONOSPACED);
return label;
}
private JTextField getPreparedTextField() {
JTextField textField = new JTextField(25);
- textField.setFont(Gui.getFont(Fonts.MONOSPACED));
+ Gui.registerFont(textField, Fonts.MONOSPACED);
return textField;
}
diff --git a/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidSearchResultFrame.java b/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidSearchResultFrame.java
index 1e246cedc7..113fda52dc 100644
--- a/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidSearchResultFrame.java
+++ b/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/debug/FidSearchResultFrame.java
@@ -26,8 +26,6 @@ import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import docking.widgets.table.*;
-import generic.theme.GThemeDefaults.Ids.Fonts;
-import generic.theme.Gui;
import ghidra.feature.fid.db.*;
import ghidra.feature.fid.service.FidService;
import ghidra.util.Msg;
@@ -66,7 +64,7 @@ public class FidSearchResultFrame extends JFrame implements FidQueryCloseListene
private void buildFrame() {
GTableCellRenderer renderer = new GTableCellRenderer();
- renderer.setFont(Gui.getFont(Fonts.MONOSPACED));
+ renderer.setFont(renderer.getFixedWidthFont());
int columnCount = table.getColumnCount();
for (int ii = 0; ii < columnCount; ++ii) {
Class> columnClass = table.getColumnClass(ii);
diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/VTMarkupStatusIcon.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/VTMarkupStatusIcon.java
index ec9b80fbdd..e7de5e8cc9 100644
--- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/VTMarkupStatusIcon.java
+++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/VTMarkupStatusIcon.java
@@ -22,7 +22,7 @@ import java.util.List;
import javax.swing.Icon;
import generic.theme.GColor;
-import generic.theme.GThemeDefaults.Colors.Java;
+import generic.theme.GThemeDefaults.Colors;
import ghidra.feature.vt.api.main.VTAssociationMarkupStatus;
public class VTMarkupStatusIcon implements Icon {
@@ -74,7 +74,7 @@ public class VTMarkupStatusIcon implements Icon {
drawBar(g, x + startX + BORDER + 1, y + BORDER + 1, width, colors.get(i));
}
- g.setColor(Java.BORDER);
+ g.setColor(Colors.BORDER);
g.drawRect(x, y, WIDTH, HEIGHT);
// g.drawRect(x, y, WIDTH / 2, HEIGHT);
g.drawRect(x + WIDTH, y + HEIGHT / 2 - 3, KNOB_WIDTH, 6);
diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/NewSessionPanel.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/NewSessionPanel.java
index 033a24ba16..d4359d9769 100644
--- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/NewSessionPanel.java
+++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/NewSessionPanel.java
@@ -27,7 +27,9 @@ import org.apache.commons.lang3.StringUtils;
import docking.widgets.button.BrowseButton;
import docking.widgets.label.GDLabel;
import docking.wizard.*;
-import generic.theme.*;
+import generic.theme.GIcon;
+import generic.theme.GThemeDefaults.Ids.Fonts;
+import generic.theme.Gui;
import ghidra.app.util.task.OpenProgramTask;
import ghidra.app.util.task.OpenProgramTask.OpenProgramRequest;
import ghidra.framework.main.DataTreeDialog;
@@ -74,7 +76,7 @@ public class NewSessionPanel extends AbstractMageJPanel {
folderLabel.setHorizontalAlignment(SwingConstants.RIGHT);
folderLabel.setToolTipText("The folder to store the new Version Tracking Session");
folderNameField = new JTextField();
- Gui.registerFont(folderNameField, GThemeDefaults.Ids.Fonts.MONOSPACED);
+ Gui.registerFont(folderNameField, Fonts.MONOSPACED);
folderNameField.setEditable(false); // force user to browse to choose
JButton browseFolderButton = new BrowseButton();
diff --git a/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingDeveloperDocs.html b/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingDeveloperDocs.html
index ff9ab1c82f..af3700ef0f 100644
--- a/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingDeveloperDocs.html
+++ b/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingDeveloperDocs.html
@@ -2,8 +2,6 @@
-
Developer's Guide
@@ -21,8 +19,8 @@
want to use colors, fonts, and icons. The key idea to support theming is to never
directly
reference those resources. Instead, the developer should create an ID string for the resource
- and then in a module.theme.properties file, provide a default value for that ID.
- (Also, you may define an alternate "dark" default value that will be used if the
+ and then in a module.theme.properties file, provide a default value for that
+ ID. (Also, you may define an alternate "dark" default value that will be used if the
current theme is considered a dark theme). The way you
define and use these IDs is a bit different depending on whether the resource is a color, font,
or icon. Colors and icons are similar in that developers use these types by creating either
@@ -182,6 +180,42 @@
icon.plugin.byteviewer.provider
+
+
+
System IDs: The following resource IDs are created and
+ used by the system. For a description of how these IDs are used internally by the
+ application, see the UiDefaultsMapper class . The system.* keys
+ allow users to quickly change many Look and Feel values via these high-level concepts. The
+ laf.* properties are for internal use and do not need to be changed by the user.
+ A description of the system properties can be found in the SystemThemeIds class.
+
+
+
+
+
+
laf.color.*
+
laf.font.*
+
laf.icon.*
+
+
+
+
+
system.color.*
+
system.font.*
+
+
+
+ The system property names use the standard property names, such as
+ font, bg and fg. These properties introduce these additional terms:
+ control, view, menu and tooltip. control refers to items that
+ generally control the state of the application, such as buttons and check boxes.
+ view refers to widgets that display data, such as trees, tables and text
+ fields. menu and tooltip work with the items after which they are
+ named.
+
+
+
+
Theme Property Files
@@ -198,7 +232,7 @@
they exist in a module's data directory and are named with the
.theme.properties suffix.
-
Theme Properties File Naming Convention
+
Theme Properties File Naming Convention
To promote consistency, theme property files should use the following naming
convention:
@@ -260,7 +294,7 @@ color.bg.listing = color.bg
color.fg.listing.address = black
color.fg.listing.bytes = #00ff00
-font.global = courirer-BOLD-12
+font.global = courier-BOLD-12
font.global.listing = font.global
icon.error = defaultError.png
@@ -295,11 +329,22 @@ color.fg.listing.bytes = orange
example, a reference color entry might be something like "color.bg.listing = color.bg". This
says that the listing's background color should be whatever "color.bg" is defined to be. Note
that all of the application's defined properties start with either "color.", "font.", or
- "icon.". Properties defined by a Java Look and Feel don't follow this pattern. To reference a
- property that does not have a standard prefix, an ID can be prefixed with "[color]",
- "[font]", or "[icon] as appropriate to allow the theme property parser to recognize the
- values as IDs to other properties. So to refer to a Java property named "table.background",
- you would use the following definition: "color.bg.table = [color]table.background".
+ "icon.".
+
+
+ Properties defined by the theming system do not follow this pattern. To reference a
+ property that does not have a standard prefix, an ID can be prefixed with [color]
+ , [font], or [icon] as appropriate to allow the theme
+ property parser to recognize the values as IDs to other properties. For example, to refer to a
+ system property namedsystem.color.bg.view,
+ you would use the following definition:
+
+ This class contains many common application theme values for developers to use, such as
+ the default background color. These values can be used directly so developers do not have
+ to instantiate theme objects using theme IDs.
+
+
+
+
Icons
+
+
+
+ When adding icons to the application, consider using standard icons provided by the
+ Icons class. Many generic concepts that require icons are in this class.
+
+
+
+
Palette Colors
+
+
+
+ A list of palette colors has been defined in gui.palette.theme.properties..
+ These palette colors values are meant to be used by developers to reduce the total number
+ of colors used in the application. These color ids and values are viewable in the
+ Theme Editor Dialog.
+
+
+ One of the benefits of using the palette system is that it is easy for end-users to change
+ one palette color to update all widgets in the application.
+
+
+ We recommend you use the existing palette colors when picking colors for your widgets.
+
+
+
+
+
HTML Foreground Colors in Messages
+
+
+
+ Some developers use HTML messages in labels, tables, tooltips, and in calls to system APIs,
+ like Msg. Using HTML text allows clients to control the formatting of the
+ text, including the usage of color. If you use color in your HTML, then we suggest you do
+ so using GColors, like this:
+
+ In this example, an HTML message is created and part of that text is colored with the
+ standard error message color, which is red in a light mode theme. You can also use your
+ own GColor object in your HTML messages. Using standard system colors or
+ GColors allows these colors to be updated as the theme changes. We do not
+ recommend the use of hard-coded color values.
+
+
+
+
+
+
Options Usage of Colors and Fonts
+
+
+
+
+ The Options class in Ghidra facilitates user-configurable options in the
+ application. Previously, developers could use options to allow end-users to control color
+ values. In the new theme-based system, all colors are controlled via theming. However, to
+ make the transition to theming easier for developers, we added methods to the options class
+ that allow the developer to bind color editing via the options UI. These color options will
+ write any changes directly to the theme system.
+
+
See: Options.registerThemeColorBinding() and
+ Options.registerThemeFontBinding()
+
+
+
+
+
+
UiDefaultsMapper
+
+
+
This class discusses some of the plumbing the application uses to unify the various Look
+ and Feel concepts presented by the different LaFs.
+
+
+
+
+
SystemThemeIds
+
+
+
This class is used by the UiDefaultsMapper class and presents a set of resource IDs common across all
+ LaFs. These values can be changed by the user. See also the description of
+ System IDs in this document.
+
+
+
+
+
+
+
Known Issues
+
+
+
+ Sometimes switching between themes does not reset all widgets. When
+ this happens, you may notice odd UI artifacts. These will go away when the application is
+ restarted and often when you again switch the theme.
+
+
+
+
+
+
+
Provided by: Theme Manager
Related Topics
diff --git a/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingInternals.html b/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingInternals.html
index 33ea671d36..b7629ee79d 100644
--- a/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingInternals.html
+++ b/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingInternals.html
@@ -2,9 +2,6 @@
-
-
Theming Architecture
diff --git a/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingOverview.html b/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingOverview.html
index c0018e699c..66ba9d24c2 100644
--- a/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingOverview.html
+++ b/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingOverview.html
@@ -2,9 +2,6 @@
-
-
General Overivew
diff --git a/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingUserDocs.html b/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingUserDocs.html
index a6035b112b..f869df2f49 100644
--- a/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingUserDocs.html
+++ b/Ghidra/Framework/Docking/src/main/help/help/topics/Theming/ThemingUserDocs.html
@@ -2,9 +2,6 @@
-
-
Theming User Documentation
@@ -67,11 +64,10 @@
called "Button.background", it would appear in Ghidra as "laf.color.Button.background".
Look and Feel Palette Properties - All the color and fonts used by the Look and Feel
properties are grouped into either system property values or auto-generated palette
- properties, sso that groups of properties can be changed together.
+ properties, so that groups of properties can be changed together.
-
See the Developer Documentation for more
details on the property ID format and naming conventions.
@@ -185,6 +181,14 @@
action, press the refresh button in the top
right corner of the Theme Editor dialog.
+
Toggle Showing System Values
+
+ Toggles whether the given table shows system ID values (e.g, those starting with
+ laf. or system.. By default these values are hidden.
+