diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/GHelpBroker.java b/Ghidra/Framework/Docking/src/main/java/docking/help/GHelpBroker.java index 9e38bee8bb..b6e09edbeb 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/GHelpBroker.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/help/GHelpBroker.java @@ -224,6 +224,10 @@ public class GHelpBroker extends DefaultHelpBroker { private void initializeUIComponents(Container contentPane) { + if (initialized) { + return; + } + // the editor pane can be changed out from under us, such as when the UI is updated when // the theme changes Component[] components = contentPane.getComponents(); @@ -243,6 +247,7 @@ public class GHelpBroker extends DefaultHelpBroker { new HelpViewSearcher(jHelp, helpModel); installActions(jHelp); + initialized = true; } void reload() { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/theme/GColor.java b/Ghidra/Framework/Docking/src/main/java/docking/theme/GColor.java index 32f36b7a09..bb4a254d6d 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/theme/GColor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/theme/GColor.java @@ -22,6 +22,7 @@ import java.awt.geom.Rectangle2D; import java.awt.image.ColorModel; import java.util.Objects; +import ghidra.util.WebColors; import ghidra.util.datastruct.WeakStore; public class GColor extends Color implements Refreshable { @@ -101,11 +102,6 @@ public class GColor extends Color implements Refreshable { return delegate.darker(); } - @Override - public int hashCode() { - return Objects.hash(id, alpha); - } - @Override public String toString() { Color c = delegate; @@ -115,6 +111,19 @@ public class GColor extends Color implements Refreshable { c.getClass().getSimpleName() + rgb + "]"; } + /** + * Returns this color as a hex string that starts with '#' + * @return the hex string + */ + public String toHexString() { + return WebColors.toString(this, false); + } + + @Override + public int hashCode() { + return Objects.hash(id, alpha); + } + @Override public boolean equals(Object obj) { if (this == obj) { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeader.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeader.java index e606960e1f..f9e689ba51 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeader.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeader.java @@ -38,7 +38,7 @@ public class GTableHeader extends JTableHeader { /** This is the cursor used by BasicTableHeaderUI to tell the user they can resize a column */ private static final Cursor RESIZE_CURSOR = Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR); - private static final int HELP_ICON_HEIGHT = 8; + public static final int HELP_ICON_HEIGHT = 8; private static final Icon HELP_ICON = ResourceManager.getScaledIcon( ResourceManager.loadImage("images/info_small.png"), HELP_ICON_HEIGHT, HELP_ICON_HEIGHT); private static final Icon HELP_HOVERED_ICON = @@ -206,7 +206,7 @@ public class GTableHeader extends JTableHeader { } if (columnFilterToolTip != null) { - ttBuilder.append("
Filters:
Filters: cellWidth) { return column.getHeaderValue().toString(); } - if (component instanceof GTableHeaderRenderer) { - GTableHeaderRenderer gthr = (GTableHeaderRenderer) component; - if (gthr.isTextOccluded()) { - return column.getHeaderValue().toString(); - } - } // handle the case where the user has specifically added a tooltip string if (component instanceof JComponent) { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeaderRenderer.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeaderRenderer.java index be1ffca267..92e1b368b9 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeaderRenderer.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeaderRenderer.java @@ -17,103 +17,149 @@ package docking.widgets.table; import java.awt.*; import java.awt.font.TextAttribute; -import java.awt.geom.Rectangle2D; import java.text.AttributedString; import javax.swing.*; -import javax.swing.border.*; +import javax.swing.border.Border; import javax.swing.table.*; import docking.theme.GColor; -import docking.widgets.label.GDLabel; import resources.*; import resources.icons.EmptyIcon; import resources.icons.TranslateIcon; -/** - * The header renderer for GhidraTable. - * If the table model implements SortedTableModel, then - * an icon will be displayed in the header of the currently sorted - * column representing ascending and descending order. - */ -public class GTableHeaderRenderer extends JPanel implements TableCellRenderer { +public class GTableHeaderRenderer extends DefaultTableCellRenderer { + + private static final Color SORT_NUMBER_FG_COLOR = new GColor("color.fg"); + private static final int PADDING_FOR_COLUMN_NUMBER = 10; - //@formatter:off - public static final Color GRADIENT_START_COLOR = new GColor("color.bg.tableheader.gradient.start"); - public static final Color GRADIENT_END_COLOR = new GColor("color.bg.tableheader.gradient.end"); - public static final Color GRADIENT_START_PRIMARY_COLOR = new GColor("color.bg.tableheader.gradient.start.primary"); - public static final Color GRADIENT_END_PRIMARY_COLOR= new GColor("color.bg.tableheader.gradient.end.primary"); - //@formatter:on - -// static { -// Gui.registerAltColor(GThemeDefaults.DARK, GRADIENT_START_ID, new Color(20, 20, 20)); -// Gui.registerAltColor(GThemeDefaults.DARK, GRADIENT_END_ID, new Color(40, 40, 40)); -// } - private static final Icon UP_ICON = ResourceManager.getScaledIcon(Icons.SORT_ASCENDING_ICON, 14, 14); private static final Icon DOWN_ICON = ResourceManager.getScaledIcon(Icons.SORT_DESCENDING_ICON, 14, 14); private static final int DEFAULT_MIN_HEIGHT = UP_ICON.getIconHeight(); + private static final Icon EMPTY_ICON = new EmptyIcon(0, 0); private static final Icon FILTER_ICON = ResourceManager.getScaledIcon(ResourceManager.loadImage("images/filter_off.png"), 12, 12); - private JLabel textLabel = new GDLabel(); - private JLabel iconLabel = new GDLabel(); - private Icon helpIcon = null; - private CustomPaddingBorder customBorder; + private Icon primaryIcon = EMPTY_ICON; + private Icon helpIcon = EMPTY_ICON; protected boolean isPaintingPrimarySortColumn; - public GTableHeaderRenderer() { - super(); + private TableCellRenderer delegate; - textLabel.setHorizontalTextPosition(SwingConstants.LEFT); - iconLabel.setHorizontalAlignment(SwingConstants.RIGHT); + @Override + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { - textLabel.setBorder(createOSSpecificBorder()); + JTableHeader header = table.getTableHeader(); + delegate = header.getDefaultRenderer(); - setLayout(new BorderLayout()); - add(textLabel, BorderLayout.CENTER); - add(iconLabel, BorderLayout.EAST); + Component rendererComponent = + delegate.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - // controls spacing on multiple platforms - customBorder = new CustomPaddingBorder(); - setBorder(customBorder); + int modelIndex = table.convertColumnIndexToModel(column); + TableModel model = table.getModel(); + VariableColumnTableModel variableModel = VariableColumnTableModel.from(model); + if (variableModel != null) { + String text = variableModel.getColumnDisplayName(modelIndex); + if (rendererComponent instanceof JLabel) { + ((JLabel) rendererComponent).setText(text); + } + } + + primaryIcon = getIcon(model, modelIndex); + helpIcon = getHelpIcon(table, column); + + return this; } @Override - // overridden to paint our help icon over the other components - protected void paintChildren(Graphics g) { - super.paintChildren(g); - paintHelpIcon(g); + public void setBounds(int x, int y, int w, int h) { + super.setBounds(x, y, w, h); + ((Component) delegate).setBounds(x, y, w, h); } - private void paintHelpIcon(Graphics g) { - if (helpIcon == null) { - return; + @Override + public void paint(Graphics g) { + + JLabel label = (JLabel) delegate; + String text = label.getText(); + String clippedText = checkForClipping(label, text); + if (!text.equals(clippedText)) { + label.setText(clippedText); } - Point paintPoint = getHelpIconLocation(); - helpIcon.paintIcon(this, g, paintPoint.x, paintPoint.y); + label.paint(g); + + // paint our items after the delegate call so that we paint on top + super.paint(g); + } + + private String checkForClipping(JLabel label, String text) { + + Point helpPoint = getHelpIconLocation(); + int padding = 10; + int iconStartX = helpPoint.x - primaryIcon.getIconWidth() - padding; + + FontMetrics metrics = label.getFontMetrics(label.getFont()); + int horizontalAlignment = label.getHorizontalAlignment(); + Rectangle bounds = label.getBounds(); + int availableWidth = iconStartX + primaryIcon.getIconWidth(); + if (horizontalAlignment == CENTER) { + availableWidth = iconStartX - padding; + } + + String clippedText = SwingUtilities.layoutCompoundLabel( + label, + metrics, + text, + primaryIcon, + label.getVerticalAlignment(), + label.getHorizontalAlignment(), + label.getVerticalTextPosition(), + label.getHorizontalTextPosition(), + new Rectangle(0, 0, availableWidth, bounds.height), + new Rectangle(iconStartX, 0, primaryIcon.getIconWidth(), bounds.height), + new Rectangle(0, 0, iconStartX, bounds.height), + label.getIconTextGap()); + return clippedText; + } + + @Override + protected void paintChildren(Graphics g) { + + // The help icon paints at the end of the cell; place the main icon to the left of that + Point helpPoint = getHelpIconLocation(); + int offset = 4; + int x = helpPoint.x - primaryIcon.getIconWidth() - offset; + int y = getIconStartY(primaryIcon.getIconHeight()); + primaryIcon.paintIcon(this, g, x, y); + + helpIcon.paintIcon(this, g, helpPoint.x, helpPoint.y); } private Point getHelpIconLocation() { + + int right = getWidth(); + int offset = 2; + int helpIconWidth = GTableHeader.HELP_ICON_HEIGHT; + // we want the icon on the right-hand size of the header, at the top - int primaryWidth = iconLabel.getWidth(); - int overlayWidth = helpIcon.getIconWidth(); - - // this point is relative to the iconLabel... - Point paintPoint = new Point(primaryWidth - overlayWidth, 0); - - // ...make the point relative to the parent (this renderer) - return SwingUtilities.convertPoint(iconLabel, paintPoint, this); + int x = right - helpIconWidth - offset; + int y = offset; // down a bit + return new Point(x, y); } @Override // overridden to enforce a minimum height for the icon we use public Dimension getPreferredSize() { Dimension preferredSize = super.getPreferredSize(); + if (delegate != null) { + return ((Component) delegate).getPreferredSize(); + } + Border currentBorder = getBorder(); int minHeight = DEFAULT_MIN_HEIGHT; if (currentBorder != null) { @@ -124,47 +170,19 @@ public class GTableHeaderRenderer extends JPanel implements TableCellRenderer { return preferredSize; } - @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, - boolean hasFocus, int row, int column) { - - isPaintingPrimarySortColumn = false; // reset - Icon icon = null; - String text = (value == null) ? "" : value.toString(); - - JTableHeader header = table.getTableHeader(); - setForeground(header.getForeground()); - setFont(header.getFont()); - - // remap the column index to the models column index - int modelIndex = table.convertColumnIndexToModel(column); - TableModel model = table.getModel(); - - icon = getIcon(model, modelIndex); - - VariableColumnTableModel variableModel = VariableColumnTableModel.from(model); - if (variableModel != null) { - text = variableModel.getColumnDisplayName(modelIndex); - } - updateHelpIcon(table, column, icon); - iconLabel.setIcon(icon); - textLabel.setText(text); - - setOuterBorder(customBorder, column); - - setOpaque(false); - return this; - } - private Icon getIcon(TableModel model, int columnModelIndex) { Icon icon = null; if (model instanceof SortedTableModel) { icon = getSortIcon(icon, columnModelIndex, model); } if (isColumnFiltered(model, columnModelIndex)) { - icon = combineIcons(icon, FILTER_ICON); + icon = combineIcons(FILTER_ICON, icon); } - return icon; + + if (icon != null) { + return icon; + } + return EMPTY_ICON; } private Icon combineIcons(Icon icon1, Icon icon2) { @@ -174,9 +192,16 @@ public class GTableHeaderRenderer extends JPanel implements TableCellRenderer { if (icon2 == null) { return icon1; } - MultiIcon icon = new MultiIcon(new EmptyIcon(28, 14)); - icon.addIcon(icon2); - icon.addIcon(new TranslateIcon(icon1, 14, 0)); + + int padding = 2; + int w1 = icon1.getIconWidth(); + int w2 = icon2.getIconWidth(); + int h1 = icon1.getIconHeight(); + int fullWidth = w1 + padding + w2; + MultiIcon icon = new MultiIcon(new EmptyIcon(fullWidth, h1)); + icon.addIcon(icon1); + int rightShift = w1 + padding; + icon.addIcon(new TranslateIcon(icon2, rightShift, 0)); return icon; } @@ -192,66 +217,26 @@ public class GTableHeaderRenderer extends JPanel implements TableCellRenderer { return tableFilter.hasColumnFilter(columnModelIndex); } - private void setOuterBorder(CustomPaddingBorder border, int column) { - if (paintAquaHeaders()) { - if (column == 0) { - customBorder.setOuterBorder(new NoSidesLineBorder(Color.GRAY)); - return; - } - customBorder.setOuterBorder(new NoRightSideLineBorder(Color.GRAY)); - } - else { - customBorder.setOuterBorder(UIManager.getBorder("TableHeader.cellBorder")); - } - } + private Icon getHelpIcon(JTable table, int currentColumnIndex) { - private boolean paintAquaHeaders() { - return true; - // For now we always use the custom --it actually makes the various LaFs look nicer - // return DockingWindowsLookAndFeelUtils.isUsingAquaUI(getUI()); - } - - @Override - protected void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - - Paint backgroundColor = getBackgroundPaint(); - Paint oldPaint = g2d.getPaint(); - - g2d.setPaint(backgroundColor); - g2d.fillRect(0, 0, getWidth(), getHeight()); - - g2d.setPaint(oldPaint); - super.paintComponent(g); - } - - protected Paint getBackgroundPaint() { - Color startColor = - isPaintingPrimarySortColumn ? GRADIENT_START_PRIMARY_COLOR : GRADIENT_START_COLOR; - Color endColor = - isPaintingPrimarySortColumn ? GRADIENT_END_PRIMARY_COLOR : GRADIENT_END_COLOR; - - return new GradientPaint(0, 0, startColor, 0, getHeight() - 11, endColor, true); - } - - private void updateHelpIcon(JTable table, int currentColumnIndex, Icon icon) { JTableHeader tableHeader = table.getTableHeader(); if (!(tableHeader instanceof GTableHeader)) { - helpIcon = null; - return; + return EMPTY_ICON; } GTableHeader tooltipTableHeader = (GTableHeader) tableHeader; int hoveredColumnIndex = tooltipTableHeader.getHoveredHeaderColumnIndex(); if (hoveredColumnIndex != currentColumnIndex) { - helpIcon = null; - return; + return EMPTY_ICON; } - helpIcon = tooltipTableHeader.getHelpIcon(); + Icon icon = tooltipTableHeader.getHelpIcon(); + if (icon != null) { + return icon; + } + return EMPTY_ICON; } - // checked before this method is called private Icon getSortIcon(Icon icon, int realIndex, TableModel model) { SortedTableModel sortedModel = (SortedTableModel) model; TableSortState columnSortStates = sortedModel.getTableSortState(); @@ -311,75 +296,36 @@ public class GTableHeaderRenderer extends JPanel implements TableCellRenderer { return icon; } - /** - * Returns true if sorted in ascending order, false if descending. - * @return true if sorted in ascending order, false if descending - */ - public boolean isSortedAscending() { - return iconLabel.getIcon() == UP_ICON; - } + private int getIconStartY(int iconHeight) { - boolean isTextOccluded() { - return textLabel.getPreferredSize().getWidth() > textLabel.getWidth(); - } - - private Border createOSSpecificBorder() { - if (paintAquaHeaders()) { - return new EmptyBorder(1, 2, 1, 2); - } - return new EmptyBorder(0, 2, 0, 2); + int height = getHeight(); + int middle = height / 2; + int halfHeight = iconHeight / 2; + int y = middle - halfHeight; + return y; } //================================================================================================== // Inner Classes //================================================================================================== - private class CustomPaddingBorder extends CompoundBorder { - private CustomPaddingBorder() { - insideBorder = createOSSpecificBorder(); - } - - void setOuterBorder(Border border) { - outsideBorder = border; - } - } - - private class NoRightSideLineBorder extends LineBorder { - NoRightSideLineBorder(Color color) { - super(color); - } - - @Override - public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { - // take advantage of our clipping by telling our parent to paint at a point that will - // be clipped - super.paintBorder(c, g, x, y, width + 1, height); - } - } - - private class NoSidesLineBorder extends LineBorder { - NoSidesLineBorder(Color color) { - super(color); - } - - @Override - public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { - // take advantage of our clipping by telling our parent to paint at a point that will - // be clipped - super.paintBorder(c, g, x - 1, y, width + 5, height); - } - } - private class NumberPainterIcon implements Icon { private final int iconWidth; + private int numberWidth; private final int iconHeight; private final String numberText; public NumberPainterIcon(int width, int height, String numberText) { - iconWidth = width; - iconHeight = height; + this.iconWidth = width; + this.iconHeight = height; this.numberText = numberText; + + int fontSize = 12; + String fontFamily = "arial"; + Font font = new Font(fontFamily, Font.BOLD, fontSize); + FontMetrics fontMetrics = getFontMetrics(font); + numberWidth = fontMetrics.stringWidth(numberText); } @Override @@ -389,35 +335,36 @@ public class GTableHeaderRenderer extends JPanel implements TableCellRenderer { @Override public int getIconWidth() { - return iconWidth; + return iconWidth + numberWidth; } @Override public void paintIcon(Component c, Graphics g, int x, int y) { + int fontSize = 12; String fontFamily = "arial"; Font font = new Font(fontFamily, Font.BOLD, fontSize); g.setFont(font); FontMetrics fontMetrics = g.getFontMetrics(); - Rectangle2D stringBounds = fontMetrics.getStringBounds(numberText, g); - int numberWidth = (int) stringBounds.getWidth(); int numberHeight = fontMetrics.getAscent(); - int insetPadding = 2; + int padding = 2; // draw the number on the right... - int startX = x + (iconWidth - numberWidth) - insetPadding; + int startX = x + (iconWidth - numberWidth) + padding; - // ...and in the upper portion - int textBaseline = numberHeight; + // ...and at the same start y as the sort icon + int iconY = getIconStartY(iconHeight); + int textBaseline = iconY + numberHeight - padding; AttributedString as = new AttributedString(numberText); - as.addAttribute(TextAttribute.FOREGROUND, Color.BLACK); + as.addAttribute(TextAttribute.FOREGROUND, SORT_NUMBER_FG_COLOR); as.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); as.addAttribute(TextAttribute.FAMILY, fontFamily); as.addAttribute(TextAttribute.SIZE, (float) fontSize); g.drawString(as.getIterator(), startX, textBaseline); + } } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/columnfilter/ColumnBasedTableFilter.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/columnfilter/ColumnBasedTableFilter.java index b3d50e341f..60090c553f 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/columnfilter/ColumnBasedTableFilter.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/columnfilter/ColumnBasedTableFilter.java @@ -20,6 +20,8 @@ import java.util.stream.Collectors; import org.jdom.Element; +import docking.theme.GColor; +import docking.theme.GThemeDefaults.Colors.Palette; import docking.widgets.table.*; import docking.widgets.table.constraint.ColumnConstraint; import docking.widgets.table.constraint.TableFilterContext; @@ -230,16 +232,19 @@ public class ColumnBasedTableFilter implements TableFilter { // private String getHtmlRepresentation(List> filters) { StringBuilder buf = new StringBuilder(); - buf.append(""); + buf.append("
"); buf.append(""); // The first row has an empty first column // so that additional rows can display an "AND" buf.append(""); + GColor gray = Palette.GRAY; + String grayHex = gray.toHexString(); for (int i = 1; i < filters.size(); i++) { - buf.append(""); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/columnfilter/ColumnConstraintSet.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/columnfilter/ColumnConstraintSet.java index 10bf9394b9..80efa4e9e2 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/columnfilter/ColumnConstraintSet.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/columnfilter/ColumnConstraintSet.java @@ -19,6 +19,8 @@ import java.util.*; 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.RowObjectTableModel; import docking.widgets.table.constraint.*; @@ -178,25 +180,30 @@ public class ColumnConstraintSet { * Returns an HTML representation of this constraint set in a tabular form. It will be used * inside the HTML representation of the entire filter. See {@link ColumnBasedTableFilter#getHtmlRepresentation()} * for a description of the table format. + * @return the html */ String getHtmlRepresentation() { - StringBuilder builder = new StringBuilder(); - builder.append("
"); buf.append(filters.get(0).getHtmlRepresentation()); buf.append("
" + filters.get(i).getLogicOperation() + - " "); + buf.append("
"); + buf.append(filters.get(i).getLogicOperation()); + buf.append(" "); buf.append(filters.get(i).getHtmlRepresentation()); buf.append("
"); - builder.append(""); - builder.append(""); + StringBuilder buf = new StringBuilder(); + buf.append("
"); - builder.append(model.getColumnName(columnIndex)); - builder.append(" "); - builder.append(""); - builder.append(getHtmlRepresentation(constraints.get(0))); - builder.append("
"); + buf.append(""); + buf.append(""); + + GColor gray = Palette.GRAY; + String grayHex = gray.toHexString(); for (int i = 1; i < constraints.size(); i++) { - builder.append(""); - builder.append(""); + buf.append(""); + buf.append(""); } - builder.append("
"); + buf.append(model.getColumnName(columnIndex)); + buf.append(" "); + buf.append(""); + buf.append(getHtmlRepresentation(constraints.get(0))); + buf.append("
or"); - builder.append(getHtmlRepresentation(constraints.get(i))); - builder.append("
or"); + buf.append(getHtmlRepresentation(constraints.get(i))); + buf.append("
"); - return builder.toString(); + buf.append(""); + return buf.toString(); } private String getHtmlRepresentation(ColumnConstraint columnConstraint) { @@ -209,7 +216,7 @@ public class ColumnConstraintSet { if (quoteValue) { buf.append("\""); } - buf.append(""); + buf.append(""); buf.append(columnConstraint.getConstraintValueString()); buf.append(""); if (quoteValue) { diff --git a/Ghidra/Framework/Generic/src/main/java/ghidra/util/HTMLUtilities.java b/Ghidra/Framework/Generic/src/main/java/ghidra/util/HTMLUtilities.java index 182c781a44..90d8e28852 100644 --- a/Ghidra/Framework/Generic/src/main/java/ghidra/util/HTMLUtilities.java +++ b/Ghidra/Framework/Generic/src/main/java/ghidra/util/HTMLUtilities.java @@ -141,17 +141,6 @@ public class HTMLUtilities { public static String HTML_SPACE = " "; public static String HTML_NEW_LINE = BR; - public static final String MAROON = "#990000"; - public static final String GREEN = "#009900"; - public static final String BLUE = "#000099"; - public static final String PURPLE = "#990099"; - public static final String DARK_CYAN = "#009999"; - public static final String OLIVE = "#999900"; - public static final String ORANGE = "#FF9900"; - public static final String PINK = "#FF9999"; - public static final String YELLOW = "#FFFF00"; - public static final String GRAY = "#888888"; - /** * Marks the given text as HTML in order to be rendered thusly by Java widgets. *