diff --git a/Ghidra/Extensions/sample/src/main/java/ghidra/examples/graph/SampleGraphProvider.java b/Ghidra/Extensions/sample/src/main/java/ghidra/examples/graph/SampleGraphProvider.java index e5de5cc567..fdbe11e9f8 100644 --- a/Ghidra/Extensions/sample/src/main/java/ghidra/examples/graph/SampleGraphProvider.java +++ b/Ghidra/Extensions/sample/src/main/java/ghidra/examples/graph/SampleGraphProvider.java @@ -28,12 +28,15 @@ import javax.swing.event.DocumentListener; import org.apache.commons.lang3.StringUtils; -import docking.*; +import docking.ActionContext; +import docking.ComponentProvider; import docking.action.ToggleDockingAction; import docking.action.ToolBarData; import docking.menu.ActionState; import docking.menu.MultiStateDockingAction; import docking.widgets.*; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.examples.graph.layout.SampleGraphPluginDependencyLayoutProvider; import ghidra.framework.plugintool.*; import ghidra.graph.job.FilterVerticesJob; @@ -145,7 +148,7 @@ public class SampleGraphProvider extends ComponentProviderAdapter { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS)); - JLabel label = DockingUtils.createNonHtmlLabel("Vertex Filter: "); + JLabel label = new GDLabel("Vertex Filter: "); label.setToolTipText( "Vertices with names matching the filter will remain, along with connected vertices"); panel.add(label); @@ -197,7 +200,7 @@ public class SampleGraphProvider extends ComponentProviderAdapter { fadedButton.setSelected(true); JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - panel.add(DockingUtils.createNonHtmlLabel("Filtered Display: ")); + panel.add(new GLabel("Filtered Display: ")); panel.add(fadedButton); panel.add(removedButton); return panel; diff --git a/Ghidra/Features/Base/ghidra_scripts/SearchGuiSingle.java b/Ghidra/Features/Base/ghidra_scripts/SearchGuiSingle.java index ba1ed4b279..b6db6b15ad 100644 --- a/Ghidra/Features/Base/ghidra_scripts/SearchGuiSingle.java +++ b/Ghidra/Features/Base/ghidra_scripts/SearchGuiSingle.java @@ -23,7 +23,7 @@ import java.awt.event.ActionListener; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; public class SearchGuiSingle extends SearchBaseExtended { @@ -50,7 +50,7 @@ public class SearchGuiSingle extends SearchBaseExtended { opTwoCheckBox = new JCheckBox("Operand 2", false); constCheckBox = new JCheckBox("Constants", false); searchButton = new JButton(); - jLabel1 = DockingUtils.createNonHtmlLabel(); + jLabel1 = new GDLabel(); GroupLayout jPanel1Layout = new GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManagerProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManagerProvider.java index 05528e6412..041a62937e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManagerProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManagerProvider.java @@ -20,9 +20,11 @@ import java.awt.event.*; import javax.swing.*; -import docking.*; +import docking.ActionContext; +import docking.WindowPosition; import docking.options.editor.ButtonPanelFactory; import docking.widgets.OptionDialog; +import docking.widgets.label.*; import ghidra.app.context.ListingActionContext; import ghidra.app.merge.tool.ListingMergePanel; import ghidra.app.nav.Navigatable; @@ -205,13 +207,12 @@ class MergeManagerProvider extends ComponentProviderAdapter { mainPanel.setLayout(new BorderLayout(0, 10)); mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - nameLabel = DockingUtils.createNonHtmlLabel("Merge Programs", SwingConstants.LEFT); + nameLabel = new GDLabel("Merge Programs", SwingConstants.LEFT); JPanel iconPanel = new JPanel(); new BoxLayout(iconPanel, BoxLayout.X_AXIS); - JLabel iconLabel = DockingUtils.createNonHtmlLabel(MERGE_ICON); iconPanel.add(Box.createHorizontalStrut(5)); - iconPanel.add(iconLabel); + iconPanel.add(new GIconLabel(MERGE_ICON)); iconPanel.add(Box.createHorizontalStrut(5)); iconPanel.add(nameLabel); @@ -262,7 +263,7 @@ class MergeManagerProvider extends ComponentProviderAdapter { phasePanel = new PhaseProgressPanel("Progress In Current Phase"); defaultPanel.add(progressPanel); // panel with each phase and their status indicators. - defaultPanel.add(DockingUtils.createNonHtmlLabel(" ")); // Blank separator label. + defaultPanel.add(new GLabel(" ")); // Blank separator label. defaultPanel.add(phasePanel); // panel for the current phase's progress and message. conflictPanel.add(defaultPanel, DEFAULT_ID); conflictPanel.setPreferredSize(new Dimension(610, 500)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeProgressPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeProgressPanel.java index b3a534523d..500cdd1164 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeProgressPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeProgressPanel.java @@ -22,7 +22,8 @@ import java.util.HashMap; import javax.swing.*; import javax.swing.border.Border; -import docking.DockingUtils; +import docking.widgets.label.GIconLabel; +import docking.widgets.label.GLabel; import ghidra.util.Msg; import ghidra.util.layout.VerticalLayout; import resources.ResourceManager; @@ -57,18 +58,18 @@ public class MergeProgressPanel extends JPanel { BoxLayout bl = new BoxLayout(phasesTitlePanel, BoxLayout.X_AXIS); phasesTitlePanel.setLayout(bl); phasesTitlePanel.add(Box.createHorizontalStrut(5)); - phasesTitlePanel.add(DockingUtils.createNonHtmlLabel("Merge Status")); + phasesTitlePanel.add(new GLabel("Merge Status")); phasesTitlePanel.add(Box.createHorizontalStrut(15)); - phasesTitlePanel.add(DockingUtils.createNonHtmlLabel("( ")); - phasesTitlePanel.add(DockingUtils.createNonHtmlLabel(DEFINED_ICON)); - phasesTitlePanel.add(DockingUtils.createNonHtmlLabel(" = Pending")); + phasesTitlePanel.add(new GLabel("( ")); + phasesTitlePanel.add(new GIconLabel(DEFINED_ICON)); + phasesTitlePanel.add(new GLabel(" = Pending")); phasesTitlePanel.add(Box.createHorizontalStrut(10)); - phasesTitlePanel.add(DockingUtils.createNonHtmlLabel(IN_PROGRESS_ICON)); - phasesTitlePanel.add(DockingUtils.createNonHtmlLabel(" = In Progress")); + phasesTitlePanel.add(new GIconLabel(IN_PROGRESS_ICON)); + phasesTitlePanel.add(new GLabel(" = In Progress")); phasesTitlePanel.add(Box.createHorizontalStrut(10)); - phasesTitlePanel.add(DockingUtils.createNonHtmlLabel(COMPLETED_ICON)); - phasesTitlePanel.add(DockingUtils.createNonHtmlLabel(" = Completed")); - phasesTitlePanel.add(DockingUtils.createNonHtmlLabel(" )")); + phasesTitlePanel.add(new GIconLabel(COMPLETED_ICON)); + phasesTitlePanel.add(new GLabel(" = Completed")); + phasesTitlePanel.add(new GLabel(" )")); phasesTitlePanel.add(Box.createHorizontalStrut(5)); return phasesTitlePanel; } @@ -84,8 +85,7 @@ public class MergeProgressPanel extends JPanel { */ public JPanel addInfo(String[] phase) { int phaseDepth = phase.length - 1; - JLabel imageLabel = DockingUtils.createNonHtmlLabel(DEFINED_ICON); - JLabel infoLabel = DockingUtils.createNonHtmlLabel(phase[phaseDepth]); + JLabel imageLabel = new GIconLabel(DEFINED_ICON); JPanel labelPanel = new JPanel(); labelPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); BoxLayout bl = new BoxLayout(labelPanel, BoxLayout.X_AXIS); @@ -94,7 +94,7 @@ public class MergeProgressPanel extends JPanel { labelPanel.add(Box.createHorizontalStrut(5)); labelPanel.add(imageLabel); labelPanel.add(Box.createHorizontalStrut(5)); - labelPanel.add(infoLabel); + labelPanel.add(new GLabel(phase[phaseDepth])); imageMap.put(getPhaseString(phase), imageLabel); add(labelPanel); return labelPanel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/PhaseProgressPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/PhaseProgressPanel.java index 255b297d75..8d0247b923 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/PhaseProgressPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/PhaseProgressPanel.java @@ -22,7 +22,8 @@ import java.awt.event.ActionListener; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GIconLabel; import resources.ResourceManager; /** @@ -80,7 +81,7 @@ public class PhaseProgressPanel extends JPanel { private void createProgressPanel() { - titleLabel = DockingUtils.createNonHtmlLabel(title); + titleLabel = new GDLabel(title); add(titleLabel); progressLayout.putConstraint(SpringLayout.WEST, titleLabel, 5, SpringLayout.WEST, this); progressLayout.putConstraint(SpringLayout.NORTH, titleLabel, 5, SpringLayout.NORTH, this); @@ -96,9 +97,9 @@ public class PhaseProgressPanel extends JPanel { doSetProgress(0); progressMessagePanel = new JPanel(new BorderLayout()); - messageIcon = DockingUtils.createNonHtmlLabel(INFORM_ICON); + messageIcon = new GIconLabel(INFORM_ICON); messageIcon.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); - messageLabel = DockingUtils.createNonHtmlLabel(DEFAULT_INFO); + messageLabel = new GDLabel(DEFAULT_INFO); progressMessagePanel.add(messageIcon, BorderLayout.WEST); progressMessagePanel.add(messageLabel, BorderLayout.CENTER); doSetMessage(DEFAULT_INFO); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/CategoryConflictPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/CategoryConflictPanel.java index a4d038e01f..b04473f708 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/CategoryConflictPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/CategoryConflictPanel.java @@ -22,7 +22,8 @@ import java.awt.event.ItemListener; import javax.swing.*; import javax.swing.event.ChangeListener; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.merge.MergeConstants; /** @@ -85,14 +86,13 @@ class CategoryConflictPanel extends JPanel { panel.setLayout(new BorderLayout()); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - JLabel clabel = DockingUtils.createNonHtmlLabel("Category: "); - categoryLabel = DockingUtils.createNonHtmlLabel("CategoryName"); + categoryLabel = new GDLabel("CategoryName"); categoryLabel.setForeground(MergeConstants.CONFLICT_COLOR); JPanel labelPanel = new JPanel(); labelPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); labelPanel.setLayout(new BoxLayout(labelPanel, BoxLayout.X_AXIS)); - labelPanel.add(clabel); + labelPanel.add(new GLabel("Category: ")); labelPanel.add(Box.createHorizontalStrut(5)); labelPanel.add(categoryLabel); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/DataTypeMergePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/DataTypeMergePanel.java index f07a753e96..6a3b7e55ab 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/DataTypeMergePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/DataTypeMergePanel.java @@ -22,8 +22,8 @@ import java.awt.event.ItemListener; import javax.swing.*; -import docking.DockingUtils; import docking.widgets.MultiLineLabel; +import docking.widgets.label.GIconLabel; import ghidra.app.merge.MergeConstants; import ghidra.app.merge.util.ConflictCountPanel; import ghidra.framework.data.DomainObjectMergeManager; @@ -179,7 +179,7 @@ class DataTypeMergePanel extends JPanel { private JPanel createInfoPanel() { Icon icon = ResourceManager.loadImage("images/information.png"); - JLabel imageLabel = DockingUtils.createNonHtmlLabel(icon); + JLabel imageLabel = new GIconLabel(icon); MultiLineLabel label = new MultiLineLabel("A data type change in your checked out version conflicts with a " + diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/SourceArchiveMergePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/SourceArchiveMergePanel.java index 75182486c2..cc31a12d3a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/SourceArchiveMergePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/SourceArchiveMergePanel.java @@ -22,8 +22,8 @@ import java.awt.event.ItemListener; import javax.swing.*; -import docking.DockingUtils; import docking.widgets.MultiLineLabel; +import docking.widgets.label.GIconLabel; import ghidra.app.merge.MergeConstants; import ghidra.app.merge.util.ConflictCountPanel; import ghidra.app.plugin.core.datamgr.archive.SourceArchive; @@ -174,7 +174,7 @@ class SourceArchiveMergePanel extends JPanel { private JPanel createInfoPanel() { Icon icon = ResourceManager.loadImage("images/information.png"); - JLabel imageLabel = DockingUtils.createNonHtmlLabel(icon); + JLabel imageLabel = new GIconLabel(icon); MultiLineLabel label = new MultiLineLabel( "A source archive change in your checked out version conflicts with a " + diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ConflictInfoPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ConflictInfoPanel.java index dbafaf919e..888853c4d4 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ConflictInfoPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ConflictInfoPanel.java @@ -20,7 +20,7 @@ import java.awt.BorderLayout; import javax.swing.*; import javax.swing.border.TitledBorder; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import ghidra.app.merge.util.ConflictUtility; import ghidra.program.model.address.*; import ghidra.util.HTMLUtilities; @@ -60,8 +60,8 @@ public class ConflictInfoPanel extends JPanel { setLayout(new BorderLayout()); setBorder(BorderFactory.createTitledBorder("Resolve Current Conflict")); - westLabel = DockingUtils.createHtmlLabel(""); - eastLabel = DockingUtils.createHtmlLabel(""); + westLabel = new GDHtmlLabel(""); + eastLabel = new GDHtmlLabel(""); add(westLabel, BorderLayout.WEST); add(eastLabel, BorderLayout.EAST); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java index cbfe2f8cca..53cc046551 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java @@ -21,10 +21,10 @@ import java.awt.event.ItemListener; import javax.swing.*; -import docking.DockingUtils; import docking.widgets.EmptyBorderButton; import docking.widgets.fieldpanel.FieldPanel; import docking.widgets.fieldpanel.internal.FieldPanelCoordinator; +import docking.widgets.label.GIconLabel; import ghidra.app.merge.MergeConstants; import ghidra.app.merge.MergeManager; import ghidra.app.merge.util.ConflictCountPanel; @@ -254,7 +254,7 @@ class ExternalAddConflictPanel extends JPanel implements CodeFormatService { myTitlePanel = new TitledPanel(MergeConstants.MY_TITLE, myPanel, 5); latestTitlePanel.addTitleComponent(new ShowHeaderButton()); - myTitlePanel.addTitleComponent(DockingUtils.createNonHtmlLabel(new EmptyIcon(22, 22))); + myTitlePanel.addTitleComponent(new GIconLabel(new EmptyIcon(22, 22))); JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); splitPane.setResizeWeight(0.5); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalConflictInfoPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalConflictInfoPanel.java index 8827800f26..8dd01a4d7c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalConflictInfoPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalConflictInfoPanel.java @@ -20,7 +20,7 @@ import java.awt.BorderLayout; import javax.swing.*; import javax.swing.border.TitledBorder; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import ghidra.app.merge.util.ConflictUtility; /** @@ -54,8 +54,8 @@ public class ExternalConflictInfoPanel extends JPanel { setLayout(new BorderLayout()); setBorder(BorderFactory.createTitledBorder("Resolve External Location Conflict")); - westLabel = DockingUtils.createHtmlLabel(""); - eastLabel = DockingUtils.createHtmlLabel(""); + westLabel = new GDHtmlLabel(""); + eastLabel = new GDHtmlLabel(""); add(westLabel, BorderLayout.WEST); add(eastLabel, BorderLayout.EAST); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ScrollingListChoicesPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ScrollingListChoicesPanel.java index a261a70fcd..c7d17c7381 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ScrollingListChoicesPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ScrollingListChoicesPanel.java @@ -25,7 +25,7 @@ import javax.swing.border.TitledBorder; import javax.swing.event.ChangeListener; import javax.swing.table.TableModel; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import docking.widgets.table.AbstractSortedTableModel; import docking.widgets.table.GTable; import ghidra.app.merge.util.ConflictUtility; @@ -70,7 +70,7 @@ public class ScrollingListChoicesPanel extends ConflictPanel { gbl = new GridBagLayout(); rowPanel = new JPanel(gbl); setLayout(new BorderLayout()); - headerLabel = DockingUtils.createNonHtmlLabel(" "); + headerLabel = new GDLabel(" "); headerLabel.setHorizontalAlignment(SwingConstants.CENTER); add(headerLabel, BorderLayout.NORTH); setHeader(null); 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 e93327d7ba..300fca34bf 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 @@ -25,7 +25,8 @@ import javax.swing.border.Border; import javax.swing.border.TitledBorder; import javax.swing.event.ChangeListener; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.merge.util.ConflictUtility; import ghidra.util.HTMLUtilities; import ghidra.util.layout.MaximizeSpecificColumnGridLayout; @@ -77,7 +78,7 @@ public class VariousChoicesPanel extends ConflictPanel { rowPanel = new JPanel(layout); rowPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); setLayout(new BorderLayout()); - headerLabel = DockingUtils.createNonHtmlLabel(" "); + headerLabel = new GDLabel(" "); headerLabel.setHorizontalAlignment(SwingConstants.CENTER); add(headerLabel, BorderLayout.NORTH); setHeader(null); @@ -500,15 +501,13 @@ public class VariousChoicesPanel extends ConflictPanel { return rows.size() > 0; } - private class MyLabel extends JLabel { - private final static long serialVersionUID = 1; + private class MyLabel extends GLabel { /** * @param text the text of this label. */ - public MyLabel(final String text) { + public MyLabel(String text) { super(text); - DockingUtils.turnOffHTMLRendering(this); addComponentListener(new ComponentListener() { @Override 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 17633906ce..3c6579e83c 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 @@ -24,7 +24,8 @@ import javax.swing.border.Border; import javax.swing.border.TitledBorder; import javax.swing.event.ChangeListener; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.merge.util.ConflictUtility; import ghidra.util.HTMLUtilities; import ghidra.util.datastruct.LongArrayList; @@ -89,7 +90,7 @@ public class VerticalChoicesPanel extends ConflictPanel { setBorder(BorderFactory.createTitledBorder("Resolve Conflict")); setLayout(new BorderLayout()); - headerLabel = DockingUtils.createNonHtmlLabel(" "); + headerLabel = new GDLabel(" "); headerLabel.setHorizontalAlignment(SwingConstants.CENTER); add(headerLabel, BorderLayout.NORTH); @@ -108,7 +109,7 @@ public class VerticalChoicesPanel extends ConflictPanel { indent = Math.max(rb.getPreferredSize().width, cb.getPreferredSize().width); defaultInsets = new Insets(DEFAULT_TOP, DEFAULT_LEFT, DEFAULT_BOTTOM, DEFAULT_RIGHT); - int labelHeight = (int) DockingUtils.createNonHtmlLabel("A").getPreferredSize().getHeight(); + int labelHeight = (int) new GDLabel("A").getPreferredSize().getHeight(); double buttonHeight = new MyRadioButton("A", ListingMergeConstants.KEEP_LATEST).getPreferredSize().getHeight(); int borderHeight; @@ -452,15 +453,13 @@ public class VerticalChoicesPanel extends ConflictPanel { return allChoicesAreResolved(); } - private class MyLabel extends JLabel { - private final static long serialVersionUID = 1; + private class MyLabel extends GLabel { /** * @param text the text of this label. */ public MyLabel(final String text) { super(text); - DockingUtils.turnOffHTMLRendering(this); addComponentListener(new ComponentListener() { @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/propertylist/ConflictPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/propertylist/ConflictPanel.java index 4d76dc39d4..a4c020a326 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/propertylist/ConflictPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/propertylist/ConflictPanel.java @@ -22,7 +22,7 @@ import java.awt.event.ItemListener; import javax.swing.*; import javax.swing.event.ChangeListener; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.app.merge.MergeConstants; /** @@ -133,7 +133,7 @@ class ConflictPanel extends JPanel { panel.setLayout(new BorderLayout()); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - propertyGroupLabel = DockingUtils.createNonHtmlLabel("Property Group: "); + propertyGroupLabel = new GDLabel("Property Group: "); JPanel namePanel = new JPanel(new BorderLayout()); namePanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 10, 5)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/NameConflictsPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/NameConflictsPanel.java index ef7759fae0..3b702e644e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/NameConflictsPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/NameConflictsPanel.java @@ -22,7 +22,8 @@ import java.awt.event.ItemListener; import javax.swing.*; import javax.swing.event.ChangeListener; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GIconLabel; import ghidra.app.merge.MergeConstants; import ghidra.program.model.listing.Program; import resources.ResourceManager; @@ -126,10 +127,9 @@ class NameConflictsPanel extends JPanel { JPanel iconPanel = new JPanel(); iconPanel.setLayout(new BoxLayout(iconPanel, BoxLayout.X_AXIS)); - conflictsLabel = - DockingUtils.createNonHtmlLabel("'My' name already exists in Latest Version"); + conflictsLabel = new GDLabel("'My' name already exists in Latest Version"); ImageIcon icon = ResourceManager.loadImage("images/information.png"); - iconPanel.add(DockingUtils.createNonHtmlLabel(icon)); + iconPanel.add(new GIconLabel(icon)); iconPanel.add(Box.createHorizontalStrut(5)); iconPanel.add(conflictsLabel); iconPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/TreeChangePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/TreeChangePanel.java index 2d6b316fa6..9bc47d765d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/TreeChangePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/TreeChangePanel.java @@ -19,7 +19,8 @@ import java.awt.*; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GIconLabel; import ghidra.util.layout.PairLayout; import resources.ResourceManager; @@ -56,15 +57,13 @@ class TreeChangePanel extends JPanel { nameLabel.setText(nameChanged ? "Name Changed" : "Name Not Changed"); nameLabel.setForeground(nameChanged ? CHANGED_COLOR : NO_CHANGE_COLOR); namePanel.remove(nameIconLabel); - nameIconLabel = - DockingUtils.createNonHtmlLabel(nameChanged ? CHANGED_ICON : NO_CHANGE_ICON); + nameIconLabel = new GIconLabel(nameChanged ? CHANGED_ICON : NO_CHANGE_ICON); namePanel.add(nameIconLabel, 0); structureLabel.setText(structureChanged ? "Structure Changed" : "Structure Not Changed"); structureLabel.setForeground(structureChanged ? CHANGED_COLOR : NO_CHANGE_COLOR); structurePanel.remove(structureIconLabel); - structureIconLabel = - DockingUtils.createNonHtmlLabel(structureChanged ? CHANGED_ICON : NO_CHANGE_ICON); + structureIconLabel = new GIconLabel(structureChanged ? CHANGED_ICON : NO_CHANGE_ICON); structurePanel.add(structureIconLabel, 0); } @@ -72,16 +71,16 @@ class TreeChangePanel extends JPanel { JPanel panel = new JPanel(new BorderLayout(0, 5)); panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - treeNameLabel = DockingUtils.createNonHtmlLabel("Tree Name"); + treeNameLabel = new GDLabel("Tree Name"); Font font = treeNameLabel.getFont(); font = new Font(font.getName(), Font.BOLD, font.getSize()); treeNameLabel.setFont(font); - nameLabel = DockingUtils.createNonHtmlLabel("Name Changed"); - nameIconLabel = DockingUtils.createNonHtmlLabel(CHANGED_ICON); + nameLabel = new GDLabel("Name Changed"); + nameIconLabel = new GIconLabel(CHANGED_ICON); - structureLabel = DockingUtils.createNonHtmlLabel("Structure Changed"); - structureIconLabel = DockingUtils.createNonHtmlLabel(CHANGED_ICON); + structureLabel = new GDLabel("Structure Changed"); + structureIconLabel = new GIconLabel(CHANGED_ICON); namePanel = new JPanel(new PairLayout(0, 5)); namePanel.add(nameIconLabel); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AnalysisPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AnalysisPanel.java index 6184d0896e..48cde3b59b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AnalysisPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AnalysisPanel.java @@ -30,9 +30,9 @@ import javax.swing.table.*; import org.apache.commons.collections4.CollectionUtils; -import docking.DockingUtils; import docking.options.editor.GenericOptionsComponent; import docking.widgets.OptionDialog; +import docking.widgets.label.GLabel; import docking.widgets.table.*; import ghidra.app.services.Analyzer; import ghidra.framework.options.*; @@ -522,7 +522,7 @@ class AnalysisPanel extends JPanel implements PropertyChangeListener { List optionGroups = analysisOptions.getChildOptions(); noOptionsPanel = new JPanel(new VerticalLayout(5)); noOptionsPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); - noOptionsPanel.add(DockingUtils.createNonHtmlLabel("No options available.")); + noOptionsPanel.add(new GLabel("No options available.")); for (Options optionsGroup : optionGroups) { String analyzerName = optionsGroup.getName(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AnalyzeAllOpenProgramsTask.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AnalyzeAllOpenProgramsTask.java index bb013958a9..43cf35016c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AnalyzeAllOpenProgramsTask.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AnalyzeAllOpenProgramsTask.java @@ -24,8 +24,8 @@ import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.*; import javax.swing.text.html.HTMLEditorKit; -import docking.DockingUtils; import docking.widgets.OptionDialog; +import docking.widgets.label.GLabel; import ghidra.GhidraOptions; import ghidra.app.services.ProgramManager; import ghidra.framework.model.DomainObject; @@ -508,7 +508,7 @@ class AnalyzeAllOpenProgramsTask extends Task { editorPane.setName("MESSAGE-COMPONENT"); editorPane.setText(message); - editorPane.setBackground(DockingUtils.createNonHtmlLabel().getBackground()); + editorPane.setBackground(new GLabel().getBackground()); JPanel panel = new JPanel(new BorderLayout()); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/ArchiveDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/ArchiveDialog.java index 9f8d1c02e5..286e53ec77 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/ArchiveDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/ArchiveDialog.java @@ -21,9 +21,9 @@ import java.io.File; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.OptionDialog; import docking.widgets.filechooser.GhidraFileChooser; +import docking.widgets.label.GDLabel; import ghidra.framework.GenericRunInfo; import ghidra.framework.model.ProjectLocator; import ghidra.framework.plugintool.PluginTool; @@ -76,7 +76,7 @@ public class ArchiveDialog extends DialogComponentProvider { GridBagLayout gbl = new GridBagLayout(); JPanel outerPanel = new JPanel(gbl); - archiveLabel = DockingUtils.createNonHtmlLabel(" Archive File "); + archiveLabel = new GDLabel(" Archive File "); archiveField = new JTextField(); archiveField.setName("archiveField"); archiveField.setColumns(NUM_TEXT_COLUMNS); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/RestoreDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/RestoreDialog.java index f0069d9879..8dbf68512f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/RestoreDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/RestoreDialog.java @@ -23,8 +23,8 @@ import java.io.File; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.filechooser.GhidraFileChooser; +import docking.widgets.label.GDLabel; import ghidra.framework.GenericRunInfo; import ghidra.framework.model.ProjectLocator; import ghidra.framework.preferences.Preferences; @@ -77,7 +77,7 @@ public class RestoreDialog extends DialogComponentProvider { protected JPanel buildMainPanel() { // Create the individual components that make up the panel. - archiveLabel = DockingUtils.createNonHtmlLabel(" Archive File "); + archiveLabel = new GDLabel(" Archive File "); archiveField = new JTextField(); archiveField.setColumns(NUM_TEXT_COLUMNS); archiveField.setName("archiveField"); @@ -116,7 +116,7 @@ public class RestoreDialog extends DialogComponentProvider { Font font = archiveBrowse.getFont(); archiveBrowse.setFont(new Font(font.getName(), Font.BOLD, font.getSize())); - restoreLabel = DockingUtils.createNonHtmlLabel(" Restore Directory "); + restoreLabel = new GDLabel(" Restore Directory "); restoreField = new JTextField(); restoreField.setName("restoreField"); restoreField.setColumns(RestoreDialog.NUM_TEXT_COLUMNS); @@ -133,7 +133,7 @@ public class RestoreDialog extends DialogComponentProvider { font = restoreBrowse.getFont(); restoreBrowse.setFont(new Font(font.getName(), Font.BOLD, font.getSize())); - projectNameLabel = DockingUtils.createNonHtmlLabel(" Project Name "); + projectNameLabel = new GDLabel(" Project Name "); projectNameField = new JTextField(); projectNameField.setName("projectNameField"); projectNameField.setColumns(RestoreDialog.NUM_TEXT_COLUMNS); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/assembler/AssemblyDualTextField.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/assembler/AssemblyDualTextField.java index a90cf40744..796976b179 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/assembler/AssemblyDualTextField.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/assembler/AssemblyDualTextField.java @@ -23,9 +23,9 @@ import java.util.concurrent.atomic.AtomicReference; import javax.swing.*; import javax.swing.text.BadLocationException; -import docking.DockingUtils; import docking.EmptyBorderToggleButton; import docking.widgets.autocomplete.*; +import docking.widgets.label.GDLabel; import docking.widgets.textfield.TextFieldLinker; import ghidra.GhidraApplicationLayout; import ghidra.GhidraLaunchable; @@ -706,7 +706,7 @@ public class AssemblyDualTextField { Box hbox = Box.createHorizontalBox(); dialog.add(hbox, BorderLayout.NORTH); - JLabel addrlabel = DockingUtils.createNonHtmlLabel(String.format(ADDR_FORMAT, curAddr)); + JLabel addrlabel = new GDLabel(String.format(ADDR_FORMAT, curAddr)); hbox.add(addrlabel); AssemblyDualTextField input = new AssemblyDualTextField(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/CreateBookmarkDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/CreateBookmarkDialog.java index 3ef8699e16..249b867639 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/CreateBookmarkDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/CreateBookmarkDialog.java @@ -30,6 +30,8 @@ import javax.swing.*; import docking.DialogComponentProvider; import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GIconLabel; +import docking.widgets.label.GLabel; import ghidra.program.model.address.Address; import ghidra.program.model.listing.*; import ghidra.util.HelpLocation; @@ -120,7 +122,6 @@ public class CreateBookmarkDialog extends DialogComponentProvider { ranges = plugin.getProgramSelection().getNumAddressRanges(); } - JLabel locationLabel = DockingUtils.createNonHtmlLabel("Address: ", SwingConstants.RIGHT); locationTextField = new JTextField(50); locationTextField.setText(address.toString()); if (hasSelection && ranges > 1) { @@ -132,7 +133,6 @@ public class CreateBookmarkDialog extends DialogComponentProvider { locationTextField.setMinimumSize(locationTextField.getPreferredSize()); locationTextField.addKeyListener(listener); - JLabel categoryLabel = DockingUtils.createNonHtmlLabel("Category: ", SwingConstants.RIGHT); categoryComboBox = new GhidraComboBox<>(getModel()); categoryComboBox.setEditable(true); categoryComboBox.addKeyListener(listener); @@ -140,8 +140,6 @@ public class CreateBookmarkDialog extends DialogComponentProvider { categoryTextField = (JTextField) categoryComboBox.getEditor().getEditorComponent(); categoryTextField.addKeyListener(listener); - JLabel commentLabel = - DockingUtils.createNonHtmlLabel("Description: ", SwingConstants.RIGHT); commentTextField = new JTextField(20); commentTextField.addKeyListener(listener); @@ -161,7 +159,7 @@ public class CreateBookmarkDialog extends DialogComponentProvider { gbc.weighty = 0; gbc.fill = GridBagConstraints.NONE; gbc.anchor = GridBagConstraints.EAST; - mainPanel.add(categoryLabel, gbc); + mainPanel.add(new GLabel("Category: ", SwingConstants.RIGHT), gbc); gbc.gridx = 2; gbc.gridy = 1; @@ -177,7 +175,7 @@ public class CreateBookmarkDialog extends DialogComponentProvider { gbc.weighty = 0; gbc.fill = GridBagConstraints.NONE; gbc.anchor = GridBagConstraints.EAST; - mainPanel.add(locationLabel, gbc); + mainPanel.add(new GLabel("Address: ", SwingConstants.RIGHT), gbc); gbc.gridx = 2; gbc.gridy = 0; @@ -193,7 +191,7 @@ public class CreateBookmarkDialog extends DialogComponentProvider { gbc.weighty = 0; gbc.fill = GridBagConstraints.NONE; gbc.anchor = GridBagConstraints.EAST; - mainPanel.add(commentLabel, gbc); + mainPanel.add(new GLabel("Description: ", SwingConstants.RIGHT), gbc); gbc.gridx = 2; gbc.gridy = 2; @@ -204,7 +202,7 @@ public class CreateBookmarkDialog extends DialogComponentProvider { mainPanel.add(commentTextField, gbc); ImageIcon icon = BookmarkNavigator.NOTE_ICON; - JLabel imageLabel = DockingUtils.createNonHtmlLabel(icon); + JLabel imageLabel = new GIconLabel(icon); imageLabel.setPreferredSize( new Dimension(icon.getIconWidth() + 20, icon.getIconHeight() + 20)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/FilterDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/FilterDialog.java index 4c31a28aa4..513dab033c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/FilterDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/FilterDialog.java @@ -22,7 +22,7 @@ import java.util.List; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.app.util.HelpTopics; import ghidra.program.model.listing.*; import ghidra.util.HelpLocation; @@ -60,8 +60,8 @@ class FilterDialog extends DialogComponentProvider { JPanel p = new JPanel(new BorderLayout()); p.add(buttons[i], BorderLayout.WEST); buttons[i].setSelected(provider.isShowingType(types[i].getTypeString())); - JLabel l = DockingUtils.createNonHtmlLabel(types[i].getTypeString(), types[i].getIcon(), - SwingConstants.LEFT); + JLabel l = + new GLabel(types[i].getTypeString(), types[i].getIcon(), SwingConstants.LEFT); p.add(l, BorderLayout.CENTER); panel.add(p); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreeProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreeProvider.java index d06794c1d7..a1e9e64fc2 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreeProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreeProvider.java @@ -24,10 +24,12 @@ import java.util.concurrent.atomic.AtomicInteger; import javax.swing.*; import javax.swing.tree.TreePath; -import docking.*; +import docking.ActionContext; +import docking.WindowPosition; import docking.action.*; import docking.util.GraphicsUtils; import docking.widgets.dialogs.NumberInputDialog; +import docking.widgets.label.GLabel; import docking.widgets.tree.*; import docking.widgets.tree.support.GTreeSelectionEvent.EventOrigin; import docking.widgets.tree.support.GTreeSelectionListener; @@ -791,8 +793,7 @@ public class CallTreeProvider extends ComponentProviderAdapter implements Domain private JPanel createTreePanel(boolean isIncoming, GTree tree) { JPanel panel = new JPanel(new BorderLayout()); - panel.add(DockingUtils.createNonHtmlLabel(isIncoming ? "Incoming Calls" : "Outgoing Calls"), - BorderLayout.NORTH); + panel.add(new GLabel(isIncoming ? "Incoming Calls" : "Outgoing Calls"), BorderLayout.NORTH); panel.add(tree, BorderLayout.CENTER); return panel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/checksums/ComputeChecksumsProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/checksums/ComputeChecksumsProvider.java index d16ef2b1aa..d5f33e75d5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/checksums/ComputeChecksumsProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/checksums/ComputeChecksumsProvider.java @@ -23,8 +23,8 @@ import java.util.List; import javax.swing.*; import docking.ActionContext; -import docking.DockingUtils; import docking.action.*; +import docking.widgets.label.GDLabel; import ghidra.app.context.ProgramContextAction; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.util.HelpLocation; @@ -93,7 +93,7 @@ public class ComputeChecksumsProvider extends ComponentProviderAdapter { resultsMainPanel.add(tablePanel); main.add(resultsMainPanel, BorderLayout.CENTER); - errorStatus = DockingUtils.createNonHtmlLabel(" "); + errorStatus = new GDLabel(" "); errorStatus.setName("message"); errorStatus.setHorizontalAlignment(SwingConstants.CENTER); errorStatus.setForeground(Color.RED); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearDialog.java index bfc37d9390..c1198cb3fb 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearDialog.java @@ -24,7 +24,7 @@ import java.util.List; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.app.context.ListingActionContext; import ghidra.util.HelpLocation; @@ -114,8 +114,7 @@ public class ClearDialog extends DialogComponentProvider { panel = new JPanel(); panel.setLayout(new BorderLayout(10, 10)); - JLabel label = DockingUtils.createNonHtmlLabel("Clear Options:"); - panel.add(label, BorderLayout.NORTH); + panel.add(new GLabel("Clear Options:"), BorderLayout.NORTH); JPanel cbPanel = new JPanel(); BoxLayout bl = new BoxLayout(cbPanel, BoxLayout.Y_AXIS); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearFlowDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearFlowDialog.java index 5b5bd59cdc..234ffb3b2f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearFlowDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearFlowDialog.java @@ -22,7 +22,7 @@ import java.awt.event.*; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.app.context.ListingActionContext; import ghidra.util.HelpLocation; @@ -91,8 +91,7 @@ public class ClearFlowDialog extends DialogComponentProvider { panel = new JPanel(); panel.setLayout(new BorderLayout(10, 10)); - JLabel label = DockingUtils.createNonHtmlLabel("Clear Flow Options:"); - panel.add(label, BorderLayout.NORTH); + panel.add(new GLabel("Clear Flow Options:"), BorderLayout.NORTH); JPanel cbPanel = new JPanel(); BoxLayout bl = new BoxLayout(cbPanel, BoxLayout.Y_AXIS); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/comments/CommentsDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/comments/CommentsDialog.java index 56b6b84fb7..a82a8317f7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/comments/CommentsDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/comments/CommentsDialog.java @@ -26,7 +26,7 @@ import javax.swing.text.JTextComponent; import docking.*; import docking.widgets.OptionDialog; -import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.combobox.GComboBox; import ghidra.app.util.viewer.field.AnnotatedStringHandler; import ghidra.app.util.viewer.field.Annotation; import ghidra.framework.plugintool.PluginTool; @@ -266,7 +266,7 @@ public class CommentsDialog extends DialogComponentProvider implements KeyListen AnnotationAdapterWrapper[] annotations = getAnnotationAdapterWrappers(); Arrays.sort(annotations); - JComboBox annotationsComboBox = new GhidraComboBox<>(annotations); + GComboBox annotationsComboBox = new GComboBox<>(annotations); JButton addAnnotationButton = new JButton("Add Annotation"); addAnnotationButton.addActionListener(new ActionListener() { @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompEditorPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompEditorPanel.java index a4ae34e294..841574f20c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompEditorPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompEditorPanel.java @@ -25,9 +25,9 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.Document; -import docking.DockingUtils; import docking.ToolTipManager; import docking.widgets.OptionDialog; +import docking.widgets.label.GDLabel; import ghidra.program.model.data.Category; import ghidra.program.model.data.Composite; import ghidra.program.model.data.Composite.AlignmentType; @@ -186,7 +186,7 @@ public class CompEditorPanel extends CompositeEditorPanel { private void setupName() { GridBagConstraints gridBagConstraints = new GridBagConstraints(); - nameLabel = DockingUtils.createNonHtmlLabel("Name:"); + nameLabel = new GDLabel("Name:"); gridBagConstraints.insets = LEFT_INSETS; gridBagConstraints.anchor = GridBagConstraints.LINE_END; gridBagConstraints.fill = GridBagConstraints.NONE; @@ -217,7 +217,7 @@ public class CompEditorPanel extends CompositeEditorPanel { private void setupDescription() { GridBagConstraints gridBagConstraints = new GridBagConstraints(); - descriptionLabel = DockingUtils.createNonHtmlLabel("Description:"); + descriptionLabel = new GDLabel("Description:"); gridBagConstraints.insets = LEFT_INSETS; gridBagConstraints.anchor = GridBagConstraints.LINE_END; gridBagConstraints.fill = GridBagConstraints.NONE; @@ -248,7 +248,7 @@ public class CompEditorPanel extends CompositeEditorPanel { private void setupCategory() { GridBagConstraints gridBagConstraints = new GridBagConstraints(); - categoryLabel = DockingUtils.createNonHtmlLabel("Category:"); + categoryLabel = new GDLabel("Category:"); gridBagConstraints.insets = LEFT_INSETS; gridBagConstraints.anchor = GridBagConstraints.LINE_END; gridBagConstraints.fill = GridBagConstraints.NONE; @@ -487,7 +487,7 @@ public class CompEditorPanel extends CompositeEditorPanel { "aligning this data type inside another data type." + ""; JPanel actualAlignmentPanel = new JPanel(new BorderLayout()); - actualAlignmentLabel = DockingUtils.createNonHtmlLabel("Alignment:"); + actualAlignmentLabel = new GDLabel("Alignment:"); gridBagConstraints.insets = new Insets(2, 7, 2, 2); gridBagConstraints.anchor = GridBagConstraints.EAST; gridBagConstraints.fill = GridBagConstraints.NONE; @@ -719,7 +719,7 @@ public class CompEditorPanel extends CompositeEditorPanel { protected void setupSize() { GridBagConstraints gridBagConstraints = new GridBagConstraints(); - sizeLabel = DockingUtils.createNonHtmlLabel("Size:"); + sizeLabel = new GDLabel("Size:"); ToolTipManager.setToolTipText(sizeLabel, "The current size in bytes."); gridBagConstraints.anchor = GridBagConstraints.LINE_END; gridBagConstraints.fill = GridBagConstraints.NONE; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompositeEditorPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompositeEditorPanel.java index 496a7fe05e..a633a9a407 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompositeEditorPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompositeEditorPanel.java @@ -32,7 +32,6 @@ import javax.swing.event.ChangeEvent; import javax.swing.table.*; import javax.swing.text.JTextComponent; -import docking.DockingUtils; import docking.ToolTipManager; import docking.action.DockingActionIf; import docking.dnd.*; @@ -43,6 +42,8 @@ import docking.widgets.DropDownSelectionTextField; import docking.widgets.OptionDialog; import docking.widgets.fieldpanel.support.FieldRange; import docking.widgets.fieldpanel.support.FieldSelection; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import docking.widgets.table.GTable; import docking.widgets.table.GTableCellRenderer; import docking.widgets.textfield.GValidatedTextField; @@ -603,7 +604,7 @@ public abstract class CompositeEditorPanel extends JPanel private JPanel createStatusPanel() { JPanel panel = new JPanel(new BorderLayout()); - statusLabel = DockingUtils.createNonHtmlLabel(" "); + statusLabel = new GDLabel(" "); statusLabel.setHorizontalAlignment(SwingConstants.CENTER); statusLabel.setForeground(Color.blue); statusLabel.addComponentListener(new ComponentAdapter() { @@ -657,7 +658,7 @@ public abstract class CompositeEditorPanel extends JPanel JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - JLabel label = DockingUtils.createNonHtmlLabel(name + ":", SwingConstants.RIGHT); + JLabel label = new GLabel(name + ":", SwingConstants.RIGHT); label.setPreferredSize(new Dimension(label.getPreferredSize())); panel.add(label); panel.add(Box.createHorizontalStrut(2)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/SearchControlPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/SearchControlPanel.java index 4a6d197d89..8e526522d2 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/SearchControlPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/SearchControlPanel.java @@ -23,8 +23,8 @@ import javax.swing.border.Border; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import docking.DockingUtils; import docking.widgets.EmptyBorderButton; +import docking.widgets.label.GLabel; import resources.ResourceManager; public class SearchControlPanel extends JPanel { @@ -43,8 +43,7 @@ public class SearchControlPanel extends JPanel { this.editorPanel = editorPanel; setLayout(new BorderLayout()); - JLabel label = DockingUtils.createNonHtmlLabel("Search: "); - add(label, BorderLayout.WEST); + add(new GLabel("Search: "), BorderLayout.WEST); textField = new JTextField(20); add(textField, BorderLayout.CENTER); add(buildButtonPanel(), BorderLayout.EAST); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/data/DataSettingsDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/data/DataSettingsDialog.java index 826a06b781..eb974165a3 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/data/DataSettingsDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/data/DataSettingsDialog.java @@ -27,6 +27,7 @@ import javax.swing.event.TableModelListener; import javax.swing.table.*; import docking.DialogComponentProvider; +import docking.widgets.combobox.GComboBox; import docking.widgets.dialogs.StringChoices; import docking.widgets.table.DefaultSortedTableModel; import docking.widgets.table.GTable; @@ -719,7 +720,7 @@ public class DataSettingsDialog extends DialogComponentProvider { final static int BOOLEAN = 1; private int mode; - private JComboBox comboBox = new JComboBox<>(); + private GComboBox comboBox = new GComboBox<>(); SettingsEditor() { comboBox.addItemListener(new ItemListener() { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataOrganizationDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataOrganizationDialog.java index 0085aefb3b..defd70514f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataOrganizationDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataOrganizationDialog.java @@ -20,7 +20,7 @@ import java.awt.BorderLayout; import javax.swing.JPanel; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GHtmlLabel; import ghidra.program.model.data.*; import ghidra.util.HTMLUtilities; @@ -52,7 +52,7 @@ public class DataOrganizationDialog extends DialogComponentProvider { this.dataOrganization = dataOrganization; JPanel headerPanel = new JPanel(); - headerPanel.add(DockingUtils.createHtmlLabel("Alignment Information for " + + headerPanel.add(new GHtmlLabel("Alignment Information for " + HTMLUtilities.friendlyEncodeHTML(dataTypeManager.getName()) + ".")); alignPanel = new DataOrganizationPanel(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataOrganizationPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataOrganizationPanel.java index 17c45b5700..06e3d3ad59 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataOrganizationPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataOrganizationPanel.java @@ -21,7 +21,7 @@ import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.program.model.data.DataOrganizationImpl; import ghidra.util.layout.PairLayout; @@ -62,41 +62,41 @@ public class DataOrganizationPanel extends JPanel { setUpDoubleSize(); setUpLongDoubleSize(); - add(DockingUtils.createNonHtmlLabel("")); - add(DockingUtils.createNonHtmlLabel("")); - add(DockingUtils.createNonHtmlLabel("Absolute Max Alignment")); + add(new GLabel("")); + add(new GLabel("")); + add(new GLabel("Absolute Max Alignment")); add(absoluteMaxAlignComponent); - add(DockingUtils.createNonHtmlLabel("Machine Alignment")); + add(new GLabel("Machine Alignment")); add(machineAlignComponent); - add(DockingUtils.createNonHtmlLabel("Default Alignment")); + add(new GLabel("Default Alignment")); add(defaultAlignComponent); - add(DockingUtils.createNonHtmlLabel("Default Pointer Alignment")); + add(new GLabel("Default Pointer Alignment")); add(pointerAlignComponent); - add(DockingUtils.createNonHtmlLabel("")); - add(DockingUtils.createNonHtmlLabel("")); - add(DockingUtils.createNonHtmlLabel("Signed-Char:")); + add(new GLabel("")); + add(new GLabel("")); + add(new GLabel("Signed-Char:")); add(charIsSignedCheckbox); - add(DockingUtils.createNonHtmlLabel("Char Size")); + add(new GLabel("Char Size")); add(charSizeComponent); - add(DockingUtils.createNonHtmlLabel("Wide-Char Size")); + add(new GLabel("Wide-Char Size")); add(wcharSizeComponent); - add(DockingUtils.createNonHtmlLabel("Short Size")); + add(new GLabel("Short Size")); add(shortSizeComponent); - add(DockingUtils.createNonHtmlLabel("Integer Size")); + add(new GLabel("Integer Size")); add(integerSizeComponent); - add(DockingUtils.createNonHtmlLabel("Long Size")); + add(new GLabel("Long Size")); add(longSizeComponent); - add(DockingUtils.createNonHtmlLabel("LongLong Size")); + add(new GLabel("LongLong Size")); add(longLongSizeComponent); - add(DockingUtils.createNonHtmlLabel("Float Size")); + add(new GLabel("Float Size")); add(floatSizeComponent); - add(DockingUtils.createNonHtmlLabel("Double Size")); + add(new GLabel("Double Size")); add(doubleSizeComponent); - add(DockingUtils.createNonHtmlLabel("LongDouble Size")); + add(new GLabel("LongDouble Size")); add(longDoubleSizeComponent); - add(DockingUtils.createNonHtmlLabel("")); - add(DockingUtils.createNonHtmlLabel("")); + add(new GLabel("")); + add(new GLabel("")); } public void setOrganization(DataOrganizationImpl dataOrganization) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeComparePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeComparePanel.java index 80d644a142..7e3e66195d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeComparePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeComparePanel.java @@ -21,7 +21,7 @@ import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import ghidra.app.util.ToolTipUtils; import ghidra.app.util.html.HTMLDataTypeRepresentation; import ghidra.program.model.data.DataType; @@ -60,8 +60,8 @@ class DataTypeComparePanel extends JPanel { leftPanel = new JPanel(new BorderLayout()); rightPanel = new JPanel(new BorderLayout()); - leftPanelLabel = DockingUtils.createHtmlLabel(); - rightPanelLabel = DockingUtils.createHtmlLabel(); + leftPanelLabel = new GDHtmlLabel(); + rightPanelLabel = new GDHtmlLabel(); leftPanelLabel.setBorder(BorderFactory.createEmptyBorder(2, 8, 2, 0)); rightPanelLabel.setBorder(BorderFactory.createEmptyBorder(2, 8, 2, 0)); @@ -70,12 +70,12 @@ class DataTypeComparePanel extends JPanel { add(leftPanel); add(rightPanel); - dtLabel1 = DockingUtils.createHtmlLabel(); + dtLabel1 = new GDHtmlLabel(); dtLabel1.setOpaque(true); dtLabel1.setBackground(Color.WHITE); dtLabel1.setBorder(BorderFactory.createEmptyBorder(2, 8, 0, 0)); dtLabel1.setVerticalAlignment(SwingConstants.TOP); - dtLabel2 = DockingUtils.createHtmlLabel(); + dtLabel2 = new GDHtmlLabel(); dtLabel2.setOpaque(true); dtLabel2.setBackground(Color.WHITE); dtLabel2.setBorder(BorderFactory.createEmptyBorder(2, 8, 0, 0)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeSynchronizer.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeSynchronizer.java index 1e9fb516b0..2d02bf3880 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeSynchronizer.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeSynchronizer.java @@ -23,7 +23,7 @@ import javax.swing.SwingUtilities; import org.apache.commons.lang3.StringUtils; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import ghidra.app.plugin.core.datamgr.archive.DataTypeManagerHandler; import ghidra.app.plugin.core.datamgr.archive.SourceArchive; import ghidra.app.util.ToolTipUtils; @@ -377,8 +377,8 @@ public class DataTypeSynchronizer { private static String createHTMLSpacerString(String htmlContent, String otherHTMLContent) { // unfortunately, to get the displayed widths, we have to have rendered content, which // is what the JLabels below are doing for us - JLabel label1 = DockingUtils.createHtmlLabel("" + htmlContent); - JLabel label2 = DockingUtils.createHtmlLabel("" + otherHTMLContent); + JLabel label1 = new GDHtmlLabel("" + htmlContent); + JLabel label2 = new GDHtmlLabel("" + otherHTMLContent); int maxPixelWidth = Math.max(label1.getPreferredSize().width, label2.getPreferredSize().width); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/CreateTypeDefDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/CreateTypeDefDialog.java index ba9476a041..50074cbf34 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/CreateTypeDefDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/CreateTypeDefDialog.java @@ -21,8 +21,8 @@ import javax.swing.event.ChangeEvent; import javax.swing.tree.TreePath; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GLabel; import docking.widgets.list.GListCellRenderer; import ghidra.app.plugin.core.datamgr.DataTypeManagerPlugin; import ghidra.app.plugin.core.datamgr.tree.ArchiveNode; @@ -59,18 +59,18 @@ public class CreateTypeDefDialog extends DialogComponentProvider { JPanel panel = new JPanel(new PairLayout()); // category info - panel.add(DockingUtils.createNonHtmlLabel("Category:")); - panel.add(DockingUtils.createNonHtmlLabel(category.getCategoryPath().getPath())); + panel.add(new GLabel("Category:")); + panel.add(new GLabel(category.getCategoryPath().getPath())); // name info nameTextField = new JTextField(15); - panel.add(DockingUtils.createNonHtmlLabel("Name:")); + panel.add(new GLabel("Name:")); panel.add(nameTextField); // data type info dataTypeEditor = new DataTypeSelectionEditor(plugin.getTool(), Integer.MAX_VALUE, AllowedDataTypes.ALL); - panel.add(DockingUtils.createNonHtmlLabel("Data type:")); + panel.add(new GLabel("Data type:")); panel.add(dataTypeEditor.getEditorComponent()); dataTypeEditor.addCellEditorListener(new CellEditorListener() { @@ -90,7 +90,6 @@ public class CreateTypeDefDialog extends DialogComponentProvider { dataTypeManagerBox = new GhidraComboBox<>(); dataTypeManagerBox.setRenderer( GListCellRenderer.createDefaultCellTextRenderer(dtm -> dtm.getName())); - DockingUtils.turnOffHTMLRendering(dataTypeManagerBox); DataTypeManager[] dataTypeManagers = plugin.getDataTypeManagers(); for (DataTypeManager manager : dataTypeManagers) { @@ -115,7 +114,7 @@ public class CreateTypeDefDialog extends DialogComponentProvider { dataTypeManagerBox.setSelectedItem(itemToSelect); - panel.add(DockingUtils.createNonHtmlLabel("Archive:")); + panel.add(new GLabel("Archive:")); panel.add(dataTypeManagerBox); panel.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/DataTypeEditorManager.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/DataTypeEditorManager.java index 8d2695c99d..02d290937c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/DataTypeEditorManager.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/DataTypeEditorManager.java @@ -21,8 +21,8 @@ import java.util.List; import javax.swing.*; import docking.ComponentProvider; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GLabel; import ghidra.app.plugin.core.compositeeditor.*; import ghidra.app.plugin.core.datamgr.DataTypeManagerPlugin; import ghidra.app.plugin.core.datamgr.archive.SourceArchive; @@ -575,7 +575,7 @@ public class DataTypeEditorManager } setCallingConventionChoices(choices); - parentPanel.add(DockingUtils.createNonHtmlLabel("Calling Convention:")); + parentPanel.add(new GLabel("Calling Convention:")); parentPanel.add(callingConventionComboBox); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/EnumEditorPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/EnumEditorPanel.java index b917270202..8d5b494330 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/EnumEditorPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/EnumEditorPanel.java @@ -24,9 +24,10 @@ import javax.swing.event.*; import javax.swing.table.TableCellEditor; import javax.swing.table.TableModel; -import docking.DockingUtils; import docking.widgets.OptionDialog; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import docking.widgets.table.GTableCellRenderer; import docking.widgets.table.GTableTextCellEditor; import docking.widgets.textfield.GValidatedTextField; @@ -382,7 +383,7 @@ class EnumEditorPanel extends JPanel { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - JLabel label = DockingUtils.createNonHtmlLabel("Name:", SwingConstants.RIGHT); + JLabel label = new GLabel("Name:", SwingConstants.RIGHT); label.setPreferredSize(new Dimension(descLabel.getPreferredSize())); panel.add(label); panel.add(Box.createHorizontalStrut(2)); @@ -398,7 +399,7 @@ class EnumEditorPanel extends JPanel { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - descLabel = DockingUtils.createNonHtmlLabel("Description:", SwingConstants.RIGHT); + descLabel = new GDLabel("Description:", SwingConstants.RIGHT); panel.add(descLabel); panel.add(Box.createHorizontalStrut(2)); @@ -431,13 +432,13 @@ class EnumEditorPanel extends JPanel { } }); - JLabel label = DockingUtils.createNonHtmlLabel("Category:", SwingConstants.RIGHT); + JLabel label = new GLabel("Category:", SwingConstants.RIGHT); label.setPreferredSize(new Dimension(descLabel.getPreferredSize())); panel.add(label); panel.add(Box.createHorizontalStrut(2)); panel.add(categoryField); panel.add(Box.createHorizontalStrut(20)); - panel.add(DockingUtils.createNonHtmlLabel("Size:")); + panel.add(new GLabel("Size:")); panel.add(Box.createHorizontalStrut(5)); panel.add(sizeComboBox); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/ConflictDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/ConflictDialog.java index 21140a0dd0..06fac15b08 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/ConflictDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/ConflictDialog.java @@ -21,7 +21,8 @@ import java.awt.event.*; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GIconLabel; +import docking.widgets.label.GLabel; import ghidra.util.HelpLocation; import resources.ResourceManager; @@ -141,19 +142,14 @@ public class ConflictDialog extends DialogComponentProvider { } private JPanel createLabelPanel(String dtName, String categoryPath) { - JLabel imageLabel = DockingUtils.createNonHtmlLabel(INFORM_ICON); - - JLabel infoLabel = DockingUtils.createNonHtmlLabel( - "Conflict exists in " + categoryPath + " for " + dtName); - JPanel labelPanel = new JPanel(); labelPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 20)); BoxLayout bl = new BoxLayout(labelPanel, BoxLayout.X_AXIS); labelPanel.setLayout(bl); labelPanel.add(Box.createHorizontalStrut(5)); - labelPanel.add(imageLabel); + labelPanel.add(new GIconLabel(INFORM_ICON)); labelPanel.add(Box.createHorizontalStrut(5)); - labelPanel.add(infoLabel); + labelPanel.add(new GLabel("Conflict exists in " + categoryPath + " for " + dtName)); JPanel panel = new JPanel(new BorderLayout()); panel.add(labelPanel); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeChooserDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeChooserDialog.java index 5293a21630..7469acea46 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeChooserDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeChooserDialog.java @@ -24,9 +24,9 @@ import javax.swing.*; import javax.swing.tree.TreePath; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.filter.FilterOptions; import docking.widgets.filter.TextFilterStrategy; +import docking.widgets.label.GDLabel; import docking.widgets.tree.*; import ghidra.app.plugin.core.datamgr.DataTypeManagerPlugin; import ghidra.app.plugin.core.datamgr.tree.DataTypeArchiveGTree; @@ -99,7 +99,7 @@ public class DataTypeChooserDialog extends DialogComponentProvider { private JComponent createWorkPanel() { JPanel panel = new JPanel(new BorderLayout()); - messageLabel = DockingUtils.createNonHtmlLabel("Choose the data type you wish to use."); + messageLabel = new GDLabel("Choose the data type you wish to use."); messageLabel.setBorder(BorderFactory.createEmptyBorder(2, 4, 2, 2)); panel.add(messageLabel, BorderLayout.NORTH); panel.add(this.tree, BorderLayout.CENTER); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeUtils.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeUtils.java index 77152229e4..083ebd7613 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeUtils.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeUtils.java @@ -490,11 +490,11 @@ public class DataTypeUtils { // JFrame frame = new JFrame(); // JPanel panel = new JPanel(); // -// JLabel label1 = DockingUtils.createNonHtmlLabel(); +// JLabel label1 = new GDLabel(); // Icon icon = getOpenFolderIcon( false ); // label1.setIcon( icon ); // -// JLabel label2 = DockingUtils.createNonHtmlLabel(); +// JLabel label2 = new GDLabel(); // Icon icon2 = ResourceManager.getDisabledIcon( (ImageIcon) icon ); // label2.setIcon( icon2 ); // diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datawindow/FilterAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datawindow/FilterAction.java index e66d88fd11..6ec0719d7b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datawindow/FilterAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datawindow/FilterAction.java @@ -29,6 +29,7 @@ import docking.action.ToolBarData; import docking.widgets.combobox.GhidraComboBox; import docking.widgets.filter.FilterListener; import docking.widgets.filter.FilterTextField; +import docking.widgets.label.GLabel; import ghidra.program.model.listing.Program; import ghidra.util.HelpLocation; import ghidra.util.StringUtilities; @@ -317,7 +318,7 @@ class FilterAction extends ToggleDockingAction { JPanel filterPanel = new JPanel(new BorderLayout()); filterField = new FilterTextField(checkboxPanel); filterPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); - filterPanel.add(DockingUtils.createNonHtmlLabel("Filter:"), BorderLayout.WEST); + filterPanel.add(new GLabel("Filter:"), BorderLayout.WEST); filterPanel.add(filterField, BorderLayout.CENTER); filterField.addFilterListener(filterListener); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/AddressTableDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/AddressTableDialog.java index 1d83bb760e..b9a4a83482 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/AddressTableDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/AddressTableDialog.java @@ -23,9 +23,12 @@ import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import docking.*; +import docking.ActionContext; +import docking.DialogComponentProvider; import docking.ToolTipManager; import docking.action.*; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.events.ProgramSelectionPluginEvent; import ghidra.app.services.GoToService; import ghidra.app.util.HelpTopics; @@ -147,7 +150,7 @@ public class AddressTableDialog extends DialogComponentProvider { JPanel searchOptionsPanel = new JPanel(new BorderLayout()); searchOptionsPanel.setBorder(BorderFactory.createTitledBorder("Search Options")); - JLabel minLengthLabel = DockingUtils.createNonHtmlLabel("Minimum Length: "); + JLabel minLengthLabel = new GLabel("Minimum Length: "); ToolTipManager.setToolTipText(minLengthLabel, "The minimum number of consecutive addresses that will make an address table."); minLengthField = new JTextField(5); @@ -158,7 +161,7 @@ public class AddressTableDialog extends DialogComponentProvider { minLengthPanel.add(minLengthLabel); minLengthPanel.add(minLengthField); - alignLabel = DockingUtils.createNonHtmlLabel("Alignment: "); + alignLabel = new GDLabel("Alignment: "); alignField = new JTextField(5); alignField.setName("Alignment"); ToolTipManager.setToolTipText(alignLabel, @@ -169,7 +172,7 @@ public class AddressTableDialog extends DialogComponentProvider { } alignField.setText("" + align); - skipLabel = DockingUtils.createNonHtmlLabel("Skip Length: "); + skipLabel = new GDLabel("Skip Length: "); skipField = new JTextField(5); skipField.setName("Skip"); ToolTipManager.setToolTipText(skipLabel, @@ -229,12 +232,12 @@ public class AddressTableDialog extends DialogComponentProvider { ToolTipManager.setToolTipText(autoLabelCB, "Label the top of the address table and all members of the table."); - offsetLabel = DockingUtils.createNonHtmlLabel("Offset: "); + offsetLabel = new GDLabel("Offset: "); ToolTipManager.setToolTipText(offsetLabel, "Offset from the beginning of the selected table(s)"); offsetLabel.setEnabled(false); - JLabel viewOffsetLabel = DockingUtils.createNonHtmlLabel(" "); + JLabel viewOffsetLabel = new GDLabel(" "); viewOffsetLabel.setEnabled(false); viewOffset = new HintTextField(20); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/ProcessorStateDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/ProcessorStateDialog.java index 1e724e1c38..893b2f387d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/ProcessorStateDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/ProcessorStateDialog.java @@ -25,7 +25,7 @@ import java.util.ArrayList; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.app.util.bean.FixedBitSizeValueField; import ghidra.program.model.lang.Register; import ghidra.program.model.lang.RegisterValue; @@ -63,8 +63,8 @@ public class ProcessorStateDialog extends DialogComponentProvider { for (int i = 0; i < fields.length; i++) { Register register = registerList.get(i); int numbits = register.getBitLength(); - JLabel label = DockingUtils.createNonHtmlLabel(register.getName() + " [ " + - register.getBitLength() + " bit" + ((numbits == 1) ? "" : "s") + " ] :"); + JLabel label = new GLabel(register.getName() + " [ " + register.getBitLength() + + " bit" + ((numbits == 1) ? "" : "s") + " ] :"); label.setHorizontalAlignment(SwingConstants.TRAILING); label.setToolTipText(register.getDescription()); workPanel.add(label); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/SetFlowOverrideDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/SetFlowOverrideDialog.java index da2389924d..3386ca59eb 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/SetFlowOverrideDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/SetFlowOverrideDialog.java @@ -18,8 +18,8 @@ package ghidra.app.plugin.core.disassembler; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GLabel; import ghidra.app.cmd.disassemble.SetFlowOverrideCmd; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.listing.*; @@ -97,7 +97,7 @@ class SetFlowOverrideDialog extends DialogComponentProvider { FlowType flowType = instruction.getFlowType(); - panel.add(DockingUtils.createNonHtmlLabel( + panel.add(new GLabel( "Current Flow: " + flowType.getName() + (flowType.isConditional() ? "*" : ""))); panel.add(Box.createGlue()); @@ -111,7 +111,7 @@ class SetFlowOverrideDialog extends DialogComponentProvider { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - panel.add(DockingUtils.createNonHtmlLabel(note)); + panel.add(new GLabel(note)); panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); @@ -140,7 +140,7 @@ class SetFlowOverrideDialog extends DialogComponentProvider { flowOverrideComboBox.setSelectedItem(flowOverride); } - panel.add(DockingUtils.createNonHtmlLabel("Instruction Flow:")); + panel.add(new GLabel("Instruction Flow:")); panel.add(flowOverrideComboBox); panel.add(Box.createGlue()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableProvider.java index dcff539f36..c4d4589e1c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableProvider.java @@ -24,9 +24,9 @@ import javax.swing.*; import javax.swing.table.*; import docking.ActionContext; -import docking.DockingUtils; import docking.action.*; import docking.widgets.OptionDialog; +import docking.widgets.label.GLabel; import ghidra.app.context.ProgramActionContext; import ghidra.app.services.DataTypeManagerService; import ghidra.app.services.GoToService; @@ -219,8 +219,7 @@ public class EquateTableProvider extends ComponentProviderAdapter { setEquateTableRenderer(); JPanel equatesPanel = new JPanel(new BorderLayout()); - equatesPanel.add(DockingUtils.createNonHtmlLabel("Equates", SwingConstants.CENTER), - BorderLayout.NORTH); + equatesPanel.add(new GLabel("Equates", SwingConstants.CENTER), BorderLayout.NORTH); equatesPanel.add(equatesTablePane, BorderLayout.CENTER); equatesPanel.add(equatesFilterPanel, BorderLayout.SOUTH); @@ -247,8 +246,7 @@ public class EquateTableProvider extends ComponentProviderAdapter { setReferenceTableRenderer(); JPanel referencesPanel = new JPanel(new BorderLayout()); - referencesPanel.add(DockingUtils.createNonHtmlLabel("References", SwingConstants.CENTER), - "North"); + referencesPanel.add(new GLabel("References", SwingConstants.CENTER), "North"); referencesPanel.add(referencesTablePane, "Center"); ////////////////////////////////////////////////////////////// diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/exporter/ExporterDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/exporter/ExporterDialog.java index 659a4616c6..dccb45cf8e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/exporter/ExporterDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/exporter/ExporterDialog.java @@ -27,12 +27,12 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.options.editor.ButtonPanelFactory; import docking.widgets.OptionDialog; import docking.widgets.combobox.GhidraComboBox; import docking.widgets.filechooser.GhidraFileChooser; import docking.widgets.filechooser.GhidraFileChooserMode; +import docking.widgets.label.GLabel; import ghidra.app.plugin.core.help.AboutDomainObjectUtils; import ghidra.app.util.*; import ghidra.app.util.exporter.Exporter; @@ -184,16 +184,16 @@ public class ExporterDialog extends DialogComponentProvider implements AddressFa private Component buildMainPanel() { JPanel panel = new JPanel(new PairLayout(5, 5)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - panel.add(DockingUtils.createNonHtmlLabel("Format: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Format: ", SwingConstants.RIGHT)); panel.add(buildFormatChooser()); - panel.add(DockingUtils.createNonHtmlLabel("Output File: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Output File: ", SwingConstants.RIGHT)); panel.add(buildFilePanel()); return panel; } private Component buildSelectionCheckboxPanel() { JPanel panel = new JPanel(new PairLayout(5, 5)); - selectionOnlyLabel = DockingUtils.createNonHtmlLabel("Selection Only:"); + selectionOnlyLabel = new GLabel("Selection Only:"); panel.add(selectionOnlyLabel); panel.add(buildSelectionCheckbox()); return panel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/fallthrough/FallThroughDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/fallthrough/FallThroughDialog.java index 99b9f65b2e..104acb029a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/fallthrough/FallThroughDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/fallthrough/FallThroughDialog.java @@ -26,8 +26,8 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.ToolTipManager; +import docking.widgets.label.GDLabel; import ghidra.app.util.AddressInput; import ghidra.program.model.address.Address; import ghidra.util.HelpLocation; @@ -192,13 +192,13 @@ class FallThroughDialog extends DialogComponentProvider implements ChangeListene JPanel panel = new JPanel(new BorderLayout()); panel.setBorder(new TitledBorder("Home")); - addressLabel = DockingUtils.createNonHtmlLabel("01001000"); + addressLabel = new GDLabel("01001000"); Font font = addressLabel.getFont(); Font monoFont = new Font("monospaced", font.getStyle(), font.getSize()); addressLabel.setFont(monoFont); - instLabel = DockingUtils.createNonHtmlLabel("jmp DAT_01001000"); + instLabel = new GDLabel("jmp DAT_01001000"); instLabel.setFont(monoFont); homeButton = createButton("images/go-home.png", "Home"); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/EditFunctionSignatureDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/EditFunctionSignatureDialog.java index 984cfad724..4c0f3cde36 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/EditFunctionSignatureDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/EditFunctionSignatureDialog.java @@ -22,8 +22,9 @@ import java.util.List; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.cmd.function.ApplyFunctionSignatureCmd; import ghidra.app.services.DataTypeManagerService; import ghidra.app.util.cparser.C.ParseException; @@ -128,7 +129,7 @@ public class EditFunctionSignatureDialog extends DialogComponentProvider { String signature = function.getPrototypeString(false, false); signatureField = new JTextField(signature.length()); // add some extra room to edit signatureField.setText(signature); - signatureLabel = DockingUtils.createNonHtmlLabel("Signature:"); + signatureLabel = new GDLabel("Signature:"); signaturePanel.add(signatureLabel); signaturePanel.add(signatureField); @@ -165,7 +166,7 @@ public class EditFunctionSignatureDialog extends DialogComponentProvider { function.getProgram().getFunctionManager().getCallingConventionNames(); String[] choices = callingConventions.toArray(new String[callingConventions.size()]); setCallingConventionChoices(choices); - parentPanel.add(DockingUtils.createNonHtmlLabel("Calling Convention:")); + parentPanel.add(new GLabel("Calling Convention:")); parentPanel.add(callingConventionComboBox); } @@ -215,7 +216,7 @@ public class EditFunctionSignatureDialog extends DialogComponentProvider { callFixupComboBox.setSelectedItem(callFixupName); } - callFixupPanel.add(DockingUtils.createNonHtmlLabel("Call-Fixup:")); + callFixupPanel.add(new GLabel("Call-Fixup:")); callFixupPanel.add(callFixupComboBox); callFixupPanel.add(Box.createGlue()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/ThunkReferenceAddressDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/ThunkReferenceAddressDialog.java index 715149ee30..deed17a774 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/ThunkReferenceAddressDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/ThunkReferenceAddressDialog.java @@ -21,7 +21,7 @@ import java.util.List; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.app.util.*; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.Address; @@ -358,7 +358,7 @@ public class ThunkReferenceAddressDialog extends DialogComponentProvider { JPanel mainPanel = new JPanel(new PairLayout(5, 5)); refFunctionField = new JTextField(20); - mainPanel.add(DockingUtils.createNonHtmlLabel("Destination Function/Address:")); + mainPanel.add(new GLabel("Destination Function/Address:")); mainPanel.add(refFunctionField); mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); 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 d019639feb..bca909c863 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 @@ -30,6 +30,8 @@ import javax.swing.table.TableCellEditor; import docking.DialogComponentProvider; import docking.DockingUtils; import docking.widgets.OptionDialog; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GLabel; import docking.widgets.table.*; import generic.util.WindowUtilities; import ghidra.app.services.DataTypeManagerService; @@ -290,9 +292,9 @@ public class FunctionEditorDialog extends DialogComponentProvider implements Mod panel.setBorder(BorderFactory.createEmptyBorder(0, 5, 15, 15)); JPanel leftPanel = new JPanel(new PairLayout(4, 8)); - leftPanel.add(DockingUtils.createNonHtmlLabel("Function Name:")); + leftPanel.add(new GLabel("Function Name:")); leftPanel.add(createNameField()); - leftPanel.add(DockingUtils.createNonHtmlLabel("Calling Convention")); + leftPanel.add(new GLabel("Calling Convention")); leftPanel.add(createCallingConventionCombo()); leftPanel.setBorder(BorderFactory.createEmptyBorder(14, 0, 0, 10)); @@ -327,7 +329,7 @@ public class FunctionEditorDialog extends DialogComponentProvider implements Mod private JComponent createCallingConventionCombo() { List callingConventionNames = model.getCallingConventionNames(); String[] names = new String[callingConventionNames.size()]; - callingConventionComboBox = new JComboBox<>(callingConventionNames.toArray(names)); + callingConventionComboBox = new GComboBox<>(callingConventionNames.toArray(names)); callingConventionComboBox.setSelectedItem(model.getCallingConventionName()); callingConventionComboBox.addItemListener(e -> model.setCallingConventionName( (String) callingConventionComboBox.getSelectedItem())); @@ -335,7 +337,7 @@ public class FunctionEditorDialog extends DialogComponentProvider implements Mod } private JComponent createCallFixupComboPanel() { - callFixupComboBox = new JComboBox<>(); + callFixupComboBox = new GComboBox<>(); String[] callFixupNames = model.getCallFixupNames(); callFixupComboBox.addItem(FunctionEditorModel.NONE_CHOICE); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressEditorDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressEditorDialog.java index 44e51504ee..82a13bc990 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressEditorDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressEditorDialog.java @@ -25,8 +25,9 @@ import javax.swing.event.*; import javax.swing.table.TableCellEditor; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.DropDownSelectionTextField; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import docking.widgets.table.GTable; import ghidra.app.services.DataTypeManagerService; import ghidra.program.model.address.Address; @@ -161,7 +162,7 @@ public class StorageAddressEditorDialog extends DialogComponentProvider JPanel panel = new JPanel(new PairLayout(10, 4)); panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); - panel.add(DockingUtils.createNonHtmlLabel("Datatype: ")); + panel.add(new GLabel("Datatype: ")); dataTypeEditor = new ParameterDataTypeCellEditor(this, service); @@ -211,11 +212,11 @@ public class StorageAddressEditorDialog extends DialogComponentProvider }); panel.add(dataTypeEditComponent); - panel.add(DockingUtils.createNonHtmlLabel("Datatype Size: ")); - sizeLabel = DockingUtils.createNonHtmlLabel("" + size); + panel.add(new GLabel("Datatype Size: ")); + sizeLabel = new GDLabel("" + size); panel.add(sizeLabel); - panel.add(DockingUtils.createNonHtmlLabel("Allocated Size:")); - currentSizeLabel = DockingUtils.createNonHtmlLabel(""); + panel.add(new GLabel("Allocated Size:")); + currentSizeLabel = new GDLabel(""); panel.add(currentSizeLabel); setFocusComponent(textField); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagsComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagsComponentProvider.java index 9fd8730474..b93d1112d3 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagsComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagsComponentProvider.java @@ -23,7 +23,7 @@ import java.util.List; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import docking.widgets.textfield.HintTextField; import ghidra.app.cmd.function.CreateFunctionTagCmd; import ghidra.app.context.ProgramActionContext; @@ -377,7 +377,6 @@ public class FunctionTagsComponentProvider extends ComponentProviderAdapter */ private JPanel createFilterPanel() { filterPanel = new JPanel(new BorderLayout()); - JLabel label = DockingUtils.createNonHtmlLabel(" Filter:"); filterInputTF = new HintTextField(""); filterInputTF.setName("filterInputTF"); @@ -398,7 +397,7 @@ public class FunctionTagsComponentProvider extends ComponentProviderAdapter } }); - filterPanel.add(label, BorderLayout.WEST); + filterPanel.add(new GLabel(" Filter:"), BorderLayout.WEST); filterPanel.add(filterInputTF, BorderLayout.CENTER); return filterPanel; @@ -412,12 +411,11 @@ public class FunctionTagsComponentProvider extends ComponentProviderAdapter private JPanel createInputPanel() { inputPanel = new JPanel(new BorderLayout()); - JLabel label = DockingUtils.createNonHtmlLabel(" Create new tag(s):"); tagInputTF = new HintTextField("tag 1, tag 2, ..."); tagInputTF.setName("tagInputTF"); tagInputTF.addActionListener(e -> processCreates()); - inputPanel.add(label, BorderLayout.WEST); + inputPanel.add(new GLabel(" Create new tag(s):"), BorderLayout.WEST); inputPanel.add(tagInputTF, BorderLayout.CENTER); return inputPanel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/TagListPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/TagListPanel.java index 1819107cec..bdc515eab0 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/TagListPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/TagListPanel.java @@ -20,12 +20,13 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.*; -import javax.swing.*; +import javax.swing.DefaultListModel; +import javax.swing.JPanel; -import docking.DockingUtils; import docking.DockingWindowManager; import docking.widgets.OptionDialog; import docking.widgets.dialogs.InputDialog; +import docking.widgets.label.GLabel; import ghidra.app.cmd.function.ChangeFunctionTagCmd; import ghidra.app.cmd.function.DeleteFunctionTagCmd; import ghidra.framework.cmd.Command; @@ -150,9 +151,7 @@ public abstract class TagListPanel extends JPanel { } }); - JLabel label = DockingUtils.createNonHtmlLabel(title); - - add(label, BorderLayout.NORTH); + add(new GLabel(title), BorderLayout.NORTH); add(list, BorderLayout.CENTER); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionChoiceComparisonPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionChoiceComparisonPanel.java index 2f285539d3..e20d3f7a10 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionChoiceComparisonPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionChoiceComparisonPanel.java @@ -21,10 +21,12 @@ import java.util.*; import javax.swing.*; -import docking.*; +import docking.ActionContext; +import docking.ComponentProvider; import docking.action.*; import docking.help.Help; import docking.help.HelpService; +import docking.widgets.combobox.GComboBox; import docking.widgets.fieldpanel.internal.FieldPanelCoordinator; import ghidra.app.util.viewer.util.CodeComparisonPanel; import ghidra.app.util.viewer.util.CodeComparisonPanelActionContext; @@ -159,8 +161,7 @@ public abstract class FunctionChoiceComparisonPanel extends FunctionComparisonPa private Component createLeftChoicePanel() { JPanel panel = new JPanel(new BorderLayout()); - leftComboBox = new JComboBox<>(leftWrappedFunctions); - DockingUtils.turnOffHTMLRendering(leftComboBox); + leftComboBox = new GComboBox<>(leftWrappedFunctions); adjustSelectedLeftFunction(); leftComboBox.addItemListener(e -> { WrappedFunction wrappedFunction = (WrappedFunction) leftComboBox.getSelectedItem(); @@ -173,8 +174,7 @@ public abstract class FunctionChoiceComparisonPanel extends FunctionComparisonPa private Component createRightChoicePanel() { JPanel panel = new JPanel(new BorderLayout()); - rightComboBox = new JComboBox<>(rightWrappedFunctions); - DockingUtils.turnOffHTMLRendering(rightComboBox); + rightComboBox = new GComboBox<>(rightWrappedFunctions); adjustSelectedRightFunction(); rightComboBox.addItemListener(e -> { WrappedFunction wrappedFunction = (WrappedFunction) rightComboBox.getSelectedItem(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/MessagePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/MessagePanel.java index a98fb3214d..6cebf44ede 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/MessagePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/MessagePanel.java @@ -21,7 +21,7 @@ import java.awt.FlowLayout; import javax.swing.JLabel; import javax.swing.JPanel; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; /** * Simple panel containing a JLabel for displaying error messages. @@ -37,7 +37,7 @@ public class MessagePanel extends JPanel { */ public MessagePanel() { setLayout(new FlowLayout(FlowLayout.CENTER)); - msgLabel = DockingUtils.createNonHtmlLabel(NO_STATUS); + msgLabel = new GDLabel(NO_STATUS); add(msgLabel); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/label/OperandLabelDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/label/OperandLabelDialog.java index 5db644c631..ff60514cde 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/label/OperandLabelDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/label/OperandLabelDialog.java @@ -18,8 +18,8 @@ package ghidra.app.plugin.core.label; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; import ghidra.app.cmd.label.AddLabelCmd; import ghidra.app.cmd.refs.AssociateSymbolCmd; import ghidra.app.context.ListingActionContext; @@ -60,7 +60,7 @@ public class OperandLabelDialog extends DialogComponentProvider { JPanel mainPanel = new JPanel(new PairLayout(5, 5)); mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - label = DockingUtils.createNonHtmlLabel("Label: "); + label = new GDLabel("Label: "); myChoice = new GhidraComboBox<>(); myChoice.setName("MYCHOICE"); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/AddBlockDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/AddBlockDialog.java index 3d8f852cab..48d8e48687 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/AddBlockDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/AddBlockDialog.java @@ -22,8 +22,9 @@ import javax.swing.*; import javax.swing.event.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.plugin.core.misc.RegisterField; import ghidra.app.util.*; import ghidra.framework.plugintool.PluginTool; @@ -145,31 +146,27 @@ class AddBlockDialog extends DialogComponentProvider implements ChangeListener { lengthField.setChangeListener(e -> lengthChanged()); addrField.addChangeListener(ev -> addrChanged()); - JLabel readLabel = DockingUtils.createNonHtmlLabel("Read"); readCB = new JCheckBox(); readCB.setName("Read"); - JLabel writeLabel = DockingUtils.createNonHtmlLabel("Write"); writeCB = new JCheckBox(); writeCB.setName("Write"); - JLabel executeLabel = DockingUtils.createNonHtmlLabel("Execute"); executeCB = new JCheckBox(); executeCB.setName("Execute"); - JLabel volatileLabel = DockingUtils.createNonHtmlLabel("Volatile"); volatileCB = new JCheckBox(); volatileCB.setName("Volatile"); JPanel topPanel = new JPanel(new PairLayout(4, 10, 150)); topPanel.setBorder(BorderFactory.createEmptyBorder(5, 7, 4, 5)); - topPanel.add(DockingUtils.createNonHtmlLabel("Block Name:", SwingConstants.RIGHT)); + topPanel.add(new GLabel("Block Name:", SwingConstants.RIGHT)); topPanel.add(nameField); - topPanel.add(DockingUtils.createNonHtmlLabel("Start Addr:", SwingConstants.RIGHT)); + topPanel.add(new GLabel("Start Addr:", SwingConstants.RIGHT)); topPanel.add(addrField); - topPanel.add(DockingUtils.createNonHtmlLabel("Length:", SwingConstants.RIGHT)); + topPanel.add(new GLabel("Length:", SwingConstants.RIGHT)); topPanel.add(lengthField); - topPanel.add(DockingUtils.createNonHtmlLabel("Comment:", SwingConstants.RIGHT)); + topPanel.add(new GLabel("Comment:", SwingConstants.RIGHT)); topPanel.add(commentField); JPanel execPanel = new JPanel(); @@ -178,19 +175,19 @@ class AddBlockDialog extends DialogComponentProvider implements ChangeListener { execPanel.setLayout(bl); execPanel.add(Box.createHorizontalStrut(10)); - execPanel.add(readLabel); + execPanel.add(new GLabel("Read")); execPanel.add(readCB); execPanel.add(Box.createHorizontalStrut(10)); - execPanel.add(writeLabel); + execPanel.add(new GLabel("Write")); execPanel.add(writeCB); execPanel.add(Box.createHorizontalStrut(10)); - execPanel.add(executeLabel); + execPanel.add(new GLabel("Execute")); execPanel.add(executeCB); execPanel.add(Box.createHorizontalStrut(10)); - execPanel.add(volatileLabel); + execPanel.add(new GLabel("Volatile")); execPanel.add(volatileCB); JPanel panel = new JPanel(); @@ -412,7 +409,7 @@ class AddBlockDialog extends DialogComponentProvider implements ChangeListener { } private void createInitializedPanel() { - initialValueLabel = DockingUtils.createNonHtmlLabel("Initial Value"); + initialValueLabel = new GDLabel("Initial Value"); initialValueField = new RegisterField(8, null, false); initialValueField.setName("Initial Value"); initialValueField.setEnabled(false); @@ -428,7 +425,6 @@ class AddBlockDialog extends DialogComponentProvider implements ChangeListener { private JPanel createAddressPanel() { JPanel addressPanel = new JPanel(new PairLayout()); - JLabel addrToAddLabel = DockingUtils.createNonHtmlLabel("Source Addr:"); baseAddrField = new AddressInput(); baseAddrField.setAddressFactory(addrFactory); baseAddrField.setName("Source Addr"); @@ -442,7 +438,7 @@ class AddBlockDialog extends DialogComponentProvider implements ChangeListener { } baseAddrField.setAddress(minAddr); model.setBaseAddress(minAddr); - addressPanel.add(addrToAddLabel); + addressPanel.add(new GLabel("Source Addr:")); addressPanel.add(baseAddrField); addressPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); return addressPanel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/ExpandBlockDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/ExpandBlockDialog.java index c6814a55ea..4f5013ce7f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/ExpandBlockDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/ExpandBlockDialog.java @@ -24,7 +24,9 @@ import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import docking.*; +import docking.ComponentProvider; +import docking.DialogComponentProvider; +import docking.widgets.label.GLabel; import ghidra.app.plugin.core.misc.RegisterField; import ghidra.app.util.*; import ghidra.framework.plugintool.PluginTool; @@ -127,33 +129,29 @@ class ExpandBlockDialog extends DialogComponentProvider implements ChangeListene endAddressInput.setAddress(end); endAddressInput.setAddressSpaceEditable(false); + boolean isExpandUp = dialogType == EXPAND_UP; + startField = new JTextField(10); startField.setName("StartAddress"); + startField.setEnabled(isExpandUp); + startField.setText(start.toString()); + endField = new JTextField(10); endField.setName("EndAddress"); - startField.setText(start.toString()); + endField.setEnabled(!isExpandUp); endField.setText(end.toString()); - JLabel startLabel = DockingUtils.createNonHtmlLabel("Start Address:", SwingConstants.RIGHT); - JLabel endLabel = DockingUtils.createNonHtmlLabel("End Address:", SwingConstants.RIGHT); - - if (dialogType == EXPAND_UP) { - endField.setEnabled(false); - startLabel.setText("New Start Address:"); - } - else { - startField.setEnabled(false); - endLabel.setText("New End Address:"); - } lengthField = new RegisterField(32, null, false); lengthField.setName("BlockLength"); lengthField.setValue(Long.valueOf(model.getLength())); - panel.add(startLabel); - panel.add((dialogType == EXPAND_UP) ? (JComponent) startAddressInput : startField); - panel.add(endLabel); - panel.add((dialogType == EXPAND_UP) ? (JComponent) endField : endAddressInput); - panel.add(DockingUtils.createNonHtmlLabel("Block Length:", SwingConstants.RIGHT)); + panel.add( + new GLabel(isExpandUp ? "New Start Address:" : "Start Address:", SwingConstants.RIGHT)); + panel.add(isExpandUp ? (JComponent) startAddressInput : startField); + panel.add( + new GLabel(isExpandUp ? "End Address:" : "New End Address:", SwingConstants.RIGHT)); + panel.add(isExpandUp ? (JComponent) endField : endAddressInput); + panel.add(new GLabel("Block Length:", SwingConstants.RIGHT)); panel.add(lengthField); JPanel mainPanel = new JPanel(new BorderLayout()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MemoryMapProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MemoryMapProvider.java index a7653307fb..8edc51298d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MemoryMapProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MemoryMapProvider.java @@ -24,9 +24,9 @@ import javax.swing.table.TableColumn; import javax.swing.table.TableModel; import docking.ActionContext; -import docking.DockingUtils; import docking.action.DockingAction; import docking.action.ToolBarData; +import docking.widgets.label.GLabel; import docking.widgets.table.*; import docking.widgets.textfield.GValidatedTextField.MaxLengthField; import ghidra.app.context.ProgramActionContext; @@ -177,8 +177,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { enableOptions(model); }); - memPanel.add(DockingUtils.createNonHtmlLabel("Memory Blocks", SwingConstants.CENTER), - BorderLayout.NORTH); + memPanel.add(new GLabel("Memory Blocks", SwingConstants.CENTER), BorderLayout.NORTH); memPanel.add(memPane, BorderLayout.CENTER); return memPanel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MoveBlockDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MoveBlockDialog.java index f9c286165c..1ac158afa6 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MoveBlockDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MoveBlockDialog.java @@ -22,7 +22,8 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.cmd.memory.MoveBlockListener; import ghidra.app.cmd.memory.MoveBlockTask; import ghidra.app.util.*; @@ -157,16 +158,16 @@ public class MoveBlockDialog extends DialogComponentProvider implements MoveBloc private JPanel buildMainPanel() { JPanel panel = new JPanel(new PairLayout(5, 20, 150)); panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); - blockNameLabel = DockingUtils.createNonHtmlLabel(".text"); + blockNameLabel = new GDLabel(".text"); blockNameLabel.setName("blockName"); // name components for junits - origStartLabel = DockingUtils.createNonHtmlLabel("1001000"); + origStartLabel = new GDLabel("1001000"); origStartLabel.setName("origStart"); - origEndLabel = DockingUtils.createNonHtmlLabel("1002000"); + origEndLabel = new GDLabel("1002000"); origEndLabel.setName("origEnd"); - lengthLabel = DockingUtils.createNonHtmlLabel("4096 (0x1000)"); + lengthLabel = new GDLabel("4096 (0x1000)"); lengthLabel.setName("length"); newStartField = new AddressInput(); @@ -188,17 +189,17 @@ public class MoveBlockDialog extends DialogComponentProvider implements MoveBloc } }); - panel.add(DockingUtils.createNonHtmlLabel("Name:", SwingConstants.RIGHT)); + panel.add(new GLabel("Name:", SwingConstants.RIGHT)); panel.add(blockNameLabel); - panel.add(DockingUtils.createNonHtmlLabel("Start Address:", SwingConstants.RIGHT)); + panel.add(new GLabel("Start Address:", SwingConstants.RIGHT)); panel.add(origStartLabel); - panel.add(DockingUtils.createNonHtmlLabel("End Address:", SwingConstants.RIGHT)); + panel.add(new GLabel("End Address:", SwingConstants.RIGHT)); panel.add(origEndLabel); - panel.add(DockingUtils.createNonHtmlLabel("Length:", SwingConstants.RIGHT)); + panel.add(new GLabel("Length:", SwingConstants.RIGHT)); panel.add(lengthLabel); - panel.add(DockingUtils.createNonHtmlLabel("New Start Address:", SwingConstants.RIGHT)); + panel.add(new GLabel("New Start Address:", SwingConstants.RIGHT)); panel.add(newStartField); - panel.add(DockingUtils.createNonHtmlLabel("New End Address:", SwingConstants.RIGHT)); + panel.add(new GLabel("New End Address:", SwingConstants.RIGHT)); panel.add(newEndField); return panel; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/SplitBlockDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/SplitBlockDialog.java index 972b4ca521..5d80c923d0 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/SplitBlockDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/SplitBlockDialog.java @@ -24,7 +24,7 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.app.plugin.core.misc.RegisterField; import ghidra.app.util.AddressInput; import ghidra.app.util.HelpTopics; @@ -118,13 +118,13 @@ class SplitBlockDialog extends DialogComponentProvider { blockOneLengthField = new RegisterField(32, null, false); blockOneLengthField.setName("BlockOneLength"); - panelOne.add(DockingUtils.createNonHtmlLabel("Block Name:", SwingConstants.RIGHT)); + panelOne.add(new GLabel("Block Name:", SwingConstants.RIGHT)); panelOne.add(blockOneNameField); - panelOne.add(DockingUtils.createNonHtmlLabel("Start Address:", SwingConstants.RIGHT)); + panelOne.add(new GLabel("Start Address:", SwingConstants.RIGHT)); panelOne.add(blockOneStartField); - panelOne.add(DockingUtils.createNonHtmlLabel("End Address:", SwingConstants.RIGHT)); + panelOne.add(new GLabel("End Address:", SwingConstants.RIGHT)); panelOne.add(blockOneEnd); - panelOne.add(DockingUtils.createNonHtmlLabel("Block Length:", SwingConstants.RIGHT)); + panelOne.add(new GLabel("Block Length:", SwingConstants.RIGHT)); panelOne.add(blockOneLengthField); JPanel panelTwo = new JPanel(new PairLayout(5, 5, 150)); @@ -139,13 +139,13 @@ class SplitBlockDialog extends DialogComponentProvider { blockTwoLengthField = new RegisterField(32, null, false); blockTwoLengthField.setName("BlockTwoLength"); - panelTwo.add(DockingUtils.createNonHtmlLabel("Block Name:", SwingConstants.RIGHT)); + panelTwo.add(new GLabel("Block Name:", SwingConstants.RIGHT)); panelTwo.add(blockTwoNameField); - panelTwo.add(DockingUtils.createNonHtmlLabel("Start Address:", SwingConstants.RIGHT)); + panelTwo.add(new GLabel("Start Address:", SwingConstants.RIGHT)); panelTwo.add(blockTwoStart); - panelTwo.add(DockingUtils.createNonHtmlLabel("End Address:", SwingConstants.RIGHT)); + panelTwo.add(new GLabel("End Address:", SwingConstants.RIGHT)); panelTwo.add(blockTwoEndField); - panelTwo.add(DockingUtils.createNonHtmlLabel("Block Length:", SwingConstants.RIGHT)); + panelTwo.add(new GLabel("Block Length:", SwingConstants.RIGHT)); panelTwo.add(blockTwoLengthField); JPanel mainPanel = new JPanel(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/addresstype/AddressTypeOverviewLegendPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/addresstype/AddressTypeOverviewLegendPanel.java index e450ee0eee..01bc5dee77 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/addresstype/AddressTypeOverviewLegendPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/addresstype/AddressTypeOverviewLegendPanel.java @@ -21,7 +21,7 @@ import java.awt.event.MouseEvent; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.util.layout.PairLayout; /** @@ -51,7 +51,7 @@ public class AddressTypeOverviewLegendPanel extends JPanel { for (AddressType addressType : values) { JPanel panel = new ColorPanel(addressType); add(panel); - add(DockingUtils.createNonHtmlLabel(addressType.getDescription())); + add(new GLabel(addressType.getDescription())); } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/entropy/KnotPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/entropy/KnotPanel.java index 793ebae356..bde94c8cbc 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/entropy/KnotPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/entropy/KnotPanel.java @@ -25,8 +25,8 @@ import javax.swing.border.LineBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import docking.DockingUtils; import docking.util.GraphicsUtils; +import docking.widgets.label.GLabel; /** * Class used by the entropy legend panel to show known entropy ranges. @@ -134,7 +134,7 @@ public class KnotPanel extends JPanel implements ComponentListener { ArrayList knots = palette.getKnots(); for (KnotRecord record : knots) { - JLabel label = DockingUtils.createNonHtmlLabel(record.name); + JLabel label = new GLabel(record.name); label.setFont(FONT); label.setBorder(new ToplessLineBorder(Color.BLACK)); label.setHorizontalAlignment(SwingConstants.CENTER); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/processors/ShowInstructionInfoPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/processors/ShowInstructionInfoPlugin.java index f158073fd4..13a4625620 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/processors/ShowInstructionInfoPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/processors/ShowInstructionInfoPlugin.java @@ -27,9 +27,11 @@ import java.util.List; import javax.swing.JLabel; import javax.swing.JPanel; -import docking.*; +import docking.ActionContext; +import docking.ToolTipManager; import docking.action.DockingAction; import docking.action.MenuData; +import docking.widgets.label.GDLabel; import ghidra.app.CorePluginPackage; import ghidra.app.context.*; import ghidra.app.plugin.PluginCategoryNames; @@ -94,7 +96,7 @@ public class ShowInstructionInfoPlugin extends ProgramPlugin { private void createStatusPanels() { instructionPanel = new JPanel(new BorderLayout()); - instructionLabel = DockingUtils.createNonHtmlLabel(" "); + instructionLabel = new GDLabel(" "); instructionPanel.setPreferredSize( new Dimension(200, instructionLabel.getPreferredSize().height)); ToolTipManager.setToolTipText(instructionLabel, CURRENT_INSTRUCTION_PREPEND_STRING); @@ -103,7 +105,7 @@ public class ShowInstructionInfoPlugin extends ProgramPlugin { tool.addStatusComponent(instructionPanel, true, false); functionPanel = new JPanel(new BorderLayout()); - functionLabel = DockingUtils.createNonHtmlLabel(" "); + functionLabel = new GDLabel(" "); functionLabel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { @@ -121,7 +123,7 @@ public class ShowInstructionInfoPlugin extends ProgramPlugin { tool.addStatusComponent(functionPanel, true, false); addressPanel = new JPanel(new BorderLayout()); - addressLabel = DockingUtils.createNonHtmlLabel(" "); + addressLabel = new GDLabel(" "); addressPanel.setPreferredSize(new Dimension(95, addressLabel.getPreferredSize().height)); ToolTipManager.setToolTipText(addressLabel, "Current Address"); addressPanel.add(addressLabel); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/MultiTabPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/MultiTabPanel.java index d4a931c337..2cfdbbcde9 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/MultiTabPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/MultiTabPanel.java @@ -24,8 +24,9 @@ import java.util.Map.Entry; import javax.swing.*; import javax.swing.border.*; -import docking.DockingUtils; import docking.util.KeyBindingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GIconLabel; import generic.util.WindowUtilities; import ghidra.framework.model.ProjectLocator; import ghidra.program.model.listing.Program; @@ -53,6 +54,7 @@ public class MultiTabPanel extends JPanel { private static final Font LABEL_FONT = new Font("Tahoma", Font.PLAIN, 11); private static final Font LIST_LABEL_FONT = new Font("Tahoma", Font.BOLD, 9); + private static final String DEFAULT_HIDDEN_COUNT_STR = "99"; /** A list of tabs that are hidden from view due to space constraints */ private List hiddenTabList; @@ -228,7 +230,7 @@ public class MultiTabPanel extends JPanel { final JPanel labelPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 1)); labelPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 10)); - JLabel nameLabel = DockingUtils.createNonHtmlLabel(); + JLabel nameLabel = new GDLabel(); nameLabel.setIconTextGap(1); nameLabel.setName("objectName"); // junit access nameLabel.setFont(LABEL_FONT); @@ -237,9 +239,7 @@ public class MultiTabPanel extends JPanel { labelPanel.add(nameLabel); - JLabel iconLabel = DockingUtils.createNonHtmlLabel(EMPTY16_ICON); - Icon icon = isSelected ? CLOSE_ICON : EMPTY16_ICON; - iconLabel.setIcon(icon); + JLabel iconLabel = new GIconLabel(isSelected ? CLOSE_ICON : EMPTY16_ICON); iconLabel.setToolTipText("Close"); iconLabel.setName("Close"); // junit access @@ -643,7 +643,7 @@ public class MultiTabPanel extends JPanel { } private JLabel createLabel() { - JLabel newLabel = DockingUtils.createNonHtmlLabel(LIST_ICON, SwingConstants.LEFT); + JLabel newLabel = new GDLabel(DEFAULT_HIDDEN_COUNT_STR, LIST_ICON, SwingConstants.LEFT); newLabel.setIconTextGap(0); newLabel.setFont(LIST_LABEL_FONT); newLabel.setBorder(BorderFactory.createEmptyBorder(4, 4, 0, 4)); @@ -682,7 +682,6 @@ public class MultiTabPanel extends JPanel { } }); - newLabel.setText("99"); newLabel.setPreferredSize(newLabel.getPreferredSize()); return newLabel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/DnDTreeCellRenderer.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/DnDTreeCellRenderer.java index 8f409d0c85..69870d76a0 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/DnDTreeCellRenderer.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/DnDTreeCellRenderer.java @@ -22,8 +22,8 @@ import java.util.*; import javax.swing.*; import javax.swing.tree.DefaultTreeCellRenderer; +import docking.DockingUtils; import docking.ToolTipManager; -import docking.widgets.AbstractGCellRenderer; import ghidra.program.model.listing.Group; import resources.ResourceManager; @@ -87,7 +87,7 @@ class DnDTreeCellRenderer extends DefaultTreeCellRenderer { * @param enable true to enable HTML rendering; false to disable it */ public void setHTMLRenderingEnabled(boolean enable) { - putClientProperty(AbstractGCellRenderer.HTML_DISABLE_STRING, !enable); + putClientProperty(DockingUtils.HTML_DISABLE_STRING, !enable); } void setSelectionForDrag(Color color) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/reachability/FunctionReachabilityProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/reachability/FunctionReachabilityProvider.java index 10ad5ecbb0..c6fea4f524 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/reachability/FunctionReachabilityProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/reachability/FunctionReachabilityProvider.java @@ -21,7 +21,9 @@ import java.util.List; import javax.swing.*; -import docking.*; +import docking.ComponentProvider; +import docking.WindowPosition; +import docking.widgets.label.GDLabel; import ghidra.app.services.GoToService; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.Address; @@ -126,7 +128,7 @@ public class FunctionReachabilityProvider extends ComponentProvider { inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.PAGE_AXIS)); fromAddressField = new JTextField(15); - fromFunctionLabel = DockingUtils.createNonHtmlLabel(); + fromFunctionLabel = new GDLabel(); JButton swapButton = new JButton("Swap"); swapButton.addActionListener(e -> { @@ -137,7 +139,7 @@ public class FunctionReachabilityProvider extends ComponentProvider { }); toAddressField = new JTextField(15); - toFunctionLabel = DockingUtils.createNonHtmlLabel(); + toFunctionLabel = new GDLabel(); JButton goButton = new JButton("Go"); goButton.addActionListener(e -> findPaths()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditExternalReferencePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditExternalReferencePanel.java index 1a6cd0e61c..59c371d648 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditExternalReferencePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditExternalReferencePanel.java @@ -25,9 +25,9 @@ import javax.swing.border.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import docking.DockingUtils; import docking.ToolTipManager; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GLabel; import ghidra.app.util.AddressInput; import ghidra.framework.main.DataTreeDialog; import ghidra.framework.model.DomainFile; @@ -70,9 +70,7 @@ class EditExternalReferencePanel extends EditReferencePanel { topPanel.setBorder( new CompoundBorder(new TitledBorder("External Program"), new EmptyBorder(0, 5, 5, 5))); - JLabel label = DockingUtils.createNonHtmlLabel("Name:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - topPanel.add(label); + topPanel.add(new GLabel("Name:", SwingConstants.RIGHT)); extLibName = new GhidraComboBox<>(); extLibName.setEditable(true); extLibName.addDocumentListener(new DocumentListener() { @@ -130,24 +128,18 @@ class EditExternalReferencePanel extends EditReferencePanel { buttonPanel.add(editButton); pathPanel.add(buttonPanel, BorderLayout.EAST); - label = DockingUtils.createNonHtmlLabel("Path:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - topPanel.add(label); + topPanel.add(new GLabel("Path:", SwingConstants.RIGHT)); topPanel.add(pathPanel); JPanel bottomPanel = new JPanel(new PairLayout(10, 10, 160)); bottomPanel.setBorder(new CompoundBorder(new TitledBorder("External Reference Data"), new EmptyBorder(0, 5, 5, 5))); - label = DockingUtils.createNonHtmlLabel("Label:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - bottomPanel.add(label); + bottomPanel.add(new GLabel("Label:", SwingConstants.RIGHT)); extLabel = new JTextField(); bottomPanel.add(extLabel); - label = DockingUtils.createNonHtmlLabel("Address:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - bottomPanel.add(label); + bottomPanel.add(new GLabel("Address:", SwingConstants.RIGHT)); extAddr = new AddressInput(); bottomPanel.add(extAddr); 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 fa37ae91af..554727d6ea 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 @@ -30,8 +30,9 @@ import javax.swing.table.AbstractTableModel; import org.jdom.Element; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.util.AddressInput; import ghidra.program.model.address.*; import ghidra.program.model.listing.*; @@ -103,7 +104,7 @@ class EditMemoryReferencePanel extends EditReferencePanel { }); offsetField = new JTextField(); - addrLabel = DockingUtils.createNonHtmlLabel("Base Address:"); + addrLabel = new GDLabel("Base Address:"); addrLabel.setHorizontalAlignment(SwingConstants.RIGHT); Dimension d = addrLabel.getPreferredSize(); addrLabel.setPreferredSize(d); @@ -142,9 +143,7 @@ class EditMemoryReferencePanel extends EditReferencePanel { add(addrLabel); add(addrPanel); - JLabel label = DockingUtils.createNonHtmlLabel("Ref-Type:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - add(label); + add(new GLabel("Ref-Type:", SwingConstants.RIGHT)); add(refTypes); enableOffsetField(false); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditRegisterReferencePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditRegisterReferencePanel.java index 0fcb1de6a0..6fd24c287a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditRegisterReferencePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditRegisterReferencePanel.java @@ -17,12 +17,11 @@ package ghidra.app.plugin.core.references; import java.util.*; -import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GLabel; import ghidra.program.model.address.Address; import ghidra.program.model.lang.Register; import ghidra.program.model.listing.*; @@ -60,14 +59,9 @@ class EditRegisterReferencePanel extends EditReferencePanel { refTypes = new GhidraComboBox<>(REGISTER_REF_TYPES); - JLabel label = DockingUtils.createNonHtmlLabel("Register:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - add(label); + add(new GLabel("Register:", SwingConstants.RIGHT)); add(regList); - - label = DockingUtils.createNonHtmlLabel("Ref-Type:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - add(label); + add(new GLabel("Ref-Type:", SwingConstants.RIGHT)); add(refTypes); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditStackReferencePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditStackReferencePanel.java index 1228a3ad5b..4f0690c002 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditStackReferencePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditStackReferencePanel.java @@ -15,11 +15,12 @@ */ package ghidra.app.plugin.core.references; -import javax.swing.*; +import javax.swing.JTextField; +import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GLabel; import ghidra.app.cmd.function.CallDepthChangeInfo; import ghidra.program.model.address.AddressSpace; import ghidra.program.model.listing.*; @@ -60,14 +61,9 @@ class EditStackReferencePanel extends EditReferencePanel { refTypes = new GhidraComboBox<>(STACK_REF_TYPES); - JLabel label = DockingUtils.createNonHtmlLabel("Stack Offset:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - add(label); + add(new GLabel("Stack Offset:", SwingConstants.RIGHT)); add(stackOffset); - - label = DockingUtils.createNonHtmlLabel("Ref-Type:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - add(label); + add(new GLabel("Ref-Type:", SwingConstants.RIGHT)); add(refTypes); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/InstructionPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/InstructionPanel.java index 5d74b17f53..a49a831d84 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/InstructionPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/InstructionPanel.java @@ -27,11 +27,11 @@ import javax.swing.border.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import docking.DockingUtils; import docking.action.DockingAction; import docking.dnd.DropTgtAdapter; import docking.dnd.Droppable; import docking.util.KeyBindingUtils; +import docking.widgets.label.GDLabel; import ghidra.app.util.*; import ghidra.app.util.viewer.field.BrowserCodeUnitFormat; import ghidra.program.model.address.Address; @@ -217,21 +217,21 @@ class InstructionPanel extends JPanel implements ChangeListener { Border border = new TitledBorder(new EtchedBorder(), "Source"); setBorder(border); - addressLabel = DockingUtils.createNonHtmlLabel("FFFFFFFF"); // use a default + addressLabel = new GDLabel("FFFFFFFF"); // use a default Font font = addressLabel.getFont(); monoFont = new Font("monospaced", font.getStyle(), font.getSize()); addressLabel.setFont(monoFont); addressLabel.setName("addressLabel"); - mnemonicLabel = DockingUtils.createNonHtmlLabel("movl"); + mnemonicLabel = new GDLabel("movl"); mnemonicLabel.setFont(monoFont); mnemonicLabel.setName("mnemonicLabel"); mnemonicLabel.addMouseListener(mouseListener); operandLabels = new JLabel[Program.MAX_OPERANDS]; for (int i = 0; i < operandLabels.length; i++) { - operandLabels[i] = DockingUtils.createNonHtmlLabel("%ebp, "); + operandLabels[i] = new GDLabel("%ebp, "); operandLabels[i].setName("operandLabels[" + i + "]"); operandLabels[i].setFont(monoFont); operandLabels[i].addMouseListener(mouseListener); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/OffsetTableDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/OffsetTableDialog.java index 1a5581ff95..7dd05ec2d0 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/OffsetTableDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/OffsetTableDialog.java @@ -23,7 +23,8 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GLabel; import ghidra.app.util.AddressInput; import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.PluginTool; @@ -145,17 +146,14 @@ public class OffsetTableDialog extends DialogComponentProvider { addrInput.setAddressFactory(addrFactory); addrInput.setAddress(defaultAddress); - JLabel label = DockingUtils.createNonHtmlLabel("Enter Base Address:", SwingConstants.RIGHT); - panel.add(label); + panel.add(new GLabel("Enter Base Address:", SwingConstants.RIGHT)); panel.add(addrInput); - JLabel sizeLabel = - DockingUtils.createNonHtmlLabel("Select Data Size (Bytes):", SwingConstants.RIGHT); - comboBox = new JComboBox<>(new String[] { "1", "2", "4", "8" }); + comboBox = new GComboBox<>(new String[] { "1", "2", "4", "8" }); int pointerSize = defaultAddress.getPointerSize(); comboBox.setSelectedItem(Integer.toString(pointerSize)); - panel.add(sizeLabel); + panel.add(new GLabel("Select Data Size (Bytes):", SwingConstants.RIGHT)); panel.add(comboBox); signedCheckBox = new JCheckBox("Signed Data Value(s)", true); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/EditRegisterValueDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/EditRegisterValueDialog.java index 3e3dfe7246..a21fb4e75f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/EditRegisterValueDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/EditRegisterValueDialog.java @@ -22,7 +22,7 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.app.util.AddressInput; import ghidra.app.util.bean.FixedBitSizeValueField; import ghidra.program.model.address.*; @@ -50,10 +50,6 @@ class EditRegisterValueDialog extends DialogComponentProvider { private JComponent buildWorkPanel(Register register, Address start, Address end, BigInteger value, AddressFactory factory) { - JLabel regLabel = DockingUtils.createNonHtmlLabel("Register:"); - JLabel startAddrLabel = DockingUtils.createNonHtmlLabel("Start Address:"); - JLabel endAddrLabel = DockingUtils.createNonHtmlLabel("End Address:"); - JLabel valueLabel = DockingUtils.createNonHtmlLabel("Value:"); JTextField registerField = new JTextField(register.getName() + " (" + register.getBitLength() + ")"); @@ -80,13 +76,13 @@ class EditRegisterValueDialog extends DialogComponentProvider { JPanel panel = new JPanel(new PairLayout(5, 1)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - panel.add(regLabel); + panel.add(new GLabel("Register:")); panel.add(registerField); - panel.add(startAddrLabel); + panel.add(new GLabel("Start Address:")); panel.add(startAddrField); - panel.add(endAddrLabel); + panel.add(new GLabel("End Address:")); panel.add(endAddrField); - panel.add(valueLabel); + panel.add(new GLabel("Value:")); panel.add(registerValueField); return panel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/SetRegisterValueDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/SetRegisterValueDialog.java index c539f90d84..8a6c51ff82 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/SetRegisterValueDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/SetRegisterValueDialog.java @@ -26,7 +26,8 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GLabel; import ghidra.app.util.bean.FixedBitSizeValueField; import ghidra.program.model.address.*; import ghidra.program.model.lang.Register; @@ -74,12 +75,7 @@ public class SetRegisterValueDialog extends DialogComponentProvider { } private JComponent buildWorkPanel(Register[] registers) { - JLabel regLabel = DockingUtils.createNonHtmlLabel("Register:"); - JLabel valueLabel = DockingUtils.createNonHtmlLabel("Value:"); - JLabel addressLabel = DockingUtils.createNonHtmlLabel("Address(es):"); - addressLabel.setVerticalAlignment(SwingConstants.TOP); - - registerComboBox = new JComboBox<>(wrapRegisters(registers)); + registerComboBox = new GComboBox<>(wrapRegisters(registers)); Font f = registerComboBox.getFont().deriveFont(13f); registerComboBox.setFont(f); registerValueField = new FixedBitSizeValueField(32, true, false); @@ -114,15 +110,17 @@ public class SetRegisterValueDialog extends DialogComponentProvider { gbc.insets = new Insets(5, 5, 1, 5); gbc.gridx = 0; gbc.gridy = 0; - panel.add(regLabel, gbc); + panel.add(new GLabel("Register:"), gbc); gbc.gridy = 1; if (useValueField) { - panel.add(valueLabel, gbc); + panel.add(new GLabel("Value:"), gbc); } gbc.gridy = 2; gbc.anchor = GridBagConstraints.NORTHWEST; gbc.insets = new Insets(10, 5, 1, 5); + GLabel addressLabel = new GLabel("Address(es):"); + addressLabel.setVerticalAlignment(SwingConstants.TOP); panel.add(addressLabel, gbc); gbc.insets = new Insets(5, 5, 1, 5); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchDialog.java index c71d51e572..85dbc20ec0 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchDialog.java @@ -21,8 +21,10 @@ import java.awt.Component; import javax.swing.*; import javax.swing.border.TitledBorder; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; import docking.help.HelpService; +import docking.widgets.label.GLabel; import docking.widgets.textfield.IntegerTextField; import ghidra.app.plugin.core.scalartable.RangeFilterTextField.FilterType; import ghidra.framework.plugintool.PluginTool; @@ -325,13 +327,13 @@ public class ScalarSearchDialog extends DialogComponentProvider { setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS)); add(Box.createHorizontalStrut(4)); - add(DockingUtils.createNonHtmlLabel("Min:")); + add(new GLabel("Min:")); add(Box.createHorizontalStrut(5)); add(createMinFilterWidget()); add(Box.createHorizontalStrut(10)); - add(DockingUtils.createNonHtmlLabel("Max:")); + add(new GLabel("Max:")); add(Box.createHorizontalStrut(5)); add(createMaxFilterWidget()); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchProvider.java index fe93ac93e4..fe086c071d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchProvider.java @@ -26,6 +26,7 @@ import docking.*; import docking.action.*; import docking.help.HelpService; import docking.tool.util.DockingToolConstants; +import docking.widgets.label.GLabel; import docking.widgets.table.GTableFilterPanel; import docking.widgets.table.TableFilter; import ghidra.app.events.ProgramSelectionPluginEvent; @@ -331,7 +332,7 @@ public class ScalarSearchProvider extends ComponentProviderAdapter setBorder(lowerBorder); add(Box.createHorizontalStrut(4)); - add(DockingUtils.createNonHtmlLabel("Min:")); + add(new GLabel("Min:")); add(Box.createHorizontalStrut(19)); minField = createFilterWidget(FilterType.MIN); @@ -339,7 +340,7 @@ public class ScalarSearchProvider extends ComponentProviderAdapter add(Box.createHorizontalStrut(10)); - add(DockingUtils.createNonHtmlLabel("Max:")); + add(new GLabel("Max:")); add(Box.createHorizontalStrut(5)); maxField = createFilterWidget(FilterType.MAX); add(maxField.getComponent()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/KeyBindingInputDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/KeyBindingInputDialog.java index 86e7e166e0..d986d66a5e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/KeyBindingInputDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/KeyBindingInputDialog.java @@ -21,6 +21,7 @@ import java.awt.Component; import javax.swing.*; import docking.*; +import docking.widgets.label.GLabel; import ghidra.framework.plugintool.Plugin; import ghidra.util.HelpLocation; import ghidra.util.ReservedKeyBindings; @@ -34,7 +35,6 @@ class KeyBindingInputDialog extends DialogComponentProvider implements KeyEntryL Plugin plugin, HelpLocation help) { super("Assign Script Key Binding", true, true, true, false); - JLabel label = DockingUtils.createNonHtmlLabel(scriptName); kbField = new KeyEntryTextField(20, this); kbField.setName("KEY_BINDING"); kbField.setText( @@ -42,7 +42,7 @@ class KeyBindingInputDialog extends DialogComponentProvider implements KeyEntryL JPanel panel = new JPanel(new BorderLayout(10, 10)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - panel.add(label, BorderLayout.NORTH); + panel.add(new GLabel(scriptName), BorderLayout.NORTH); panel.add(kbField, BorderLayout.CENTER); addWorkPanel(panel); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/SaveDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/SaveDialog.java index a71e97aa97..d7683d80a7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/SaveDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/SaveDialog.java @@ -25,8 +25,10 @@ import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; import docking.widgets.MultiLineLabel; +import docking.widgets.label.GLabel; import docking.widgets.list.ListPanel; import generic.jar.ResourceFile; import generic.util.Path; @@ -99,12 +101,11 @@ public class SaveDialog extends DialogComponentProvider implements ListSelection } private JPanel buildNamePanel() { - JLabel label = DockingUtils.createNonHtmlLabel("Enter script file name:"); nameField = new JTextField(20); nameField.setText(scriptFile == null ? "" : scriptFile.getName()); JPanel panel = new JPanel(new BorderLayout(10, 10)); - panel.add(label, BorderLayout.NORTH); + panel.add(new GLabel("Enter script file name:"), BorderLayout.NORTH); panel.add(nameField, BorderLayout.CENTER); return panel; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/AsciiSearchFormat.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/AsciiSearchFormat.java index 5acf4a0f08..6334cf6d15 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/AsciiSearchFormat.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/AsciiSearchFormat.java @@ -27,7 +27,8 @@ import javax.swing.border.TitledBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import docking.DockingUtils; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GDLabel; import ghidra.util.StringUtilities; public class AsciiSearchFormat extends SearchFormat { @@ -55,9 +56,9 @@ public class AsciiSearchFormat extends SearchFormat { changeListener.stateChanged(new ChangeEvent(this)); } }; - searchType = DockingUtils.createNonHtmlLabel("Encoding: "); + searchType = new GDLabel("Encoding: "); - encodingCB = new JComboBox<>(supportedCharsets); + encodingCB = new GComboBox<>(supportedCharsets); encodingCB.setName("Encoding Options"); encodingCB.setSelectedIndex(0); encodingCB.addActionListener(al); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/MemSearchDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/MemSearchDialog.java index 4428c61be3..a46098ca1f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/MemSearchDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/MemSearchDialog.java @@ -28,6 +28,8 @@ import javax.swing.text.*; import docking.*; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.util.*; @@ -294,10 +296,8 @@ class MemSearchDialog extends DialogComponentProvider { JPanel labelPanel = new JPanel(); labelPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); labelPanel.setLayout(new GridLayout(0, 1)); - JLabel valueLabel = DockingUtils.createNonHtmlLabel("Search Value: "); - labelPanel.add(valueLabel); - JLabel hexSeqLabel = DockingUtils.createNonHtmlLabel("Hex Sequence: "); - labelPanel.add(hexSeqLabel); + labelPanel.add(new GLabel("Search Value: ")); + labelPanel.add(new GLabel("Hex Sequence: ")); JPanel inputPanel = new JPanel(); inputPanel.setLayout(new GridLayout(0, 1)); @@ -315,7 +315,7 @@ class MemSearchDialog extends DialogComponentProvider { }); inputPanel.add(valueComboBox); - hexSeqField = DockingUtils.createNonHtmlLabel(); + hexSeqField = new GDLabel(); hexSeqField.setName("HexSequenceField"); hexSeqField.setBorder(BorderFactory.createLoweredBevelBorder()); inputPanel.add(hexSeqField); @@ -468,7 +468,7 @@ class MemSearchDialog extends DialogComponentProvider { } private Component buildAlignmentPanel() { - alignLabel = DockingUtils.createNonHtmlLabel("Alignment: "); + alignLabel = new GDLabel("Alignment: "); alignField = new JTextField(5); alignField.setName("Alignment"); alignField.setText("0"); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchtext/SearchTextDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchtext/SearchTextDialog.java index 5a9f9525d5..cbef2b66dc 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchtext/SearchTextDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchtext/SearchTextDialog.java @@ -27,6 +27,7 @@ import javax.swing.text.*; import docking.*; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GLabel; import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.program.util.*; @@ -216,7 +217,6 @@ class SearchTextDialog extends DialogComponentProvider { panel.setBorder(BorderFactory.createEmptyBorder(4, 4, 10, 4)); panel.setLayout(new BorderLayout()); - JLabel searchLabel = DockingUtils.createNonHtmlLabel("Search for:"); valueComboBox = new GhidraComboBox<>(); valueComboBox.setEditable(true); valueField = (JTextField) valueComboBox.getEditor().getEditorComponent(); @@ -240,7 +240,7 @@ class SearchTextDialog extends DialogComponentProvider { JPanel searchPanel = new JPanel(); BoxLayout bl = new BoxLayout(searchPanel, BoxLayout.X_AXIS); searchPanel.setLayout(bl); - searchPanel.add(searchLabel); + searchPanel.add(new GLabel("Search for:")); searchPanel.add(Box.createHorizontalStrut(5)); searchPanel.add(valueComboBox); JPanel outerPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/select/SelectBlockDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/select/SelectBlockDialog.java index be9d952085..9d0dfcecff 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/select/SelectBlockDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/select/SelectBlockDialog.java @@ -22,7 +22,9 @@ import java.math.BigInteger; import javax.swing.*; -import docking.*; +import docking.ComponentProvider; +import docking.DialogComponentProvider; +import docking.widgets.label.GLabel; import docking.widgets.textfield.IntegerTextField; import ghidra.app.nav.Navigatable; import ghidra.app.nav.NavigationUtils; @@ -90,13 +92,13 @@ class SelectBlockDialog extends DialogComponentProvider { gbc.gridx = 0; gbc.gridy = 0; - main.add(DockingUtils.createNonHtmlLabel("Ending Address:"), gbc); + main.add(new GLabel("Ending Address:"), gbc); gbc.gridx++; toAddressField = new JTextField(10); main.add(toAddressField, gbc); gbc.gridx = 0; gbc.gridy++; - main.add(DockingUtils.createNonHtmlLabel("Length: "), gbc); + main.add(new GLabel("Length: "), gbc); gbc.gridx++; numberInputField = new IntegerTextField(10); numberInputField.setMaxValue(BigInteger.valueOf(Integer.MAX_VALUE)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/SearchStringDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/SearchStringDialog.java index 9db883233c..e8128003e8 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/SearchStringDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/SearchStringDialog.java @@ -25,9 +25,9 @@ import javax.swing.*; import javax.swing.border.TitledBorder; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.options.editor.ButtonPanelFactory; import docking.widgets.filechooser.GhidraFileChooser; +import docking.widgets.label.GLabel; import docking.widgets.textfield.IntegerTextField; import ghidra.app.util.HelpTopics; import ghidra.program.model.address.AddressSetView; @@ -179,7 +179,7 @@ public class SearchStringDialog extends DialogComponentProvider { JPanel panel = new JPanel(new PairLayout(10, 2)); - JLabel minLengthLabel = DockingUtils.createNonHtmlLabel("Minimum Length: "); + JLabel minLengthLabel = new GLabel("Minimum Length: "); minLengthLabel.setName("minLen"); minLengthLabel.setToolTipText("Searches for valid ascii or ascii unicode strings " + "greater or equal to minimum search length.
The null characters are not included " + @@ -190,7 +190,7 @@ public class SearchStringDialog extends DialogComponentProvider { minLengthField.getComponent().setName("minDefault"); panel.add(minLengthField.getComponent()); - JLabel alignLabel = DockingUtils.createNonHtmlLabel("Alignment: "); + JLabel alignLabel = new GLabel("Alignment: "); alignLabel.setName("alignment"); alignLabel.setToolTipText( "Searches for strings that start on the given alignment
" + @@ -213,7 +213,7 @@ public class SearchStringDialog extends DialogComponentProvider { */ private void createModelFieldPanel(JPanel panel) { - JLabel modelLabel = DockingUtils.createNonHtmlLabel("Word Model: "); + JLabel modelLabel = new GLabel("Word Model: "); modelLabel.setName("wordModel"); modelLabel.setToolTipText( "" + "Strings Analyzer model used to detect high-confidence words.
" + diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/StringTableProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/StringTableProvider.java index 0309e57a4c..6e25919796 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/StringTableProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/StringTableProvider.java @@ -25,6 +25,7 @@ import javax.swing.*; import docking.ActionContext; import docking.DockingUtils; import docking.action.*; +import docking.widgets.label.GLabel; import docking.widgets.table.*; import docking.widgets.table.threaded.ThreadedTableModel; import docking.widgets.textfield.IntegerTextField; @@ -377,12 +378,10 @@ public class StringTableProvider extends ComponentProviderAdapter implements Dom } private Component buildOffsetPanel() { - JLabel offsetLabel = DockingUtils.createNonHtmlLabel("Offset: "); offsetField = new IntegerTextField(4, 0L); offsetField.setAllowNegativeValues(false); offsetField.addChangeListener(e -> updatePreview()); - JLabel previewLabel = DockingUtils.createNonHtmlLabel("Preview: "); preview = new JTextField(5); preview.setEditable(false); preview.setEnabled(false); @@ -402,7 +401,7 @@ public class StringTableProvider extends ComponentProviderAdapter implements Dom panel.add(Box.createHorizontalStrut(60), gbc); gbc.gridx = 2; - panel.add(offsetLabel, gbc); + panel.add(new GLabel("Offset: "), gbc); gbc.gridx = 3; panel.add(offsetField.getComponent(), gbc); @@ -411,7 +410,7 @@ public class StringTableProvider extends ComponentProviderAdapter implements Dom panel.add(Box.createHorizontalStrut(20), gbc); gbc.gridx = 5; - panel.add(previewLabel, gbc); + panel.add(new GLabel("Preview: "), gbc); gbc.weightx = 1; gbc.gridx = 6; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/EditExternalLocationPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/EditExternalLocationPanel.java index 535b8f0d63..f2140b3147 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/EditExternalLocationPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/EditExternalLocationPanel.java @@ -25,11 +25,12 @@ import javax.swing.border.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import docking.DockingUtils; import docking.DockingWindowManager; import docking.ToolTipManager; import docking.widgets.OptionDialog; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.util.AddressInput; import ghidra.app.util.NamespaceUtils; import ghidra.framework.main.AppInfo; @@ -120,9 +121,7 @@ class EditExternalLocationPanel extends JPanel { topPanel.setBorder( new CompoundBorder(new TitledBorder("External Program"), new EmptyBorder(0, 5, 5, 5))); - JLabel label = DockingUtils.createNonHtmlLabel("Name:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - topPanel.add(label); + topPanel.add(new GLabel("Name:", SwingConstants.RIGHT)); extLibNameComboBox = new GhidraComboBox<>(); extLibNameComboBox.setEditable(true); nameDocumentListener = new DocumentListener() { @@ -170,38 +169,28 @@ class EditExternalLocationPanel extends JPanel { buttonPanel.add(editButton); pathPanel.add(buttonPanel, BorderLayout.EAST); - label = DockingUtils.createNonHtmlLabel("Path:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - topPanel.add(label); + topPanel.add(new GLabel("Path:", SwingConstants.RIGHT)); topPanel.add(pathPanel); JPanel bottomPanel = new JPanel(new PairLayout(10, 10, 160)); bottomPanel.setBorder( new CompoundBorder(new TitledBorder("External Location"), new EmptyBorder(0, 5, 5, 5))); - label = DockingUtils.createNonHtmlLabel("Type:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - bottomPanel.add(label); + bottomPanel.add(new GLabel("Type:", SwingConstants.RIGHT)); - extTypeLabel = DockingUtils.createNonHtmlLabel("Function"); + extTypeLabel = new GDLabel("Function"); bottomPanel.add(extTypeLabel); - label = DockingUtils.createNonHtmlLabel("Label:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - bottomPanel.add(label); + bottomPanel.add(new GDLabel("Label:", SwingConstants.RIGHT)); extLabelTextField = new JTextField(); bottomPanel.add(extLabelTextField); - label = DockingUtils.createNonHtmlLabel("Address:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - bottomPanel.add(label); + bottomPanel.add(new GLabel("Address:", SwingConstants.RIGHT)); extAddressInputWidget = new AddressInput(); bottomPanel.add(extAddressInputWidget); if (startingOriginalName != null) { - label = DockingUtils.createNonHtmlLabel("Original Label:"); - label.setHorizontalAlignment(SwingConstants.RIGHT); - bottomPanel.add(label); + bottomPanel.add(new GLabel("Original Label:", SwingConstants.RIGHT)); bottomPanel.add(buildOriginalLableFieldAndRestoreButton()); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/FilterDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/FilterDialog.java index 72be4a705e..52ed97852b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/FilterDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/FilterDialog.java @@ -24,7 +24,10 @@ import javax.swing.*; import org.jdom.Element; -import docking.*; +import docking.ComponentProvider; +import docking.DialogComponentProvider; +import docking.widgets.label.GHtmlLabel; +import docking.widgets.label.GIconLabel; import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.util.*; @@ -160,16 +163,15 @@ public class FilterDialog extends DialogComponentProvider { JPanel infoPanel = new JPanel(new HorizontalLayout(20)); Icon icon = ResourceManager.loadImage("images/information.png"); - JLabel infoLabel = DockingUtils.createHtmlLabel( + infoPanel.add(new GIconLabel(icon)); + infoPanel.add(new GHtmlLabel( HTMLUtilities.toHTML("Advanced filters do not apply to all symbol types.\n" + "All symbols without applicable advanced filters will\n" + "be included. If more than one advanced filter is\n" + "applicable to a symbol type, then those symbols will\n" + "be included if any of the applicable filters match. \n" + "Filters that are not applicable to any of the selected\n" + - "symbol types are disabled.")); - infoPanel.add(DockingUtils.createNonHtmlLabel(icon)); - infoPanel.add(infoLabel); + "symbol types are disabled."))); JPanel filtersPanel = new JPanel(new GridLayout(0, 2)); // Border outer = BorderFactory.createEmptyBorder(0,40,0,0); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/totd/TipOfTheDayDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/totd/TipOfTheDayDialog.java index cda763d3bf..884d8f6c35 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/totd/TipOfTheDayDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/totd/TipOfTheDayDialog.java @@ -22,7 +22,9 @@ import java.util.List; import javax.swing.*; import javax.swing.border.Border; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; +import docking.widgets.label.GLabel; import resources.ResourceManager; class TipOfTheDayDialog extends DialogComponentProvider { @@ -47,10 +49,6 @@ class TipOfTheDayDialog extends DialogComponentProvider { ImageIcon tipIcon = ResourceManager.loadImage("images/help-hint.png"); - JLabel label = - DockingUtils.createNonHtmlLabel("Did you know...", tipIcon, SwingConstants.LEFT); - label.setFont(new Font("dialog", Font.BOLD, 12)); - tipArea = new JTextArea(4, 30); tipArea.setEditable(false); tipArea.setFont(new Font("dialog", Font.PLAIN, 12)); @@ -98,7 +96,11 @@ class TipOfTheDayDialog extends DialogComponentProvider { BorderFactory.createLineBorder(Color.BLACK)); panel.setBorder(panelBorder); panel.setBackground(Color.WHITE); + + JLabel label = new GLabel("Did you know...", tipIcon, SwingConstants.LEFT); + label.setFont(new Font("dialog", Font.BOLD, 12)); panel.add(label, BorderLayout.NORTH); + panel.add(tipScroll, BorderLayout.CENTER); JPanel panel2 = new JPanel(new BorderLayout(5, 5)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DbViewerComponent.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DbViewerComponent.java index 46de61bf07..3d163f1a9b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DbViewerComponent.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DbViewerComponent.java @@ -26,7 +26,9 @@ import javax.swing.*; import javax.swing.table.TableModel; import db.*; -import docking.DockingUtils; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import docking.widgets.table.GTable; import ghidra.app.plugin.debug.dbtable.*; import ghidra.util.Msg; @@ -59,11 +61,11 @@ class DbViewerComponent extends JPanel { JPanel northPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel subNorthPanel = new JPanel(new PairLayout(4, 10)); - subNorthPanel.add(DockingUtils.createNonHtmlLabel("Database:")); - dbLabel = DockingUtils.createNonHtmlLabel(); + subNorthPanel.add(new GLabel("Database:")); + dbLabel = new GDLabel(); subNorthPanel.add(dbLabel); - subNorthPanel.add(DockingUtils.createNonHtmlLabel("Tables:")); - combo = new JComboBox<>(); + subNorthPanel.add(new GLabel("Tables:")); + combo = new GComboBox<>(); combo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -226,9 +228,9 @@ class DbViewerComponent extends JPanel { size += " / " + Integer.toString(stats[1].size / 1024); } } - JLabel statsLabel = DockingUtils.createNonHtmlLabel( - recCnt + " " + intNodeCnt + " " + recNodeCnt + " " + chainBufCnt + " " + size); - panel.add(statsLabel, BorderLayout.SOUTH); + panel.add(new GLabel( + recCnt + " " + intNodeCnt + " " + recNodeCnt + " " + chainBufCnt + " " + size), + BorderLayout.SOUTH); return panel; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/ShowMemoryDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/ShowMemoryDialog.java index 222b7ed9a0..5c5afa1140 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/ShowMemoryDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/ShowMemoryDialog.java @@ -22,7 +22,8 @@ import java.text.DecimalFormat; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.util.layout.PairLayout; class ShowMemoryDialog extends DialogComponentProvider { @@ -81,18 +82,18 @@ class ShowMemoryDialog extends DialogComponentProvider { private JComponent createWorkPanel() { JPanel panel = new JPanel(new PairLayout()); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - maxMem = DockingUtils.createNonHtmlLabel("00000000000", SwingConstants.RIGHT); - totalMem = DockingUtils.createNonHtmlLabel("00000000000", SwingConstants.RIGHT); - freeMem = DockingUtils.createNonHtmlLabel("00000000000", SwingConstants.RIGHT); - usedMem = DockingUtils.createNonHtmlLabel("00000000000", SwingConstants.RIGHT); + maxMem = new GDLabel("00000000000", SwingConstants.RIGHT); + totalMem = new GDLabel("00000000000", SwingConstants.RIGHT); + freeMem = new GDLabel("00000000000", SwingConstants.RIGHT); + usedMem = new GDLabel("00000000000", SwingConstants.RIGHT); - panel.add(DockingUtils.createNonHtmlLabel("Max Memory:")); + panel.add(new GLabel("Max Memory:")); panel.add(maxMem); - panel.add(DockingUtils.createNonHtmlLabel("Total Memory:")); + panel.add(new GLabel("Total Memory:")); panel.add(totalMem); - panel.add(DockingUtils.createNonHtmlLabel("Free Memory:")); + panel.add(new GLabel("Free Memory:")); panel.add(freeMem); - panel.add(DockingUtils.createNonHtmlLabel("Used Memory:")); + panel.add(new GLabel("Used Memory:")); panel.add(usedMem); return panel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/script/AskDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/script/AskDialog.java index 2b7c201692..8d8ac4885b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/script/AskDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/script/AskDialog.java @@ -21,7 +21,10 @@ import java.util.List; import javax.swing.*; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GDLabel; import generic.util.WindowUtilities; import ghidra.framework.preferences.Preferences; import ghidra.util.NumericUtilities; @@ -73,7 +76,7 @@ public class AskDialog extends DialogComponentProvider { JPanel panel = new JPanel(new BorderLayout(10, 10)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - label = DockingUtils.createNonHtmlLabel(message); + label = new GDLabel(message); panel.add(label, BorderLayout.WEST); if (choices == null) { @@ -85,7 +88,7 @@ public class AskDialog extends DialogComponentProvider { panel.add(textField, BorderLayout.CENTER); } else { - comboField = new JComboBox<>(choices.toArray(new Object[choices.size()])); + comboField = new GComboBox<>(choices.toArray(new Object[choices.size()])); comboField.setEditable(false); comboField.setName("JComboBox"); if (defaultValue != null) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/script/GatherParamPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/script/GatherParamPanel.java index fbfcef2c99..92482a4a29 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/script/GatherParamPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/script/GatherParamPanel.java @@ -23,9 +23,9 @@ import java.util.HashMap; import javax.swing.JPanel; import javax.swing.JTextField; -import docking.DockingUtils; import docking.widgets.filechooser.GhidraFileChooserMode; import docking.widgets.filechooser.GhidraFileChooserPanel; +import docking.widgets.label.GLabel; import ghidra.app.util.AddressInput; public class GatherParamPanel extends JPanel { @@ -98,7 +98,7 @@ public class GatherParamPanel extends JPanel { displayComponent = textField; parameters.put(key, new ParamComponent(displayComponent, type)); } - add(DockingUtils.createNonHtmlLabel(label)); + add(new GLabel(label)); add(displayComponent); shown = false; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/script/MultipleOptionsDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/script/MultipleOptionsDialog.java index 390f6eb19f..3f6c161f0e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/script/MultipleOptionsDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/script/MultipleOptionsDialog.java @@ -24,7 +24,9 @@ import java.util.List; import javax.swing.*; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; +import docking.widgets.label.GLabel; import ghidra.util.Msg; public class MultipleOptionsDialog extends DialogComponentProvider { @@ -69,8 +71,7 @@ public class MultipleOptionsDialog extends DialogComponentProvider { JPanel panel = new JPanel(new GridLayout(0, 1)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - JLabel label = DockingUtils.createNonHtmlLabel(message); - panel.add(label, BorderLayout.WEST); + panel.add(new GLabel(message), BorderLayout.WEST); if (includeSelectAll) { selectAllGroup = new SelectAllCheckBox(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddEditDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddEditDialog.java index 00668fbfce..8dadf81ea7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddEditDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddEditDialog.java @@ -24,7 +24,8 @@ import javax.swing.border.*; import org.apache.commons.lang3.StringUtils; -import docking.*; +import docking.ComponentProvider; +import docking.DialogComponentProvider; import docking.widgets.combobox.GhidraComboBox; import ghidra.app.cmd.label.*; import ghidra.framework.cmd.CompoundCmd; @@ -427,9 +428,7 @@ public class AddEditDialog extends DialogComponentProvider { */ private JPanel create() { labelNameChoices = new GhidraComboBox<>(); - DockingUtils.turnOffHTMLRendering(labelNameChoices); GhidraComboBox comboBox = new GhidraComboBox<>(); - DockingUtils.turnOffHTMLRendering(comboBox); comboBox.setEnterKeyForwarding(true); namespaceChoices = comboBox; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressInput.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressInput.java index 622a5664bc..cce0720f42 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressInput.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressInput.java @@ -25,7 +25,7 @@ import java.util.Comparator; import javax.swing.*; import javax.swing.event.*; -import docking.DockingUtils; +import docking.widgets.combobox.GComboBox; import ghidra.program.model.address.*; /** @@ -67,9 +67,8 @@ public class AddressInput extends JPanel { setLayout(new BorderLayout()); textField = new JTextField(10); textField.setName("JTextField");//for JUnits... - combo = new JComboBox<>(); + combo = new GComboBox<>(); combo.setName("JComboBox");//for JUnits... - DockingUtils.turnOffHTMLRendering(combo); add(textField, BorderLayout.CENTER); //add(combo, BorderLayout.WEST); comboAdded = false; @@ -196,7 +195,7 @@ public class AddressInput extends JPanel { // We don't want to let users create functions in certain memory spaces (eg: OTHER), // so don't populate the model with them. if (!spaces[i].isLoadedMemorySpace()) { - //continue; + continue; } String s = spaces[i].toString(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressSetEditorPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressSetEditorPanel.java index 673aa3e1cb..52b0d42825 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressSetEditorPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressSetEditorPanel.java @@ -24,7 +24,7 @@ import java.util.List; import javax.swing.*; import javax.swing.event.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.program.model.address.*; import ghidra.util.layout.MiddleLayout; import resources.ResourceManager; @@ -63,7 +63,7 @@ public class AddressSetEditorPanel extends JPanel { private JPanel createAddRangePanel() { JPanel minAddressPanel = new JPanel(); minAddressPanel.setLayout(new BorderLayout()); - JLabel minLabel = DockingUtils.createNonHtmlLabel("Min:"); + JLabel minLabel = new GDLabel("Min:"); minLabel.setToolTipText("Enter minimum address to add or remove"); minAddressPanel.add(minLabel, BorderLayout.WEST); minAddressField = new AddressInput(); @@ -79,7 +79,7 @@ public class AddressSetEditorPanel extends JPanel { JPanel maxAddressPanel = new JPanel(); maxAddressPanel.setLayout(new BorderLayout()); - JLabel maxLabel = DockingUtils.createNonHtmlLabel("Max:"); + JLabel maxLabel = new GDLabel("Max:"); maxLabel.setToolTipText("Enter maximum address to add or remove"); maxAddressPanel.add(maxLabel, BorderLayout.WEST); maxAddressField = new AddressInput(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/BlockPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/BlockPanel.java index 80d9f05b19..964e5660e9 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/BlockPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/BlockPanel.java @@ -21,7 +21,7 @@ import java.awt.event.ComponentListener; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.app.util.viewer.util.AddressPixelMap; import ghidra.program.model.mem.MemoryBlock; @@ -94,7 +94,7 @@ public class BlockPanel extends JPanel implements ComponentListener { } for (MemoryBlock block : blocks) { - JLabel label = DockingUtils.createNonHtmlLabel(block.getName()); + JLabel label = new GDLabel(block.getName()); label.setFont(FONT); label.setHorizontalAlignment(SwingConstants.CENTER); label.setToolTipText(block.getName()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/OptionsEditorPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/OptionsEditorPanel.java index 6d92524bd8..ff283697e5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/OptionsEditorPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/OptionsEditorPanel.java @@ -27,8 +27,9 @@ import javax.swing.event.DocumentListener; import org.apache.commons.collections4.map.LazyMap; -import docking.DockingUtils; import docking.DockingWindowManager; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GLabel; import docking.widgets.textfield.IntegerTextField; import ghidra.app.util.opinion.AbstractLibrarySupportLoader; import ghidra.app.util.opinion.LibraryPathsDialog; @@ -71,7 +72,7 @@ public class OptionsEditorPanel extends JPanel { panel.setBorder(createBorder(group)); for (Option option : optionGroup) { - panel.add(DockingUtils.createNonHtmlLabel(option.getName(), SwingConstants.RIGHT)); + panel.add(new GLabel(option.getName(), SwingConstants.RIGHT)); Component editorComponent = getEditorComponent(option); editorComponent.setName(option.getName()); // set the component name to the option name panel.add(editorComponent); @@ -234,8 +235,7 @@ public class OptionsEditorPanel extends JPanel { } private Component getAddressSpaceEditorComponent(Option option) { - JComboBox combo = new JComboBox<>(); - DockingUtils.turnOffHTMLRendering(combo); + JComboBox combo = new GComboBox<>(); AddressFactory addressFactory = addressFactoryService.getAddressFactory(); AddressSpace[] spaces = addressFactory == null ? new AddressSpace[0] : addressFactory.getAddressSpaces(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SelectLanguagePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SelectLanguagePanel.java index b48ce1c38f..0754c172a5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SelectLanguagePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SelectLanguagePanel.java @@ -28,7 +28,7 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.table.TableColumnModel; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import docking.widgets.table.AbstractSortedTableModel; import docking.widgets.table.TableSortingContext; import ghidra.program.model.lang.*; @@ -110,7 +110,7 @@ public class SelectLanguagePanel extends JPanel { }); JPanel filterPanel = new JPanel(new BorderLayout()); - filterPanel.add(DockingUtils.createNonHtmlLabel("Filter:"), BorderLayout.WEST); + filterPanel.add(new GLabel("Filter:"), BorderLayout.WEST); filterPanel.add(filterField, BorderLayout.CENTER); setLayout(new BorderLayout(10, 10)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SetEquateDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SetEquateDialog.java index b3a9060910..190b1d9ace 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SetEquateDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SetEquateDialog.java @@ -28,8 +28,9 @@ import javax.swing.table.TableColumnModel; import org.apache.commons.lang3.StringUtils; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.filter.FilterListener; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import docking.widgets.table.GTableCellRenderingData; import ghidra.app.context.ListingActionContext; /** @@ -223,14 +224,10 @@ public class SetEquateDialog extends DialogComponentProvider { */ protected JPanel buildMainPanel() { - titleLabel = DockingUtils.createNonHtmlLabel("Possible Matches"); + titleLabel = new GDLabel("Possible Matches"); titleLabel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); //long value = scalar.getSignedValue(); - String labelText = "Scalar Value: " + scalar.toString(16, false, true, "0x", "") + " (" + - scalar.toString(10, false, true, "", "") + ")"; - JLabel label = DockingUtils.createNonHtmlLabel(labelText); - label.setName("EquateField"); applyToCurrent = new JRadioButton("Current location", true); applyToCurrent.setName("applyToCurrent"); applyToCurrent.setToolTipText("Apply to current scalar operand only"); @@ -293,7 +290,6 @@ public class SetEquateDialog extends DialogComponentProvider { }); tablePanel.setBorder(BorderFactory.createEmptyBorder(2, 5, 5, 5)); - label.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); filterPanel = new GhidraTableFilterPanel<>(suggestedEquatesTable, model, " Equate String: "); model.addTableModelListener(evt -> updateFilter()); @@ -308,6 +304,11 @@ public class SetEquateDialog extends DialogComponentProvider { filterPanel.addEnterListener(enterListener); JPanel northPanel = new JPanel(new VerticalLayout(2)); + String labelText = "Scalar Value: " + scalar.toString(16, false, true, "0x", "") + " (" + + scalar.toString(10, false, true, "", "") + ")"; + JLabel label = new GLabel(labelText); + label.setName("EquateField"); + label.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); northPanel.add(label); northPanel.add(titleLabel); northPanel.add(filterPanel); @@ -316,7 +317,7 @@ public class SetEquateDialog extends DialogComponentProvider { JPanel scopePanel = new JPanel(new HorizontalLayout(2)); scopePanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 5)); - scopePanel.add(DockingUtils.createNonHtmlLabel("Apply To: ")); + scopePanel.add(new GLabel("Apply To: ")); scopePanel.add(applyToCurrent); scopePanel.add(applyToSelection); scopePanel.add(applyToAll); @@ -324,7 +325,7 @@ public class SetEquateDialog extends DialogComponentProvider { JPanel optionsPanel = new JPanel(new HorizontalLayout(2)); optionsPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); - optionsPanel.add(DockingUtils.createNonHtmlLabel("Options: ")); + optionsPanel.add(new GLabel("Options: ")); optionsPanel.add(overwriteExistingEquates); JPanel southPanel = new JPanel(new VerticalLayout(0)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/datatype/ApplyEnumDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/datatype/ApplyEnumDialog.java index 8e8d4ccfff..4988021548 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/datatype/ApplyEnumDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/datatype/ApplyEnumDialog.java @@ -17,7 +17,7 @@ package ghidra.app.util.datatype; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.data.DataTypeManager; import ghidra.util.data.DataTypeParser; @@ -38,16 +38,16 @@ public class ApplyEnumDialog extends DataTypeSelectionDialog { updatedPanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 10, 0)); updatedPanel.setLayout(new VerticalLayout(5)); - JLabel label = DockingUtils.createNonHtmlLabel("Choose an Enum data type to apply."); - label.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); - JCheckBox subOpCB = new JCheckBox("Apply to sub-operands", shouldApplyOnSubOps); subOpCB.setName("subOpCB"); subOpCB.setToolTipText("Applies this enum to the 'nested scalars'."); subOpCB.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); subOpCB.addActionListener(evt -> shouldApplyOnSubOps = subOpCB.isSelected()); + GLabel label = new GLabel("Choose an Enum data type to apply."); + label.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); updatedPanel.add(label); + updatedPanel.add(dtEditor.getEditorComponent()); updatedPanel.add(subOpCB); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/dialog/AskAddrDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/dialog/AskAddrDialog.java index 41810db39d..04f7e3cd4d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/dialog/AskAddrDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/dialog/AskAddrDialog.java @@ -16,14 +16,17 @@ package ghidra.app.util.dialog; import java.awt.BorderLayout; -import java.lang.reflect.InvocationTargetException; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; +import docking.widgets.label.GLabel; import ghidra.app.util.AddressInput; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressFactory; +import ghidra.util.SystemUtilities; public class AskAddrDialog extends DialogComponentProvider { private boolean isCanceled; @@ -43,7 +46,7 @@ public class AskAddrDialog extends DialogComponentProvider { JPanel panel = new JPanel(new BorderLayout(10, 10)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - panel.add(DockingUtils.createNonHtmlLabel(message), BorderLayout.WEST); + panel.add(new GLabel(message), BorderLayout.WEST); panel.add(addrInput, BorderLayout.CENTER); addWorkPanel(panel); @@ -51,23 +54,8 @@ public class AskAddrDialog extends DialogComponentProvider { addCancelButton(); setDefaultButton(okButton); - if (SwingUtilities.isEventDispatchThread()) { - DockingWindowManager.showDialog(null, this); - } - else { - try { - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - DockingWindowManager.showDialog(null, AskAddrDialog.this); - } - }); - } - catch (InterruptedException e) { - } - catch (InvocationTargetException e) { - } - } + SystemUtilities.runSwingNow( + () -> DockingWindowManager.showDialog(null, AskAddrDialog.this)); } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/dialog/CheckoutDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/dialog/CheckoutDialog.java index 158199d9e2..0e41c8b2ad 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/dialog/CheckoutDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/dialog/CheckoutDialog.java @@ -21,9 +21,11 @@ import java.awt.event.ActionListener; import javax.swing.*; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; import docking.widgets.MultiLineLabel; import docking.widgets.OptionDialog; +import docking.widgets.label.GIconLabel; import ghidra.app.util.HelpTopics; import ghidra.framework.model.DomainFile; import ghidra.framework.remote.User; @@ -106,8 +108,7 @@ public class CheckoutDialog extends DialogComponentProvider { JPanel msgPanel = new JPanel(new BorderLayout()); msgPanel.add( - DockingUtils.createNonHtmlLabel( - OptionDialog.getIconForMessageType(OptionDialog.WARNING_MESSAGE)), + new GIconLabel(OptionDialog.getIconForMessageType(OptionDialog.WARNING_MESSAGE)), BorderLayout.WEST); MultiLineLabel msgText = new MultiLineLabel("File " + df.getName() + diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/AddressFieldOptionsPropertyEditor.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/AddressFieldOptionsPropertyEditor.java index 666a5fe925..d5a39118ce 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/AddressFieldOptionsPropertyEditor.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/AddressFieldOptionsPropertyEditor.java @@ -21,9 +21,9 @@ import java.math.BigInteger; import javax.swing.*; -import docking.DockingUtils; import docking.ToolTipManager; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; import docking.widgets.textfield.IntegerTextField; import ghidra.framework.options.CustomOptionsEditor; import ghidra.util.HTMLUtilities; @@ -75,7 +75,7 @@ public class AddressFieldOptionsPropertyEditor extends PropertyEditorSupport // we want to have a panel with our options so that we may group them together JPanel panel = new JPanel(new PairLayout(6, 10)); - JLabel label = DockingUtils.createNonHtmlLabel(SHOW_BLOCK_NAME_LABEL, SwingConstants.RIGHT); + JLabel label = new GDLabel(SHOW_BLOCK_NAME_LABEL, SwingConstants.RIGHT); ToolTipManager.setToolTipText(label, SHOW_BLOCKNAME_TOOLTIP); panel.add(label); showBlocknameCheckbox = new JCheckBox(); @@ -83,14 +83,14 @@ public class AddressFieldOptionsPropertyEditor extends PropertyEditorSupport panel.add(showBlocknameCheckbox); // the namespace checkbox will disable the text field options when it is not used - label = DockingUtils.createNonHtmlLabel(PADDING_LABEL, SwingConstants.RIGHT); + label = new GDLabel(PADDING_LABEL, SwingConstants.RIGHT); ToolTipManager.setToolTipText(label, ADDRESS_PADDING_TOOLTIP); panel.add(label); padCheckBox = new JCheckBox(); panel.add(padCheckBox); padCheckBox.setSelected(false); ToolTipManager.setToolTipText(padCheckBox, ADDRESS_PADDING_TOOLTIP); - label = DockingUtils.createNonHtmlLabel(ADDRESS_DIGITS_LABEL, SwingConstants.RIGHT); + label = new GDLabel(ADDRESS_DIGITS_LABEL, SwingConstants.RIGHT); ToolTipManager.setToolTipText(label, MIN_HEX_DIGITS_TOOLTIP); panel.add(label); @@ -102,7 +102,7 @@ public class AddressFieldOptionsPropertyEditor extends PropertyEditorSupport panel.add(minDigitsField.getComponent()); - label = DockingUtils.createNonHtmlLabel(JUSTIFICATION_LABEL, SwingConstants.RIGHT); + label = new GDLabel(JUSTIFICATION_LABEL, SwingConstants.RIGHT); ToolTipManager.setToolTipText(label, RIGHT_JUSTIFY_TOOLTIP); panel.add(label); justificationCombobox = new GhidraComboBox<>(new String[] { "Left", "Right" }); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/ArrayElementPropertyEditor.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/ArrayElementPropertyEditor.java index 939048e6ff..a560dee40b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/ArrayElementPropertyEditor.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/ArrayElementPropertyEditor.java @@ -26,8 +26,8 @@ import javax.swing.border.TitledBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import docking.DockingUtils; import docking.ToolTipManager; +import docking.widgets.label.GDLabel; import docking.widgets.textfield.IntegerTextField; import ghidra.framework.options.CustomOptionsEditor; import ghidra.util.HTMLUtilities; @@ -103,7 +103,7 @@ public class ArrayElementPropertyEditor extends PropertyEditorSupport JPanel textFieldPanel = new JPanel(); textFieldPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); - elementsLabel = DockingUtils.createNonHtmlLabel(labelText); + elementsLabel = new GDLabel(labelText); textFieldPanel.add(elementsLabel); textFieldPanel.add(textField.getComponent()); textField.addChangeListener(new ChangeListener() { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/format/FieldHeaderComp.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/format/FieldHeaderComp.java index 75e1613173..2a063a232e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/format/FieldHeaderComp.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/format/FieldHeaderComp.java @@ -21,9 +21,9 @@ import java.awt.event.*; import javax.swing.*; import javax.swing.border.Border; -import docking.DockingUtils; import docking.help.Help; import docking.help.HelpService; +import docking.widgets.label.GDLabel; import ghidra.app.util.viewer.field.FieldFactory; import ghidra.util.HelpLocation; @@ -73,7 +73,7 @@ public class FieldHeaderComp extends JPanel { Border border1 = BorderFactory.createRaisedBevelBorder(); Border border2 = BorderFactory.createEmptyBorder(0, 0, 1, 1); - label = DockingUtils.createNonHtmlLabel("Test"); + label = new GDLabel("Test"); label.setOpaque(true); label.setHorizontalAlignment(SwingConstants.CENTER); buttonColor = label.getBackground(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/options/OptionsGui.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/options/OptionsGui.java index 4d58561dec..598159674c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/options/OptionsGui.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/options/OptionsGui.java @@ -26,11 +26,13 @@ import java.util.List; import javax.swing.*; import javax.swing.border.Border; +import docking.widgets.combobox.GComboBox; import docking.widgets.fieldpanel.*; import docking.widgets.fieldpanel.field.*; import docking.widgets.fieldpanel.listener.LayoutModelListener; import docking.widgets.fieldpanel.support.*; import docking.widgets.indexedscrollpane.IndexedScrollPane; +import docking.widgets.label.GDLabel; import ghidra.GhidraOptions; import ghidra.util.SystemUtilities; @@ -338,12 +340,12 @@ public class OptionsGui extends JPanel { GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment(); String envfonts[] = gEnv.getAvailableFontFamilyNames(); - fontNameField = new JComboBox<>(envfonts); + fontNameField = new GComboBox<>(envfonts); fontNameField.setBackground(Color.white); fontNameField.setRenderer(new FontRenderer()); panel1.add(fontNameField); - fontSizeField = new JComboBox<>(fontSizes); + fontSizeField = new GComboBox<>(fontSizes); fontSizeField.setBackground(Color.white); panel1.add(fontSizeField); panel.add(panel1, BorderLayout.NORTH); @@ -361,7 +363,7 @@ public class OptionsGui extends JPanel { } //Displays the font field with the actual fonts for easier selection - class FontRenderer extends JLabel implements ListCellRenderer { + class FontRenderer extends GDLabel implements ListCellRenderer { private static final long serialVersionUID = 1L; private final Color SELECTED_COLOR = new Color(10, 36, 106); @@ -372,7 +374,7 @@ public class OptionsGui extends JPanel { @Override public Component getListCellRendererComponent(JList list, String value, int index, boolean isSelected, boolean cellHasFocus) { - setText(value.toString()); + setText(value); Font origFont = fontNameField.getFont(); setFont(new Font(value.toString(), origFont.getStyle(), origFont.getSize())); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/TitledPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/TitledPanel.java index 914626b118..d99bccbf48 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/TitledPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/TitledPanel.java @@ -21,7 +21,7 @@ import java.util.List; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; /** * Adds a border to a component that displays a title and provides a area for adding @@ -45,9 +45,9 @@ public class TitledPanel extends JPanel { titlePanel = new JPanel(new BorderLayout()); iconPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 1)); iconPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - title = DockingUtils.createNonHtmlLabel(name); + title = new GDLabel(name); title.setToolTipText(name); - JLabel filler = DockingUtils.createNonHtmlLabel(); + JLabel filler = new GDLabel(); filler.setPreferredSize(new Dimension(margin, filler.getPreferredSize().height)); titlePanel.add(filler, BorderLayout.WEST); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/AnalysisRecipeEditor.java b/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/AnalysisRecipeEditor.java index abe3912a29..9692572327 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/AnalysisRecipeEditor.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/AnalysisRecipeEditor.java @@ -24,6 +24,7 @@ import javax.swing.event.ChangeListener; import docking.DockingUtils; import docking.options.editor.ScrollableOptionsEditor; +import docking.widgets.label.GDLabel; import generic.jar.ResourceFile; import ghidra.app.services.Analyzer; import ghidra.framework.analysis.gui.AnalyzerListPanel; @@ -56,7 +57,7 @@ public class AnalysisRecipeEditor { private void buildNoOptionsPanel() { noOptionsPanel = new JPanel(new MiddleLayout()); noOptionsPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); - JLabel label = DockingUtils.createNonHtmlLabel("No options available."); + JLabel label = new GDLabel("No options available."); label.setFont(label.getFont().deriveFont(20f)); noOptionsPanel.add(label); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/AnalyzerListPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/AnalyzerListPanel.java index 59b0ea9c7e..152cbf7bdc 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/AnalyzerListPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/AnalyzerListPanel.java @@ -24,7 +24,7 @@ import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.app.services.Analyzer; import ghidra.framework.analysis.*; @@ -140,8 +140,7 @@ public class AnalyzerListPanel extends JPanel { // panel.setBackground(HEADER_COLOR); //panel.setBorder(BorderFactory.createLineBorder(Color.GRAY)); panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); - panel.add(DockingUtils.createNonHtmlLabel("ANALYZERS", SwingConstants.CENTER), - BorderLayout.CENTER); + panel.add(new GLabel("ANALYZERS", SwingConstants.CENTER), BorderLayout.CENTER); panel.add(buildPhaseHeader(), BorderLayout.EAST); return panel; } @@ -149,9 +148,8 @@ public class AnalyzerListPanel extends JPanel { private Component buildPhaseHeader() { JPanel panel = new JPanel(new BorderLayout()); panel.setBorder(BorderFactory.createEmptyBorder(6, 0, 0, 0)); -// panel.add(DockingUtils.createNonHtmlLabel("START", SwingConstants.CENTER), BorderLayout.NORTH); - panel.add(DockingUtils.createNonHtmlLabel("PHASE", SwingConstants.CENTER), - BorderLayout.SOUTH); +// panel.add(new GLabel("START", SwingConstants.CENTER), BorderLayout.NORTH); + panel.add(new GLabel("PHASE", SwingConstants.CENTER), BorderLayout.SOUTH); Dimension dim = panel.getPreferredSize(); dim.width = getAnalysisPanelPhaseWidth(); panel.setPreferredSize(dim); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/AnalyzerPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/AnalyzerPanel.java index f73de2e6ed..2346de911c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/AnalyzerPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/AnalyzerPanel.java @@ -24,7 +24,7 @@ import javax.swing.*; import javax.swing.border.BevelBorder; import javax.swing.border.Border; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.app.services.Analyzer; import ghidra.app.services.AnalyzerType; import ghidra.framework.analysis.AnalysisPhase; @@ -102,7 +102,7 @@ public class AnalyzerPanel extends JPanel { enabledCheckbox.setSelected(recipe.isAnalyzerEnabled(analyzer)); panel.add(enabledCheckbox, BorderLayout.WEST); - iconLabel = DockingUtils.createNonHtmlLabel(); + iconLabel = new GDLabel(); updateIconLabel(); iconLabel.setBorder(BorderFactory.createEmptyBorder(2, 15, 2, 5)); panel.add(iconLabel, BorderLayout.EAST); @@ -116,11 +116,11 @@ public class AnalyzerPanel extends JPanel { panel.setBorder(BorderFactory.createEmptyBorder(4, 10, 2, 5)); panel.setOpaque(false); - analyzerNameLabel = DockingUtils.createNonHtmlLabel(analyzer.getName()); + analyzerNameLabel = new GDLabel(analyzer.getName()); analyzerNameLabel.setFont(analyzerNameLabel.getFont().deriveFont(18f)); panel.add(analyzerNameLabel, BorderLayout.CENTER); - priorityLabel = DockingUtils.createNonHtmlLabel(analyzer.getPriority().toString()); + priorityLabel = new GDLabel(analyzer.getPriority().toString()); priorityLabel.setHorizontalAlignment(SwingConstants.RIGHT); priorityLabel.setFont(priorityLabel.getFont().deriveFont(10f)); priorityLabel.setForeground(Color.GRAY); @@ -141,7 +141,7 @@ public class AnalyzerPanel extends JPanel { phasePanel.setBorder(BorderFactory.createCompoundBorder(etched, empty)); phasePanel.setOpaque(false); phasePanel.setPreferredSize(new Dimension(60, 0)); - phaseLabel = DockingUtils.createNonHtmlLabel(""); + phaseLabel = new GDLabel(""); //@formatter:off String text = analyzer.getAnalysisType() == AnalyzerType.ONE_SHOT_ANALYZER ? diff --git a/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/GhidraScriptSelectionDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/GhidraScriptSelectionDialog.java index 53ad9bd11d..2171d04430 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/GhidraScriptSelectionDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/framework/analysis/gui/GhidraScriptSelectionDialog.java @@ -20,8 +20,8 @@ import java.awt.*; import javax.swing.*; import javax.swing.border.Border; -import docking.DockingUtils; import docking.widgets.*; +import docking.widgets.label.GLabel; import docking.widgets.textfield.IntegerTextField; import generic.jar.ResourceFile; import ghidra.app.script.GhidraScriptUtil; @@ -52,7 +52,7 @@ public class GhidraScriptSelectionDialog extends ListSelectionDialog(); - DockingUtils.turnOffHTMLRendering(projectComboBox); + projectComboBox = new GComboBox<>(); DefaultComboBoxModel model = new DefaultComboBoxModel<>(); projectComboBox.setModel(model); model.addElement("defaultProject"); @@ -626,7 +628,6 @@ public class DataTreeDialog extends DialogComponentProvider } }); - folderNameLabel = DockingUtils.createNonHtmlLabel(" "); boolean userChoosesName = (type == SAVE) || (type == CREATE); nameField.setEditable(userChoosesName); nameField.setEnabled(userChoosesName); @@ -634,22 +635,18 @@ public class DataTreeDialog extends DialogComponentProvider // don't put the filter in the dialog when the user can/must type a name, as it's confusing treePanel.setTreeFilterEnabled(!userChoosesName); - JLabel nameLabel = null; - if (type == CHOOSE_FOLDER) { - nameLabel = DockingUtils.createNonHtmlLabel("Folder Name:", SwingConstants.RIGHT); - } - else { - nameLabel = DockingUtils.createNonHtmlLabel("Name:", SwingConstants.RIGHT); - } - JPanel namePanel = new JPanel(new PairLayout(2, 5, 100)); if (!userChoosesName) { namePanel.setBorder(BorderFactory.createEmptyBorder(20, 5, 5, 5)); } - namePanel.add(DockingUtils.createNonHtmlLabel("Folder Path:", SwingConstants.RIGHT)); + namePanel.add(new GLabel("Folder Path:", SwingConstants.RIGHT)); + + folderNameLabel = new GDLabel(" "); namePanel.add(folderNameLabel); - namePanel.add(nameLabel); + + namePanel.add( + new GLabel(type == CHOOSE_FOLDER ? "Folder Name:" : "Name:", SwingConstants.RIGHT)); namePanel.add(nameField); outerPanel.add(namePanel, BorderLayout.CENTER); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/framework/main/InfoPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/framework/main/InfoPanel.java index 111bb88423..2e27f4e91e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/framework/main/InfoPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/framework/main/InfoPanel.java @@ -26,6 +26,7 @@ import javax.swing.text.View; import docking.DockingUtils; import docking.widgets.*; +import docking.widgets.label.*; import generic.util.WindowUtilities; import ghidra.framework.Application; import ghidra.framework.ApplicationProperties; @@ -95,6 +96,8 @@ class InfoPanel extends JPanel { private Component buildDistributionLabel() { String content = distributionInfo; + + // Use java native JLabel and let it auto-detect html content JLabel resizer = new JLabel(content); final int desiredTextViewWidth = imageWidth - (MARGIN * 2); @@ -104,7 +107,7 @@ class InfoPanel extends JPanel { if (view == null) { // must not be HTML content in the splash screen text (this shouldn't // happen, but let's just protect against this anyway). - JLabel label = new JLabel(content) { + JLabel label = new GDLabel(content) { @Override public Dimension getPreferredSize() { Dimension preferredSize = super.getPreferredSize(); @@ -119,7 +122,7 @@ class InfoPanel extends JPanel { float w = view.getPreferredSpan(View.X_AXIS); float h = view.getPreferredSpan(View.Y_AXIS); - JLabel distribLabel = new JLabel(content); + JLabel distribLabel = new GHtmlLabel(content); distribLabel.setPreferredSize(new Dimension((int) Math.ceil(w), (int) Math.ceil(h + 10))); return distribLabel; } @@ -150,13 +153,13 @@ class InfoPanel extends JPanel { panel.setBorder(BorderFactory.createEmptyBorder(4, 0, 4, 0)); ImageIcon cloudRevImage = ResourceManager.loadImage(CLOUD_REV_FILENAME); if (cloudRevImage != null) { - JLabel cloudRevLabel = new JLabel(cloudRevImage); + JLabel cloudRevLabel = new GIconLabel(cloudRevImage); panel.add(cloudRevLabel, BorderLayout.NORTH); } ImageIcon cloudImage = ResourceManager.loadImage(CLOUD_FILENAME); if (cloudImage != null) { - JLabel cloudLabel = new JLabel(cloudImage); + JLabel cloudLabel = new GIconLabel(cloudImage); panel.add(cloudLabel, BorderLayout.SOUTH); } @@ -182,7 +185,7 @@ class InfoPanel extends JPanel { imagePanel.setLayout(new BorderLayout()); ImageIcon ghidraSplashImage = ResourceManager.loadImage(GHIDRA_FILENAME); - JLabel l = new JLabel(ghidraSplashImage); + JLabel l = new GIconLabel(ghidraSplashImage); imagePanel.add(l, BorderLayout.CENTER); imageWidth = ghidraSplashImage.getIconWidth(); return imagePanel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterDialog.java index b8872979ad..edc97756c1 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterDialog.java @@ -31,11 +31,11 @@ import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.options.editor.ButtonPanelFactory; import docking.widgets.EmptyBorderButton; import docking.widgets.combobox.GhidraComboBox; import docking.widgets.dialogs.MultiLineMessageDialog; +import docking.widgets.label.GLabel; import docking.widgets.list.GListCellRenderer; import ghidra.app.services.ProgramManager; import ghidra.app.util.*; @@ -156,13 +156,13 @@ public class ImporterDialog extends DialogComponentProvider { private Component buildMainPanel() { JPanel panel = new JPanel(new PairLayout(5, 5)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - panel.add(DockingUtils.createNonHtmlLabel("Format: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Format: ", SwingConstants.RIGHT)); panel.add(buildLoaderChooser()); - panel.add(DockingUtils.createNonHtmlLabel("Language: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Language: ", SwingConstants.RIGHT)); panel.add(buildLanguagePanel()); - panel.add(DockingUtils.createNonHtmlLabel("Destination Folder: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Destination Folder: ", SwingConstants.RIGHT)); panel.add(buildFolderPanel()); - panel.add(DockingUtils.createNonHtmlLabel("Program Name: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Program Name: ", SwingConstants.RIGHT)); panel.add(buildFilenameTextField()); return panel; } @@ -260,7 +260,6 @@ public class ImporterDialog extends DialogComponentProvider { } } loaderComboBox = new GhidraComboBox<>(new Vector<>(set)); - DockingUtils.turnOffHTMLRendering(loaderComboBox); loaderComboBox.addItemListener(e -> selectedLoaderChanged()); loaderComboBox.setEnterKeyForwarding(true); loaderComboBox.setRenderer( diff --git a/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/NewLanguagePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/NewLanguagePanel.java index a3826553a7..91b42e2098 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/NewLanguagePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/NewLanguagePanel.java @@ -23,7 +23,7 @@ import java.util.List; import javax.swing.*; import javax.swing.border.Border; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.program.model.lang.*; import ghidra.program.util.DefaultLanguageService; import ghidra.util.table.*; @@ -64,7 +64,7 @@ public class NewLanguagePanel extends JPanel { tableFilterPanel = new GhidraTableFilterPanel<>(table, tableModel); - descriptionLabel = DockingUtils.createNonHtmlLabel(DEFAULT_DESCRIPTION_TEXT); + descriptionLabel = new GDLabel(DEFAULT_DESCRIPTION_TEXT); descriptionLabel.setFont(descriptionLabel.getFont().deriveFont(Font.ITALIC)); recommendedCheckbox = new JCheckBox("Show Only Recommended Language/Compiler Specs"); @@ -81,7 +81,7 @@ public class NewLanguagePanel extends JPanel { } }); - formatLabel = DockingUtils.createNonHtmlLabel(); + formatLabel = new GDLabel(); formatLabel.setHorizontalAlignment(SwingConstants.CENTER); formatLabel.setForeground(Color.BLUE); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/FSBActionManager.java b/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/FSBActionManager.java index 56a63e8bf5..4e3d06619f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/FSBActionManager.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/FSBActionManager.java @@ -26,12 +26,12 @@ import javax.swing.tree.TreePath; import org.apache.commons.io.FilenameUtils; import docking.ActionContext; -import docking.DockingUtils; import docking.action.*; import docking.widgets.OptionDialog; import docking.widgets.dialogs.MultiLineMessageDialog; import docking.widgets.filechooser.GhidraFileChooser; import docking.widgets.filechooser.GhidraFileChooserMode; +import docking.widgets.label.GIconLabel; import docking.widgets.tree.GTree; import docking.widgets.tree.GTreeNode; import ghidra.app.services.ProgramManager; @@ -693,7 +693,7 @@ class FSBActionManager { } else { SystemUtilities.runSwingLater(() -> { - JLabel label = DockingUtils.createNonHtmlLabel(icon); + JLabel label = new GIconLabel(icon); JOptionPane.showMessageDialog(null, label, "Image Viewer: " + fsrl.getName(), JOptionPane.INFORMATION_MESSAGE); }); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/plugins/importer/batch/BatchImportDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/plugins/importer/batch/BatchImportDialog.java index 73773a4e8d..68e9909c2c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/plugins/importer/batch/BatchImportDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/plugins/importer/batch/BatchImportDialog.java @@ -31,10 +31,11 @@ import javax.swing.event.ListDataListener; import javax.swing.table.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.ListSelectionTableDialog; +import docking.widgets.combobox.GComboBox; import docking.widgets.filechooser.GhidraFileChooser; import docking.widgets.filechooser.GhidraFileChooserMode; +import docking.widgets.label.GDLabel; import docking.widgets.table.*; import ghidra.app.services.ProgramManager; import ghidra.formats.gfilesystem.*; @@ -186,7 +187,7 @@ public class BatchImportDialog extends DialogComponentProvider { sourceListPanel.add(sourceOptionsPanel, BorderLayout.SOUTH); JPanel maxDepthPanel = new JPanel(); - JLabel maxDepthLabel = DockingUtils.createNonHtmlLabel("Depth limit:"); + JLabel maxDepthLabel = new GDLabel("Depth limit:"); String maxDepthTip = "Maximum container (ie. nested zip, tar, etc) depth in the " + "source file to recursively descend into"; maxDepthLabel.setToolTipText(maxDepthTip); @@ -455,8 +456,7 @@ public class BatchImportDialog extends DialogComponentProvider { } private TableCellEditor createFilesColumnCellEditor() { - JComboBox comboBox = new JComboBox<>(); - DockingUtils.turnOffHTMLRendering(comboBox); + JComboBox comboBox = new GComboBox<>(); DefaultCellEditor cellEditor = new DefaultCellEditor(comboBox) { @Override public boolean shouldSelectCell(EventObject anEvent) { @@ -508,7 +508,7 @@ public class BatchImportDialog extends DialogComponentProvider { } private TableCellEditor createLangColumnCellEditor() { - JComboBox comboBox = new JComboBox<>(); + JComboBox comboBox = new GComboBox<>(); DefaultCellEditor cellEditor = new DefaultCellEditor(comboBox) { @Override public boolean shouldSelectCell(EventObject anEvent) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/plugins/importer/batch/BatchProjectDestinationPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/plugins/importer/batch/BatchProjectDestinationPanel.java index 82c4b9ffbb..47eaede348 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/plugins/importer/batch/BatchProjectDestinationPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/plugins/importer/batch/BatchProjectDestinationPanel.java @@ -19,8 +19,8 @@ import java.awt.*; import javax.swing.*; -import docking.DockingUtils; import docking.options.editor.ButtonPanelFactory; +import docking.widgets.label.GDLabel; import ghidra.framework.main.AppInfo; import ghidra.framework.main.DataTreeDialog; import ghidra.framework.model.*; @@ -50,7 +50,7 @@ class BatchProjectDestinationPanel extends JPanel { folderNameTextField.setFocusable(false); folderNameTextField.setText(getProjectRootFolder().toString()); - JLabel folderLabel = DockingUtils.createNonHtmlLabel("Destination Folder"); + JLabel folderLabel = new GDLabel("Destination Folder"); folderLabel.setLabelFor(folderNameTextField); JButton browseButton = ButtonPanelFactory.createButton(ButtonPanelFactory.BROWSE_TYPE); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/util/LaunchErrorDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/util/LaunchErrorDialog.java index f0ef12e564..79b92bd174 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/util/LaunchErrorDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/util/LaunchErrorDialog.java @@ -22,9 +22,9 @@ import java.net.URL; import javax.swing.*; -import docking.DockingUtils; import docking.DockingWindowManager; import docking.widgets.OptionDialog; +import docking.widgets.label.*; import generic.util.WindowUtilities; import ghidra.util.layout.PairLayout; import ghidra.util.layout.VerticalLayout; @@ -75,20 +75,13 @@ public class LaunchErrorDialog extends JDialog { private JPanel createInnerWidgetPanel() { JPanel innerPanel = new JPanel(new BorderLayout()); - Icon icon = OptionDialog.getIconForMessageType(OptionDialog.WARNING_MESSAGE); - JLabel iconLabel = DockingUtils.createNonHtmlLabel(icon); + JLabel iconLabel = + new GIconLabel(OptionDialog.getIconForMessageType(OptionDialog.WARNING_MESSAGE)); iconLabel.setVerticalAlignment(SwingConstants.TOP); JPanel widgetPanel = new JPanel(new VerticalLayout(5)); widgetPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - JLabel messageLabel = - DockingUtils.createHtmlLabel("Unable to launch a viewer for the " + - "manual below.

Click Edit Settings to change the manual " + - "viewer launch settings, or
click " + - "Cancel to abort launching a manual viewer (" + - "See the help (F1) for more information)."); - JTextField urlField = new JTextField(40); urlField.setText(url.toString()); Color backgroundColor = urlField.getBackground(); @@ -96,24 +89,26 @@ public class LaunchErrorDialog extends JDialog { urlField.setBackground(backgroundColor); JTextField fileField = new JTextField(40); - String fileText = (fileURL == null) ? "" : fileURL.toString(); - fileField.setText(fileText); + fileField.setText((fileURL == null) ? "" : fileURL.toString()); fileField.setEditable(false); fileField.setBackground(backgroundColor); JPanel textFieldPanel = new JPanel(new PairLayout(2, 0)); - textFieldPanel.add(DockingUtils.createNonHtmlLabel("URL: ")); + textFieldPanel.add(new GLabel("URL: ")); textFieldPanel.add(urlField); - textFieldPanel.add(DockingUtils.createNonHtmlLabel("File: ")); + textFieldPanel.add(new GLabel("File: ")); textFieldPanel.add(fileField); - JLabel copyLabel = - DockingUtils.createHtmlLabel("Ctrl-C to copy"); - copyLabel.setHorizontalAlignment(SwingConstants.CENTER); - - widgetPanel.add(messageLabel); + widgetPanel.add( + new GHtmlLabel("Unable to launch a viewer for the manual below.

" + + "Click Edit Settings to change the manual viewer launch settings, or
" + + "click Cancel to abort launching a manual viewer (" + + "See the help (F1) for more information).")); widgetPanel.add(Box.createHorizontalStrut(5)); widgetPanel.add(textFieldPanel); + + JLabel copyLabel = new GHtmlLabel("Ctrl-C to copy"); + copyLabel.setHorizontalAlignment(SwingConstants.CENTER); widgetPanel.add(copyLabel); widgetPanel.setMaximumSize(widgetPanel.getPreferredSize()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/util/ManualViewerCommandEditor.java b/Ghidra/Features/Base/src/main/java/ghidra/util/ManualViewerCommandEditor.java index fe178c4bce..1946d36664 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/util/ManualViewerCommandEditor.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/util/ManualViewerCommandEditor.java @@ -27,8 +27,9 @@ import javax.swing.border.BevelBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import docking.DockingUtils; import docking.ToolTipManager; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GDLabel; import ghidra.framework.options.CustomOptionsEditor; import ghidra.util.layout.PairLayout; @@ -204,17 +205,17 @@ public class ManualViewerCommandEditor extends PropertyEditorSupport workPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); workPanel.setLayout(new PairLayout()); - JLabel commandLabel = DockingUtils.createNonHtmlLabel(COMMAND_STRING_LABEL); + JLabel commandLabel = new GDLabel(COMMAND_STRING_LABEL); ToolTipManager.setToolTipText(commandLabel, COMMAND_STRING_DESCRIPTION); commandField = new JTextField(30); - JLabel argumentsLabel = DockingUtils.createNonHtmlLabel(COMMAND_ARGUMENTS_LABEL); + JLabel argumentsLabel = new GDLabel(COMMAND_ARGUMENTS_LABEL); ToolTipManager.setToolTipText(argumentsLabel, COMMAND_ARGUMENTS_DESCRIPTION); argumentsField = new JTextField(20); - JLabel formatLabel = DockingUtils.createNonHtmlLabel(FILE_FORMAT_LABEL); + JLabel formatLabel = new GDLabel(FILE_FORMAT_LABEL); ToolTipManager.setToolTipText(formatLabel, FILE_FORMAT_DESCRIPTION); - fileFormatComboBox = new JComboBox<>(); + fileFormatComboBox = new GComboBox<>(); fileFormatComboBox.addItem( ManualViewerCommandWrappedOption.HTTP_URL_REPLACEMENT_STRING); fileFormatComboBox.addItem( diff --git a/Ghidra/Features/Base/src/main/java/ghidra/util/table/CodeUnitTableCellRenderer.java b/Ghidra/Features/Base/src/main/java/ghidra/util/table/CodeUnitTableCellRenderer.java index 720ec32617..ca4da6f647 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/util/table/CodeUnitTableCellRenderer.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/util/table/CodeUnitTableCellRenderer.java @@ -21,7 +21,7 @@ import java.util.List; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import docking.widgets.table.GTableCellRenderingData; import ghidra.docking.settings.Settings; import ghidra.util.Msg; @@ -81,7 +81,7 @@ public class CodeUnitTableCellRenderer extends AbstractGColumnRenderer(); + shapeCombo = new GComboBox<>(); shapeCombo.addItem("Rectangle"); shapeCombo.addItem("Oval"); shapeCombo.addItem("Arrow"); @@ -169,18 +172,18 @@ public class ImageDialogProvider extends DialogComponentProvider { JPanel imagePanel = new JPanel(new BorderLayout()); - newImageLabel = DockingUtils.createNonHtmlLabel(new ImageIcon(newImage)); + newImageLabel = new GIconLabel(new ImageIcon(newImage)); newImageLabel.setOpaque(true); newImageLabel.setBackground(Color.BLACK); JPanel newLabelPanel = new JPanel(new BorderLayout()); if (oldImage != null) { - oldImageLabel = DockingUtils.createNonHtmlLabel(new ImageIcon(oldImage)); + oldImageLabel = new GIconLabel(new ImageIcon(oldImage)); oldImageLabel.setOpaque(true); oldImageLabel.setBackground(Color.BLACK); } else { - oldImageLabel = DockingUtils.createNonHtmlLabel(" Old image not found "); + oldImageLabel = new GLabel(" Old image not found "); } newLabelPanel.add(createImageLabelComponent("New Image"), BorderLayout.NORTH); @@ -212,8 +215,7 @@ public class ImageDialogProvider extends DialogComponentProvider { } private JLabel createNameLabel(String name) { - JLabel label = - DockingUtils.createHtmlLabel("" + name); + JLabel label = new GDHtmlLabel("" + name); label.setOpaque(true); // label.setForeground(Color.YELLOW); label.setBackground(Color.BLACK); diff --git a/Ghidra/Features/Base/src/test.slow/java/docking/DockingWindowManagerTest.java b/Ghidra/Features/Base/src/test.slow/java/docking/DockingWindowManagerTest.java index 006f29ce9c..c90c7437f7 100644 --- a/Ghidra/Features/Base/src/test.slow/java/docking/DockingWindowManagerTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/docking/DockingWindowManagerTest.java @@ -30,6 +30,7 @@ import org.jdom.Element; import org.junit.Test; import docking.test.AbstractDockingTest; +import docking.widgets.label.GDLabel; import ghidra.framework.plugintool.ComponentProviderAdapter; public class DockingWindowManagerTest extends AbstractDockingTest { @@ -493,7 +494,7 @@ public class DockingWindowManagerTest extends AbstractDockingTest { } class MyProvider extends ComponentProviderAdapter { - JLabel label = DockingUtils.createNonHtmlLabel(); + JLabel label = new GDLabel(); public MyProvider(String owner, String name, String group, WindowPosition defaultWindowPosition) { diff --git a/Ghidra/Features/Base/src/test/java/ghidra/app/util/html/DataTypeDifferTest.java b/Ghidra/Features/Base/src/test/java/ghidra/app/util/html/DataTypeDifferTest.java index 35585c6096..130357834e 100644 --- a/Ghidra/Features/Base/src/test/java/ghidra/app/util/html/DataTypeDifferTest.java +++ b/Ghidra/Features/Base/src/test/java/ghidra/app/util/html/DataTypeDifferTest.java @@ -26,7 +26,7 @@ import javax.swing.*; import org.junit.Assert; import org.junit.Test; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.app.util.html.diff.*; public class DataTypeDifferTest { @@ -491,7 +491,7 @@ public class DataTypeDifferTest { JPanel rightPanel = new JPanel(new BorderLayout()); StringBuffer buffy1 = new StringBuffer(htmlLeft); - JLabel rightLabel = DockingUtils.createNonHtmlLabel(); + JLabel rightLabel = new GDLabel(); rightLabel.setOpaque(true); rightLabel.setBackground(Color.WHITE); rightLabel.setVerticalAlignment(SwingConstants.TOP); @@ -499,7 +499,7 @@ public class DataTypeDifferTest { JPanel leftPanel = new JPanel(new BorderLayout()); StringBuffer buffy2 = new StringBuffer(htmlRight); - JLabel leftLabel = DockingUtils.createNonHtmlLabel(); + JLabel leftLabel = new GDLabel(); leftLabel.setOpaque(true); leftLabel.setBackground(Color.WHITE); leftLabel.setVerticalAlignment(SwingConstants.TOP); diff --git a/Ghidra/Features/Base/src/test/java/ghidra/app/util/html/HTMLDataTypeRepresentationTest.java b/Ghidra/Features/Base/src/test/java/ghidra/app/util/html/HTMLDataTypeRepresentationTest.java index 2598e8de7a..3e9f8afd88 100644 --- a/Ghidra/Features/Base/src/test/java/ghidra/app/util/html/HTMLDataTypeRepresentationTest.java +++ b/Ghidra/Features/Base/src/test/java/ghidra/app/util/html/HTMLDataTypeRepresentationTest.java @@ -28,7 +28,7 @@ import javax.swing.*; import org.junit.Assert; import org.junit.Test; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import generic.test.AbstractGenericTest; import ghidra.app.util.ToolTipUtils; import ghidra.program.model.data.*; @@ -1450,7 +1450,7 @@ public class HTMLDataTypeRepresentationTest extends AbstractGenericTest { String rightHtml = right.getHTMLString(); System.err.println("Right HTML: " + rightHtml); StringBuffer buffy1 = new StringBuffer(rightHtml); - JLabel rightLabel = DockingUtils.createHtmlLabel(); + JLabel rightLabel = new GDHtmlLabel(); rightLabel.setOpaque(true); rightLabel.setBackground(Color.WHITE); rightLabel.setVerticalAlignment(SwingConstants.TOP); @@ -1460,7 +1460,7 @@ public class HTMLDataTypeRepresentationTest extends AbstractGenericTest { String leftHtml = left.getHTMLString(); System.err.println("Left HTML: " + leftHtml); StringBuffer buffy2 = new StringBuffer(leftHtml); - JLabel leftLabel = DockingUtils.createHtmlLabel(); + JLabel leftLabel = new GDHtmlLabel(); leftLabel.setOpaque(true); leftLabel.setBackground(Color.WHITE); leftLabel.setVerticalAlignment(SwingConstants.TOP); diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/AlignmentPanelBuilder.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/AlignmentPanelBuilder.java index 79322e2944..fc08f0c61e 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/AlignmentPanelBuilder.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/AlignmentPanelBuilder.java @@ -22,7 +22,7 @@ import java.util.List; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import docking.widgets.table.GTable; import docking.widgets.textfield.IntegerTextField; import ghidra.bitpatterns.info.FileBitPatternInfoReader; @@ -69,7 +69,7 @@ public class AlignmentPanelBuilder extends ContextRegisterFilterablePanelBuilder JPanel modulusPanel = new JPanel(); PairLayout modulusLayout = new PairLayout(); modulusPanel.setLayout(modulusLayout); - modulusPanel.add(DockingUtils.createNonHtmlLabel(MODULUS_FIELD_TEXT)); + modulusPanel.add(new GLabel(MODULUS_FIELD_TEXT)); modulusField = new IntegerTextField(); modulusField.setValue(DEFAULT_MODULUS); modulusPanel.add(modulusField.getComponent()); diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/BitsInputDialogComponentProvider.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/BitsInputDialogComponentProvider.java index 554dc2370a..ea94923ad6 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/BitsInputDialogComponentProvider.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/BitsInputDialogComponentProvider.java @@ -17,8 +17,8 @@ package ghidra.bitpatterns.gui; import javax.swing.JPanel; -import docking.DockingUtils; import docking.DockingWindowManager; +import docking.widgets.label.GLabel; import docking.widgets.textfield.IntegerTextField; import ghidra.util.HelpLocation; import ghidra.util.layout.PairLayout; @@ -60,12 +60,12 @@ public class BitsInputDialogComponentProvider extends InputDialogComponentProvid PairLayout pairLayout = new PairLayout(); mainPanel.setLayout(pairLayout); - mainPanel.add(DockingUtils.createNonHtmlLabel(TOTAL_BITS_LABEL)); + mainPanel.add(new GLabel(TOTAL_BITS_LABEL)); totalBitsBox = new IntegerTextField(); totalBitsBox.setValue(DEFAULT_TOTAL_BITS); mainPanel.add(totalBitsBox.getComponent()); - mainPanel.add(DockingUtils.createNonHtmlLabel(POST_BITS_LABEL)); + mainPanel.add(new GLabel(POST_BITS_LABEL)); preBitsBox = new IntegerTextField(); preBitsBox.setValue(DEFAULT_POST_BITS); mainPanel.add(preBitsBox.getComponent()); diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ByteSequenceLengthFilterInputDialog.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ByteSequenceLengthFilterInputDialog.java index 698fb30f9d..f218a6c326 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ByteSequenceLengthFilterInputDialog.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ByteSequenceLengthFilterInputDialog.java @@ -19,8 +19,8 @@ import java.awt.Component; import javax.swing.JPanel; -import docking.DockingUtils; import docking.DockingWindowManager; +import docking.widgets.label.GLabel; import docking.widgets.textfield.IntegerTextField; import ghidra.bitpatterns.info.ByteSequenceLengthFilter; import ghidra.util.HelpLocation; @@ -65,10 +65,10 @@ public class ByteSequenceLengthFilterInputDialog extends InputDialogComponentPro JPanel mainPanel = new JPanel(); PairLayout pairLayout = new PairLayout(); mainPanel.setLayout(pairLayout); - mainPanel.add(DockingUtils.createNonHtmlLabel(INDEX_BOX_TITLE_TEXT)); + mainPanel.add(new GLabel(INDEX_BOX_TITLE_TEXT)); indexBox = new IntegerTextField(); mainPanel.add(indexBox.getComponent()); - mainPanel.add(DockingUtils.createNonHtmlLabel(LENGTH_BOX_TITLE_TEXT)); + mainPanel.add(new GLabel(LENGTH_BOX_TITLE_TEXT)); minLengthBox = new IntegerTextField(); mainPanel.add(minLengthBox.getComponent()); return mainPanel; diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ByteSequencePanelBuilder.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ByteSequencePanelBuilder.java index 1cdb828bf5..4ef5b284cd 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ByteSequencePanelBuilder.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ByteSequencePanelBuilder.java @@ -22,7 +22,7 @@ import java.util.List; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import docking.widgets.table.GFilterTable; import ghidra.bitpatterns.info.*; import ghidra.util.layout.PairLayout; @@ -113,7 +113,7 @@ public class ByteSequencePanelBuilder extends ContextRegisterFilterablePanelBuil JPanel numSeqsPanel = new JPanel(); PairLayout numSeqsLayout = new PairLayout(); numSeqsPanel.setLayout(numSeqsLayout); - numSeqsPanel.add(DockingUtils.createNonHtmlLabel(NUM_SEQS_LABEL_TEXT)); + numSeqsPanel.add(new GLabel(NUM_SEQS_LABEL_TEXT)); numSeqsField = new JTextField(25); numSeqsField.setEditable(false); numSeqsPanel.add(numSeqsField); diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/DataGatheringParamsDialog.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/DataGatheringParamsDialog.java index 70accb27f5..a302e46529 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/DataGatheringParamsDialog.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/DataGatheringParamsDialog.java @@ -20,8 +20,8 @@ import java.awt.Component; import javax.swing.JPanel; import javax.swing.JTextField; -import docking.DockingUtils; import docking.DockingWindowManager; +import docking.widgets.label.GLabel; import docking.widgets.textfield.IntegerTextField; import ghidra.bitpatterns.info.DataGatheringParams; import ghidra.util.HelpLocation; @@ -84,37 +84,37 @@ public class DataGatheringParamsDialog extends InputDialogComponentProvider { PairLayout pairLayout = new PairLayout(); mainPanel.setLayout(pairLayout); - mainPanel.add(DockingUtils.createNonHtmlLabel(FIRST_BYTES_TEXT)); + mainPanel.add(new GLabel(FIRST_BYTES_TEXT)); firstBytesField = new IntegerTextField(); firstBytesField.setValue(DEFAULT_FIRST_BYTES); mainPanel.add(firstBytesField.getComponent()); - mainPanel.add(DockingUtils.createNonHtmlLabel(PRE_BYTES_TEXT)); + mainPanel.add(new GLabel(PRE_BYTES_TEXT)); preBytesField = new IntegerTextField(); preBytesField.setValue(DEFAULT_PRE_BYTES); mainPanel.add(preBytesField.getComponent()); - mainPanel.add(DockingUtils.createNonHtmlLabel(RETURN_BYTES_TEXT)); + mainPanel.add(new GLabel(RETURN_BYTES_TEXT)); returnBytesField = new IntegerTextField(); returnBytesField.setValue(DEFAULT_RETURN_BYTES); mainPanel.add(returnBytesField.getComponent()); - mainPanel.add(DockingUtils.createNonHtmlLabel(FIRST_INSTRUCTIONS_TEXT)); + mainPanel.add(new GLabel(FIRST_INSTRUCTIONS_TEXT)); firstInstructionsField = new IntegerTextField(); firstInstructionsField.setValue(DEFAULT_FIRST_INSTRUCTIONS); mainPanel.add(firstInstructionsField.getComponent()); - mainPanel.add(DockingUtils.createNonHtmlLabel(PRE_INSTRUCTIONS_TEXT)); + mainPanel.add(new GLabel(PRE_INSTRUCTIONS_TEXT)); preInstructionsField = new IntegerTextField(); preInstructionsField.setValue(DEFAULT_PRE_INSTRUCTIONS); mainPanel.add(preInstructionsField.getComponent()); - mainPanel.add(DockingUtils.createNonHtmlLabel(RETURN_INSTRUCTIONS_TEXT)); + mainPanel.add(new GLabel(RETURN_INSTRUCTIONS_TEXT)); returnInstructionsField = new IntegerTextField(); returnInstructionsField.setValue(DEFAULT_RETURN_INSTRUCTIONS); mainPanel.add(returnInstructionsField.getComponent()); - mainPanel.add(DockingUtils.createNonHtmlLabel(CONTEXT_REGISTER_TEXT)); + mainPanel.add(new GLabel(CONTEXT_REGISTER_TEXT)); contextRegistersField = new JTextField(DEFAULT_CONTEXT_REGISTERS); mainPanel.add(contextRegistersField); diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/FunctionBitPatternsMainProvider.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/FunctionBitPatternsMainProvider.java index 9ce15de1ef..73e049334a 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/FunctionBitPatternsMainProvider.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/FunctionBitPatternsMainProvider.java @@ -24,10 +24,10 @@ import javax.swing.*; import javax.swing.tree.TreePath; import docking.ActionContext; -import docking.DockingUtils; import docking.action.DockingAction; import docking.action.MenuData; import docking.widgets.filechooser.GhidraFileChooser; +import docking.widgets.label.GLabel; import ghidra.bitpatterns.info.*; import ghidra.framework.options.OptionsChangeListener; import ghidra.framework.options.ToolOptions; @@ -282,17 +282,17 @@ public class FunctionBitPatternsMainProvider extends ComponentProviderAdapter PairLayout pairLayout = new PairLayout(); dataInfoPanel.setLayout(pairLayout); - dataInfoPanel.add(DockingUtils.createNonHtmlLabel(DATA_SOURCE_FIELD_LABEL)); + dataInfoPanel.add(new GLabel(DATA_SOURCE_FIELD_LABEL)); dataSourceField = new JTextField(70); dataSourceField.setEditable(false); dataInfoPanel.add(dataSourceField); - dataInfoPanel.add(DockingUtils.createNonHtmlLabel(NUM_FUNCS_FIELD_LABEL)); + dataInfoPanel.add(new GLabel(NUM_FUNCS_FIELD_LABEL)); numFunctionsField = new JTextField(10); numFunctionsField.setEditable(false); dataInfoPanel.add(numFunctionsField); - dataInfoPanel.add(DockingUtils.createNonHtmlLabel(NUM_FILES_FIELD_LABEL)); + dataInfoPanel.add(new GLabel(NUM_FILES_FIELD_LABEL)); numFilesField = new JTextField(10); numFilesField.setEditable(false); dataInfoPanel.add(numFilesField); @@ -301,17 +301,17 @@ public class FunctionBitPatternsMainProvider extends ComponentProviderAdapter PairLayout instructionLayout = new PairLayout(); instructionInfoPanel.setLayout(instructionLayout); - instructionInfoPanel.add(DockingUtils.createNonHtmlLabel(FIRST_INSTRUCTIONS_LABEL)); + instructionInfoPanel.add(new GLabel(FIRST_INSTRUCTIONS_LABEL)); firstInstructionsField = new JTextField(10); firstInstructionsField.setEditable(false); instructionInfoPanel.add(firstInstructionsField); - instructionInfoPanel.add(DockingUtils.createNonHtmlLabel(PRE_INSTRUCTIONS_LABEL)); + instructionInfoPanel.add(new GLabel(PRE_INSTRUCTIONS_LABEL)); preInstructionsField = new JTextField(10); preInstructionsField.setEditable(false); instructionInfoPanel.add(preInstructionsField); - instructionInfoPanel.add(DockingUtils.createNonHtmlLabel(RETURN_INSTRUCTIONS_LABEL)); + instructionInfoPanel.add(new GLabel(RETURN_INSTRUCTIONS_LABEL)); returnInstructionsField = new JTextField(10); returnInstructionsField.setEditable(false); instructionInfoPanel.add(returnInstructionsField); @@ -320,17 +320,17 @@ public class FunctionBitPatternsMainProvider extends ComponentProviderAdapter PairLayout bytesLayout = new PairLayout(); bytesInfoPanel.setLayout(bytesLayout); - bytesInfoPanel.add(DockingUtils.createNonHtmlLabel(FIRST_BYTES_LABEL)); + bytesInfoPanel.add(new GLabel(FIRST_BYTES_LABEL)); firstBytesField = new JTextField(10); firstBytesField.setEditable(false); bytesInfoPanel.add(firstBytesField); - bytesInfoPanel.add(DockingUtils.createNonHtmlLabel(PRE_BYTES_LABEL)); + bytesInfoPanel.add(new GLabel(PRE_BYTES_LABEL)); preBytesField = new JTextField(10); preBytesField.setEditable(false); bytesInfoPanel.add(preBytesField); - bytesInfoPanel.add(DockingUtils.createNonHtmlLabel(RETURN_BYTES_LABEL)); + bytesInfoPanel.add(new GLabel(RETURN_BYTES_LABEL)); returnBytesField = new JTextField(10); returnBytesField.setEditable(false); bytesInfoPanel.add(returnBytesField); diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/InstructionSequenceTreePanelBuilder.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/InstructionSequenceTreePanelBuilder.java index 83c2a8f96f..17417b9fad 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/InstructionSequenceTreePanelBuilder.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/InstructionSequenceTreePanelBuilder.java @@ -24,8 +24,8 @@ import javax.swing.*; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; -import docking.DockingUtils; import docking.widgets.dialogs.NumberInputDialog; +import docking.widgets.label.GDLabel; import docking.widgets.tree.GTree; import ghidra.bitpatterns.info.*; import ghidra.util.layout.PairLayout; @@ -120,7 +120,7 @@ public class InstructionSequenceTreePanelBuilder extends ContextRegisterFilterab countPanel = new JPanel(); PairLayout countLayout = new PairLayout(); countPanel.setLayout(countLayout); - JLabel countLabel = DockingUtils.createNonHtmlLabel(COUNT_FIELD_LABEL); + JLabel countLabel = new GDLabel(COUNT_FIELD_LABEL); countPanel.add(countLabel); countField = new JTextField(25); countField.setEditable(false); diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/PatternEvalTableProvider.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/PatternEvalTableProvider.java index 69168290da..fafb22c771 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/PatternEvalTableProvider.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/PatternEvalTableProvider.java @@ -19,8 +19,8 @@ import java.awt.*; import javax.swing.*; -import docking.DockingUtils; import docking.WindowPosition; +import docking.widgets.label.GLabel; import ghidra.app.services.GoToService; import ghidra.bitpatterns.info.*; import ghidra.framework.plugintool.ComponentProviderAdapter; @@ -110,17 +110,16 @@ public class PatternEvalTableProvider extends ComponentProviderAdapter { private JPanel buildInfoPanel(PatternEvaluationStats stats) { JPanel evalPanel = new JPanel(new GridLayout(2, 8)); - evalPanel.add(DockingUtils.createNonHtmlLabel("Match Type")); - evalPanel.add(DockingUtils.createNonHtmlLabel(PatternMatchType.TRUE_POSITIVE.name())); - evalPanel.add(DockingUtils.createNonHtmlLabel(PatternMatchType.FP_WRONG_FLOW.name())); - evalPanel.add(DockingUtils.createNonHtmlLabel(PatternMatchType.FP_MISALIGNED.name())); - evalPanel.add(DockingUtils.createNonHtmlLabel(PatternMatchType.FP_DATA.name())); - evalPanel.add(DockingUtils.createNonHtmlLabel(PatternMatchType.POSSIBLE_START_CODE.name())); - evalPanel.add( - DockingUtils.createNonHtmlLabel(PatternMatchType.POSSIBLE_START_UNDEFINED.name())); - evalPanel.add(DockingUtils.createNonHtmlLabel(PatternMatchType.CONTEXT_CONFLICT.name())); - evalPanel.add(DockingUtils.createNonHtmlLabel(PatternMatchType.PRE_PATTERN_HIT.name())); - evalPanel.add(DockingUtils.createNonHtmlLabel("Number")); + evalPanel.add(new GLabel("Match Type")); + evalPanel.add(new GLabel(PatternMatchType.TRUE_POSITIVE.name())); + evalPanel.add(new GLabel(PatternMatchType.FP_WRONG_FLOW.name())); + evalPanel.add(new GLabel(PatternMatchType.FP_MISALIGNED.name())); + evalPanel.add(new GLabel(PatternMatchType.FP_DATA.name())); + evalPanel.add(new GLabel(PatternMatchType.POSSIBLE_START_CODE.name())); + evalPanel.add(new GLabel(PatternMatchType.POSSIBLE_START_UNDEFINED.name())); + evalPanel.add(new GLabel(PatternMatchType.CONTEXT_CONFLICT.name())); + evalPanel.add(new GLabel(PatternMatchType.PRE_PATTERN_HIT.name())); + evalPanel.add(new GLabel("Number")); JTextField truePositivesField = new JTextField(8); truePositivesField.setEditable(false); truePositivesField.setText(Integer.toString(stats.getNumTruePositives())); diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/SequenceMiningParamsInputDialog.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/SequenceMiningParamsInputDialog.java index d3b9cad5da..0fb6cb7d50 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/SequenceMiningParamsInputDialog.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/SequenceMiningParamsInputDialog.java @@ -19,8 +19,8 @@ import java.awt.Component; import javax.swing.*; -import docking.DockingUtils; import docking.DockingWindowManager; +import docking.widgets.label.GLabel; import docking.widgets.textfield.IntegerTextField; import ghidra.closedpatternmining.SequenceMiningParams; import ghidra.framework.preferences.Preferences; @@ -80,7 +80,7 @@ public class SequenceMiningParamsInputDialog extends InputDialogComponentProvide PairLayout mainLayout = new PairLayout(); mainPanel.setLayout(mainLayout); - mainPanel.add(DockingUtils.createNonHtmlLabel(PERCENTAGE_BOX_TEXT)); + mainPanel.add(new GLabel(PERCENTAGE_BOX_TEXT)); percentageBox = new JTextField(16); double percentage = Double.parseDouble(Preferences.getProperty(PERCENTAGE_PROPERTY, DEFAULT_PERCENTAGE)); @@ -88,7 +88,7 @@ public class SequenceMiningParamsInputDialog extends InputDialogComponentProvide percentageBox.setEditable(true); mainPanel.add(percentageBox); - mainPanel.add(DockingUtils.createNonHtmlLabel(MIN_FIXED_BITS_BOX_TEXT)); + mainPanel.add(new GLabel(MIN_FIXED_BITS_BOX_TEXT)); minFixedBitsBox = new IntegerTextField(); int minFixBits = Integer.parseInt( Preferences.getProperty(MIN_FIXED_BITS_PROPERTY, DEFAULT_MIN_FIXED_BITS)); diff --git a/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerOptionsDialog.java b/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerOptionsDialog.java index ce1db71eb8..b3635431fb 100644 --- a/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerOptionsDialog.java +++ b/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerOptionsDialog.java @@ -29,7 +29,7 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.app.plugin.core.format.ByteBlockSelection; import ghidra.app.plugin.core.format.DataFormatModel; import ghidra.app.util.AddressInput; @@ -73,7 +73,7 @@ public class ByteViewerOptionsDialog extends DialogComponentProvider private Component buildSettingsPanel() { JPanel panel = new JPanel(new PairLayout(5, 5)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - panel.add(DockingUtils.createNonHtmlLabel("Alignment Address:")); + panel.add(new GLabel("Alignment Address:")); if (provider instanceof ProgramByteViewerComponentProvider) { Program program = ((ProgramByteViewerComponentProvider) provider).getProgram(); @@ -87,7 +87,7 @@ public class ByteViewerOptionsDialog extends DialogComponentProvider } } - panel.add(DockingUtils.createNonHtmlLabel("Bytes Per Line:")); + panel.add(new GLabel("Bytes Per Line:")); bytesPerLineField = new FixedBitSizeValueField(8, false, true); bytesPerLineField.setFormat(10, false); bytesPerLineField.setMinMax(BigInteger.valueOf(1), BigInteger.valueOf(256)); @@ -95,7 +95,7 @@ public class ByteViewerOptionsDialog extends DialogComponentProvider panel.add(bytesPerLineField); bytesPerLineField.addChangeListener(this); - panel.add(DockingUtils.createNonHtmlLabel("Group size (Hex View Only):")); + panel.add(new GLabel("Group size (Hex View Only):")); groupSizeField = new FixedBitSizeValueField(8, false, true); groupSizeField.setFormat(10, false); groupSizeField.setMinMax(BigInteger.valueOf(1), BigInteger.valueOf(256)); diff --git a/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerPanel.java b/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerPanel.java index 63b66c821a..72601d1d28 100644 --- a/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerPanel.java +++ b/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerPanel.java @@ -25,7 +25,6 @@ import java.util.List; import javax.swing.*; import javax.swing.event.*; -import docking.DockingUtils; import docking.help.Help; import docking.help.HelpService; import docking.widgets.fieldpanel.*; @@ -35,6 +34,8 @@ import docking.widgets.fieldpanel.listener.LayoutModelListener; import docking.widgets.fieldpanel.support.SingleRowLayout; import docking.widgets.fieldpanel.support.ViewerPosition; import docking.widgets.indexedscrollpane.*; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.plugin.core.format.*; import ghidra.util.HelpLocation; import ghidra.util.exception.InvalidInputException; @@ -825,21 +826,21 @@ public class ByteViewerPanel extends JPanel implements TableColumnModelListener, private JPanel createStatusPanel() { - JLabel startLabel = DockingUtils.createNonHtmlLabel("Start:", SwingConstants.RIGHT); - JLabel endLabel = DockingUtils.createNonHtmlLabel("End:", SwingConstants.RIGHT); - JLabel offsetLabel = DockingUtils.createNonHtmlLabel("Offset:", SwingConstants.RIGHT); - JLabel insertionLabel = DockingUtils.createNonHtmlLabel("Insertion:", SwingConstants.RIGHT); + JLabel startLabel = new GLabel("Start:", SwingConstants.RIGHT); + JLabel endLabel = new GLabel("End:", SwingConstants.RIGHT); + JLabel offsetLabel = new GLabel("Offset:", SwingConstants.RIGHT); + JLabel insertionLabel = new GLabel("Insertion:", SwingConstants.RIGHT); - startField = DockingUtils.createNonHtmlLabel("00000000"); + startField = new GDLabel("00000000"); startField.setName("Start"); - endField = DockingUtils.createNonHtmlLabel("00000000"); + endField = new GDLabel("00000000"); endField.setName("End"); - offsetField = DockingUtils.createNonHtmlLabel("00000000"); + offsetField = new GDLabel("00000000"); offsetField.setName("Offset"); - insertionField = DockingUtils.createNonHtmlLabel("00000000"); + insertionField = new GDLabel("00000000"); insertionField.setName("Insertion"); Font f = new Font("SansSerif", Font.PLAIN, 11); diff --git a/Ghidra/Features/DebugUtils/src/main/java/db/DbViewer.java b/Ghidra/Features/DebugUtils/src/main/java/db/DbViewer.java index 2954499641..c4593c9971 100644 --- a/Ghidra/Features/DebugUtils/src/main/java/db/DbViewer.java +++ b/Ghidra/Features/DebugUtils/src/main/java/db/DbViewer.java @@ -27,10 +27,12 @@ import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; import db.buffers.LocalBufferFile; -import docking.DockingUtils; import docking.framework.DockingApplicationConfiguration; import docking.framework.DockingApplicationLayout; +import docking.widgets.combobox.GComboBox; import docking.widgets.filechooser.GhidraFileChooser; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.framework.Application; import ghidra.framework.store.db.PackedDatabase; import ghidra.util.Msg; @@ -157,15 +159,15 @@ public class DbViewer extends JFrame { mainPanel = new JPanel(new BorderLayout()); JPanel northPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel subNorthPanel = new JPanel(new PairLayout(4, 10)); - subNorthPanel.add(DockingUtils.createNonHtmlLabel("Database:")); - subNorthPanel.add(DockingUtils.createNonHtmlLabel(dbFile.getName())); - subNorthPanel.add(DockingUtils.createNonHtmlLabel("Tables:")); + subNorthPanel.add(new GLabel("Database:")); + subNorthPanel.add(new GLabel(dbFile.getName())); + subNorthPanel.add(new GLabel("Tables:")); String[] names = new String[tables.length]; for (int i = 0; i < names.length; i++) { names[i] = tables[i].getName() + " (" + Integer.toString(tables[i].getRecordCount()) + ")"; } - combo = new JComboBox<>(names); + combo = new GComboBox<>(names); combo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -223,7 +225,7 @@ public class DbViewer extends JFrame { size += " / " + Integer.toString(stats[1].size / 1024); } } - JLabel statsLabel = DockingUtils.createNonHtmlLabel( + JLabel statsLabel = new GDLabel( recCnt + " " + intNodeCnt + " " + recNodeCnt + " " + chainBufCnt + " " + size); panel.add(statsLabel, BorderLayout.SOUTH); 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 4e1327b822..f5bc621092 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 @@ -27,13 +27,15 @@ import java.util.List; import javax.swing.*; import javax.swing.border.BevelBorder; -import docking.*; +import docking.ActionContext; +import docking.GenericHeader; import docking.action.DockingAction; import docking.action.ToolBarData; import docking.widgets.fieldpanel.FieldPanel; import docking.widgets.fieldpanel.Layout; import docking.widgets.fieldpanel.field.Field; import docking.widgets.fieldpanel.support.BackgroundColorModel; +import docking.widgets.label.GDLabel; import ghidra.app.plugin.core.codebrowser.hover.ListingHoverService; import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin; import ghidra.app.plugin.core.functiongraph.graph.FGEdge; @@ -202,7 +204,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel { // previewListingPanel.getFieldPanel().setSelectionMode( FieldPanel.NO_SELECTION ); previewListingPanel.getFieldPanel().setCursorOn(false); - tooltipTitleLabel = DockingUtils.createNonHtmlLabel(); + tooltipTitleLabel = new GDLabel(); tooltipTitleLabel.setHorizontalAlignment(SwingConstants.LEADING); tooltipTitleLabel.setBackground(FGVertex.TOOLTIP_BACKGROUND_COLOR); tooltipTitleLabel.setOpaque(true); @@ -491,8 +493,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel { if (address == null) { // This is an unusual case. For now, do something reasonable. String side = isDestinationVertex ? "end" : "start"; - toolTipComponent = DockingUtils.createNonHtmlLabel( - "Unable to find address for edge " + side + ": " + edge); + toolTipComponent = new GDLabel("Unable to find address for edge " + side + ": " + edge); toolTipComponent.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10)); if (previewListingPanel != null) { previewListingPanel = null; 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 d7a7fbd996..bed86e1b2c 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 @@ -20,7 +20,7 @@ import java.awt.event.ActionListener; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.feature.fid.db.*; import ghidra.feature.fid.service.FidService; import ghidra.program.model.lang.LanguageID; @@ -64,7 +64,7 @@ public class FidFunctionDebugPanel extends JPanel { * @param text the text of the label */ private void addLabel(String text) { - JLabel label = DockingUtils.createNonHtmlLabel(text); + JLabel label = new GDLabel(text); label.setHorizontalAlignment(SwingConstants.LEFT); label.setFont(FidDebugUtils.MONOSPACED_FONT); add(label); 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 2ec2a7493b..817ca11cbe 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 @@ -20,7 +20,7 @@ import java.io.IOException; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.feature.fid.db.FidFileManager; import ghidra.feature.fid.db.FidQueryService; import ghidra.feature.fid.plugin.FidPlugin; @@ -74,7 +74,7 @@ public class FidSearchDebugDialog extends DialogComponentProvider { } private JLabel getPreparedLabel(String text) { - JLabel label = DockingUtils.createNonHtmlLabel(text, SwingConstants.RIGHT); + JLabel label = new GDLabel(text, SwingConstants.RIGHT); label.setFont(FidDebugUtils.MONOSPACED_FONT); return label; } diff --git a/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/plugin/PopulateFidDialog.java b/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/plugin/PopulateFidDialog.java index af2981ee42..5e608d3467 100644 --- a/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/plugin/PopulateFidDialog.java +++ b/Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/plugin/PopulateFidDialog.java @@ -24,9 +24,11 @@ import java.util.List; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.options.editor.ButtonPanelFactory; +import docking.widgets.combobox.GComboBox; import docking.widgets.filechooser.GhidraFileChooser; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.app.script.SelectLanguageDialog; import ghidra.feature.fid.db.*; import ghidra.feature.fid.service.DefaultFidPopulateResultReporter; @@ -106,36 +108,36 @@ public class PopulateFidDialog extends DialogComponentProvider { private JComponent buildMainPanel() { JPanel panel = new JPanel(new PairLayout()); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - JLabel jLabel = DockingUtils.createNonHtmlLabel("Fid Database: ", SwingConstants.RIGHT); + JLabel jLabel = new GDLabel("Fid Database: ", SwingConstants.RIGHT); jLabel.setToolTipText("Choose the Fid Database to populate"); panel.add(jLabel); panel.add(buildFidCombo()); - panel.add(DockingUtils.createNonHtmlLabel("Library Family Name: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Library Family Name: ", SwingConstants.RIGHT)); libraryFamilyNameTextField = new JTextField(20); libraryFamilyNameTextField.getDocument().addUndoableEditListener(e -> updateOkEnablement()); panel.add(libraryFamilyNameTextField); - panel.add(DockingUtils.createNonHtmlLabel("Library Version: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Library Version: ", SwingConstants.RIGHT)); versionTextField = new JTextField(); versionTextField.getDocument().addUndoableEditListener(e -> updateOkEnablement()); panel.add(versionTextField); - panel.add(DockingUtils.createNonHtmlLabel("Library Variant: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Library Variant: ", SwingConstants.RIGHT)); variantTextField = new JTextField(); variantTextField.getDocument().addUndoableEditListener(e -> updateOkEnablement()); panel.add(variantTextField); - panel.add(DockingUtils.createNonHtmlLabel("Base Library: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Base Library: ", SwingConstants.RIGHT)); panel.add(buildLibraryCombo()); - panel.add(DockingUtils.createNonHtmlLabel("Root Folder: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Root Folder: ", SwingConstants.RIGHT)); panel.add(buildDomainFolderChooserField()); - panel.add(DockingUtils.createNonHtmlLabel("Language: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Language: ", SwingConstants.RIGHT)); panel.add(buildLanguageField()); - panel.add(DockingUtils.createNonHtmlLabel("Common Symbols File: ", SwingConstants.RIGHT)); + panel.add(new GLabel("Common Symbols File: ", SwingConstants.RIGHT)); panel.add(buildSymbolsFileField(), jLabel); return panel; @@ -182,8 +184,7 @@ public class PopulateFidDialog extends DialogComponentProvider { private Component buildLibraryCombo() { LibraryChoice[] choices = getChoicesForLibraryCombo(); - libraryComboBox = new JComboBox<>(choices); - DockingUtils.turnOffHTMLRendering(libraryComboBox); + libraryComboBox = new GComboBox<>(choices); return libraryComboBox; } @@ -235,7 +236,7 @@ public class PopulateFidDialog extends DialogComponentProvider { private Component buildFidCombo() { List fidFileList = FidFileManager.getInstance().getUserAddedFiles(); FidFile[] files = fidFileList.toArray(new FidFile[fidFileList.size()]); - fidFileComboBox = new JComboBox<>(files); + fidFileComboBox = new GComboBox<>(files); fidFileComboBox.addActionListener(e -> updateLibraryChoices()); return fidFileComboBox; } diff --git a/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/graph/FcgVertex.java b/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/graph/FcgVertex.java index 3140e528ed..2f8a1e73ef 100644 --- a/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/graph/FcgVertex.java +++ b/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/graph/FcgVertex.java @@ -26,8 +26,8 @@ import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.LineBorder; -import docking.DockingUtils; import docking.widgets.EmptyBorderButton; +import docking.widgets.label.GDLabel; import ghidra.graph.viewer.vertex.AbstractVisualVertex; import ghidra.graph.viewer.vertex.VertexShapeProvider; import ghidra.program.model.address.Address; @@ -68,8 +68,8 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid private JLayeredPane layeredPane; private JButton toggleInsButton = new EmptyBorderButton(EXPAND_ICON); private JButton toggleOutsButton = new EmptyBorderButton(EXPAND_ICON); - private JLabel nameLabel = DockingUtils.createNonHtmlLabel(); - private JLabel vertexImageLabel = DockingUtils.createNonHtmlLabel(); + private JLabel nameLabel = new GDLabel(); + private JLabel vertexImageLabel = new GDLabel(); private Double vertexShape; private Double compactShape; diff --git a/Ghidra/Features/PDB/src/main/java/pdb/AskPdbUrlDialog.java b/Ghidra/Features/PDB/src/main/java/pdb/AskPdbUrlDialog.java index bc03502227..41750b5c1f 100644 --- a/Ghidra/Features/PDB/src/main/java/pdb/AskPdbUrlDialog.java +++ b/Ghidra/Features/PDB/src/main/java/pdb/AskPdbUrlDialog.java @@ -26,8 +26,10 @@ import java.util.Scanner; import javax.swing.*; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; import docking.widgets.dialogs.ObjectChooserDialog; +import docking.widgets.label.GDLabel; import generic.jar.ResourceFile; import generic.util.WindowUtilities; import ghidra.framework.Application; @@ -72,7 +74,7 @@ public class AskPdbUrlDialog extends DialogComponentProvider { JPanel panel = new JPanel(new BorderLayout(10, 10)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - label = DockingUtils.createNonHtmlLabel(message); + label = new GDLabel(message); panel.add(label, BorderLayout.WEST); textField = new JTextField(40); diff --git a/Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/DiffApplySettingsProvider.java b/Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/DiffApplySettingsProvider.java index 304055bb9c..dd6ec26035 100644 --- a/Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/DiffApplySettingsProvider.java +++ b/Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/DiffApplySettingsProvider.java @@ -24,9 +24,10 @@ import java.util.Collections; import javax.swing.*; -import docking.DockingUtils; import docking.WindowPosition; import docking.widgets.VariableHeightPanel; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GDLabel; import ghidra.app.plugin.core.diff.DiffApplySettingsOptionManager.*; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.framework.plugintool.Plugin; @@ -405,14 +406,14 @@ public class DiffApplySettingsProvider extends ComponentProviderAdapter { protected void init() { applyCB = - new JComboBox<>(allowMerge ? DiffApplySettingsOptionManager.MERGE_CHOICE.values() + new GComboBox<>(allowMerge ? DiffApplySettingsOptionManager.MERGE_CHOICE.values() : DiffApplySettingsOptionManager.REPLACE_CHOICE.values()); applyCB.setName(type + " Diff Apply CB"); String typeName = type; if (typeName.endsWith(" Comments")) { typeName = "Comments, " + typeName.substring(0, typeName.length() - 9); } - label = DockingUtils.createNonHtmlLabel(" " + typeName + " "); + label = new GDLabel(" " + typeName + " "); label.setHorizontalAlignment(SwingConstants.RIGHT); add(applyCB, BorderLayout.EAST); add(label, BorderLayout.CENTER); @@ -458,9 +459,9 @@ public class DiffApplySettingsProvider extends ComponentProviderAdapter { @Override protected void init() { - applyCB = new JComboBox<>(DiffApplySettingsOptionManager.SYMBOL_MERGE_CHOICE.values()); + applyCB = new GComboBox<>(DiffApplySettingsOptionManager.SYMBOL_MERGE_CHOICE.values()); applyCB.setName(type + " Diff Apply CB"); - label = DockingUtils.createNonHtmlLabel(" " + type + " "); + label = new GDLabel(" " + type + " "); label.setHorizontalAlignment(SwingConstants.RIGHT); add(applyCB, BorderLayout.EAST); add(label, BorderLayout.CENTER); diff --git a/Ghidra/Features/Python/src/main/java/ghidra/python/PythonCodeCompletionFactory.java b/Ghidra/Features/Python/src/main/java/ghidra/python/PythonCodeCompletionFactory.java index d67bd22fa5..b47c2331fd 100644 --- a/Ghidra/Features/Python/src/main/java/ghidra/python/PythonCodeCompletionFactory.java +++ b/Ghidra/Features/Python/src/main/java/ghidra/python/PythonCodeCompletionFactory.java @@ -24,7 +24,7 @@ import javax.swing.JComponent; import org.python.core.PyInstance; import org.python.core.PyObject; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.app.plugin.core.console.CodeCompletion; import ghidra.framework.options.Options; import ghidra.util.Msg; @@ -203,7 +203,7 @@ public class PythonCodeCompletionFactory { description = description + " (" + className + ")"; } - comp = DockingUtils.createNonHtmlLabel(description); + comp = new GDLabel(description); Iterator> iter = classes.iterator(); while (iter.hasNext()) { Class testClass = iter.next(); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/editors/AddressInputDialog.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/editors/AddressInputDialog.java index 22d47ff351..e14d1f0937 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/editors/AddressInputDialog.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/editors/AddressInputDialog.java @@ -24,7 +24,7 @@ import javax.swing.border.BevelBorder; import javax.swing.table.TableCellEditor; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.feature.vt.api.main.VTMarkupItem; import ghidra.feature.vt.api.main.VTMarkupItemDestinationAddressEditStatus; import ghidra.feature.vt.gui.plugin.VTController; @@ -51,7 +51,7 @@ public class AddressInputDialog extends AbstractCellEditor implements TableCellE EditableAddress editableAddress = (EditableAddress) value; address = editableAddress.getAddress(); - JLabel label = DockingUtils.createNonHtmlLabel(); + JLabel label = new GDLabel(); label.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); label.setText(editableAddress.getDisplayString()); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/editors/TagEditorRenderer.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/editors/TagEditorRenderer.java index 86f8226fd9..401211a9d8 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/editors/TagEditorRenderer.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/editors/TagEditorRenderer.java @@ -23,7 +23,7 @@ import java.awt.event.MouseEvent; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.feature.vt.gui.editors.TagEditorDialog.TagState; import ghidra.feature.vt.gui.editors.TagEditorDialog.TagStateListModel; import ghidra.util.exception.AssertException; @@ -41,7 +41,7 @@ public class TagEditorRenderer extends DefaultListCellRenderer { private final TagStateListModel listModel; private JPanel panel; - private JLabel tagIconLabel = DockingUtils.createNonHtmlLabel(); + private JLabel tagIconLabel = new GDLabel(); private RemoveStateButton undoButton; private MouseAdapter mouseForwarder; diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/AbstractAddressRangeFilter.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/AbstractAddressRangeFilter.java index cec13c1346..ebb87c19eb 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/AbstractAddressRangeFilter.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/AbstractAddressRangeFilter.java @@ -25,8 +25,9 @@ import javax.swing.event.EventListenerList; import org.apache.commons.lang3.StringUtils; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GHtmlLabel; import docking.widgets.textfield.HexIntegerFormatter; import ghidra.feature.vt.api.main.VTAssociation; import ghidra.feature.vt.gui.provider.matchtable.NumberRangeProducer; @@ -111,15 +112,14 @@ public abstract class AbstractAddressRangeFilter extends AncillaryFilter upperRangeComboBox = createComboBox(upperAddressRangeTextField, MAX_ADDRESS_VALUE, prototypeDisplay); - JLabel rangeLabel = DockingUtils.createNonHtmlLabel("<="); + JLabel rangeLabel = new GDLabel("<="); rangeLabel.setHorizontalAlignment(SwingConstants.CENTER); // // Lower Score Panel // lowerRangePanel = new JPanel(new GridLayout(2, 1)); - JLabel lowLabel = - DockingUtils.createHtmlLabel("low"); + JLabel lowLabel = new GHtmlLabel("low"); lowLabel.setHorizontalAlignment(SwingConstants.CENTER); lowLabel.setVerticalAlignment(SwingConstants.BOTTOM); lowerRangePanel.add(lowLabel); @@ -130,7 +130,7 @@ public abstract class AbstractAddressRangeFilter extends AncillaryFilter // JPanel labelPanel = new JPanel(new GridLayout(2, 1)); labelPanel.add(Box.createVerticalStrut(5)); // space filler - JLabel statusLabel = DockingUtils.createNonHtmlLabel("<="); + JLabel statusLabel = new GDLabel("<="); statusLabel.setHorizontalAlignment(SwingConstants.CENTER); labelPanel.add(statusLabel); @@ -138,8 +138,7 @@ public abstract class AbstractAddressRangeFilter extends AncillaryFilter // Upper Score Panel // upperRangePanel = new JPanel(new GridLayout(2, 1)); - JLabel upperLabel = - DockingUtils.createHtmlLabel("high"); + JLabel upperLabel = new GHtmlLabel("high"); upperLabel.setHorizontalAlignment(SwingConstants.CENTER); upperLabel.setVerticalAlignment(SwingConstants.BOTTOM); upperRangePanel.add(upperLabel); @@ -241,19 +240,18 @@ public abstract class AbstractAddressRangeFilter extends AncillaryFilter private JComboBox createComboBox(FilterFormattedTextField field, Long defaultValue, String prototypeString) { - GhidraComboBox comboBox = - new GhidraComboBox<>(new LimitedHistoryComboBoxModel()) { - // overridden to paint seamlessly with out color changing text field - @Override - protected void paintComponent(Graphics g) { - super.paintComponent(g); - Rectangle bounds = getBounds(); - Color oldColor = g.getColor(); - g.setColor(getBackground()); - g.fillRect(0, 0, bounds.width, bounds.height); - g.setColor(oldColor); - } - }; + GhidraComboBox comboBox = new GhidraComboBox<>(new LimitedHistoryComboBoxModel()) { + // overridden to paint seamlessly with out color changing text field + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Rectangle bounds = getBounds(); + Color oldColor = g.getColor(); + g.setColor(getBackground()); + g.fillRect(0, 0, bounds.width, bounds.height); + g.setColor(oldColor); + } + }; comboBox.setEditor(new FormattedFieldComboBoxEditor(field)); comboBox.setEditable(true); comboBox.setPrototypeDisplayValue(prototypeString); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/StatusLabel.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/StatusLabel.java index 12d3e3686b..8a2db315a7 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/StatusLabel.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/StatusLabel.java @@ -15,75 +15,76 @@ */ package ghidra.feature.vt.gui.filters; - import java.awt.*; import java.awt.event.*; import javax.swing.*; +import docking.widgets.label.GDLabel; import ghidra.feature.vt.gui.filters.Filter.FilterEditingStatus; -public class StatusLabel extends JLabel implements FilterStatusListener { +public class StatusLabel extends GDLabel implements FilterStatusListener { - private final JFormattedTextField textField; + private final JFormattedTextField textField; - public StatusLabel( final JFormattedTextField textField, final Object defaultValue ) { - this.textField = textField; - textField.addComponentListener( new ComponentAdapter() { - @Override - public void componentResized(java.awt.event.ComponentEvent e) { - resetBounds(); - } - } ); - setBorder( BorderFactory.createEmptyBorder( 2, 2, 2, 2 ) ); + public StatusLabel(final JFormattedTextField textField, final Object defaultValue) { + this.textField = textField; + textField.addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(java.awt.event.ComponentEvent e) { + resetBounds(); + } + }); + setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); - addMouseListener( new MouseAdapter() { - @Override - public void mouseClicked( MouseEvent e ) { - textField.setValue( defaultValue ); - } + addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + textField.setValue(defaultValue); + } - @Override - public void mouseEntered( MouseEvent e ) { - setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ) ); - } + @Override + public void mouseEntered(MouseEvent e) { + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } - @Override - public void mouseExited( MouseEvent e ) { - setCursor( Cursor.getPredefinedCursor( Cursor.DEFAULT_CURSOR ) ); - } - }); - } + @Override + public void mouseExited(MouseEvent e) { + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + }); + } - private void resetBounds() { - // My bounds are tied to that of the text field passed in the constructor. I'd like - // to live at the end of the textField, away from the text, which is dependent upon - // the text alignment - Container myParent = getParent(); - Container textFieldParent = textField.getParent(); - Rectangle textBounds = textField.getBounds(); - Point textFieldLocation = textBounds.getLocation(); - Point convertedLocation = SwingUtilities.convertPoint( textFieldParent, - textFieldLocation, myParent ); - - int alignment = textField.getHorizontalAlignment(); - if ( alignment == SwingConstants.RIGHT || alignment == SwingConstants.TRAILING ) { - Dimension size = getPreferredSize(); - int x = convertedLocation.x;// + size.width; - int y = convertedLocation.y; // try this for now...maybe center? - setBounds( x, y, size.width, size.height ); - } - else if ( alignment == SwingConstants.LEFT || alignment == SwingConstants.LEADING ) { - Dimension size = getPreferredSize(); - int x = (convertedLocation.x + textBounds.width) - size.width; - int y = convertedLocation.y; // try this for now...maybe center? - setBounds( x, y, size.width, size.height ); - } - } + private void resetBounds() { + // My bounds are tied to that of the text field passed in the constructor. I'd like + // to live at the end of the textField, away from the text, which is dependent upon + // the text alignment + Container myParent = getParent(); + Container textFieldParent = textField.getParent(); + Rectangle textBounds = textField.getBounds(); + Point textFieldLocation = textBounds.getLocation(); + Point convertedLocation = + SwingUtilities.convertPoint(textFieldParent, textFieldLocation, myParent); - public void filterStatusChanged( FilterEditingStatus status ) { - resetBounds(); - setIcon( status.getIcon() ); - setToolTipText( status.getDescription() + " (click to reset)" ); - } + int alignment = textField.getHorizontalAlignment(); + if (alignment == SwingConstants.RIGHT || alignment == SwingConstants.TRAILING) { + Dimension size = getPreferredSize(); + int x = convertedLocation.x;// + size.width; + int y = convertedLocation.y; // try this for now...maybe center? + setBounds(x, y, size.width, size.height); + } + else if (alignment == SwingConstants.LEFT || alignment == SwingConstants.LEADING) { + Dimension size = getPreferredSize(); + int x = (convertedLocation.x + textBounds.width) - size.width; + int y = convertedLocation.y; // try this for now...maybe center? + setBounds(x, y, size.width, size.height); + } + } + + @Override + public void filterStatusChanged(FilterEditingStatus status) { + resetBounds(); + setIcon(status.getIcon()); + setToolTipText(status.getDescription() + " (click to reset)"); + } } diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/TagFilter.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/TagFilter.java index b65bf7a92c..7b4cb71782 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/TagFilter.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/TagFilter.java @@ -23,7 +23,8 @@ import java.util.*; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.feature.vt.api.impl.VTChangeManager; import ghidra.feature.vt.api.impl.VersionTrackingChangeRecord; import ghidra.feature.vt.api.main.*; @@ -42,7 +43,7 @@ public class TagFilter extends AncillaryFilter { static final String EXCLUDED_TAGS_KEY = "TagFilter.tags"; private static final String DELIMITER = ":"; private Map excludedTags = new TreeMap<>(); // ordered by String - private JLabel excludedTagsLabel = DockingUtils.createNonHtmlLabel(); + private JLabel excludedTagsLabel = new GDLabel(); private JComponent component; private final VTController controller; @@ -72,7 +73,7 @@ public class TagFilter extends AncillaryFilter { JPanel innerPanel = new JPanel(); innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.X_AXIS)); - innerPanel.add(DockingUtils.createNonHtmlLabel("Excluded Tags: ")); + innerPanel.add(new GLabel("Excluded Tags: ")); innerPanel.add(excludedTagsLabel); innerPanel.add(Box.createHorizontalGlue()); innerPanel.add(editButton); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/functionassociation/VTFunctionAssociationProvider.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/functionassociation/VTFunctionAssociationProvider.java index af24425f87..d3ac427273 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/functionassociation/VTFunctionAssociationProvider.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/functionassociation/VTFunctionAssociationProvider.java @@ -28,13 +28,15 @@ import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.JTableHeader; -import docking.*; +import docking.ActionContext; import docking.ToolTipManager; +import docking.WindowPosition; import docking.action.*; import docking.menu.ActionState; import docking.menu.MultiStateDockingAction; import docking.widgets.EventTrigger; import docking.widgets.fieldpanel.FieldPanel; +import docking.widgets.label.GDLabel; import docking.widgets.table.threaded.ThreadedTableModel; import ghidra.app.plugin.core.functioncompare.FunctionComparisonPanel; import ghidra.app.services.GoToService; @@ -355,7 +357,7 @@ public class VTFunctionAssociationProvider extends ComponentProviderAdapter dualTablePanel.add(splitPane, BorderLayout.CENTER); JPanel statusPanel = new JPanel(new BorderLayout()); - statusLabel = DockingUtils.createNonHtmlLabel(NO_ERROR_MESSAGE); + statusLabel = new GDLabel(NO_ERROR_MESSAGE); statusLabel.setHorizontalAlignment(SwingConstants.CENTER); statusLabel.setForeground(Color.RED.darker()); statusLabel.addComponentListener(new ComponentAdapter() { @@ -484,7 +486,7 @@ public class VTFunctionAssociationProvider extends ComponentProviderAdapter String sourceString = (sourceProgram != null) ? sourceProgram.getDomainFile().toString() : NO_SESSION; String sourceTitle = SOURCE_TITLE + " = " + sourceString; - sourceSessionLabel = DockingUtils.createNonHtmlLabel(sourceTitle); + sourceSessionLabel = new GDLabel(sourceTitle); sourceSessionLabel.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 0)); sourceFunctionPanel.add(sourceSessionLabel, BorderLayout.NORTH); sourceFunctionPanel.add(sourceThreadedTablePanel, BorderLayout.CENTER); @@ -542,7 +544,7 @@ public class VTFunctionAssociationProvider extends ComponentProviderAdapter (destinationProgram != null) ? destinationProgram.getDomainFile().toString() : NO_SESSION; String destinationTitle = DESTINATION_TITLE + " = " + destinationString; - destinationSessionLabel = DockingUtils.createNonHtmlLabel(destinationTitle); + destinationSessionLabel = new GDLabel(destinationTitle); destinationSessionLabel.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 0)); destinationFunctionPanel.add(destinationSessionLabel, BorderLayout.NORTH); destinationFunctionPanel.add(destinationThreadedTablePanel, BorderLayout.CENTER); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/EditableListingAddress.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/EditableListingAddress.java index 3407853357..d78b459941 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/EditableListingAddress.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/EditableListingAddress.java @@ -19,7 +19,7 @@ import java.awt.event.ActionListener; import javax.swing.JLabel; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.app.util.AddressInput; import ghidra.feature.vt.api.main.VTMarkupItem; import ghidra.feature.vt.gui.editors.*; @@ -68,7 +68,7 @@ public class EditableListingAddress extends DisplayableListingAddress implements } } }); - JLabel label = DockingUtils.createNonHtmlLabel("Address: "); + JLabel label = new GDLabel("Address: "); add(label); add(addressField); } diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/AbstractDoubleRangeFilter.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/AbstractDoubleRangeFilter.java index 1bd399367c..df31d03c17 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/AbstractDoubleRangeFilter.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/AbstractDoubleRangeFilter.java @@ -24,7 +24,7 @@ import javax.swing.border.Border; import org.apache.commons.lang3.StringUtils; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import docking.widgets.numberformat.BoundedRangeDecimalFormatterFactory; import ghidra.feature.vt.gui.filters.*; import ghidra.framework.options.SaveState; @@ -85,8 +85,8 @@ public abstract class AbstractDoubleRangeFilter extends Filter Border outsideBorder = BorderFactory.createBevelBorder(BevelBorder.LOWERED); panel.setBorder(BorderFactory.createCompoundBorder(outsideBorder, paddingBorder)); - JLabel filterLabel = DockingUtils.createNonHtmlLabel(filterName + " Filter: "); - JLabel middleLabel = DockingUtils.createNonHtmlLabel("to"); + JLabel filterLabel = new GDLabel(filterName + " Filter: "); + JLabel middleLabel = new GDLabel("to"); panel.add(filterLabel); panel.add(lowerBoundField); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/ApplyMarkupPropertyEditor.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/ApplyMarkupPropertyEditor.java index 6b1c0e7e24..1993e1ea24 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/ApplyMarkupPropertyEditor.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/ApplyMarkupPropertyEditor.java @@ -26,9 +26,11 @@ import java.beans.PropertyChangeListener; import javax.swing.*; import javax.swing.border.TitledBorder; -import docking.DockingUtils; import docking.DockingWindowManager; import docking.help.HelpService; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.GhidraOptions; import ghidra.feature.vt.gui.plugin.VTController; import ghidra.feature.vt.gui.plugin.VTPlugin; @@ -277,23 +279,22 @@ public class ApplyMarkupPropertyEditor implements OptionsEditor { private void createFunctionSignatureDetailLabels() { - returnTypeLabel = DockingUtils.createNonHtmlLabel("Return Type", SwingConstants.RIGHT); + returnTypeLabel = new GDLabel("Return Type", SwingConstants.RIGHT); returnTypeLabel.setToolTipText(FUNCTION_RETURN_TYPE_TOOLTIP); - inlineLabel = DockingUtils.createNonHtmlLabel("Inline", SwingConstants.RIGHT); + inlineLabel = new GDLabel("Inline", SwingConstants.RIGHT); inlineLabel.setToolTipText(INLINE_TOOLTIP); - noReturnLabel = DockingUtils.createNonHtmlLabel("No Return", SwingConstants.RIGHT); + noReturnLabel = new GDLabel("No Return", SwingConstants.RIGHT); noReturnLabel.setToolTipText(NO_RETURN_TOOLTIP); - callingConventionLabel = - DockingUtils.createNonHtmlLabel("Calling Convention", SwingConstants.RIGHT); + callingConventionLabel = new GDLabel("Calling Convention", SwingConstants.RIGHT); callingConventionLabel.setToolTipText(CALLING_CONVENTION_TOOLTIP); - callFixupLabel = DockingUtils.createNonHtmlLabel("Call Fixup", SwingConstants.RIGHT); + callFixupLabel = new GDLabel("Call Fixup", SwingConstants.RIGHT); callFixupLabel.setToolTipText(CALL_FIXUP_TOOLTIP); - varArgsLabel = DockingUtils.createNonHtmlLabel("Var Args", SwingConstants.RIGHT); + varArgsLabel = new GDLabel("Var Args", SwingConstants.RIGHT); varArgsLabel.setToolTipText(VAR_ARGS_TOOLTIP); } @@ -349,7 +350,7 @@ public class ApplyMarkupPropertyEditor implements OptionsEditor { panel.add(parameterNamesLabel); panel.add(parameterNamesComboBox); - panel.add(DockingUtils.createNonHtmlLabel(" ")); + panel.add(new GLabel(" ")); panel.add(createPrioritySubPanel()); panel.add(parameterCommentsLabel); @@ -360,16 +361,13 @@ public class ApplyMarkupPropertyEditor implements OptionsEditor { } private void createParameterLabels() { - parameterDataTypesLabel = - DockingUtils.createNonHtmlLabel("Parameter Data Types", SwingConstants.RIGHT); + parameterDataTypesLabel = new GDLabel("Parameter Data Types", SwingConstants.RIGHT); parameterDataTypesLabel.setToolTipText(PARAMETER_DATA_TYPES_TOOLTIP); - parameterNamesLabel = - DockingUtils.createNonHtmlLabel("Parameter Names", SwingConstants.RIGHT); + parameterNamesLabel = new GDLabel("Parameter Names", SwingConstants.RIGHT); parameterNamesLabel.setToolTipText(PARAMETER_NAMES_TOOLTIP); - parameterCommentsLabel = - DockingUtils.createNonHtmlLabel("Parameter Comments", SwingConstants.RIGHT); + parameterCommentsLabel = new GDLabel("Parameter Comments", SwingConstants.RIGHT); parameterCommentsLabel.setToolTipText(PARAMETER_COMMENTS_TOOLTIP); } @@ -420,7 +418,7 @@ public class ApplyMarkupPropertyEditor implements OptionsEditor { panel.setToolTipText(PARAMETER_NAME_PRIORITY_TOOTIP); Box buttonBox = new Box(BoxLayout.X_AXIS); - JLabel highestPriorityLabel = DockingUtils.createNonHtmlLabel(" Highest: "); + JLabel highestPriorityLabel = new GDLabel(" Highest: "); highestPriorityLabel.setToolTipText(HIGHEST_NAME_PRIORITY_TOOLTIP); buttonBox.add(highestPriorityLabel); buttonBox.add(userHighestPriorityRB); @@ -457,18 +455,16 @@ public class ApplyMarkupPropertyEditor implements OptionsEditor { } private void createNonCommentMarkupLabels() { - dataMatchDataTypeLabel = - DockingUtils.createNonHtmlLabel("Data Match Data Type", SwingConstants.RIGHT); + dataMatchDataTypeLabel = new GDLabel("Data Match Data Type", SwingConstants.RIGHT); dataMatchDataTypeLabel.setToolTipText(DATA_MATCH_DATA_TYPE_TOOLTIP); - labelsLabel = DockingUtils.createNonHtmlLabel("Labels", SwingConstants.RIGHT); + labelsLabel = new GDLabel("Labels", SwingConstants.RIGHT); labelsLabel.setToolTipText(LABELS_TOOLTIP); - functionNameLabel = DockingUtils.createNonHtmlLabel("Function Name", SwingConstants.RIGHT); + functionNameLabel = new GDLabel("Function Name", SwingConstants.RIGHT); functionNameLabel.setToolTipText(FUNCTION_NAME_TOOLTIP); - functionSignatureLabel = - DockingUtils.createNonHtmlLabel("Function Signature", SwingConstants.RIGHT); + functionSignatureLabel = new GDLabel("Function Signature", SwingConstants.RIGHT); functionSignatureLabel.setToolTipText(FUNCTION_SIGNATURE_TOOLTIP); } @@ -526,22 +522,19 @@ public class ApplyMarkupPropertyEditor implements OptionsEditor { } private void createCommentLabels() { - plateCommentsLabel = - DockingUtils.createNonHtmlLabel("Plate Comments", SwingConstants.RIGHT); + plateCommentsLabel = new GDLabel("Plate Comments", SwingConstants.RIGHT); plateCommentsLabel.setToolTipText(PLATE_COMMENT_TOOLTIP); - preCommentsLabel = DockingUtils.createNonHtmlLabel("Pre-Comments", SwingConstants.RIGHT); + preCommentsLabel = new GDLabel("Pre-Comments", SwingConstants.RIGHT); preCommentsLabel.setToolTipText(PRE_COMMENT_TOOLTIP); - endOfLineCommentsLabel = - DockingUtils.createNonHtmlLabel("End of Line Comments", SwingConstants.RIGHT); + endOfLineCommentsLabel = new GDLabel("End of Line Comments", SwingConstants.RIGHT); endOfLineCommentsLabel.setToolTipText(END_OF_LINE_COMMENT_TOOLTIP); - repeatableCommentsLabel = - DockingUtils.createNonHtmlLabel("Repeatable Comments", SwingConstants.RIGHT); + repeatableCommentsLabel = new GDLabel("Repeatable Comments", SwingConstants.RIGHT); repeatableCommentsLabel.setToolTipText(REPEATABLE_COMMENT_TOOLTIP); - postCommentsLabel = DockingUtils.createNonHtmlLabel("Post Comments", SwingConstants.RIGHT); + postCommentsLabel = new GDLabel("Post Comments", SwingConstants.RIGHT); postCommentsLabel.setToolTipText(POST_COMMENT_TOOLTIP); } @@ -835,7 +828,7 @@ public class ApplyMarkupPropertyEditor implements OptionsEditor { editor.setValue(choiceEnum); Enum[] enums = editor.getEnums(); - final JComboBox> applyComboBox = new JComboBox<>(enums); + final JComboBox> applyComboBox = new GComboBox<>(enums); applyComboBox.addActionListener(e -> changesMade(true)); return applyComboBox; diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/LengthFilter.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/LengthFilter.java index 08a99f59eb..cca9d877b8 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/LengthFilter.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/LengthFilter.java @@ -26,7 +26,7 @@ import javax.swing.border.Border; import org.apache.commons.lang3.StringUtils; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.feature.vt.api.main.VTMatch; import ghidra.feature.vt.gui.filters.*; import ghidra.framework.options.SaveState; @@ -46,7 +46,7 @@ public class LengthFilter extends Filter { } private JComponent createComponent() { - final JLabel label = DockingUtils.createNonHtmlLabel("Length Filter: "); + final JLabel label = new GDLabel("Length Filter: "); Integer defaultValue = DEFAULT_FILTER_VALUE; textField = new FilterFormattedTextField(new IntegerFormatterFactory(false), defaultValue); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/onetomany/VTMatchOneToManyTableProvider.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/onetomany/VTMatchOneToManyTableProvider.java index f47468e6f4..754c333c5e 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/onetomany/VTMatchOneToManyTableProvider.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/onetomany/VTMatchOneToManyTableProvider.java @@ -26,7 +26,7 @@ import javax.swing.event.ListSelectionListener; import javax.swing.table.*; import docking.ActionContext; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import docking.widgets.table.GTable; import docking.widgets.table.RowObjectTableModel; import docking.widgets.table.threaded.ThreadedTableModel; @@ -324,27 +324,27 @@ public abstract class VTMatchOneToManyTableProvider extends ComponentProviderAda // LABEL, String labelText = (isSource ? "Source" : "Destination") + " Label: "; - label = DockingUtils.createNonHtmlLabel(labelText); + label = new GDLabel(labelText); // label.setForeground(LOCAL_INFO_FOREGROUND_COLOR); - labelValue = DockingUtils.createNonHtmlLabel(" "); + labelValue = new GDLabel(" "); labelValue.setForeground(LOCAL_INFO_FOREGROUND_COLOR); labelPanel.add(label); labelPanel.add(labelValue); // LABEL_TYPE, String labelTypeText = "Label Type: "; - labelType = DockingUtils.createNonHtmlLabel(labelTypeText); + labelType = new GDLabel(labelTypeText); // labelType.setForeground(LOCAL_INFO_FOREGROUND_COLOR); - labelTypeValue = DockingUtils.createNonHtmlLabel(" "); + labelTypeValue = new GDLabel(" "); labelTypeValue.setForeground(LOCAL_INFO_FOREGROUND_COLOR); labelTypePanel.add(labelType); labelTypePanel.add(labelTypeValue); // ADDRESS String addressText = (isSource ? "Source" : "Destination") + " Address: "; - address = DockingUtils.createNonHtmlLabel(addressText); + address = new GDLabel(addressText); // address.setForeground(LOCAL_INFO_FOREGROUND_COLOR); - addressValue = DockingUtils.createNonHtmlLabel(" "); + addressValue = new GDLabel(" "); addressValue.setForeground(LOCAL_INFO_FOREGROUND_COLOR); addressPanel.add(address); addressPanel.add(addressValue); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/relatedMatches/RelatedMatchRenderer.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/relatedMatches/RelatedMatchRenderer.java index 99c24ce2a9..458569aab5 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/relatedMatches/RelatedMatchRenderer.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/relatedMatches/RelatedMatchRenderer.java @@ -21,7 +21,7 @@ import java.util.Map; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GIconLabel; import docking.widgets.table.GTableCellRenderingData; import ghidra.feature.vt.api.main.VTAssociationStatus; import ghidra.util.table.GhidraTableCellRenderer; @@ -54,32 +54,22 @@ public class RelatedMatchRenderer extends GhidraTableCellRenderer { private static void initialize() { if (sourceMap == null) { sourceMap = new HashMap<>(); - sourceMap.put(VTRelatedMatchCorrelationType.TARGET, - DockingUtils.createNonHtmlLabel(TARGET_ICON)); - sourceMap.put(VTRelatedMatchCorrelationType.CALLER, - DockingUtils.createNonHtmlLabel(CALLER_ICON)); - sourceMap.put(VTRelatedMatchCorrelationType.CALLEE, - DockingUtils.createNonHtmlLabel(CALLEE_ICON)); - sourceMap.put(VTRelatedMatchCorrelationType.UNRELATED, - DockingUtils.createNonHtmlLabel(UNRELATED_ICON)); + sourceMap.put(VTRelatedMatchCorrelationType.TARGET, new GIconLabel(TARGET_ICON)); + sourceMap.put(VTRelatedMatchCorrelationType.CALLER, new GIconLabel(CALLER_ICON)); + sourceMap.put(VTRelatedMatchCorrelationType.CALLEE, new GIconLabel(CALLEE_ICON)); + sourceMap.put(VTRelatedMatchCorrelationType.UNRELATED, new GIconLabel(UNRELATED_ICON)); destinationMap = new HashMap<>(); - destinationMap.put(VTRelatedMatchCorrelationType.TARGET, - DockingUtils.createNonHtmlLabel(TARGET_ICON)); - destinationMap.put(VTRelatedMatchCorrelationType.CALLER, - DockingUtils.createNonHtmlLabel(CALLER_ICON)); - destinationMap.put(VTRelatedMatchCorrelationType.CALLEE, - DockingUtils.createNonHtmlLabel(CALLEE_ICON)); + destinationMap.put(VTRelatedMatchCorrelationType.TARGET, new GIconLabel(TARGET_ICON)); + destinationMap.put(VTRelatedMatchCorrelationType.CALLER, new GIconLabel(CALLER_ICON)); + destinationMap.put(VTRelatedMatchCorrelationType.CALLEE, new GIconLabel(CALLEE_ICON)); destinationMap.put(VTRelatedMatchCorrelationType.UNRELATED, - DockingUtils.createNonHtmlLabel(UNRELATED_ICON)); + new GIconLabel(UNRELATED_ICON)); statusMap = new HashMap<>(); - statusMap.put(VTAssociationStatus.ACCEPTED, - DockingUtils.createNonHtmlLabel(ACCEPTED_ICON)); - statusMap.put(VTAssociationStatus.AVAILABLE, - DockingUtils.createNonHtmlLabel(AVAILABLE_ICON)); - statusMap.put(VTAssociationStatus.BLOCKED, - DockingUtils.createNonHtmlLabel(LOCKED_OUT_ICON)); + statusMap.put(VTAssociationStatus.ACCEPTED, new GIconLabel(ACCEPTED_ICON)); + statusMap.put(VTAssociationStatus.AVAILABLE, new GIconLabel(AVAILABLE_ICON)); + statusMap.put(VTAssociationStatus.BLOCKED, new GIconLabel(LOCKED_OUT_ICON)); } } diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/util/AbstractTextFilter.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/util/AbstractTextFilter.java index b59f4d07fe..8fcf731c80 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/util/AbstractTextFilter.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/util/AbstractTextFilter.java @@ -26,7 +26,7 @@ import javax.swing.border.Border; import javax.swing.text.DefaultFormatter; import javax.swing.text.DefaultFormatterFactory; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import docking.widgets.table.GTable; import ghidra.feature.vt.api.main.VTAssociation; import ghidra.feature.vt.api.main.VTSession; @@ -70,7 +70,7 @@ public abstract class AbstractTextFilter extends Filter { // we handle updates in real time, so ignore focus events, which trigger excess filtering textField.disableFocusEventProcessing(); - JLabel label = DockingUtils.createNonHtmlLabel(filterName + ": "); + JLabel label = new GDLabel(filterName + ": "); panel.add(label, BorderLayout.WEST); panel.add(textField, BorderLayout.CENTER); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/AddRemoveAddressRangeDialog.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/AddRemoveAddressRangeDialog.java index 8d4d53515b..ba05155d14 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/AddRemoveAddressRangeDialog.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/AddRemoveAddressRangeDialog.java @@ -20,7 +20,7 @@ import java.awt.Dimension; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.app.util.AddressInput; import ghidra.app.util.HelpTopics; import ghidra.program.model.address.Address; @@ -64,7 +64,7 @@ public class AddRemoveAddressRangeDialog extends DialogComponentProvider { addressRangePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); addressRangePanel.setLayout(new PairLayout(5, 5)); - minLabel = DockingUtils.createNonHtmlLabel("Minimum:"); + minLabel = new GDLabel("Minimum:"); minLabel.setToolTipText("Enter minimum address to add or remove"); addressRangePanel.add(minLabel); @@ -75,7 +75,7 @@ public class AddRemoveAddressRangeDialog extends DialogComponentProvider { minAddressField.setPreferredSize(minPreferredSize); addressRangePanel.add(minAddressField); - maxLabel = DockingUtils.createNonHtmlLabel("Maximum:"); + maxLabel = new GDLabel("Maximum:"); maxLabel.setToolTipText("Enter maximum address to add or remove"); addressRangePanel.add(maxLabel); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/ChooseAddressSetEditorPanel.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/ChooseAddressSetEditorPanel.java index 0b89350eb3..490cc9c457 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/ChooseAddressSetEditorPanel.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/ChooseAddressSetEditorPanel.java @@ -25,6 +25,7 @@ import javax.swing.*; import javax.swing.event.*; import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.*; import ghidra.program.model.listing.Program; @@ -229,7 +230,7 @@ public class ChooseAddressSetEditorPanel extends JPanel { buttonPanel.add(addRangeButton); buttonPanel.add(subtractRangeButton); JPanel headerPanel = new JPanel(new BorderLayout()); - headerPanel.add(DockingUtils.createNonHtmlLabel("Address Ranges:"), BorderLayout.WEST); + headerPanel.add(new GLabel("Address Ranges:"), BorderLayout.WEST); headerPanel.add(buttonPanel, BorderLayout.EAST); listModel = new AddressSetListModel(myCurrentAddressSet.toList()); 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 62fca91f56..891a13181c 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 @@ -23,8 +23,8 @@ import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import docking.DockingUtils; import docking.options.editor.ButtonPanelFactory; +import docking.widgets.label.GDLabel; import docking.wizard.*; import ghidra.app.util.task.OpenProgramTask; import ghidra.framework.main.DataTreeDialog; @@ -62,7 +62,7 @@ public class NewSessionPanel extends AbstractMageJPanel { this.tool = tool; setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); - JLabel folderLabel = DockingUtils.createNonHtmlLabel("Project folder "); + JLabel folderLabel = new GDLabel("Project folder "); folderLabel.setHorizontalAlignment(SwingConstants.RIGHT); folderLabel.setToolTipText("The folder to store the new Version Tracking Session"); folderNameField = new JTextField(); @@ -80,7 +80,7 @@ public class NewSessionPanel extends AbstractMageJPanel { Font font = browseFolderButton.getFont(); browseFolderButton.setFont(new Font(font.getName(), Font.BOLD, font.getSize())); - JLabel newSessionLabel = DockingUtils.createNonHtmlLabel("New Session Name: "); + JLabel newSessionLabel = new GDLabel("New Session Name: "); newSessionLabel.setToolTipText("The name for the new Version Tracking Session"); newSessionLabel.setHorizontalAlignment(SwingConstants.RIGHT); @@ -102,12 +102,12 @@ public class NewSessionPanel extends AbstractMageJPanel { } }); - JLabel sourceLabel = DockingUtils.createNonHtmlLabel("Source Program: "); + JLabel sourceLabel = new GDLabel("Source Program: "); sourceLabel.setIcon(INFO_ICON); sourceLabel.setToolTipText("Analyzed program with markup to transfer"); sourceLabel.setHorizontalAlignment(SwingConstants.RIGHT); - JLabel destinationLabel = DockingUtils.createNonHtmlLabel("Destination Program: "); + JLabel destinationLabel = new GDLabel("Destination Program: "); destinationLabel.setIcon(INFO_ICON); destinationLabel.setToolTipText("New program that receives the transferred markup"); destinationLabel.setHorizontalAlignment(SwingConstants.RIGHT); diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/SummaryPanel.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/SummaryPanel.java index a76abc9454..a501abed09 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/SummaryPanel.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/wizard/SummaryPanel.java @@ -20,7 +20,7 @@ import java.util.List; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import docking.wizard.*; import ghidra.feature.vt.api.main.VTProgramCorrelatorFactory; import ghidra.feature.vt.gui.wizard.ChooseAddressSetEditorPanel.AddressSetChoice; @@ -39,8 +39,8 @@ public class SummaryPanel extends AbstractMageJPanel { SummaryPanel() { - labelLabel = DockingUtils.createHtmlLabel(); - summaryLabel = DockingUtils.createHtmlLabel(); + labelLabel = new GDHtmlLabel(); + summaryLabel = new GDHtmlLabel(); JPanel mainPanel = new JPanel(new PairLayout(5, 10)); mainPanel.add(labelLabel); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/ActionDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/ActionDialog.java index b6876942ec..b1ca6bc9f4 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/ActionDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/ActionDialog.java @@ -22,6 +22,8 @@ import java.util.List; import javax.swing.*; import docking.action.DockingActionIf; +import docking.widgets.label.GIconLabel; +import docking.widgets.label.GLabel; import resources.ResourceManager; /** @@ -98,18 +100,14 @@ public class ActionDialog extends DialogComponentProvider { JPanel innerPanel = new JPanel(new BorderLayout()); JPanel labelPanel = new JPanel(new GridLayout(0, 1)); - labelPanel.add(DockingUtils.createNonHtmlLabel( - "Multiple actions have been mapped to " + keystrokeName)); - labelPanel.add(DockingUtils.createNonHtmlLabel("Actions that can be enabled at the same")); - labelPanel.add(DockingUtils.createNonHtmlLabel("time should be mapped to different keys")); + labelPanel.add(new GLabel("Multiple actions have been mapped to " + keystrokeName)); + labelPanel.add(new GLabel("Actions that can be enabled at the same")); + labelPanel.add(new GLabel("time should be mapped to different keys")); innerPanel.setBorder(BorderFactory.createTitledBorder("Actions")); - ImageIcon image = ResourceManager.loadImage("images/warning.png"); - JLabel cautionLabel = DockingUtils.createNonHtmlLabel(image); - JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - panel.add(cautionLabel); + panel.add(new GIconLabel(ResourceManager.loadImage("images/warning.png"))); panel.add(labelPanel); listModel = new DefaultListModel<>(); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DialogComponentProvider.java b/Ghidra/Framework/Docking/src/main/java/docking/DialogComponentProvider.java index fd89a1d893..da56f6ec0e 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DialogComponentProvider.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DialogComponentProvider.java @@ -31,6 +31,7 @@ import docking.action.DockingActionIf; import docking.event.mouse.GMouseListenerAdapter; import docking.menu.DockingToolbarButton; import docking.util.*; +import docking.widgets.label.GDHtmlLabel; import ghidra.generic.function.Callback; import ghidra.util.*; import ghidra.util.exception.AssertException; @@ -889,7 +890,7 @@ public class DialogComponentProvider private JPanel buildStatusPanel() { JPanel panel = new JPanel(new BorderLayout()); - statusLabel = DockingUtils.createHtmlLabel(" "); + statusLabel = new GDHtmlLabel(" "); statusLabel.setName("statusLabel"); statusLabel.setHorizontalAlignment(SwingConstants.CENTER); statusLabel.setForeground(Color.blue); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DockingMenuItem.java b/Ghidra/Framework/Docking/src/main/java/docking/DockingMenuItem.java index 46fab11e83..b225e06669 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DockingMenuItem.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DockingMenuItem.java @@ -26,6 +26,7 @@ public class DockingMenuItem extends JMenuItem { public DockingMenuItem() { setUI(DockingMenuItemUI.createUI(this)); + DockingUtils.turnOffHTMLRendering(this); } @Override diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DockingUtils.java b/Ghidra/Framework/Docking/src/main/java/docking/DockingUtils.java index 9a80bff7b4..3106447a36 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DockingUtils.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DockingUtils.java @@ -24,11 +24,12 @@ import javax.swing.text.Document; import javax.swing.text.JTextComponent; import javax.swing.undo.UndoableEdit; -import docking.widgets.AbstractGCellRenderer; import ghidra.docking.util.DockingWindowsLookAndFeelUtils; import resources.ResourceManager; public class DockingUtils { + // taken from BasicHTML.htmlDisable, which is private + public static final String HTML_DISABLE_STRING = "html.disable"; private static final int ICON_SIZE = 16; @@ -69,72 +70,20 @@ public class DockingUtils { return separator; } - public static JLabel createHtmlLabel() { - return createHtmlLabel(""); - } - - public static JLabel createHtmlLabel(String text) { - JLabel label = new JLabel(text); - return label; - } - - public static JLabel createHtmlLabel(String text, int horizontalAlignment) { - JLabel label = new JLabel(text, horizontalAlignment); - return label; - } - - public static JLabel createHtmlLabel(String text, Icon icon, int horizontalAlignment) { - JLabel label = new JLabel(text, icon, horizontalAlignment); - return label; + /** + * Turns off the HTML rendering in the specified component. + * + * @param comp the thing + */ + public static void turnOffHTMLRendering(JComponent comp) { + comp.putClientProperty(HTML_DISABLE_STRING, true); } /** - * Creates a JLabel that has HTML rendering disabled. + * Turns off the HTML rendering in the specified component and its current cell renderer. * - * @param text - * @return + * @param list the list */ - public static JLabel createNonHtmlLabel(String text) { - JLabel label = new JLabel(text); - turnOffHTMLRendering(label); - return label; - } - - public static JLabel createNonHtmlLabel(Icon icon) { - JLabel label = new JLabel(icon); - turnOffHTMLRendering(label); - return label; - } - - public static JLabel createNonHtmlLabel() { - return createNonHtmlLabel(""); - } - - public static JLabel createNonHtmlLabel(String text, int horizontalAlignment) { - JLabel label = new JLabel(text, horizontalAlignment); - turnOffHTMLRendering(label); - - return label; - } - - public static JLabel createNonHtmlLabel(String text, Icon icon, int horizontalAlignment) { - JLabel label = new JLabel(text, icon, horizontalAlignment); - turnOffHTMLRendering(label); - - return label; - } - - public static JLabel createNonHtmlLabel(Icon icon, int horizontalAlignment) { - JLabel label = new JLabel(icon, horizontalAlignment); - turnOffHTMLRendering(label); - - return label; - } - - public static void turnOffHTMLRendering(JComponent comp) { - comp.putClientProperty(AbstractGCellRenderer.HTML_DISABLE_STRING, true); - } - public static void turnOffHTMLRendering(JList list) { turnOffHTMLRendering((JComponent) list); if (list.getCellRenderer() instanceof JComponent) { @@ -142,6 +91,11 @@ public class DockingUtils { } } + /** + * Turns off the HTML rendering in the specified component and its current renderer. + * + * @param cb the combobox + */ public static void turnOffHTMLRendering(JComboBox cb) { turnOffHTMLRendering((JComponent) cb); if (cb.getRenderer() instanceof JComponent) { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/ErrLogDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/ErrLogDialog.java index f0cbadd909..895be04697 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/ErrLogDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/ErrLogDialog.java @@ -24,6 +24,8 @@ import java.net.UnknownHostException; import javax.swing.*; import docking.widgets.ScrollableTextArea; +import docking.widgets.label.GHtmlLabel; +import docking.widgets.label.GIconLabel; import generic.util.WindowUtilities; import ghidra.framework.Application; import ghidra.util.HTMLUtilities; @@ -48,7 +50,6 @@ public class ErrLogDialog extends DialogComponentProvider { private ErrorDetailsPanel detailsPanel; private JButton detailsButton; private JButton sendButton; - private JLabel messageLabel; private JPanel mainPanel; private static ErrorReporter errorReporter; @@ -128,13 +129,11 @@ public class ErrLogDialog extends DialogComponentProvider { private void buildMainPanel(String message, String details, boolean isException) { - messageLabel = DockingUtils.createHtmlLabel(HTMLUtilities.toHTML(message)); - JLabel iconLabel = DockingUtils.createNonHtmlLabel( - UIManager.getIcon("OptionPane.errorIcon"), SwingConstants.RIGHT); - JPanel introPanel = new JPanel(new BorderLayout(10, 10)); - introPanel.add(iconLabel, BorderLayout.WEST); - introPanel.add(messageLabel, BorderLayout.CENTER); + introPanel.add( + new GIconLabel(UIManager.getIcon("OptionPane.errorIcon"), SwingConstants.RIGHT), + BorderLayout.WEST); + introPanel.add(new GHtmlLabel(HTMLUtilities.toHTML(message)), BorderLayout.CENTER); mainPanel = new JPanel(new BorderLayout(10, 20)); mainPanel.add(introPanel, BorderLayout.NORTH); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/ErrLogExpandableDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/ErrLogExpandableDialog.java index 1e01e7f838..edb2ecec9c 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/ErrLogExpandableDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/ErrLogExpandableDialog.java @@ -28,6 +28,7 @@ import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.tree.TreePath; +import docking.widgets.label.GHtmlLabel; import docking.widgets.tree.*; import docking.widgets.tree.support.GTreeDragNDropHandler; import ghidra.util.*; @@ -171,7 +172,7 @@ public class ErrLogExpandableDialog extends DialogComponentProvider { msgPanel.setLayout(new BorderLayout(16, 16)); msgPanel.setBorder(new EmptyBorder(16, 16, 16, 16)); { - JLabel msgText = new JLabel(getHTML(msg, report)) { + JLabel msgText = new GHtmlLabel(getHTML(msg, report)) { @Override public Dimension getPreferredSize() { // when rendering HTML the label can expand larger than the screen; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/GenericHeader.java b/Ghidra/Framework/Docking/src/main/java/docking/GenericHeader.java index d82ee9597a..abca893d8b 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/GenericHeader.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/GenericHeader.java @@ -27,6 +27,7 @@ import org.jdesktop.animation.timing.interpolation.PropertySetter; import docking.action.DockingActionIf; import docking.widgets.VariableHeightPanel; +import docking.widgets.label.GDLabel; // TODO: should this be put into generic? public class GenericHeader extends JPanel { @@ -342,7 +343,7 @@ public class GenericHeader extends JPanel { TitlePanel() { super(new BorderLayout()); setFocusable(false); - titleLabel = DockingUtils.createNonHtmlLabel(); + titleLabel = new GDLabel(); titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 0)); titleLabel.setForeground(Color.BLACK); titleLabel.setFocusable(false); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/StatusBar.java b/Ghidra/Framework/Docking/src/main/java/docking/StatusBar.java index 8a3046eed5..ed6f7212ee 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/StatusBar.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/StatusBar.java @@ -30,6 +30,7 @@ import org.jdesktop.animation.timing.Animator; import docking.util.AnimationUtils; import docking.widgets.EmptyBorderButton; +import docking.widgets.label.GDLabel; import generic.util.WindowUtilities; import ghidra.util.HTMLUtilities; import ghidra.util.SystemUtilities; @@ -83,7 +84,7 @@ public class StatusBar extends JPanel { JPanel eastPanel = createEastPanel(statusAreaPanel); add(eastPanel, BorderLayout.EAST); - statusLabel = DockingUtils.createNonHtmlLabel(" "); + statusLabel = new GDLabel(" "); statusLabel.setOpaque(true); statusLabel.setName("Tool Status"); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/StatusBarSpacer.java b/Ghidra/Framework/Docking/src/main/java/docking/StatusBarSpacer.java index 82552452a6..10bb194fc8 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/StatusBarSpacer.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/StatusBarSpacer.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,26 +15,24 @@ */ package docking; +import javax.swing.Icon; + +import docking.widgets.label.GIconLabel; import ghidra.framework.OperatingSystem; import ghidra.framework.Platform; - -import javax.swing.Icon; -import javax.swing.JLabel; - import resources.ResourceManager; - /** * A class to handle the space requirements on the status bar that vary for different OSes. For * example, the Mac requires extra space on the status bar, due to the drag icon the Mac uses. */ -public class StatusBarSpacer extends JLabel { - private static Icon EMPTY_ICON = ResourceManager.loadImage("images/EmptyIcon.gif"); - - public StatusBarSpacer() { - if ( Platform.CURRENT_PLATFORM.getOperatingSystem() == OperatingSystem.MAC_OS_X ) { - setIcon( EMPTY_ICON ); - } - } +public class StatusBarSpacer extends GIconLabel { + private static Icon EMPTY_ICON = ResourceManager.loadImage("images/EmptyIcon.gif"); + + public StatusBarSpacer() { + super( + Platform.CURRENT_PLATFORM.getOperatingSystem() == OperatingSystem.MAC_OS_X ? EMPTY_ICON + : (Icon) null); + } } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java b/Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java index cfecccb70b..c91695342e 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java @@ -494,9 +494,7 @@ public abstract class DockingAction implements DockingActionIf { } protected JMenuItem doCreateMenuItem() { - DockingMenuItem dmi = new DockingMenuItem(); - DockingUtils.turnOffHTMLRendering(dmi); - return dmi; + return new DockingMenuItem(); } private void recordInception() { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/action/KeyEntryDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/action/KeyEntryDialog.java index 6508762514..717b1a562a 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/action/KeyEntryDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/action/KeyEntryDialog.java @@ -23,6 +23,7 @@ import javax.swing.*; import javax.swing.text.*; import docking.*; +import docking.widgets.label.GIconLabel; import ghidra.util.HelpLocation; import ghidra.util.ReservedKeyBindings; import resources.ResourceManager; @@ -65,8 +66,7 @@ public class KeyEntryDialog extends DialogComponentProvider { defaultPanel = new JPanel(new BorderLayout()); defaultPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 5)); - Icon icon = ResourceManager.loadImage("images/information.png"); - JLabel imageLabel = DockingUtils.createNonHtmlLabel(icon); + JLabel imageLabel = new GIconLabel(ResourceManager.loadImage("images/information.png")); bgColor = imageLabel.getBackground(); JTextPane pane = new JTextPane(); pane.setBorder(BorderFactory.createEmptyBorder(0, 5, 2, 5)); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/framework/ApplicationInformationDisplayFactory.java b/Ghidra/Framework/Docking/src/main/java/docking/framework/ApplicationInformationDisplayFactory.java index 7a1c1a7635..2585fa0eb2 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/framework/ApplicationInformationDisplayFactory.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/framework/ApplicationInformationDisplayFactory.java @@ -21,7 +21,8 @@ import java.util.List; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GIconLabel; +import docking.widgets.label.GLabel; import ghidra.framework.Application; import ghidra.framework.PluggableServiceRegistry; import ghidra.util.HelpLocation; @@ -118,8 +119,7 @@ public class ApplicationInformationDisplayFactory { panel.setBackground(background); - JLabel nameLabel = DockingUtils.createNonHtmlLabel(); - nameLabel.setText(Application.getName()); + JLabel nameLabel = new GLabel(Application.getName()); nameLabel.setForeground(new Color(155, 155, 155)); Font newFont = new Font("Garamond", Font.BOLD, 35); nameLabel.setFont(newFont); @@ -129,7 +129,7 @@ public class ApplicationInformationDisplayFactory { final JPanel imagePanel = new JPanel(new BorderLayout()); imagePanel.setBackground(background); - JLabel imageLabel = DockingUtils.createNonHtmlLabel(icon); + JLabel imageLabel = new GIconLabel(icon); imageLabel.setVerticalAlignment(SwingConstants.CENTER); imageLabel.setHorizontalAlignment(SwingConstants.CENTER); imagePanel.add(imageLabel); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/framework/SplashScreen.java b/Ghidra/Framework/Docking/src/main/java/docking/framework/SplashScreen.java index 8b11ffc393..4ca8cdb3bd 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/framework/SplashScreen.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/framework/SplashScreen.java @@ -23,6 +23,8 @@ import javax.swing.*; import javax.swing.border.BevelBorder; import docking.*; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import generic.util.WindowUtilities; import ghidra.framework.Application; import ghidra.util.Msg; @@ -312,8 +314,8 @@ public class SplashScreen extends JWindow { titlePanel.setBackground(backgroundColor); titlePanel.setLayout(new BorderLayout()); - JLabel titleLabel = DockingUtils.createNonHtmlLabel( - ApplicationInformationDisplayFactory.createSplashScreenTitle()); + JLabel titleLabel = + new GLabel(ApplicationInformationDisplayFactory.createSplashScreenTitle()); Font font = titleLabel.getFont(); font = new Font(font.getName(), Font.BOLD, 11); titleLabel.setFont(font); @@ -328,7 +330,7 @@ public class SplashScreen extends JWindow { private Component createStatusComponent() { Font f = new Font("serif", Font.BOLD, 12); - statusLabel = DockingUtils.createNonHtmlLabel(" Loading..."); + statusLabel = new GDLabel(" Loading..."); statusLabel.setFont(f); statusLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 2, 10)); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/menu/MultipleActionDockingToolbarButton.java b/Ghidra/Framework/Docking/src/main/java/docking/menu/MultipleActionDockingToolbarButton.java index 934d609535..f67bbe9d58 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/menu/MultipleActionDockingToolbarButton.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/menu/MultipleActionDockingToolbarButton.java @@ -27,6 +27,7 @@ import javax.swing.event.*; import docking.*; import docking.action.*; import docking.widgets.EmptyBorderButton; +import docking.widgets.label.GDHtmlLabel; import ghidra.util.SystemUtilities; import resources.ResourceManager; @@ -415,7 +416,7 @@ public class MultipleActionDockingToolbarButton extends EmptyBorderButton { private final int EMTPY_SEPARATOR_HEIGHT = 10; private final int TEXT_SEPARATOR_HEIGHT = 32; - private JLabel renderer = DockingUtils.createHtmlLabel(); + private JLabel renderer = new GDHtmlLabel(); private int separatorHeight = EMTPY_SEPARATOR_HEIGHT; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/Clock.java b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/Clock.java index 643d8f7e9b..7988b43fef 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/Clock.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/Clock.java @@ -27,7 +27,8 @@ import javax.swing.text.*; import com.toedter.calendar.JCalendar; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.util.layout.HorizontalLayout; /** @@ -35,7 +36,7 @@ import ghidra.util.layout.HorizontalLayout; */ class Clock extends JPanel implements CaretListener { - private JLabel dateLabel = DockingUtils.createNonHtmlLabel("Apr 18, 2006"); + private JLabel dateLabel = new GDLabel("Apr 18, 2006"); private JTextField hoursField; private JTextField minutesField; private JTextField secondsField; @@ -133,9 +134,9 @@ class Clock extends JPanel implements CaretListener { add(dateLabel); add(hoursField); - add(DockingUtils.createNonHtmlLabel(":")); + add(new GLabel(":")); add(minutesField); - add(DockingUtils.createNonHtmlLabel(":")); + add(new GLabel(":")); add(secondsField); formatter = new SimpleDateFormat("HH:mm:ss MMM dd, yyyy"); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/ColorEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/ColorEditor.java index 0c55f5864f..c3b5e8cfaf 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/ColorEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/ColorEditor.java @@ -24,7 +24,9 @@ import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; +import docking.widgets.label.GDHtmlLabel; /** * Color editor that uses the JColorChooser. @@ -36,7 +38,7 @@ public class ColorEditor extends PropertyEditorSupport { private static GhidraColorChooser colorChooser; - private JLabel previewLabel = DockingUtils.createHtmlLabel(); + private JLabel previewLabel = new GDHtmlLabel(); private Color color; private Color lastUserSelectedColor; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/DefaultOptionComponent.java b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/DefaultOptionComponent.java index f67f118ae6..022d5be342 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/DefaultOptionComponent.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/DefaultOptionComponent.java @@ -22,8 +22,8 @@ import java.awt.event.MouseEvent; import javax.swing.*; -import docking.DockingUtils; import docking.ToolTipManager; +import docking.widgets.label.GDLabel; import ghidra.framework.options.EditorState; import ghidra.util.HTMLUtilities; import ghidra.util.layout.PairLayout; @@ -37,7 +37,7 @@ public class DefaultOptionComponent extends GenericOptionsComponent { setLayout(new PairLayout(0, 6, 40)); this.component = editorState.getEditorComponent(); - label = DockingUtils.createNonHtmlLabel(editorState.getTitle(), SwingConstants.RIGHT); + label = new GDLabel(editorState.getTitle(), SwingConstants.RIGHT); if (component instanceof AbstractButton) { label.addMouseListener(new MouseAdapter() { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/FontPropertyEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/FontPropertyEditor.java index 3cf3ab0d84..07e1dc6f85 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/FontPropertyEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/FontPropertyEditor.java @@ -25,7 +25,10 @@ import java.util.List; import javax.swing.*; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GDLabel; /** * This Bean FontEditor displays a String with the current selected font name, @@ -33,7 +36,7 @@ import docking.*; */ public class FontPropertyEditor extends PropertyEditorSupport { private Font font; -// private JLabel previewLabel = DockingUtils.createNonHtmlLabel(); +// private JLabel previewLabel = new GDLabel(); private JButton previewButton = new JButton(); private final static String SAMPLE_STRING = "ABCabc \u00a9\u00ab\u00a7\u0429\u05d1\u062c\u4eb9"; @@ -133,7 +136,7 @@ public class FontPropertyEditor extends PropertyEditorSupport { sizeAndStylePanel.add(BorderLayout.CENTER, stylePanel); topPanel.add(BorderLayout.CENTER, sizeAndStylePanel); - fontStringLabel = DockingUtils.createNonHtmlLabel(FontPropertyEditor.SAMPLE_STRING); + fontStringLabel = new GDLabel(FontPropertyEditor.SAMPLE_STRING); fontStringLabel.setPreferredSize(new Dimension(350, 50)); fontStringLabel.setHorizontalAlignment(SwingConstants.CENTER); fontStringLabel.setFont(font); @@ -141,18 +144,18 @@ public class FontPropertyEditor extends PropertyEditorSupport { add(BorderLayout.NORTH, topPanel); - fontLabel = DockingUtils.createNonHtmlLabel("Fonts"); + fontLabel = new GDLabel("Fonts"); Font newFont = getFont().deriveFont(1); fontLabel.setFont(newFont); fontLabel.setHorizontalAlignment(SwingConstants.CENTER); fontPanel.add(fontLabel); - sizeLabel = DockingUtils.createNonHtmlLabel("Sizes"); + sizeLabel = new GDLabel("Sizes"); sizeLabel.setFont(newFont); sizeLabel.setHorizontalAlignment(SwingConstants.CENTER); sizePanel.add(sizeLabel); - styleLabel = DockingUtils.createNonHtmlLabel("Styles"); + styleLabel = new GDLabel("Styles"); styleLabel.setFont(newFont); styleLabel.setHorizontalAlignment(SwingConstants.CENTER); stylePanel.add(styleLabel); @@ -165,13 +168,13 @@ public class FontPropertyEditor extends PropertyEditorSupport { list.add(new FontWrapper(envfont)); } Collections.sort(list); - fonts = new JComboBox<>(list.toArray(new FontWrapper[envfonts.length])); + fonts = new GComboBox<>(list.toArray(new FontWrapper[envfonts.length])); fonts.setMaximumRowCount(9); FontWrapper fontWrapper = new FontWrapper(font.getName()); fontPanel.add(fonts); fonts.setSelectedItem(fontWrapper); - sizes = new JComboBox<>( + sizes = new GComboBox<>( new String[] { "8", "10", "12", "14", "16", "18", "24", "28", "32" }); sizes.setMaximumRowCount(9); sizePanel.add(sizes); @@ -179,7 +182,7 @@ public class FontPropertyEditor extends PropertyEditorSupport { sizes.setSelectedItem("" + sizeChoice); sizes.setMaximumRowCount(9); - styles = new JComboBox<>(new String[] { "PLAIN", "BOLD", "ITALIC", "BOLD & ITALIC" }); + styles = new GComboBox<>(new String[] { "PLAIN", "BOLD", "ITALIC", "BOLD & ITALIC" }); styles.setMaximumRowCount(9); stylePanel.add(styles); styleChoice = font.getStyle(); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/OptionsPanel.java b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/OptionsPanel.java index bafeae3e7f..79e6cbb9b5 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/OptionsPanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/OptionsPanel.java @@ -27,11 +27,11 @@ import javax.swing.*; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; -import docking.DockingUtils; import docking.help.Help; import docking.help.HelpService; import docking.widgets.MultiLineLabel; import docking.widgets.OptionDialog; +import docking.widgets.label.GIconLabel; import docking.widgets.tree.*; import docking.widgets.tree.internal.DefaultGTreeDataTransformer; import ghidra.framework.options.*; @@ -242,9 +242,6 @@ public class OptionsPanel extends JPanel { JPanel panel = new JPanel(new MiddleLayout()); panel.setName("Default"); - Icon icon = ResourceManager.loadImage("images/information.png"); - JLabel imageLabel = DockingUtils.createNonHtmlLabel(icon); - MultiLineLabel label = new MultiLineLabel("To change Options, select a Folder or Option Group from the\n" + "Options Tree and change the Option settings."); @@ -255,7 +252,7 @@ public class OptionsPanel extends JPanel { BoxLayout bl = new BoxLayout(labelPanel, BoxLayout.X_AXIS); labelPanel.setLayout(bl); labelPanel.add(Box.createHorizontalStrut(5)); - labelPanel.add(imageLabel); + labelPanel.add(new GIconLabel(ResourceManager.loadImage("images/information.png"))); labelPanel.add(Box.createHorizontalStrut(5)); labelPanel.add(label); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/SettableColorSwatchChooserPanel.java b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/SettableColorSwatchChooserPanel.java index 7c57484bde..6585e6352e 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/SettableColorSwatchChooserPanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/SettableColorSwatchChooserPanel.java @@ -24,7 +24,8 @@ import javax.swing.*; import javax.swing.border.*; import javax.swing.colorchooser.AbstractColorChooserPanel; -import docking.DockingUtils; +import docking.widgets.label.GHtmlLabel; +import docking.widgets.label.GLabel; import ghidra.util.layout.VerticalLayout; public class SettableColorSwatchChooserPanel extends AbstractColorChooserPanel { @@ -129,7 +130,7 @@ public class SettableColorSwatchChooserPanel extends AbstractColorChooserPanel { recentSwatchPanel.addMouseListener(recentSwatchListener); recentSwatchPanel.setBorder(border); JPanel recentLabelHolder = new JPanel(new BorderLayout()); - JLabel l = DockingUtils.createHtmlLabel(recentStr); + JLabel l = new GHtmlLabel(recentStr); l.setLabelFor(recentSwatchPanel); recentLabelHolder.add(l, BorderLayout.NORTH); gbc.weighty = 0.0; @@ -144,7 +145,7 @@ public class SettableColorSwatchChooserPanel extends AbstractColorChooserPanel { historySwatchPanel.addMouseListener(historySwatchListener); historySwatchPanel.setBorder(border); JPanel historyLabelHolder = new JPanel(new BorderLayout()); - JLabel historyLabel = DockingUtils.createNonHtmlLabel("History:"); + JLabel historyLabel = new GLabel("History:"); historyLabel.setLabelFor(historySwatchPanel); historyLabelHolder.add(historyLabel, BorderLayout.NORTH); gbc.weighty = 0.0; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/util/AnimatedIcon.java b/Ghidra/Framework/Docking/src/main/java/docking/util/AnimatedIcon.java index 713a24789a..3a18e876e0 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/util/AnimatedIcon.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/util/AnimatedIcon.java @@ -29,7 +29,7 @@ public class AnimatedIcon implements Icon { /** best guess at how many timer invocations may happen before paint gets called*/ private static final int MAGIC_TIMER_CALLS_WITHOUT_PAINT_CALL = 5; - private final List iconList; + private final List iconList; private int currentIconIndex = 0; private Component component; private int height; @@ -39,7 +39,7 @@ public class AnimatedIcon implements Icon { private Timer timer; private int paintCounter = 0; - public AnimatedIcon(List icons, int frameDelay, int framesToSkip) { + public AnimatedIcon(List icons, int frameDelay, int framesToSkip) { this.iconList = icons; this.skipFrames = framesToSkip; timer = new Timer(frameDelay, new ActionListener() { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/AbstractGCellRenderer.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/AbstractGCellRenderer.java index 36cbe09395..245f7c9037 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/AbstractGCellRenderer.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/AbstractGCellRenderer.java @@ -17,9 +17,13 @@ package docking.widgets; import java.awt.*; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JComponent; import javax.swing.border.Border; +import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; + /** * A common base class for list and table renderer objects, unifying the Ghidra look and feel. *

@@ -27,7 +31,7 @@ import javax.swing.border.Border; * background colors, and highlights the drop target in a drag-n-drop operation. * */ -public abstract class AbstractGCellRenderer extends JLabel { +public abstract class AbstractGCellRenderer extends GDHtmlLabel { private static final Color ALTERNATE_BACKGROUND_COLOR = new Color(237, 243, 254); @@ -46,9 +50,6 @@ public abstract class AbstractGCellRenderer extends JLabel { return !Boolean.parseBoolean(disable); } - // taken from BasicHTML.htmlDisable, which is private - public static final String HTML_DISABLE_STRING = "html.disable"; - protected final Border focusBorder; protected final Border noFocusBorder; protected Font defaultFont; @@ -81,7 +82,7 @@ public abstract class AbstractGCellRenderer extends JLabel { * @param enable true to enable HTML rendering; false to disable it */ public void setHTMLRenderingEnabled(boolean enable) { - putClientProperty(HTML_DISABLE_STRING, !enable); + putClientProperty(DockingUtils.HTML_DISABLE_STRING, !enable); } public void setShouldAlternateRowBackgroundColors(boolean alternate) { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/DropDownTextField.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/DropDownTextField.java index eb159ca731..e11cf2e6af 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/DropDownTextField.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/DropDownTextField.java @@ -27,6 +27,7 @@ import javax.swing.event.*; import org.apache.commons.lang3.StringUtils; import docking.DockingUtils; +import docking.widgets.label.GDLabel; import generic.util.WindowUtilities; import ghidra.util.StringUtilities; import ghidra.util.SystemUtilities; @@ -156,7 +157,7 @@ public class DropDownTextField extends JTextField { } protected void setPreviewPaneAttributes() { - previewLabel = DockingUtils.createNonHtmlLabel(); + previewLabel = new GDLabel(); previewLabel.setOpaque(true); previewLabel.setBackground(TOOLTIP_WINDOW_BGCOLOR); previewLabel.setVerticalAlignment(SwingConstants.TOP); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/FindDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/FindDialog.java index e9e9af1190..267afb5a34 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/FindDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/FindDialog.java @@ -23,8 +23,8 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GLabel; public class FindDialog extends DialogComponentProvider { @@ -98,7 +98,7 @@ public class FindDialog extends DialogComponentProvider { } }); - JLabel findLabel = DockingUtils.createNonHtmlLabel("Find: "); + JLabel findLabel = new GLabel("Find: "); // associate this label with a mnemonic key that activates the text field findLabel.setDisplayedMnemonic(KeyEvent.VK_N); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/ListSelectionDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/ListSelectionDialog.java index d3aa9ac3e4..d9de1abdf3 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/ListSelectionDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/ListSelectionDialog.java @@ -22,8 +22,10 @@ import java.util.List; import javax.swing.*; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; import docking.options.editor.ButtonPanelFactory; +import docking.widgets.label.GLabel; import docking.widgets.table.AbstractGTableModel; import docking.widgets.table.RowObjectTableModel; @@ -127,7 +129,7 @@ public class ListSelectionDialog extends DialogComponentProvider { selectionListener = new SelectionListener<>(); field.addDropDownSelectionChoiceListener(selectionListener); - JLabel jLabel = DockingUtils.createNonHtmlLabel(label); + JLabel jLabel = new GLabel(label); jLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 20)); panel.add(jLabel, BorderLayout.WEST); panel.add(field, BorderLayout.CENTER); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/OptionDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/OptionDialog.java index 4ed2404025..ccfa83cc60 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/OptionDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/OptionDialog.java @@ -22,8 +22,11 @@ import java.util.List; import javax.swing.*; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; import docking.widgets.dialogs.*; +import docking.widgets.label.GHtmlLabel; +import docking.widgets.label.GIconLabel; import ghidra.util.HTMLUtilities; import ghidra.util.Msg; import ghidra.util.exception.AssertException; @@ -275,11 +278,10 @@ public class OptionDialog extends DialogComponentProvider { private JPanel buildMessagePanel(String message, int messageType, Icon icon) { JPanel panel = new JPanel(new BorderLayout()); - JLabel iconLabel = DockingUtils.createNonHtmlLabel( - (icon == null) ? getIconForMessageType(messageType) : icon); JPanel textPanel = createTextPanel(message); textPanel.setMaximumSize(textPanel.getPreferredSize()); - panel.add(iconLabel, BorderLayout.WEST); + panel.add(new GIconLabel((icon == null) ? getIconForMessageType(messageType) : icon), + BorderLayout.WEST); panel.add(textPanel, BorderLayout.CENTER); return panel; } @@ -360,7 +362,7 @@ public class OptionDialog extends DialogComponentProvider { this.dialogMessage = message; if (HTMLUtilities.isHTML(dialogMessage)) { - JLabel messageLabel = DockingUtils.createHtmlLabel(dialogMessage); + JLabel messageLabel = new GHtmlLabel(dialogMessage); messageLabel.setName(MESSAGE_COMPONENT_NAME); JPanel panel = new JPanel(new BorderLayout()); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordChangeDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordChangeDialog.java index c147afeb88..f27a95a6ea 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordChangeDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordChangeDialog.java @@ -22,7 +22,7 @@ import java.util.Arrays; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.util.MessageType; import ghidra.util.Msg; import ghidra.util.layout.PairLayout; @@ -44,23 +44,23 @@ public class PasswordChangeDialog extends DialogComponentProvider { wp.setBorder(BorderFactory.createEmptyBorder(5, 10, 0, 10)); if (serverName != null) { - wp.add(DockingUtils.createNonHtmlLabel(serverType + ":")); - wp.add(DockingUtils.createNonHtmlLabel(serverName)); + wp.add(new GLabel(serverType + ":")); + wp.add(new GLabel(serverName)); } if (userID != null) { - wp.add(DockingUtils.createNonHtmlLabel("User ID:")); - JLabel nameLabel = DockingUtils.createNonHtmlLabel(userID); + wp.add(new GLabel("User ID:")); + JLabel nameLabel = new GLabel(userID); nameLabel.setName("NAME-COMPONENT"); wp.add(nameLabel); } - wp.add(DockingUtils.createNonHtmlLabel("New Password:")); + wp.add(new GLabel("New Password:")); passwordField1 = new JPasswordField(16); passwordField1.setName("PASSWORD-ENTRY1-COMPONENT"); wp.add(passwordField1); - wp.add(DockingUtils.createNonHtmlLabel("Repeat Password:")); + wp.add(new GLabel("Repeat Password:")); passwordField2 = new JPasswordField(16); passwordField2.setName("PASSWORD-ENTRY2-COMPONENT"); passwordField2.addActionListener(new ActionListener() { @@ -71,7 +71,7 @@ public class PasswordChangeDialog extends DialogComponentProvider { }); wp.add(passwordField2); - wp.add(DockingUtils.createNonHtmlLabel()); + wp.add(new GLabel()); KeyListener keyListener = new KeyListener() { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordDialog.java index 231d6dacce..0f26b0e22d 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/PasswordDialog.java @@ -21,7 +21,8 @@ import java.awt.event.*; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GLabel; import ghidra.util.MessageType; import ghidra.util.layout.PairLayout; @@ -57,8 +58,8 @@ public class PasswordDialog extends DialogComponentProvider { int defaultChoice, boolean includeAnonymousOption) { this(title, serverType, serverName, passPrompt, namePrompt, defaultUserID); if (choicePrompt != null) { - workPanel.add(DockingUtils.createNonHtmlLabel(choicePrompt)); - choiceCB = new JComboBox<>(choices); + workPanel.add(new GLabel(choicePrompt)); + choiceCB = new GComboBox<>(choices); choiceCB.setName("CHOICES-COMPONENT"); choiceCB.setSelectedIndex(defaultChoice); workPanel.add(choiceCB); @@ -80,7 +81,7 @@ public class PasswordDialog extends DialogComponentProvider { choiceCB.setEnabled(enableOtherFields); } }); - workPanel.add(DockingUtils.createNonHtmlLabel("")); + workPanel.add(new GLabel("")); workPanel.add(anonymousAccess); } } @@ -125,25 +126,24 @@ public class PasswordDialog extends DialogComponentProvider { workPanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 0, 10)); if (serverName != null) { - workPanel.add(DockingUtils.createNonHtmlLabel(serverType + ":")); - workPanel.add(DockingUtils.createNonHtmlLabel(serverName)); + workPanel.add(new GLabel(serverType + ":")); + workPanel.add(new GLabel(serverName)); } if (namePrompt != null) { - workPanel.add(DockingUtils.createNonHtmlLabel(namePrompt)); + workPanel.add(new GLabel(namePrompt)); nameField = new JTextField(defaultUserID, 16); nameField.setName("NAME-ENTRY-COMPONENT"); workPanel.add(nameField); } else if (defaultUserID != null) { - workPanel.add(DockingUtils.createNonHtmlLabel("User ID:")); - JLabel nameLabel = DockingUtils.createNonHtmlLabel(defaultUserID); + workPanel.add(new GLabel("User ID:")); + JLabel nameLabel = new GLabel(defaultUserID); nameLabel.setName("NAME-COMPONENT"); workPanel.add(nameLabel); } - workPanel.add( - DockingUtils.createNonHtmlLabel(passPrompt != null ? passPrompt : "Password:")); + workPanel.add(new GLabel(passPrompt != null ? passPrompt : "Password:")); passwordField = new JPasswordField(16); passwordField.setName("PASSWORD-ENTRY-COMPONENT"); workPanel.add(passwordField); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/checkbox/GCheckBox.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/checkbox/GCheckBox.java new file mode 100644 index 0000000000..336f517f66 --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/checkbox/GCheckBox.java @@ -0,0 +1,132 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package docking.widgets.checkbox; + +import javax.swing.*; + +import docking.DockingUtils; + +/** + * A {@link JCheckBox} that has HTML rendering disabled + */ +public class GCheckBox extends JCheckBox { + + /** + * Creates a check box with no text or icon, with HTML rendering disabled. + *

+ * See {@link JCheckBox#JCheckBox()} + *

+ */ + public GCheckBox() { + super(); + init(); + } + + /** + * Creates a check box with an icon, with HTML rendering disabled. + *

+ * See {@link JCheckBox#JCheckBox(Icon)} + *

+ * + * @param icon image to display + */ + public GCheckBox(Icon icon) { + super(icon); + init(); + } + + /** + * Creates a check box with an icon and initial selected state, with HTML rendering disabled. + *

+ * See {@link JCheckBox#JCheckBox(Icon, boolean)} + *

+ * + * @param icon image to display + * @param selected initial selection state, true means selected + */ + public GCheckBox(Icon icon, boolean selected) { + super(icon, selected); + init(); + } + + /** + * Creates a check box with the specified text, with HTML rendering disabled. + *

+ * See {@link JCheckBox#JCheckBox(String)} + *

+ * + * @param text text of the check box + */ + public GCheckBox(String text) { + super(text); + init(); + } + + /** + * Creates a check box where properties are taken from the + * Action supplied, with HTML rendering disabled. + *

+ * See {@link JCheckBox#JCheckBox(Action)} + *

+ * + * @param a {@code Action} used to specify the new check box + */ + public GCheckBox(Action a) { + super(a); + init(); + } + + /** + * Creates a check box with the specified text and initial selected state, with HTML + * rendering disabled. + * + * @param text text of the check box. + * @param selected initial selection state, true means selected + */ + public GCheckBox(String text, boolean selected) { + super(text, selected); + init(); + } + + /** + * Creates a check box with the specified text and icon, with HTML rendering disabled. + * + * @param text text of the check box + * @param icon image to display + */ + public GCheckBox(String text, Icon icon) { + super(text, icon); + init(); + } + + /** + * Creates a check box with the specified text and icon and initial selected state, + * with HTML rendering disabled. + * + * @param text text of the check box + * @param icon image to display + * @param selected initial selection state, true means selected + */ + public GCheckBox(String text, Icon icon, boolean selected) { + super(text, icon, selected); + init(); + } + + private void init() { + DockingUtils.turnOffHTMLRendering(this); + } + +} diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/checkbox/GHtmlCheckBox.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/checkbox/GHtmlCheckBox.java new file mode 100644 index 0000000000..4bdabc2d81 --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/checkbox/GHtmlCheckBox.java @@ -0,0 +1,118 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package docking.widgets.checkbox; + +import javax.swing.*; + +/** + * A {@link JCheckBox} that allows HTML rendering. + */ +public class GHtmlCheckBox extends JCheckBox { + + /** + * Creates a check box with no text or icon, with HTML rendering allowed. + *

+ * See {@link JCheckBox#JCheckBox()} + *

+ */ + public GHtmlCheckBox() { + super(); + } + + /** + * Creates a check box with an icon, with HTML rendering allowed. + *

+ * See {@link JCheckBox#JCheckBox(Icon)} + *

+ * + * @param icon image to display + */ + public GHtmlCheckBox(Icon icon) { + super(icon); + } + + /** + * Creates a check box with an icon and initial selected state, with HTML rendering allowed. + *

+ * See {@link JCheckBox#JCheckBox(Icon, boolean)} + *

+ * + * @param icon image to display + * @param selected initial selection state, true means selected + */ + public GHtmlCheckBox(Icon icon, boolean selected) { + super(icon, selected); + } + + /** + * Creates a check box with the specified text, with HTML rendering allowed. + *

+ * See {@link JCheckBox#JCheckBox(String)} + *

+ * + * @param text text of the check box + */ + public GHtmlCheckBox(String text) { + super(text); + } + + /** + * Creates a check box where properties are taken from the + * Action supplied, with HTML rendering allowed. + *

+ * See {@link JCheckBox#JCheckBox(Action)} + *

+ * + * @param a {@code Action} used to specify the new check box + */ + public GHtmlCheckBox(Action a) { + super(a); + } + + /** + * Creates a check box with the specified text and initial selected state, with HTML + * rendering allowed. + * + * @param text text of the check box. + * @param selected initial selection state, true means selected + */ + public GHtmlCheckBox(String text, boolean selected) { + super(text, selected); + } + + /** + * Creates a check box with the specified text and icon, with HTML rendering allowed. + * + * @param text text of the check box + * @param icon image to display + */ + public GHtmlCheckBox(String text, Icon icon) { + super(text, icon); + } + + /** + * Creates a check box with the specified text and icon and initial selected state, + * with HTML rendering allowed. + * + * @param text text of the check box + * @param icon image to display + * @param selected initial selection state, true means selected + */ + public GHtmlCheckBox(String text, Icon icon, boolean selected) { + super(text, icon, selected); + } + +} diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/combobox/GComboBox.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/combobox/GComboBox.java new file mode 100644 index 0000000000..df912deaeb --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/combobox/GComboBox.java @@ -0,0 +1,83 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package docking.widgets.combobox; + +import java.util.Vector; + +import javax.swing.ComboBoxModel; +import javax.swing.JComboBox; + +import docking.DockingUtils; + +/** + * A {@link JComboBox} that disables HTML rendering. + * + * @param the type of the elements of this combo box + */ +public class GComboBox extends JComboBox { + + /** + * Creates an empty combobox with a default data model. + *

+ * See {@link JComboBox#JComboBox()} + *

+ */ + public GComboBox() { + super(); + init(); + } + + /** + * Creates a combobox using the specified model. + *

+ * See {@link JComboBox#JComboBox(ComboBoxModel)} + *

+ * @param aModel the {@link ComboBoxModel} of generic type {@code E} + */ + public GComboBox(ComboBoxModel aModel) { + super(aModel); + init(); + } + + /** + * Creates a combobox using the specified items. + *

+ * See {@link JComboBox#JComboBox(Object[])} + *

+ * @param items array of objects of generic type {@code E} to insert into the combo box + */ + public GComboBox(E[] items) { + super(items); + init(); + } + + /** + * Creates a combobox using the specified items. + *

+ * See {@link JComboBox#JComboBox(Vector)} + *

+ * @param items a vector containing objects of generic type {@code E} to insert into the combo box + */ + public GComboBox(Vector items) { + super(items); + init(); + } + + private void init() { + DockingUtils.turnOffHTMLRendering(this); + } + +} diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/combobox/GhidraComboBox.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/combobox/GhidraComboBox.java index a97e0066a8..265979d16e 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/combobox/GhidraComboBox.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/combobox/GhidraComboBox.java @@ -26,6 +26,8 @@ import javax.swing.event.DocumentListener; import javax.swing.plaf.ComboBoxUI; import javax.swing.text.*; +import docking.DockingUtils; + /** * GhidraComboBox adds the following features: * @@ -55,8 +57,8 @@ import javax.swing.text.*; * setEnabled(true or false)) in the middle of the button press. */ public class GhidraComboBox extends JComboBox { - private ArrayList listeners = new ArrayList(); - private ArrayList docListeners = new ArrayList(); + private ArrayList listeners = new ArrayList<>(); + private ArrayList docListeners = new ArrayList<>(); private boolean setSelectedFlag = false; private boolean forwardEnter; @@ -67,6 +69,7 @@ public class GhidraComboBox extends JComboBox { */ public GhidraComboBox() { super(); + init(); } /** @@ -75,6 +78,7 @@ public class GhidraComboBox extends JComboBox { */ public GhidraComboBox(ComboBoxModel aModel) { super(aModel); + init(); } /** @@ -84,6 +88,7 @@ public class GhidraComboBox extends JComboBox { */ public GhidraComboBox(E[] items) { super(items); + init(); } /** @@ -93,6 +98,11 @@ public class GhidraComboBox extends JComboBox { */ public GhidraComboBox(Vector items) { super(items); + init(); + } + + private void init() { + DockingUtils.turnOffHTMLRendering(this); } @Override diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/conditiontestpanel/ConditionTestPanel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/conditiontestpanel/ConditionTestPanel.java index cbf919c74b..a872487eff 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/conditiontestpanel/ConditionTestPanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/conditiontestpanel/ConditionTestPanel.java @@ -26,8 +26,9 @@ import javax.swing.*; import javax.swing.border.BevelBorder; import javax.swing.border.Border; -import docking.DockingUtils; import docking.widgets.EmptyBorderButton; +import docking.widgets.label.GDHtmlLabel; +import docking.widgets.label.GDLabel; import ghidra.util.HTMLUtilities; import ghidra.util.exception.CancelledException; import ghidra.util.layout.PairLayout; @@ -201,12 +202,11 @@ public class ConditionTestPanel extends JPanel { private Component createSummaryPanel() { JPanel panel = new JPanel(new GridLayout(1, 3, 20, 0)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - runsLabel = - DockingUtils.createNonHtmlLabel("Tests: 0/" + conditionTestModel.getTestCount()); + runsLabel = new GDLabel("Tests: 0/" + conditionTestModel.getTestCount()); panel.add(runsLabel); - errorsLabel = DockingUtils.createNonHtmlLabel("Errors: 0"); + errorsLabel = new GDLabel("Errors: 0"); panel.add(errorsLabel); - warningsLabel = DockingUtils.createNonHtmlLabel("Warnings: 0"); + warningsLabel = new GDLabel("Warnings: 0"); panel.add(warningsLabel); return panel; @@ -269,7 +269,7 @@ public class ConditionTestPanel extends JPanel { // Inner Classes //================================================================================================== - private class ScrollableLabel extends JLabel implements Scrollable { + private class ScrollableLabel extends GDHtmlLabel implements Scrollable { @Override public Dimension getPreferredScrollableViewportSize() { @@ -368,7 +368,7 @@ public class ConditionTestPanel extends JPanel { checkbox = new JCheckBox(); checkbox.setSelected(true); add(checkbox); - label = DockingUtils.createNonHtmlLabel(test.getName()); + label = new GDLabel(test.getName()); add(label); label.setToolTipText(test.getDescription()); checkbox.addChangeListener(e -> { @@ -406,7 +406,7 @@ public class ConditionTestPanel extends JPanel { public TestStatusPanel(ConditionTester test) { super(new BorderLayout()); this.test = test; - label = DockingUtils.createNonHtmlLabel(); + label = new GDLabel(); label.setHorizontalAlignment(SwingConstants.LEFT); add(label); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/InputDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/InputDialog.java index 3ffe67934c..6e2efae6f7 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/InputDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/InputDialog.java @@ -23,7 +23,7 @@ import javax.swing.event.DocumentListener; import javax.swing.text.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.util.layout.PairLayout; /** @@ -225,7 +225,7 @@ public class InputDialog extends DialogComponentProvider { textFields[i] = new MyTextField(initialValues[i]); textFields[i].addKeyListener(keyListener); textFields[i].setName("input.dialog.text.field." + i); - panel.add(DockingUtils.createNonHtmlLabel(inputLabels[i], SwingConstants.RIGHT)); + panel.add(new GLabel(inputLabels[i], SwingConstants.RIGHT)); panel.add(textFields[i]); } panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/InputWithChoicesDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/InputWithChoicesDialog.java index ec69d7d20a..0d0fb281ce 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/InputWithChoicesDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/InputWithChoicesDialog.java @@ -21,8 +21,9 @@ import java.awt.Dimension; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GHtmlLabel; /** * A dialog that has text fields to get user input. @@ -110,7 +111,7 @@ public class InputWithChoicesDialog extends DialogComponentProvider { workPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // COMBO BOX PANEL - JLabel messageLabel = DockingUtils.createNonHtmlLabel(labelText); + JLabel messageLabel = new GHtmlLabel(labelText); messageLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0)); combo = createComboBox(optionValues, initialValue); @@ -122,7 +123,7 @@ public class InputWithChoicesDialog extends DialogComponentProvider { // ICON PANEL (if an icon has been supplied) if (messageIcon != null) { - JLabel iconLabel = DockingUtils.createNonHtmlLabel(); + JLabel iconLabel = new GDLabel(); iconLabel.setIcon(messageIcon); iconLabel.setVerticalAlignment(SwingConstants.TOP); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/MultiLineInputDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/MultiLineInputDialog.java index 27c7403de2..7fa9916ec3 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/MultiLineInputDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/MultiLineInputDialog.java @@ -23,6 +23,8 @@ import javax.swing.*; import docking.DialogComponentProvider; import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.framework.OperatingSystem; import ghidra.framework.Platform; @@ -69,7 +71,7 @@ public class MultiLineInputDialog extends DialogComponentProvider { } inputTextArea.selectAll(); - JLabel messageLabel = DockingUtils.createNonHtmlLabel(); + JLabel messageLabel = new GDLabel(); messageLabel.setText(messageText); messageLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0)); @@ -78,7 +80,7 @@ public class MultiLineInputDialog extends DialogComponentProvider { if (OS == OperatingSystem.MAC_OS_X) { metaKeyText = "Command"; } - JLabel hintLabel = DockingUtils.createNonHtmlLabel("(" + metaKeyText + "-Enter to accept)"); + JLabel hintLabel = new GLabel("(" + metaKeyText + "-Enter to accept)"); hintLabel.setHorizontalAlignment(SwingConstants.CENTER); Font font = hintLabel.getFont(); Font smallerFont = font.deriveFont(12F); @@ -90,7 +92,7 @@ public class MultiLineInputDialog extends DialogComponentProvider { dataPanel.add(new JScrollPane(inputTextArea), BorderLayout.CENTER); dataPanel.add(hintLabel, BorderLayout.SOUTH); - JLabel iconLabel = DockingUtils.createNonHtmlLabel(); + JLabel iconLabel = new GDLabel(); iconLabel.setIcon(icon); iconLabel.setVerticalAlignment(SwingConstants.TOP); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/MultiLineMessageDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/MultiLineMessageDialog.java index 1c3893abca..a03d288805 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/MultiLineMessageDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/MultiLineMessageDialog.java @@ -25,6 +25,8 @@ import org.apache.commons.lang3.StringUtils; import docking.*; import docking.widgets.OptionDialog; +import docking.widgets.label.GIconLabel; +import docking.widgets.label.GLabel; import ghidra.util.HTMLUtilities; public class MultiLineMessageDialog extends DialogComponentProvider { @@ -87,7 +89,7 @@ public class MultiLineMessageDialog extends DialogComponentProvider { workPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); if (!StringUtils.isBlank(shortMessage)) { - JLabel shortMessageLabel = DockingUtils.createNonHtmlLabel(shortMessage); + JLabel shortMessageLabel = new GLabel(shortMessage); shortMessageLabel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 10)); workPanel.add(shortMessageLabel, BorderLayout.NORTH); } @@ -134,7 +136,7 @@ public class MultiLineMessageDialog extends DialogComponentProvider { Icon icon = OptionDialog.getIconForMessageType(messageType); if (icon != null) { - JLabel iconLabel = DockingUtils.createNonHtmlLabel(icon); + JLabel iconLabel = new GIconLabel(icon); iconLabel.setBorder(BorderFactory.createEmptyBorder(1, 10, 1, 10)); workPanel.add(iconLabel, BorderLayout.WEST); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/NumberInputDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/NumberInputDialog.java index ca7f3a6861..31be805028 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/NumberInputDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/NumberInputDialog.java @@ -21,7 +21,9 @@ import java.math.BigInteger; import javax.swing.*; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; +import docking.widgets.label.GDLabel; import docking.widgets.textfield.IntegerTextField; /** @@ -267,7 +269,7 @@ public class NumberInputDialog extends DialogComponentProvider { JPanel panel = new JPanel(new BorderLayout()); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - label = DockingUtils.createNonHtmlLabel(prompt); + label = new GDLabel(prompt); numberInputField = new IntegerTextField(12); numberInputField.addChangeListener(e -> updateOKButtonEnablement()); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/SettingsDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/SettingsDialog.java index 88c8f20d71..c1e5e8ed81 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/SettingsDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/dialogs/SettingsDialog.java @@ -23,7 +23,9 @@ import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import javax.swing.table.*; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; +import docking.widgets.combobox.GComboBox; import docking.widgets.table.DefaultSortedTableModel; import docking.widgets.table.GTable; import ghidra.docking.settings.*; @@ -229,7 +231,7 @@ public class SettingsDialog extends DialogComponentProvider { final static int BOOLEAN = 1; private int mode; - private JComboBox comboBox = new JComboBox(); + private JComboBox comboBox = new GComboBox<>(); private JCheckBox checkBox = new JCheckBox(); private final Runnable editStopped = new Runnable() { @@ -241,7 +243,6 @@ public class SettingsDialog extends DialogComponentProvider { SettingsEditor() { super(); - DockingUtils.turnOffHTMLRendering(comboBox); comboBox.addPopupMenuListener(this); } @@ -254,7 +255,7 @@ public class SettingsDialog extends DialogComponentProvider { case ENUM: return getComboBoxEnum(); case BOOLEAN: - return new Boolean(checkBox.isSelected()); + return Boolean.valueOf(checkBox.isSelected()); } throw new AssertException(); } @@ -262,7 +263,7 @@ public class SettingsDialog extends DialogComponentProvider { private StringChoices getComboBoxEnum() { String[] items = new String[comboBox.getItemCount()]; for (int i = 0; i < items.length; i++) { - items[i] = (String) comboBox.getItemAt(i); + items[i] = comboBox.getItemAt(i); } StringChoices choices = new StringChoices(items); choices.setSelectedValue(comboBox.getSelectedIndex()); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/DirectoryList.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/DirectoryList.java index 43c98a284d..613309d4ae 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/DirectoryList.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/DirectoryList.java @@ -26,8 +26,8 @@ import java.util.List; import javax.swing.*; -import docking.DockingUtils; import docking.event.mouse.GMouseListenerAdapter; +import docking.widgets.label.GDLabel; import docking.widgets.list.GList; import ghidra.util.exception.AssertException; @@ -122,7 +122,7 @@ class DirectoryList extends GList implements GhidraFileChooserDirectoryMod updateChooserForSelection(); }); - listEditorLabel = DockingUtils.createNonHtmlLabel(); + listEditorLabel = new GDLabel(); listEditorLabel.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/FileEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/FileEditor.java index d67a4a164e..4968df99a9 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/FileEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/FileEditor.java @@ -23,7 +23,7 @@ import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.table.TableCellEditor; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.util.Msg; import ghidra.util.filechooser.GhidraFileChooserModel; @@ -44,7 +44,7 @@ class FileEditor extends AbstractCellEditor implements TableCellEditor { this.directoryTable = table; this.model = model; - iconLabel = DockingUtils.createNonHtmlLabel(); + iconLabel = new GDLabel(); iconLabel.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GFileChooserOptionsDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GFileChooserOptionsDialog.java index fdc88e5653..3756186107 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GFileChooserOptionsDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GFileChooserOptionsDialog.java @@ -18,7 +18,7 @@ package docking.widgets.filechooser; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GLabel; import ghidra.framework.preferences.Preferences; import ghidra.util.layout.PairLayout; @@ -51,7 +51,7 @@ class GFileChooserOptionsDialog extends DialogComponentProvider { showDotFilesCheckBox = new JCheckBox(); showDotFilesCheckBox.setSelected(true); - JLabel label = DockingUtils.createNonHtmlLabel("Show '.' files"); + JLabel label = new GLabel("Show '.' files"); label.setToolTipText("When toggled on the file chooser will show files " + "with names that begin with a '.' character"); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GhidraFileChooser.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GhidraFileChooser.java index f25abca607..c6e24750a2 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GhidraFileChooser.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GhidraFileChooser.java @@ -32,6 +32,9 @@ import javax.swing.filechooser.FileSystemView; import docking.*; import docking.framework.DockingApplicationConfiguration; import docking.widgets.*; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import docking.widgets.list.GListCellRenderer; import ghidra.GhidraApplicationLayout; import ghidra.framework.*; @@ -355,7 +358,7 @@ public class GhidraFileChooser extends DialogComponentProvider } private JPanel buildFileNamePanel() { - JLabel filenameLabel = DockingUtils.createNonHtmlLabel("File name:"); + JLabel filenameLabel = new GDLabel("File name:"); FileDropDownSelectionDataModel model = new FileDropDownSelectionDataModel(this); filenameTextField = new DropDownSelectionTextField<>(model); filenameTextField.setMatchingWindowHeight(200); @@ -384,9 +387,8 @@ public class GhidraFileChooser extends DialogComponentProvider filenameTextField.setName("filenameTextField"); - JLabel filterLabel = DockingUtils.createNonHtmlLabel("Type:"); - filterCombo = new JComboBox<>(); - DockingUtils.turnOffHTMLRendering(filterCombo); + JLabel filterLabel = new GLabel("Type:"); + filterCombo = new GComboBox<>(); filterCombo.setRenderer(GListCellRenderer.createDefaultCellTextRenderer( gff -> gff != null ? gff.getDescription() : "")); filterCombo.addItemListener(e -> rescanCurrentDirectory()); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GhidraFileChooserPanel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GhidraFileChooserPanel.java index 163300f2b4..e390661150 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GhidraFileChooserPanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GhidraFileChooserPanel.java @@ -25,10 +25,10 @@ import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import docking.DockingUtils; import docking.dnd.DropTgtAdapter; import docking.dnd.Droppable; import docking.widgets.OptionDialog; +import docking.widgets.label.GLabel; import ghidra.framework.preferences.Preferences; import ghidra.util.filechooser.GhidraFileFilter; @@ -158,7 +158,7 @@ public class GhidraFileChooserPanel extends JPanel implements Droppable { gbc.gridy = 0; if (!createBorder && title != null) { - add(DockingUtils.createNonHtmlLabel(title), gbc); + add(new GLabel(title), gbc); } gbc.fill = GridBagConstraints.HORIZONTAL; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filter/ClearFilterLabel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filter/ClearFilterLabel.java index 408d066093..a6cd265669 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filter/ClearFilterLabel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filter/ClearFilterLabel.java @@ -28,6 +28,7 @@ import org.jdesktop.animation.timing.TimingTargetAdapter; import org.jdesktop.animation.timing.interpolation.PropertySetter; import docking.util.AnimationUtils; +import docking.widgets.label.GIconLabel; import ghidra.util.SystemUtilities; import resources.Icons; import resources.ResourceManager; @@ -36,7 +37,7 @@ import resources.ResourceManager; * A label that displays an icon that, when clicked, will clear the contents of the * associated filter. */ -public class ClearFilterLabel extends JLabel { +public class ClearFilterLabel extends GIconLabel { private Icon RAW_ICON = Icons.DELETE_ICON; private Icon ICON = ResourceManager.getScaledIcon(RAW_ICON, 10, 10); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filter/FilterOptionsEditorDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filter/FilterOptionsEditorDialog.java index ab92531b0e..9cd58aeb0d 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/filter/FilterOptionsEditorDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/filter/FilterOptionsEditorDialog.java @@ -24,8 +24,12 @@ import java.util.List; import javax.swing.*; import javax.swing.border.EmptyBorder; -import docking.*; +import docking.DialogComponentProvider; +import docking.DisabledComponentLayerFactory; import docking.widgets.InlineComponentTitledPanel; +import docking.widgets.combobox.GComboBox; +import docking.widgets.label.GIconLabel; +import docking.widgets.label.GLabel; import docking.widgets.list.GListCellRenderer; import ghidra.util.HelpLocation; import ghidra.util.layout.*; @@ -209,17 +213,13 @@ public class FilterOptionsEditorDialog extends DialogComponentProvider { } add(containsButton); - add(DockingUtils.createNonHtmlLabel( - FilterOptions.getIcon(TextFilterStrategy.CONTAINS))); + add(new GIconLabel(FilterOptions.getIcon(TextFilterStrategy.CONTAINS))); add(startsWithButton); - add(DockingUtils.createNonHtmlLabel( - FilterOptions.getIcon(TextFilterStrategy.STARTS_WITH))); + add(new GIconLabel(FilterOptions.getIcon(TextFilterStrategy.STARTS_WITH))); add(matchesExactlyButton); - add(DockingUtils.createNonHtmlLabel( - FilterOptions.getIcon(TextFilterStrategy.MATCHES_EXACTLY))); + add(new GIconLabel(FilterOptions.getIcon(TextFilterStrategy.MATCHES_EXACTLY))); add(regularExpressionButton); - add(DockingUtils.createNonHtmlLabel( - FilterOptions.getIcon(TextFilterStrategy.REGULAR_EXPRESSION))); + add(new GIconLabel(FilterOptions.getIcon(TextFilterStrategy.REGULAR_EXPRESSION))); } } @@ -416,11 +416,11 @@ public class FilterOptionsEditorDialog extends DialogComponentProvider { optionsPanel.setLayout(new PairLayout()); // Delimiter Row - JLabel delimiterCharacterFieldName = DockingUtils.createNonHtmlLabel("Delimiter:"); + JLabel delimiterCharacterFieldName = new GLabel("Delimiter:"); delimiterCharacterFieldName.setToolTipText( "Set the character used to separate filter terms."); - delimiterCharacterCB = new JComboBox<>(FilterOptions.VALID_MULTITERM_DELIMITERS_ARRAY); + delimiterCharacterCB = new GComboBox<>(FilterOptions.VALID_MULTITERM_DELIMITERS_ARRAY); delimiterCharacterCB.setRenderer(new DelimiterListCellRenderer()); JPanel fixedSizePanel = new JPanel(); @@ -431,7 +431,7 @@ public class FilterOptionsEditorDialog extends DialogComponentProvider { optionsPanel.add(fixedSizePanel); // Mode Row - JLabel label = DockingUtils.createNonHtmlLabel("Evaluation Mode:"); + JLabel label = new GLabel("Evaluation Mode:"); JPanel buttonGroupPanel = new JPanel(); buttonGroupPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/imagepanel/ImagePanel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/imagepanel/ImagePanel.java index 2a67dc7887..6b19fd35b0 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/imagepanel/ImagePanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/imagepanel/ImagePanel.java @@ -22,6 +22,7 @@ import java.util.Arrays; import javax.swing.*; +import docking.widgets.label.GIconLabel; import resources.icons.EmptyIcon; /** @@ -501,7 +502,7 @@ public class ImagePanel extends JPanel { translateEnabled = enabled; } - private class PanAndZoomComponent extends JLabel { + private class PanAndZoomComponent extends GIconLabel { public static final String TRANSLATION_RESET_PROPERTY = "translation-reset"; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GDHtmlLabel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GDHtmlLabel.java new file mode 100644 index 0000000000..e0d9b8eea4 --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GDHtmlLabel.java @@ -0,0 +1,96 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package docking.widgets.label; + +import javax.swing.*; + +/** + * A 'dynamic' label with HTML rendering allowed. + *

+ * See also: + * + * + * + * + * + * + * + *
ClassMutable textHTML renderingDescription
{@link GLabel}ImmutableNONon-html unchangeable label
{@link GDLabel}MutableNONon-html changeable label
{@link GHtmlLabel}ImmutableYESHtml unchangeable label
{@link GDHtmlLabel}MutableYESHtml changeable label
{@link GIconLabel}N/ANOLabel that only has an icon image, no text
+ */ +public class GDHtmlLabel extends JLabel { + + /** + * Creates a label with no image and no text, with {@link SwingConstants#LEADING} horizontal + * alignment, with HTML rendering allowed. + *

+ * See {@link JLabel#JLabel()}. + *

+ */ + public GDHtmlLabel() { + super(); + } + + /** + * Creates a label with the specified text, with {@link SwingConstants#LEADING} horizontal + * alignment, with HTML rendering allowed. + *

+ * See {@link JLabel#JLabel(String)}. + *

+ * @param text string to be displayed by the label + */ + public GDHtmlLabel(String text) { + super(text); + } + + /** + * Creates a label with the specified text and horizontal alignment, + * with HTML rendering allowed. + *

+ * See {@link JLabel#JLabel(String, int)}. + *

+ * @param text string to be displayed by the label + * @param horizontalAlignment One of + * {@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, + * {@link SwingConstants#RIGHT}, + * {@link SwingConstants#LEADING}, + * {@link SwingConstants#TRAILING} + */ + public GDHtmlLabel(String text, int horizontalAlignment) { + super(text, horizontalAlignment); + } + + /** + * Creates a label with the specified text, image and horizontal alignment, + * with HTML rendering allowed. + *

+ * See {@link JLabel#JLabel(String, Icon, int)}. + *

+ * + * @param text string to be displayed by the label + * @param icon image to be displayed by the label + * @param horizontalAlignment One of + * {@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, + * {@link SwingConstants#RIGHT}, + * {@link SwingConstants#LEADING}, + * {@link SwingConstants#TRAILING} + */ + public GDHtmlLabel(String text, Icon icon, int horizontalAlignment) { + super(text, icon, horizontalAlignment); + } + +} diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GDLabel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GDLabel.java new file mode 100644 index 0000000000..40b89ce647 --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GDLabel.java @@ -0,0 +1,112 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package docking.widgets.label; + +import javax.swing.*; + +import docking.DockingUtils; + +/** + * A 'dynamic' label with HTML rendering disabled. + *

+ * See also: + * + * + * + * + * + * + * + *
ClassMutable textHTML renderingDescription
{@link GLabel}ImmutableNONon-html unchangeable label
{@link GDLabel}MutableNONon-html changeable label
{@link GHtmlLabel}ImmutableYESHtml unchangeable label
{@link GDHtmlLabel}MutableYESHtml changeable label
{@link GIconLabel}N/ANOLabel that only has an icon image, no text
+ */ +public class GDLabel extends JLabel { + + /** + * Creates a label with no image and no text, with {@link SwingConstants#LEADING} horizontal + * alignment, with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel()}. + *

+ */ + public GDLabel() { + super(); + init(); + } + + /** + * Creates a label with the specified text, with {@link SwingConstants#LEADING} horizontal + * alignment, with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel(String)}. + *

+ * @param text non-html string to be displayed by the label + */ + public GDLabel(String text) { + super(text); + init(); + } + + /** + * Creates a label with the specified text and horizontal alignment, + * with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel(String, int)}. + *

+ * @param text non-html string to be displayed by the label + * @param horizontalAlignment One of + * {@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, + * {@link SwingConstants#RIGHT}, + * {@link SwingConstants#LEADING}, + * {@link SwingConstants#TRAILING} + */ + public GDLabel(String text, int horizontalAlignment) { + super(text, horizontalAlignment); + init(); + } + + /** + * Creates a label with the specified text, image and horizontal alignment, + * with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel(String, Icon, int)}. + *

+ * + * @param text non-html string to be displayed by the label + * @param icon image to be displayed by the label + * @param horizontalAlignment One of + * {@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, + * {@link SwingConstants#RIGHT}, + * {@link SwingConstants#LEADING}, + * {@link SwingConstants#TRAILING} + */ + public GDLabel(String text, Icon icon, int horizontalAlignment) { + super(text, icon, horizontalAlignment); + init(); + } + + @Override + public void setText(String text) { + GLabel.warnAboutHtmlText(text); + super.setText(text); + } + + private void init() { + DockingUtils.turnOffHTMLRendering(this); + } + +} diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GHtmlLabel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GHtmlLabel.java new file mode 100644 index 0000000000..3fbab28d5c --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GHtmlLabel.java @@ -0,0 +1,118 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package docking.widgets.label; + +import javax.swing.*; + +import ghidra.util.Msg; + +/** + * An immutable label with HTML rendering allowed. + *

+ * See also: + * + * + * + * + * + * + * + *
ClassMutable textHTML renderingDescription
{@link GLabel}ImmutableNONon-html unchangeable label
{@link GDLabel}MutableNONon-html changeable label
{@link GHtmlLabel}ImmutableYESHtml unchangeable label
{@link GDHtmlLabel}MutableYESHtml changeable label
{@link GIconLabel}N/ANOLabel that only has an icon image, no text
+ */ +public class GHtmlLabel extends JLabel { + + /** + * Creates a immutable label with no image and no text, with {@link SwingConstants#LEADING} horizontal + * alignment, with HTML rendering allowed. + *

+ * See {@link JLabel#JLabel()}. + *

+ */ + public GHtmlLabel() { + super(); + } + + /** + * Creates a immutable label with the specified text, with {@link SwingConstants#LEADING} horizontal + * alignment, with HTML rendering allowed. + *

+ * See {@link JLabel#JLabel(String)}. + *

+ * @param text string to be displayed by the label + */ + public GHtmlLabel(String text) { + super(text); + } + + /** + * Creates a immutable label with the specified text and horizontal alignment, + * with HTML rendering allowed. + *

+ * See {@link JLabel#JLabel(String, int)}. + *

+ * @param text string to be displayed by the label + * @param horizontalAlignment One of + * {@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, + * {@link SwingConstants#RIGHT}, + * {@link SwingConstants#LEADING}, + * {@link SwingConstants#TRAILING} + */ + public GHtmlLabel(String text, int horizontalAlignment) { + super(text, horizontalAlignment); + } + + /** + * Creates a immutable label with the specified text, image and horizontal alignment, + * with HTML rendering allowed. + *

+ * See {@link JLabel#JLabel(String, Icon, int)}. + *

+ * + * @param text string to be displayed by the label + * @param icon image to be displayed by the label + * @param horizontalAlignment One of + * {@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, + * {@link SwingConstants#RIGHT}, + * {@link SwingConstants#LEADING}, + * {@link SwingConstants#TRAILING} + */ + public GHtmlLabel(String text, Icon icon, int horizontalAlignment) { + super(text, icon, horizontalAlignment); + } + + /** + * This is a half-way method of turning this label into an immutable instance. + *

+ * If the user has a type of "GHtmlLabel", they will see the deprecated warning on calls to setText(). + *

+ * If there are calls to setText() after the initial value has been set by the ctor, a + * warning will be printed in the log. + *

+ * @param text string this label will display + */ + @Deprecated + @Override + public void setText(String text) { + if (getText() != null && !getText().isEmpty()) { + Msg.warn(this, "Trying to set text on an immutable label! Current text: [" + + getText() + "], new text: [" + text + "]", new Throwable()); + return; + } + super.setText(text); + } +} diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GIconLabel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GIconLabel.java new file mode 100644 index 0000000000..15ffba9606 --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GIconLabel.java @@ -0,0 +1,99 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package docking.widgets.label; + +import javax.swing.*; + +import ghidra.util.Msg; + +/** + * A label that only contains an image and no text. + *

+ * See also: + * + * + * + * + * + * + * + *
ClassMutable textHTML renderingDescription
{@link GLabel}ImmutableNONon-html unchangeable label
{@link GDLabel}MutableNONon-html changeable label
{@link GHtmlLabel}ImmutableYESHtml unchangeable label
{@link GDHtmlLabel}MutableYESHtml changeable label
{@link GIconLabel}N/ANOLabel that only has an icon image, no text
+ */ +public class GIconLabel extends GLabel { + + /** + * Creates a immutable label with no image and no text, with {@link SwingConstants#LEADING} horizontal + * alignment, with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel()}. + *

+ */ + public GIconLabel() { + super(); + } + + /** + * Creates a immutable label with the specified image, + * with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel(Icon)}. + *

+ * @param image icon to be displayed by the label + */ + public GIconLabel(Icon image) { + super(image); + } + + /** + * Creates a immutable label with the specified image and horizontal alignment, + * with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel(Icon, int)}. + *

+ * @param image icon to be displayed by the label + * @param horizontalAlignment One of + * {@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, + * {@link SwingConstants#RIGHT}, + * {@link SwingConstants#LEADING}, + * {@link SwingConstants#TRAILING} + */ + public GIconLabel(Icon image, int horizontalAlignment) { + super(image, horizontalAlignment); + } + + /** + * This is a half-way method of turning this label into an immutable instance. + *

+ * If the user has a type of "GIconLabel", they will see the deprecated warning on calls to setText(). + *

+ * If there are calls to setText() with any non-null or non-empty value, a + * warning will be printed in the log. + *

+ * @param text string this label will NOT display + */ + @Deprecated + @Override + public void setText(String text) { + if (text != null && !text.isEmpty()) { + Msg.warn(this, "Trying to set text on an icon label! New text: [" + text + "]", + new Throwable()); + return; + } + super.setText(text); + } + +} diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GLabel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GLabel.java new file mode 100644 index 0000000000..14289e5cd7 --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/label/GLabel.java @@ -0,0 +1,166 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package docking.widgets.label; + +import javax.swing.*; + +import docking.DockingUtils; +import ghidra.util.Msg; + +/** + * An immutable label with HTML rendering disabled. + *

+ * See also: + * + * + * + * + * + * + * + *
ClassMutable textHTML renderingDescription
{@link GLabel}ImmutableNONon-html unchangeable label
{@link GDLabel}MutableNONon-html changeable label
{@link GHtmlLabel}ImmutableYESHtml unchangeable label
{@link GDHtmlLabel}MutableYESHtml changeable label
{@link GIconLabel}N/ANOLabel that only has an icon image, no text
+ */ +public class GLabel extends JLabel { + + /** + * Creates a immutable label with no image and no text, with {@link SwingConstants#LEADING} horizontal + * alignment, with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel()}. + *

+ */ + public GLabel() { + super(); + init(); + } + + /** + * Creates a immutable label with the specified text, with {@link SwingConstants#LEADING} horizontal + * alignment, with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel(String)}. + *

+ * @param text non-html string to be displayed by the label + */ + public GLabel(String text) { + super(text); + init(); + } + + /** + * Creates a immutable label with the specified text and horizontal alignment, + * with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel(String, int)}. + *

+ * @param text non-html string to be displayed by the label + * @param horizontalAlignment One of + * {@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, + * {@link SwingConstants#RIGHT}, + * {@link SwingConstants#LEADING}, + * {@link SwingConstants#TRAILING} + */ + public GLabel(String text, int horizontalAlignment) { + super(text, horizontalAlignment); + init(); + } + + /** + * Creates a immutable label with the specified text, image and horizontal alignment, + * with HTML rendering disabled. + *

+ * See {@link JLabel#JLabel(String, Icon, int)}. + *

+ * + * @param text non-html string to be displayed by the label + * @param icon image to be displayed by the label + * @param horizontalAlignment One of + * {@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, + * {@link SwingConstants#RIGHT}, + * {@link SwingConstants#LEADING}, + * {@link SwingConstants#TRAILING} + */ + public GLabel(String text, Icon icon, int horizontalAlignment) { + super(text, icon, horizontalAlignment); + init(); + } + + //--------------------------------------------------------------------------------------------- + // Protected ctors for derived classes + //--------------------------------------------------------------------------------------------- + /** + * + * @param image icon to display + * @param horizontalAlignment see + * {@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, + * {@link SwingConstants#RIGHT}, + * {@link SwingConstants#LEADING}, + * {@link SwingConstants#TRAILING} + */ + protected GLabel(Icon image, int horizontalAlignment) { + super(image, horizontalAlignment); + init(); + } + + /** + * @param image icon to display + */ + protected GLabel(Icon image) { + super(image); + init(); + } + + //--------------------------------------------------------------------------------------------- + + private void init() { + DockingUtils.turnOffHTMLRendering(this); + } + + /** + * This is a half-way method of turning this label into an immutable instance. + *

+ * If the user has a type of "GLabel", they will see the deprecated warning on calls to setText(). + *

+ * If there are calls to setText() after the initial value has been set by the ctor, a + * warning will be printed in the log. + *

+ * @param text string this label will display + */ + @Deprecated + @Override + public void setText(String text) { + if (getText() != null && !getText().isEmpty()) { + Msg.warn(this, "Trying to set text on an immutable label! Current text: [" + + getText() + "], new text: [" + text + "]", new Throwable()); + return; + } + warnAboutHtmlText(text); + super.setText(text); + } + + public static void warnAboutHtmlText(String text) { + // #ifdef still_finding_html_labels_in_our_huge_codebase + if (text != null && (text.startsWith("") || text.startsWith(""))) { + Msg.warn(GLabel.class, "HTML text detected in non-HTML component: " + text, + new Throwable()); + } + // #endif + } + +} diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/list/GList.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/list/GList.java index d163e396df..1e2dd1c75e 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/list/GList.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/list/GList.java @@ -15,11 +15,10 @@ */ package docking.widgets.list; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; import java.util.Vector; -import javax.swing.*; +import javax.swing.JList; +import javax.swing.ListModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -81,42 +80,6 @@ public class GList extends JList { private void init() { DockingUtils.turnOffHTMLRendering(this); - if (getCellRenderer() instanceof JComponent) { - DockingUtils.turnOffHTMLRendering(((JComponent) getCellRenderer())); - } - addKeyListener(new KeyListener() { - @Override - public void keyPressed(KeyEvent e) { -// if (e.isActionKey() || -// e.getKeyChar() == KeyEvent.CHAR_UNDEFINED || -// Character.isISOControl(e.getKeyChar())) { -// return; -// } -// long when = e.getWhen(); -// if (when - lastLookupTime > KEY_TIMEOUT) { -// lookupString = ""+e.getKeyChar(); -// } -// else { -// lookupString += ""+e.getKeyChar(); -// } -// int index = getIndex(getModel(), lookupString); -// if (index >= 0) { -// setSelectedIndex(index); -// Rectangle rect = getCellBounds(index, index); -// scrollRectToVisible(rect); -// } -// lastLookupTime = when; -// e.consume(); - } - - @Override - public void keyReleased(KeyEvent e) { - } - - @Override - public void keyTyped(KeyEvent e) { - } - }); addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/list/GListCellRenderer.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/list/GListCellRenderer.java index 561aaf43b5..180c653b40 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/list/GListCellRenderer.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/list/GListCellRenderer.java @@ -35,15 +35,15 @@ public class GListCellRenderer extends AbstractGCellRenderer implements ListC * Use this if you only need to provide a way to get the string value from the type being shown * in the list. * - * @param cellTextFunc a function that maps a custom type to a string value + * @param cellToTextMappingFunction a function that maps your custom type to a string value * @return new GListCellRenderer instance */ public static GListCellRenderer createDefaultCellTextRenderer( - Function cellTextFunc) { + Function cellToTextMappingFunction) { return new GListCellRenderer<>() { @Override protected String getItemText(E value) { - return cellTextFunc.apply(value); + return cellToTextMappingFunction.apply(value); } }; } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/tabbedpane/DockingTabRenderer.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/tabbedpane/DockingTabRenderer.java index a0dc327b5a..f17ad35135 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/tabbedpane/DockingTabRenderer.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/tabbedpane/DockingTabRenderer.java @@ -20,8 +20,8 @@ import java.awt.event.*; import javax.swing.*; -import docking.DockingUtils; import docking.widgets.EmptyBorderButton; +import docking.widgets.label.GDLabel; import resources.ResourceManager; /** @@ -50,8 +50,8 @@ public class DockingTabRenderer extends JPanel { final ForwardingMouseListener eventForwardingListener = new ForwardingMouseListener(tabbedPane); - titleLabel = DockingUtils.createNonHtmlLabel(); - iconLabel = DockingUtils.createNonHtmlLabel(); + titleLabel = new GDLabel(); + iconLabel = new GDLabel(); closeButton = new EmptyBorderButton(); setTitle(tabTitle, fullTitle); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/DefaultTableCellRendererWrapper.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/DefaultTableCellRendererWrapper.java index c54aecab9b..a40a624e56 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/DefaultTableCellRendererWrapper.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/DefaultTableCellRendererWrapper.java @@ -20,6 +20,8 @@ import java.awt.Component; import javax.swing.JComponent; import javax.swing.table.TableCellRenderer; +import docking.DockingUtils; + public class DefaultTableCellRendererWrapper extends GTableCellRenderer { private final TableCellRenderer renderer; @@ -42,7 +44,7 @@ public class DefaultTableCellRendererWrapper extends GTableCellRenderer { @Override public void setHTMLRenderingEnabled(boolean enable) { if (renderer instanceof JComponent) { - ((JComponent) renderer).putClientProperty(HTML_DISABLE_STRING, !enable); + ((JComponent) renderer).putClientProperty(DockingUtils.HTML_DISABLE_STRING, !enable); } super.setHTMLRenderingEnabled(enable); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableFilterPanel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableFilterPanel.java index 1943ccb6af..5d116af614 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableFilterPanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableFilterPanel.java @@ -28,12 +28,14 @@ import javax.swing.table.TableModel; import org.jdom.Element; -import docking.*; +import docking.ActionContext; +import docking.DockingWindowManager; import docking.help.HelpService; import docking.menu.*; import docking.widgets.EmptyBorderButton; import docking.widgets.EventTrigger; import docking.widgets.filter.*; +import docking.widgets.label.GDLabel; import docking.widgets.table.columnfilter.ColumnBasedTableFilter; import docking.widgets.table.columnfilter.ColumnFilterSaveManager; import docking.widgets.table.constraint.dialog.ColumnFilterDialog; @@ -347,7 +349,7 @@ public class GTableFilterPanel extends JPanel { setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); - searchLabel = DockingUtils.createNonHtmlLabel(filterLabel); + searchLabel = new GDLabel(filterLabel); searchLabel.setToolTipText("Include only table elements that match the given search text"); filterField = new FilterTextField(table); @@ -400,26 +402,26 @@ public class GTableFilterPanel extends JPanel { RowObjectFilterModel tableModel = (RowObjectFilterModel) table.getModel(); - columnFilterAction = new NonToolbarMultiStateAction<>( - "Column Filter", "GTableFilterPanel") { + columnFilterAction = + new NonToolbarMultiStateAction<>("Column Filter", "GTableFilterPanel") { - @Override - public void actionStateChanged( - ActionState> newActionState, - EventTrigger trigger) { - if (trigger != EventTrigger.GUI_ACTION) { - return; + @Override + public void actionStateChanged( + ActionState> newActionState, + EventTrigger trigger) { + if (trigger != EventTrigger.GUI_ACTION) { + return; + } + ColumnFilterActionState state = (ColumnFilterActionState) newActionState; + state.performAction(); } - ColumnFilterActionState state = (ColumnFilterActionState) newActionState; - state.performAction(); - } - @Override - protected void doActionPerformed(ActionContext context) { - showFilterDialog(tableModel); - } + @Override + protected void doActionPerformed(ActionContext context) { + showFilterDialog(tableModel); + } - }; + }; columnFilterAction.setPerformActionOnPrimaryButtonClick(true); HelpLocation helpLocation = new HelpLocation("Trees", "Column_Filters"); columnFilterAction.setHelpLocation(helpLocation); 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 8db24e877d..778efa2426 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 @@ -24,7 +24,7 @@ import javax.swing.*; import javax.swing.border.*; import javax.swing.table.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import resources.*; import resources.icons.EmptyIcon; import resources.icons.TranslateIcon; @@ -52,8 +52,8 @@ public class GTableHeaderRenderer extends JPanel implements TableCellRenderer { private static final Icon FILTER_ICON = ResourceManager.getScaledIcon(ResourceManager.loadImage("images/filter_off.png"), 12, 12); - private JLabel textLabel = DockingUtils.createNonHtmlLabel(); - private JLabel iconLabel = DockingUtils.createNonHtmlLabel(); + private JLabel textLabel = new GDLabel(); + private JLabel iconLabel = new GDLabel(); private Icon helpIcon = null; private CustomPaddingBorder customBorder; protected boolean isPaintingPrimarySortColumn; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterArchiveDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterArchiveDialog.java index 611be2ba24..48e3434878 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterArchiveDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterArchiveDialog.java @@ -28,7 +28,7 @@ import javax.swing.*; import org.apache.commons.lang3.StringUtils; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import docking.widgets.table.columnfilter.ColumnBasedTableFilter; import docking.widgets.table.columnfilter.ColumnFilterSaveManager; import ghidra.util.HTMLUtilities; @@ -153,7 +153,7 @@ public class ColumnFilterArchiveDialog extends DialogComponentProvider { panel.setBorder(BorderFactory.createTitledBorder( BorderFactory.createEmptyBorder(19, 0, 26, 5), "Preview")); - previewLabel = DockingUtils.createHtmlLabel(); + previewLabel = new GDHtmlLabel(); previewLabel.setVerticalAlignment(SwingConstants.TOP); panel.add(new JScrollPane(previewLabel)); return panel; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterDialog.java index 006f8d46e5..e55cd0cad9 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterDialog.java @@ -28,6 +28,7 @@ import docking.*; import docking.action.*; import docking.widgets.OptionDialog; import docking.widgets.dialogs.InputDialog; +import docking.widgets.label.GLabel; import docking.widgets.table.GTableFilterPanel; import docking.widgets.table.RowObjectFilterModel; import docking.widgets.table.columnfilter.*; @@ -359,18 +360,18 @@ public class ColumnFilterDialog extends DialogComponentProvider filterPanelContainer.getParent().validate(); } - private Component createLogicalOperationLabel(LogicOperation op) { - JLabel jLabel = DockingUtils.createNonHtmlLabel("<" + op + ">", SwingConstants.CENTER); - jLabel.setForeground(Color.GRAY); - return jLabel; + private GLabel createLogicalOperationLabel(LogicOperation op) { + GLabel label = new GLabel("<" + op + ">", SwingConstants.CENTER); + label.setForeground(Color.GRAY); + return label; } private JComponent buildHeaderPanel() { JPanel headerPanel = new JPanel(new FilterPanelLayout(200, 0)); - headerPanel.add(DockingUtils.createNonHtmlLabel("Table Column", SwingConstants.CENTER)); - headerPanel.add(DockingUtils.createNonHtmlLabel("Filter", SwingConstants.CENTER)); - headerPanel.add(DockingUtils.createNonHtmlLabel("Filter Value", SwingConstants.CENTER)); + headerPanel.add(new GLabel("Table Column", SwingConstants.CENTER)); + headerPanel.add(new GLabel("Filter", SwingConstants.CENTER)); + headerPanel.add(new GLabel("Filter Value", SwingConstants.CENTER)); headerPanel.setBorder(new CompoundBorder( BorderFactory.createMatteBorder(0, 0, 1, 0, Color.DARK_GRAY.brighter().brighter()), diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterPanel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterPanel.java index 3d6affbb52..77369b4673 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterPanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterPanel.java @@ -23,9 +23,9 @@ import java.util.Vector; import javax.swing.*; import javax.swing.border.BevelBorder; -import docking.DockingUtils; import docking.widgets.EmptyBorderButton; import docking.widgets.combobox.GhidraComboBox; +import docking.widgets.label.GDLabel; import docking.widgets.list.GListCellRenderer; import ghidra.util.layout.VerticalLayout; import resources.ResourceManager; @@ -115,7 +115,7 @@ class ColumnFilterPanel extends JPanel { } private Component createOrLabel() { - JLabel jLabel = DockingUtils.createNonHtmlLabel("", SwingConstants.CENTER); + JLabel jLabel = new GDLabel("", SwingConstants.CENTER); jLabel.setForeground(Color.GRAY); return jLabel; } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ConstraintFilterPanel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ConstraintFilterPanel.java index c3b8029089..f663af52a8 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ConstraintFilterPanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ConstraintFilterPanel.java @@ -22,6 +22,7 @@ import java.awt.event.ActionListener; import javax.swing.*; import docking.widgets.EmptyBorderButton; +import docking.widgets.combobox.GComboBox; import docking.widgets.list.GListCellRenderer; import docking.widgets.table.constraint.ColumnConstraint; import resources.Icons; @@ -82,7 +83,7 @@ public class ConstraintFilterPanel extends JPanel { private Component buildConstraintCombo() { JPanel panel = new JPanel(new BorderLayout()); - constraintComboBox = new JComboBox<>(); + constraintComboBox = new GComboBox<>(); constraintComboBox.setRenderer(new ConstraintComboBoxCellRenderer()); constraintComboBox.addActionListener(constraintComboBoxListener); panel.add(constraintComboBox, BorderLayout.CENTER); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/BooleanConstraintEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/BooleanConstraintEditor.java index 00e54f1b51..f0cb5bcd9c 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/BooleanConstraintEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/BooleanConstraintEditor.java @@ -18,10 +18,13 @@ package docking.widgets.table.constrainteditor; import java.awt.BorderLayout; import java.awt.Component; -import javax.swing.*; +import javax.swing.JComboBox; +import javax.swing.JPanel; import org.apache.commons.lang3.StringUtils; +import docking.widgets.combobox.GComboBox; +import docking.widgets.list.GListCellRenderer; import docking.widgets.table.constraint.BooleanMatchColumnConstraint; import docking.widgets.table.constraint.ColumnConstraint; @@ -44,8 +47,9 @@ public class BooleanConstraintEditor extends AbstractColumnConstraintEditor(new Boolean[] { Boolean.TRUE, Boolean.FALSE }); - comboBox.setRenderer(new BooleanCellRenderer()); + comboBox = new GComboBox<>(new Boolean[] { Boolean.TRUE, Boolean.FALSE }); + comboBox.setRenderer(GListCellRenderer.createDefaultCellTextRenderer( + b -> StringUtils.capitalize(b.toString()))); comboBox.addItemListener(e -> valueChanged()); panel.add(comboBox, BorderLayout.CENTER); @@ -71,20 +75,6 @@ public class BooleanConstraintEditor extends AbstractColumnConstraintEditor list, Object value, int index, - boolean isSelected, boolean cellHasFocus) { - JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, - isSelected, cellHasFocus); - - setText(StringUtils.capitalize(((Boolean) value).toString())); - - return label; - } - } - @Override protected boolean checkEditorValueValidity() { return true; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/DataLoadingConstraintEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/DataLoadingConstraintEditor.java index 52e00e4d03..ec6aa4d02d 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/DataLoadingConstraintEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/DataLoadingConstraintEditor.java @@ -25,8 +25,8 @@ import java.util.concurrent.TimeUnit; import javax.swing.*; import docking.DisabledComponentLayerFactory; -import docking.DockingUtils; import docking.widgets.EmptyBorderButton; +import docking.widgets.label.GDHtmlLabel; import docking.widgets.table.constraint.ColumnConstraint; import docking.widgets.table.constraint.ColumnData; import ghidra.util.HTMLUtilities; @@ -91,7 +91,7 @@ public abstract class DataLoadingConstraintEditor extends AbstractColumnConst @Override protected Component buildInlineEditorComponent() { JPanel editorPanel = new JPanel(new BorderLayout()); - statusLabel = DockingUtils.createHtmlLabel(); + statusLabel = new GDHtmlLabel(); statusLabel.setHorizontalAlignment(SwingConstants.CENTER); taskMonitorComponent = new TaskMonitorComponent(); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/DateRangeConstraintEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/DateRangeConstraintEditor.java index 169c0257fb..2273c4495f 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/DateRangeConstraintEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/DateRangeConstraintEditor.java @@ -23,7 +23,7 @@ import java.util.Calendar; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import docking.widgets.table.constraint.ColumnConstraint; import docking.widgets.table.constraint.RangeColumnConstraint; import docking.widgets.table.constraint.provider.DateColumnConstraintProvider; @@ -108,7 +108,7 @@ public class DateRangeConstraintEditor extends AbstractColumnConstraintEditor implements ColumnConstraintEditor public Component getInlineComponent() { JPanel panel = new JPanel(); - JLabel errorLabel = DockingUtils.createHtmlLabel( + JLabel errorLabel = new GDHtmlLabel( "" + HTMLUtilities.bold(HTMLUtilities.colorString(Color.RED, message))); panel.add(errorLabel); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/EnumConstraintEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/EnumConstraintEditor.java index e06e5ba908..f42ce804b7 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/EnumConstraintEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/EnumConstraintEditor.java @@ -21,7 +21,7 @@ import java.util.*; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import docking.widgets.table.constraint.ColumnConstraint; import docking.widgets.table.constraint.EnumColumnConstraint; @@ -77,7 +77,7 @@ public class EnumConstraintEditor> extends AbstractColumnConst JPanel outerPanel = new JPanel(new BorderLayout()); outerPanel.add(panel, BorderLayout.CENTER); - infoLabel = DockingUtils.createHtmlLabel(""); + infoLabel = new GDHtmlLabel(""); infoLabel.setForeground(Color.GRAY); infoLabel.setHorizontalAlignment(SwingConstants.CENTER); outerPanel.add(infoLabel, BorderLayout.SOUTH); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/IntegerConstraintEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/IntegerConstraintEditor.java index 4fc3d22ad5..764e420392 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/IntegerConstraintEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/IntegerConstraintEditor.java @@ -21,7 +21,7 @@ import javax.swing.*; import org.apache.commons.lang3.StringUtils; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import docking.widgets.spinner.IntegerSpinner; import docking.widgets.table.constraint.ColumnConstraint; import docking.widgets.table.constraint.SingleValueColumnConstraint; @@ -71,7 +71,7 @@ public class IntegerConstraintEditor extends AbstractColumnCon spinnerModel.addChangeListener(e -> valueChanged()); panel.add(spinner.getSpinner(), BorderLayout.CENTER); - statusLabel = DockingUtils.createHtmlLabel(); + statusLabel = new GDHtmlLabel(); panel.add(statusLabel, BorderLayout.SOUTH); statusLabel.setForeground(Color.RED); statusLabel.setHorizontalAlignment(SwingConstants.CENTER); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/IntegerRangeConstraintEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/IntegerRangeConstraintEditor.java index 4ed120bffc..a8fb1d2826 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/IntegerRangeConstraintEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/IntegerRangeConstraintEditor.java @@ -20,7 +20,7 @@ import java.math.BigInteger; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import docking.widgets.spinner.IntegerSpinner; import docking.widgets.table.constraint.ColumnConstraint; import docking.widgets.table.constraint.RangeColumnConstraint; @@ -104,7 +104,7 @@ public class IntegerRangeConstraintEditor panel.add(rangeControlPanel); - infoLabel = DockingUtils.createHtmlLabel(); + infoLabel = new GDHtmlLabel(); infoLabel.setForeground(Color.GRAY); infoLabel.setHorizontalAlignment(SwingConstants.CENTER); panel.add(infoLabel); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/StringConstraintEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/StringConstraintEditor.java index cc3a4c6716..e9202f8458 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/StringConstraintEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/StringConstraintEditor.java @@ -19,7 +19,7 @@ import java.awt.*; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import docking.widgets.table.constraint.ColumnConstraint; import docking.widgets.table.constraint.StringColumnConstraint; @@ -52,7 +52,7 @@ public class StringConstraintEditor extends AbstractColumnConstraintEditor valueChanged()); panel.add(field.getComponent(), BorderLayout.CENTER); - statusLabel = DockingUtils.createHtmlLabel(); + statusLabel = new GDHtmlLabel(); panel.add(statusLabel, BorderLayout.SOUTH); statusLabel.setForeground(Color.RED); statusLabel.setHorizontalAlignment(SwingConstants.CENTER); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/UnsignedLongRangeConstraintEditor.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/UnsignedLongRangeConstraintEditor.java index bd9bb0ff12..a4c0543584 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/UnsignedLongRangeConstraintEditor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/UnsignedLongRangeConstraintEditor.java @@ -20,7 +20,7 @@ import java.math.BigInteger; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import docking.widgets.table.constraint.ColumnConstraint; import docking.widgets.table.constraint.RangeColumnConstraint; import docking.widgets.textfield.IntegerTextField; @@ -69,7 +69,7 @@ public class UnsignedLongRangeConstraintEditor extends AbstractColumnConstraintE panel.add(rangeControlPanel); - infoLabel = DockingUtils.createHtmlLabel(); + infoLabel = new GDHtmlLabel(); infoLabel.setForeground(Color.GRAY); infoLabel.setHorizontalAlignment(SwingConstants.CENTER); panel.add(infoLabel); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/GThreadedTablePanel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/GThreadedTablePanel.java index 0e6cc06979..4083ded6f3 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/GThreadedTablePanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/GThreadedTablePanel.java @@ -20,8 +20,8 @@ import java.awt.FlowLayout; import javax.swing.*; -import docking.DockingUtils; import docking.widgets.EmptyBorderButton; +import docking.widgets.label.GLabel; import docking.widgets.table.GTable; import ghidra.util.task.TaskMonitor; import ghidra.util.task.TaskMonitorComponent; @@ -156,8 +156,7 @@ public class GThreadedTablePanel extends JPanel { refreshButton.setToolTipText("Force Refresh Now"); pendingPanel = new JPanel(new FlowLayout()); pendingPanel.setName("Pending Panel"); - pendingPanel.add( - DockingUtils.createNonHtmlLabel("Update pending...", SwingConstants.CENTER), + pendingPanel.add(new GLabel("Update pending...", SwingConstants.CENTER), BorderLayout.CENTER); pendingPanel.add(refreshButton, BorderLayout.EAST); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/textfield/TextFieldLinker.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/textfield/TextFieldLinker.java index 120ac9b4cd..325ad3a32d 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/textfield/TextFieldLinker.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/textfield/TextFieldLinker.java @@ -16,7 +16,6 @@ package docking.widgets.textfield; import java.awt.Component; -import java.awt.Window; import java.awt.event.*; import java.util.ArrayList; import java.util.List; @@ -24,15 +23,14 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.swing.*; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; import javax.swing.event.*; import javax.swing.text.BadLocationException; import javax.swing.text.Caret; import org.apache.commons.lang3.StringUtils; -import docking.DockingUtils; - /** * A class that links text fields into a "formatted text field", separated by expressions. * @@ -56,7 +54,7 @@ import docking.DockingUtils; * * JTextField second = new JTextField(); * hbox.add(second); - * hbox.add(DockingUtils.createNonHtmlLabel("-")); + * hbox.add(new GLabel("-")); * linker.linkField(second, "-", "-"); * * JTextField third = new JTextField(); @@ -861,39 +859,4 @@ public class TextFieldLinker { return linker; } - /** - * A demonstration of the {@link TextFieldLinker} - * - * It demonstrates three fields. The first two are separated by whitespace. The second two are - * separated by a dash. - */ - public static class TextFieldLinkerDemo { - public static void main(String[] args) { - JDialog dialog = new JDialog((Window) null, "TextFieldLinker Demo"); - - Box hbox = Box.createHorizontalBox(); - dialog.add(hbox); - - TextFieldLinker linker = new TextFieldLinker(); - - JTextField first = new JTextField(); - hbox.add(first); - hbox.add(Box.createHorizontalStrut(10)); - linker.linkField(first, "\\s+", " "); - - JTextField second = new JTextField(); - hbox.add(second); - hbox.add(DockingUtils.createNonHtmlLabel("-")); - linker.linkField(second, "-", "-"); - - JTextField third = new JTextField(); - hbox.add(third); - linker.linkLastField(third); - - dialog.setBounds(2560, 500, 400, 200); - dialog.setModal(true); - linker.setVisible(true); - dialog.setVisible(true); - } - } } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/DefaultGTreeFilterProvider.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/DefaultGTreeFilterProvider.java index 04707af0fe..09a5acb3b0 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/DefaultGTreeFilterProvider.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/DefaultGTreeFilterProvider.java @@ -22,11 +22,11 @@ import javax.swing.border.BevelBorder; import org.jdom.Element; -import docking.DockingUtils; import docking.DockingWindowManager; import docking.help.HelpService; import docking.widgets.EmptyBorderButton; import docking.widgets.filter.*; +import docking.widgets.label.GLabel; import docking.widgets.tree.internal.DefaultGTreeDataTransformer; import docking.widgets.tree.support.GTreeFilter; import ghidra.framework.options.PreferenceState; @@ -121,7 +121,7 @@ public class DefaultGTreeFilterProvider implements GTreeFilterProvider { private JPanel createFilterPanel() { JPanel newFilterPanel = new JPanel(new BorderLayout()); newFilterPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); - JLabel filterLabel = DockingUtils.createNonHtmlLabel(" Filter: "); + JLabel filterLabel = new GLabel(" Filter: "); newFilterPanel.add(filterLabel, BorderLayout.WEST); filterField = new FilterTextField(gTree.getJTree()); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/wizard/WizardManager.java b/Ghidra/Framework/Docking/src/main/java/docking/wizard/WizardManager.java index 3692d978ea..459ef295ff 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/wizard/WizardManager.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/wizard/WizardManager.java @@ -23,10 +23,12 @@ import java.io.IOException; import javax.swing.*; import javax.swing.border.TitledBorder; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; import docking.help.Help; import docking.help.HelpService; import docking.widgets.EmptyBorderButton; +import docking.widgets.label.GDLabel; import ghidra.util.*; import resources.ResourceManager; @@ -214,8 +216,8 @@ public class WizardManager extends DialogComponentProvider implements WizardPane } }); - titleLabel = (wizardIcon == null ? DockingUtils.createNonHtmlLabel(INIT_TITLE) - : DockingUtils.createNonHtmlLabel(INIT_TITLE, wizardIcon, SwingConstants.TRAILING)); + titleLabel = (wizardIcon == null ? new GDLabel(INIT_TITLE) + : new GDLabel(INIT_TITLE, wizardIcon, SwingConstants.TRAILING)); EmptyBorderButton helpButton = new EmptyBorderButton(ResourceManager.loadImage("images/information.png")); diff --git a/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskDialog.java b/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskDialog.java index a620db9d0b..f251765ac8 100644 --- a/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskDialog.java @@ -16,15 +16,15 @@ package ghidra.util.task; import java.awt.*; -import java.util.ArrayList; -import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import javax.swing.*; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; import docking.util.AnimatedIcon; import docking.widgets.OptionDialog; +import docking.widgets.label.GIconLabel; import ghidra.util.*; import ghidra.util.exception.CancelledException; import ghidra.util.timer.GTimer; @@ -169,18 +169,13 @@ public class TaskDialog extends DialogComponentProvider implements TaskMonitor { SystemUtilities.runIfSwingOrPostSwingLater(() -> { mainPanel.removeAll(); - List iconList = new ArrayList<>(); - iconList.add(ResourceManager.loadImage("images/eatbits1.png")); - iconList.add(ResourceManager.loadImage("images/eatbits2.png")); - iconList.add(ResourceManager.loadImage("images/eatbits3.png")); - iconList.add(ResourceManager.loadImage("images/eatbits4.png")); - iconList.add(ResourceManager.loadImage("images/eatbits5.png")); - iconList.add(ResourceManager.loadImage("images/eatbits6.png")); - iconList.add(ResourceManager.loadImage("images/eatbits7.png")); - AnimatedIcon icon = new AnimatedIcon(iconList, 200, 0); JPanel panel = new JPanel(new BorderLayout()); panel.setSize(new Dimension(200, 100)); - panel.add(DockingUtils.createNonHtmlLabel(icon)); + String[] filenames = { "images/eatbits1.png", "images/eatbits2.png", + "images/eatbits3.png", "images/eatbits4.png", "images/eatbits5.png", + "images/eatbits6.png", "images/eatbits7.png" }; + panel.add( + new GIconLabel(new AnimatedIcon(ResourceManager.loadImages(filenames), 200, 0))); mainPanel.add(panel, BorderLayout.CENTER); repack(); diff --git a/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskMonitorComponent.java b/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskMonitorComponent.java index b42036c360..f132759d8e 100644 --- a/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskMonitorComponent.java +++ b/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskMonitorComponent.java @@ -18,18 +18,17 @@ package ghidra.util.task; import java.awt.BorderLayout; import java.awt.Dimension; import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import javax.swing.*; -import docking.DockingUtils; import docking.ToolTipManager; import docking.util.AnimatedIcon; import docking.widgets.EmptyBorderButton; import docking.widgets.OptionDialog; +import docking.widgets.label.GDHtmlLabel; +import docking.widgets.label.GIconLabel; import ghidra.util.Issue; import ghidra.util.SystemUtilities; import ghidra.util.datastruct.WeakDataStructureFactory; @@ -401,7 +400,7 @@ public class TaskMonitorComponent extends JPanel implements TaskMonitor { private void buildProgressPanel(boolean includeTextField, boolean includeCancelButton) { setLayout(new BorderLayout(5, 1)); - messageLabel = new JLabel(" ") { + messageLabel = new GDHtmlLabel(" ") { @Override public void invalidate() { // don't care @@ -466,63 +465,15 @@ public class TaskMonitorComponent extends JPanel implements TaskMonitor { } private void createAnimatedIcon() { - List iconList = new ArrayList<>(); - iconList.add(ResourceManager.loadImage("images/hourglass24_01.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_02.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_02.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_03.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_03.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_04.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_04.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_05.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_05.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_06.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_06.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_07.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_07.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_08.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_08.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_09.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_10.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_11.png")); - AnimatedIcon progressIcon = new AnimatedIcon(iconList, 150, 0); - imageLabel = DockingUtils.createNonHtmlLabel(progressIcon); - } - - /** - * Simple test for the TaskMonitorComponent class. - * @param args not used - */ - public static void main(String[] args) { - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } - catch (Exception e) { - // don't care - } - - JFrame f = new JFrame(); - f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - f.getContentPane().setLayout(new BorderLayout()); - final TaskMonitorComponent tm = new TaskMonitorComponent(); - f.getContentPane().add(tm); - tm.showCancelButton(true); - f.pack(); - f.setVisible(true); - -// tm.initialize(78); -// TaskMonitor monitor = new UnknownProgressWrappingTaskMonitor(tm, 10); -// -// for (int i = 0; i < 78; i++) { -// try { -// Thread.sleep(250); -// monitor.setProgress(i); -// System.out.println("set progress to " + i); -// } -// catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } + String[] filenames = { "images/hourglass24_01.png", "images/hourglass24_02.png", + "images/hourglass24_02.png", "images/hourglass24_03.png", "images/hourglass24_03.png", + "images/hourglass24_04.png", "images/hourglass24_04.png", "images/hourglass24_05.png", + "images/hourglass24_05.png", "images/hourglass24_06.png", "images/hourglass24_06.png", + "images/hourglass24_07.png", "images/hourglass24_07.png", "images/hourglass24_08.png", + "images/hourglass24_08.png", "images/hourglass24_09.png", "images/hourglass24_10.png", + "images/hourglass24_11.png" }; + imageLabel = + new GIconLabel(new AnimatedIcon(ResourceManager.loadImages(filenames), 150, 0)); } @Override diff --git a/Ghidra/Framework/Docking/src/test.slow/java/docking/StatusBarTest.java b/Ghidra/Framework/Docking/src/test.slow/java/docking/StatusBarTest.java index 37f48cca11..81975fc4ff 100644 --- a/Ghidra/Framework/Docking/src/test.slow/java/docking/StatusBarTest.java +++ b/Ghidra/Framework/Docking/src/test.slow/java/docking/StatusBarTest.java @@ -23,6 +23,8 @@ import javax.swing.JLabel; import org.junit.*; import docking.test.AbstractDockingTest; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.util.bean.GGlassPane; /** @@ -107,8 +109,8 @@ public class StatusBarTest extends AbstractDockingTest { } private void addAndRemoveStatusItems() { - final JLabel label1 = DockingUtils.createNonHtmlLabel("Test Label 1"); - final JLabel label2 = DockingUtils.createNonHtmlLabel("Test Label 2"); + final JLabel label1 = new GDLabel("Test Label 1"); + final JLabel label2 = new GDLabel("Test Label 2"); // normal add/remove operations runSwing(new Runnable() { @@ -165,7 +167,7 @@ public class StatusBarTest extends AbstractDockingTest { @Override public void run() { try { - statusBar.removeStatusItem(DockingUtils.createNonHtmlLabel("Test Label 3")); + statusBar.removeStatusItem(new GLabel("Test Label 3")); Assert.fail("Did not receive an expected NullPointerException."); } diff --git a/Ghidra/Framework/Docking/src/test/java/docking/PlaceholderSetTest.java b/Ghidra/Framework/Docking/src/test/java/docking/PlaceholderSetTest.java index 6a3fe9a585..ef250495b8 100644 --- a/Ghidra/Framework/Docking/src/test/java/docking/PlaceholderSetTest.java +++ b/Ghidra/Framework/Docking/src/test/java/docking/PlaceholderSetTest.java @@ -24,6 +24,7 @@ import javax.swing.JLabel; import org.junit.Test; +import docking.widgets.label.GDLabel; import generic.test.AbstractGenericTest; public class PlaceholderSetTest extends AbstractGenericTest { @@ -160,7 +161,7 @@ public class PlaceholderSetTest extends AbstractGenericTest { } private class TestProvider extends ComponentProvider { - JLabel label = DockingUtils.createNonHtmlLabel(); + JLabel label = new GDLabel(); public TestProvider() { super(null, null, null); diff --git a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/ErrorPropertyEditor.java b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/ErrorPropertyEditor.java index cc9517f8c1..867c922dd3 100644 --- a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/ErrorPropertyEditor.java +++ b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/ErrorPropertyEditor.java @@ -32,6 +32,7 @@ public class ErrorPropertyEditor extends PropertyEditorSupport { message += " - value: " + value.toString(); } + // Use native java JLabel because we can't use docking widgets here errorLabel = new JLabel(message); errorLabel.setForeground(Color.RED); errorLabel.putClientProperty("html.disable", true); 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 b2a788c11e..a6526adc62 100644 --- a/Ghidra/Framework/Generic/src/main/java/ghidra/util/HTMLUtilities.java +++ b/Ghidra/Framework/Generic/src/main/java/ghidra/util/HTMLUtilities.java @@ -25,6 +25,8 @@ import javax.swing.JLabel; import javax.swing.plaf.basic.BasicHTML; import javax.swing.text.View; +import org.apache.commons.lang3.StringEscapeUtils; + import generic.text.TextLayoutGraphics; import ghidra.util.html.HtmlLineSplitter; import utilities.util.reflection.ReflectionUtilities; @@ -520,37 +522,8 @@ public class HTMLUtilities { } /** - * Converts any special or reserved characters in the specified string into HTML-escaped - * entities. Use this method when you have content containing HTML that you do not want - * interpreted as HTML, such as when displaying text that uses angle brackets around words. - * - *

For example, consider the following

- * - * - * - * - * - * - * - * - * - * - * - *
InputOutputRendered as(Without Friendly Encoding)
- * Hi <b>mom </b> - * - * Hi - * &nbsp;&lt;b&gt;mom - * &nbsp;&lt;/b&gt; - * - * - * Hi <b>mom </b> - * - * Hi mom - *
- * - *


- * + * @see {@link #friendlyEncodeHTML(String)} + * * @param text string to be encoded * @param skipLeadingWhitespace true signals to ignore any leading whitespace characters. * This is useful when line wrapping to force wrapped lines to the left @@ -625,6 +598,46 @@ public class HTMLUtilities { return buffer.toString(); } + /** + * Escapes any HTML special characters in the specified text. + *

+ * Does not otherwise modify the input text or wrap lines. + *

+ * See also {@link StringEscapeUtils#escapeHtml3(String)}. + * + * @param text plain-text that might have some characters that should NOT be interpreted as HTML + * @return string with any html characters replaced with equivalents + */ + public static String escapeHTML(String text) { + + StringBuilder buffer = new StringBuilder(text.length()); + text.codePoints().forEach(cp -> { + switch (cp) { + case '&': + buffer.append("&"); + break; + case '<': + buffer.append("<"); + break; + case '>': + buffer.append(">"); + break; + default: + if (cp < ' ' || cp >= 0x7F) { + buffer.append("&#x"); + buffer.append(Integer.toString(cp, 16).toUpperCase()); + buffer.append(";"); + } + else { + buffer.appendCodePoint(cp); + } + break; + } + }); + + return buffer.toString(); + } + /** * A convenience method to split the given HTML into lines, based on the given length, and * then to {@link #friendlyEncodeHTML(String)} the text. diff --git a/Ghidra/Framework/Generic/src/main/java/resources/ResourceManager.java b/Ghidra/Framework/Generic/src/main/java/resources/ResourceManager.java index eb424a3536..b08c9528e1 100644 --- a/Ghidra/Framework/Generic/src/main/java/resources/ResourceManager.java +++ b/Ghidra/Framework/Generic/src/main/java/resources/ResourceManager.java @@ -690,4 +690,12 @@ public class ResourceManager { testSearchPaths = results; return testSearchPaths; } + + public static List loadImages(String... filenames) { + List results = new ArrayList<>(filenames.length); + for (String filename : filenames) { + results.add(loadImage(filename)); + } + return results; + } } diff --git a/Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/GraphComponent.java b/Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/GraphComponent.java index b092deecad..a68ea81fbf 100644 --- a/Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/GraphComponent.java +++ b/Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/GraphComponent.java @@ -24,12 +24,12 @@ import javax.swing.*; import com.google.common.base.Function; -import docking.DockingUtils; import docking.DockingWindowManager; import docking.ToolTipManager; import docking.help.HelpService; import docking.widgets.EmptyBorderButton; import docking.widgets.PopupWindow; +import docking.widgets.label.GIconLabel; import edu.uci.ics.jung.algorithms.layout.GraphElementAccessor; import edu.uci.ics.jung.algorithms.layout.Layout; import edu.uci.ics.jung.visualization.*; @@ -418,7 +418,7 @@ public class GraphComponent, G e String tooltip = "Bring satellite view to the front"; Icon icon = ResourceManager.loadImage("images/network-wireless.png"); - JLabel iconLabel = DockingUtils.createNonHtmlLabel(icon); + JLabel iconLabel = new GIconLabel(icon); iconLabel.setOpaque(false); iconLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); iconLabel.setToolTipText(tooltip); @@ -458,7 +458,7 @@ public class GraphComponent, G e "options to have the graph update automatically."; Icon icon = Icons.REFRESH_ICON; - JLabel iconLabel = DockingUtils.createNonHtmlLabel(icon); + JLabel iconLabel = new GIconLabel(icon); iconLabel.setOpaque(false); iconLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); iconLabel.setToolTipText(tooltip); diff --git a/Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/VisualGraphView.java b/Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/VisualGraphView.java index 072a2a46fb..046554b82f 100644 --- a/Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/VisualGraphView.java +++ b/Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/VisualGraphView.java @@ -23,7 +23,7 @@ import java.util.function.Supplier; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import edu.uci.ics.jung.visualization.RenderContext; import edu.uci.ics.jung.visualization.VisualizationViewer; import edu.uci.ics.jung.visualization.control.ScalingControl; @@ -342,7 +342,7 @@ public class VisualGraphView { +public class TestVertexTooltipProvider + implements VertexTooltipProvider { private AtomicBoolean tooltipTriggered = new AtomicBoolean(); private Map> shownTooltipsByVertex = @@ -104,7 +105,7 @@ public class TestVertexTooltipProvider implements VertexTooltipProvider fsClass = project.getProjectData().getLocalStorageClass(); String fsClassName = ""; if (IndexedV1LocalFileSystem.class.equals(fsClass)) { @@ -146,11 +145,11 @@ public class ProjectInfoDialog extends DialogComponentProvider { fsClassName = "Mangled Filesystem"; } - JLabel label = DockingUtils.createNonHtmlLabel(fsClassName); + JLabel label = new GLabel(fsClassName); label.setName("Project Storage Type"); infoPanel.add(label); - infoPanel.add(DockingUtils.createNonHtmlLabel("Project Name:", SwingConstants.RIGHT)); - label = DockingUtils.createNonHtmlLabel(project.getName()); + infoPanel.add(new GLabel("Project Name:", SwingConstants.RIGHT)); + label = new GLabel(project.getName()); label.setName("Project Name"); infoPanel.add(label); @@ -229,26 +228,25 @@ public class ProjectInfoDialog extends DialogComponentProvider { JPanel panel = new JPanel(new PairLayout(5, 10)); panel.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); - JLabel sLabel = DockingUtils.createNonHtmlLabel("Server Name:", SwingConstants.RIGHT); + JLabel sLabel = new GDLabel("Server Name:", SwingConstants.RIGHT); panel.add(sLabel); - serverLabel = DockingUtils.createNonHtmlLabel(serverName); + serverLabel = new GDLabel(serverName); serverLabel.setName("Server Name"); panel.add(serverLabel); - JLabel pLabel = DockingUtils.createNonHtmlLabel("Port Number:", SwingConstants.RIGHT); + JLabel pLabel = new GDLabel("Port Number:", SwingConstants.RIGHT); panel.add(pLabel); - portLabel = DockingUtils.createNonHtmlLabel(portNumberStr); + portLabel = new GDLabel(portNumberStr); portLabel.setName("Port Number"); panel.add(portLabel); - JLabel repLabel = DockingUtils.createNonHtmlLabel("Repository Name:", SwingConstants.RIGHT); + JLabel repLabel = new GDLabel("Repository Name:", SwingConstants.RIGHT); panel.add(repLabel); - repNameLabel = DockingUtils.createNonHtmlLabel(repositoryName); + repNameLabel = new GDLabel(repositoryName); repNameLabel.setName("Repository Name"); panel.add(repNameLabel); - JLabel connectLabel = - DockingUtils.createNonHtmlLabel("Connection Status:", SwingConstants.RIGHT); + JLabel connectLabel = new GDLabel("Connection Status:", SwingConstants.RIGHT); panel.add(connectLabel); connectionButton = new JButton( @@ -270,8 +268,7 @@ public class ProjectInfoDialog extends DialogComponentProvider { buttonPanel.add(connectionButton); panel.add(buttonPanel); - JLabel userLabel = - DockingUtils.createNonHtmlLabel("User Access Level:", SwingConstants.RIGHT); + JLabel userLabel = new GDLabel("User Access Level:", SwingConstants.RIGHT); userLabel.setToolTipText("Indicates your privileges in the shared repository"); panel.add(userLabel); User user = null; @@ -283,7 +280,7 @@ public class ProjectInfoDialog extends DialogComponentProvider { Msg.error(this, "Unable to get the current user", e); } } - userAccessLabel = DockingUtils.createNonHtmlLabel(getAccessString(user)); + userAccessLabel = new GDLabel(getAccessString(user)); userAccessLabel.setName("User Access Level"); panel.add(userLabel); panel.add(userAccessLabel); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/RepositoryChooser.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/RepositoryChooser.java index fe716aab7c..f6e502102e 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/RepositoryChooser.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/RepositoryChooser.java @@ -27,6 +27,8 @@ import javax.swing.event.*; import docking.DialogComponentProvider; import docking.DockingUtils; +import docking.widgets.label.GDLabel; +import docking.widgets.label.GLabel; import ghidra.framework.client.*; import ghidra.framework.model.ServerInfo; import ghidra.framework.protocol.ghidra.GhidraURL; @@ -96,7 +98,7 @@ class RepositoryChooser extends DialogComponentProvider { serverInfoPanel.add(topPanel, BorderLayout.NORTH); JPanel lowerPanel = new JPanel(new BorderLayout()); - JLabel label = DockingUtils.createNonHtmlLabel("Repository Names", SwingConstants.LEFT); + JLabel label = new GDLabel("Repository Names", SwingConstants.LEFT); label.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 5)); lowerPanel.add(label, BorderLayout.NORTH); @@ -138,7 +140,7 @@ class RepositoryChooser extends DialogComponentProvider { urlTextField = new JTextField("ghidra:"); JPanel panel = new JPanel(new PairLayout()); - panel.add(DockingUtils.createNonHtmlLabel("URL:")); + panel.add(new GLabel("URL:")); panel.add(urlTextField); urlPanel.add(panel, BorderLayout.NORTH); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/RepositoryPanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/RepositoryPanel.java index 9bbf7d250b..76abbb2591 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/RepositoryPanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/RepositoryPanel.java @@ -23,6 +23,7 @@ import javax.swing.*; import javax.swing.event.*; import docking.DockingUtils; +import docking.widgets.label.GDLabel; import docking.wizard.*; import ghidra.app.util.GenericHelpTopics; import ghidra.util.HelpLocation; @@ -151,7 +152,7 @@ public class RepositoryPanel extends AbstractWizardJPanel { buttonGroup.add(existingRepButton); JPanel innerPanel = new JPanel(new BorderLayout()); - JLabel label = DockingUtils.createNonHtmlLabel("Repository Names", SwingConstants.LEFT); + JLabel label = new GDLabel("Repository Names", SwingConstants.LEFT); label.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 5)); innerPanel.add(label, BorderLayout.NORTH); @@ -179,7 +180,7 @@ public class RepositoryPanel extends AbstractWizardJPanel { createRepButton = new JRadioButton("Create Repository", !existingRepButton.isSelected()); buttonGroup.add(createRepButton); - nameLabel = DockingUtils.createNonHtmlLabel("Repository Name:", SwingConstants.RIGHT); + nameLabel = new GDLabel("Repository Name:", SwingConstants.RIGHT); nameLabel.setEnabled(createRepButton.isSelected()); nameField = new JTextField(20); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/SelectProjectPanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/SelectProjectPanel.java index e8e498b4c3..90f5268596 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/SelectProjectPanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/SelectProjectPanel.java @@ -25,9 +25,9 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.Document; -import docking.DockingUtils; import docking.options.editor.ButtonPanelFactory; import docking.widgets.filechooser.GhidraFileChooser; +import docking.widgets.label.GDLabel; import docking.wizard.AbstractWizardJPanel; import docking.wizard.WizardManager; import ghidra.app.util.GenericHelpTopics; @@ -135,8 +135,7 @@ class SelectProjectPanel extends AbstractWizardJPanel { GridBagLayout gbl = new GridBagLayout(); outerPanel.setLayout(gbl); - JLabel dirLabel = - DockingUtils.createNonHtmlLabel("Project Directory:", SwingConstants.RIGHT); + JLabel dirLabel = new GDLabel("Project Directory:", SwingConstants.RIGHT); directoryField = new JTextField(25); directoryField.setName("Project Directory"); @@ -149,8 +148,7 @@ class SelectProjectPanel extends AbstractWizardJPanel { directoryField.setText(projectDirectory.getAbsolutePath()); } directoryField.setCaretPosition(directoryField.getText().length() - 1); - JLabel projectNameLabel = - DockingUtils.createNonHtmlLabel("Project Name:", SwingConstants.RIGHT); + JLabel projectNameLabel = new GDLabel("Project Name:", SwingConstants.RIGHT); projectNameField = new JTextField(25); projectNameField.setName("Project Name"); projectNameField.addActionListener(new ActionListener() { diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ServerInfoComponent.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ServerInfoComponent.java index f9d571d205..dcfddcd87a 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ServerInfoComponent.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ServerInfoComponent.java @@ -22,8 +22,8 @@ import java.awt.event.ActionListener; import javax.swing.*; import javax.swing.event.*; -import docking.DockingUtils; import docking.ToolTipManager; +import docking.widgets.label.GDLabel; import ghidra.framework.model.ServerInfo; import ghidra.framework.remote.GhidraServerHandle; import ghidra.util.MessageType; @@ -94,7 +94,7 @@ public class ServerInfoComponent extends JPanel { } private void buildMainPanel() { - JLabel nameLabel = DockingUtils.createNonHtmlLabel("Server Name:", SwingConstants.RIGHT); + JLabel nameLabel = new GDLabel("Server Name:", SwingConstants.RIGHT); nameField = new JTextField(20); nameField.setName("Server Name"); nameField.addActionListener(new ActionListener() { @@ -121,7 +121,7 @@ public class ServerInfoComponent extends JPanel { }; nameField.getDocument().addDocumentListener(nameDocListener); - JLabel portLabel = DockingUtils.createNonHtmlLabel("Port Number:", SwingConstants.RIGHT); + JLabel portLabel = new GDLabel("Port Number:", SwingConstants.RIGHT); portNumberField = new JTextField(20); portNumberField.setName("Port Number"); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolConnectionPanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolConnectionPanel.java index fdf439a25c..c1402a93f1 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolConnectionPanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolConnectionPanel.java @@ -24,7 +24,7 @@ import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import docking.widgets.list.GListCellRenderer; import ghidra.framework.model.*; import ghidra.util.Msg; @@ -423,9 +423,9 @@ class ToolConnectionPanel extends JPanel implements ListSelectionListener { JComponent[] row1 = null; JComponent[] row2 = null; - JLabel producerLabel = DockingUtils.createNonHtmlLabel("Event Producer:"); - JLabel consumerLabel = DockingUtils.createNonHtmlLabel("Event Consumer:"); - JLabel eventLabel = DockingUtils.createNonHtmlLabel("Event Names:"); + JLabel producerLabel = new GDLabel("Event Producer:"); + JLabel consumerLabel = new GDLabel("Event Consumer:"); + JLabel eventLabel = new GDLabel("Event Names:"); JComponent[] c1 = { producerLabel, consumerLabel, eventLabel }; JComponent[] c2 = { producerListScrollPane, consumerListScrollPane, eventListScrollPane }; diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/UserAgreementDialog.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/UserAgreementDialog.java index 99e9e2e663..8610612d3c 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/UserAgreementDialog.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/UserAgreementDialog.java @@ -21,7 +21,9 @@ import java.io.InputStream; import javax.swing.*; import javax.swing.text.html.HTMLEditorKit; -import docking.*; +import docking.DialogComponentProvider; +import docking.DockingWindowManager; +import docking.widgets.label.GDLabel; import ghidra.util.HTMLUtilities; import ghidra.util.Msg; import ghidra.util.layout.VerticalLayout; @@ -53,8 +55,7 @@ public class UserAgreementDialog extends DialogComponentProvider { private JComponent buildWorkPanel() { Font font = new Font("Default", Font.PLAIN, 16); JPanel panel = new JPanel(new BorderLayout()); - JLabel label = - DockingUtils.createNonHtmlLabel("Ghidra User Agreement", SwingConstants.CENTER); + JLabel label = new GDLabel("Ghidra User Agreement", SwingConstants.CENTER); label.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); label.setFont(font.deriveFont(Font.ITALIC, 22f)); panel.add(label, BorderLayout.NORTH); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ViewProjectAccessPanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ViewProjectAccessPanel.java index 5633cc7125..f565856151 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ViewProjectAccessPanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ViewProjectAccessPanel.java @@ -22,7 +22,7 @@ import java.util.List; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.framework.client.RepositoryAdapter; import ghidra.framework.plugintool.PluginTool; import ghidra.framework.remote.User; @@ -80,8 +80,7 @@ public class ViewProjectAccessPanel extends ProjectAccessPanel { mainPanel.add(userAccessPanel, BorderLayout.CENTER); if (anonymousServerAccessAllowed && origAnonymousAccessEnabled) { - JLabel anonymousAccessLabel = - DockingUtils.createNonHtmlLabel("Anonymous Read-Only Access Enabled"); + JLabel anonymousAccessLabel = new GDLabel("Anonymous Read-Only Access Enabled"); anonymousAccessLabel.setBorder(BorderFactory.createEmptyBorder(5, 2, 0, 0)); Font f = anonymousAccessLabel.getFont().deriveFont(Font.ITALIC); anonymousAccessLabel.setFont(f); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/WorkspacePanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/WorkspacePanel.java index 8f3d0dac2c..3506532f4d 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/WorkspacePanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/WorkspacePanel.java @@ -23,9 +23,9 @@ import java.util.HashMap; import javax.swing.*; import javax.swing.border.Border; -import docking.DockingUtils; import docking.help.Help; import docking.help.HelpService; +import docking.widgets.combobox.GComboBox; import docking.widgets.dialogs.InputDialog; import ghidra.framework.model.*; import ghidra.util.HelpLocation; @@ -66,8 +66,7 @@ class WorkspacePanel extends JPanel implements WorkspaceChangeListener { // create the combo box that allows the user to choose which // workspace becomes active workspaceModel = new DefaultComboBoxModel<>(); - workspaceChooser = new JComboBox<>(workspaceModel); - DockingUtils.turnOffHTMLRendering(workspaceChooser); + workspaceChooser = new GComboBox<>(workspaceModel); workspaceChooser.addItemListener(e -> { if (e.getStateChange() == ItemEvent.SELECTED) { chooseWorkspace((String) workspaceModel.getSelectedItem()); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatable/ProjectDataTablePanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatable/ProjectDataTablePanel.java index 990822d725..e988107073 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatable/ProjectDataTablePanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatable/ProjectDataTablePanel.java @@ -25,10 +25,12 @@ import java.util.List; import javax.swing.*; -import docking.*; +import docking.ActionContext; +import docking.ComponentProvider; import docking.action.DockingActionIf; import docking.help.Help; import docking.help.HelpService; +import docking.widgets.label.GDHtmlLabel; import docking.widgets.table.*; import docking.widgets.table.threaded.*; import ghidra.framework.main.FrontEndPlugin; @@ -220,8 +222,8 @@ public class ProjectDataTablePanel extends JPanel { } } - private JLabel capacityExceededText = DockingUtils.createHtmlLabel( - "

Table view disabled for very large projects, or
" + + private JLabel capacityExceededText = + new GDHtmlLabel("
Table view disabled for very large projects, or
" + "if an older project/repository filesystem is in use.
" + "View will remain disabled until project is closed.
"); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/CheckoutDialog.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/CheckoutDialog.java index 96fead1358..6e92b5d6e7 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/CheckoutDialog.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/CheckoutDialog.java @@ -20,9 +20,9 @@ import java.awt.BorderLayout; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.MultiLineLabel; import docking.widgets.OptionDialog; +import docking.widgets.label.GIconLabel; import ghidra.app.util.GenericHelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.util.HelpLocation; @@ -78,9 +78,9 @@ public class CheckoutDialog extends DialogComponentProvider { innerPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10)); JPanel msgPanel = new JPanel(new BorderLayout()); - JLabel warnIcon = DockingUtils.createNonHtmlLabel( - OptionDialog.getIconForMessageType(OptionDialog.QUESTION_MESSAGE)); - msgPanel.add(warnIcon, BorderLayout.WEST); + msgPanel.add( + new GIconLabel(OptionDialog.getIconForMessageType(OptionDialog.QUESTION_MESSAGE)), + BorderLayout.WEST); MultiLineLabel msgText = new MultiLineLabel("Check out selected file(s)?"); msgText.setMaximumSize(msgText.getPreferredSize()); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/UndoActionDialog.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/UndoActionDialog.java index 883d2cf6a9..86430e1845 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/UndoActionDialog.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/UndoActionDialog.java @@ -21,7 +21,8 @@ import java.util.List; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.GIconLabel; +import docking.widgets.label.GLabel; import ghidra.app.util.GenericHelpTopics; import ghidra.framework.model.DomainFile; import ghidra.framework.plugintool.PluginTool; @@ -102,12 +103,11 @@ public class UndoActionDialog extends DialogComponentProvider { JPanel cbPanel = new JPanel(new BorderLayout()); cbPanel.add(saveCopyCB); - JLabel label = DockingUtils.createNonHtmlLabel( - "Undo " + actionString + " of the selected files:", SwingConstants.LEFT); - JLabel iconLabel = DockingUtils.createNonHtmlLabel(icon); JPanel iconPanel = new JPanel(new BorderLayout(10, 0)); - iconPanel.add(iconLabel, BorderLayout.WEST); - iconPanel.add(label, BorderLayout.CENTER); + iconPanel.add(new GIconLabel(icon), BorderLayout.WEST); + iconPanel.add( + new GLabel("Undo " + actionString + " of the selected files:", SwingConstants.LEFT), + BorderLayout.CENTER); innerPanel.add(Box.createVerticalStrut(10)); innerPanel.add(iconPanel); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/VersionControlDialog.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/VersionControlDialog.java index 80371f5fd6..ed53333973 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/VersionControlDialog.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/VersionControlDialog.java @@ -21,7 +21,7 @@ import java.awt.Component; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; +import docking.widgets.label.*; import ghidra.app.util.GenericHelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.util.HelpLocation; @@ -145,17 +145,15 @@ public class VersionControlDialog extends DialogComponentProvider { ImageIcon icon = resources.ResourceManager.loadImage( addToVersionControl ? "images/vcAdd.png" : "images/vcCheckIn.png"); - descriptionLabel = DockingUtils.createNonHtmlLabel( - addToVersionControl ? "Add comments to describe the file." - : "Add comments to describe changes", + descriptionLabel = new GDLabel(addToVersionControl ? "Add comments to describe the file." + : "Add comments to describe changes", SwingConstants.LEFT); JPanel dPanel = new JPanel(new BorderLayout(10, 0)); - dPanel.add(DockingUtils.createNonHtmlLabel(icon), BorderLayout.WEST); + dPanel.add(new GIconLabel(icon), BorderLayout.WEST); dPanel.add(descriptionLabel, BorderLayout.CENTER); - JLabel commentsLabel = DockingUtils.createNonHtmlLabel("Comments:", SwingConstants.LEFT); JPanel cPanel = new JPanel(new BorderLayout()); - cPanel.add(commentsLabel); + cPanel.add(new GLabel("Comments:", SwingConstants.LEFT)); commentsTextArea = new JTextArea(4, 20); JScrollPane sp = new JScrollPane(commentsTextArea); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/AbstractDetailsPanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/AbstractDetailsPanel.java index 76f9bf83a1..cfb1cfeb83 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/AbstractDetailsPanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/AbstractDetailsPanel.java @@ -24,7 +24,7 @@ import javax.swing.text.StyleConstants; import org.apache.commons.lang3.StringUtils; -import docking.DockingUtils; +import docking.widgets.label.GDHtmlLabel; import ghidra.util.HTMLUtilities; /** @@ -105,7 +105,7 @@ public abstract class AbstractDetailsPanel extends JPanel { */ protected void createMainPanel() { setLayout(new BorderLayout()); - textLabel = DockingUtils.createHtmlLabel(""); + textLabel = new GDHtmlLabel(""); textLabel.setVerticalAlignment(SwingConstants.TOP); textLabel.setOpaque(true); textLabel.setBackground(Color.WHITE); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/KeyBindingsPanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/KeyBindingsPanel.java index 77961643d7..1336c0bd1a 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/KeyBindingsPanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/KeyBindingsPanel.java @@ -33,6 +33,7 @@ import docking.action.KeyBindingData; import docking.util.KeyBindingUtils; import docking.widgets.MultiLineLabel; import docking.widgets.OptionDialog; +import docking.widgets.label.GIconLabel; import docking.widgets.table.*; import ghidra.framework.options.Options; import ghidra.framework.options.ToolOptions; @@ -274,8 +275,6 @@ public class KeyBindingsPanel extends JPanel { JPanel keyPanel = new JPanel(new BorderLayout()); JPanel defaultPanel = new JPanel(new BorderLayout()); - JLabel imageLabel = - DockingUtils.createNonHtmlLabel(ResourceManager.loadImage("images/information.png")); // the content of the left-hand side label MultiLineLabel mlabel = @@ -288,7 +287,7 @@ public class KeyBindingsPanel extends JPanel { BoxLayout bl = new BoxLayout(labelPanel, BoxLayout.X_AXIS); labelPanel.setLayout(bl); labelPanel.add(Box.createHorizontalStrut(5)); - labelPanel.add(imageLabel); + labelPanel.add(new GIconLabel(ResourceManager.loadImage("images/information.png"))); labelPanel.add(Box.createHorizontalStrut(5)); labelPanel.add(mlabel); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/PluginManagerComponent.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/PluginManagerComponent.java index f6b433551a..d24a4f07e2 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/PluginManagerComponent.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/PluginManagerComponent.java @@ -25,9 +25,9 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.HyperlinkEvent.EventType; -import docking.DockingUtils; import docking.EmptyBorderToggleButton; import docking.widgets.HyperlinkComponent; +import docking.widgets.label.*; import ghidra.framework.plugintool.PluginConfigurationModel; import ghidra.framework.plugintool.PluginTool; import ghidra.framework.plugintool.util.PluginPackage; @@ -96,8 +96,8 @@ public class PluginManagerComponent extends JPanel implements ChangeListener, Sc jCheckBox.setBackground(BG); panel.add(jCheckBox); panel.add(Box.createHorizontalStrut(10)); - JLabel label = DockingUtils.createNonHtmlLabel( - ResourceManager.getScaledIcon(pluginPackage.getIcon(), 32, 32, 32)); + JLabel label = + new GIconLabel(ResourceManager.getScaledIcon(pluginPackage.getIcon(), 32, 32, 32)); label.setBackground(BG); panel.add(label); panel.add(Box.createHorizontalStrut(10)); @@ -106,7 +106,7 @@ public class PluginManagerComponent extends JPanel implements ChangeListener, Sc JPanel labelPanel = new JPanel(new VerticalLayout(3)); labelPanel.setBorder(BorderFactory.createEmptyBorder(4, 0, 0, 0)); labelPanel.setBackground(BG); - label = DockingUtils.createNonHtmlLabel(pluginPackage.getName()); + label = new GLabel(pluginPackage.getName()); //label.setVerticalAlignment(SwingConstants.TOP); label.setFont(label.getFont().deriveFont(18f)); label.setForeground(Color.BLACK); @@ -124,7 +124,7 @@ public class PluginManagerComponent extends JPanel implements ChangeListener, Sc add(labelPanel); String htmlDescription = getHTMLDescription(); - JLabel descriptionlabel = DockingUtils.createHtmlLabel(htmlDescription); + JLabel descriptionlabel = new GHtmlLabel(htmlDescription); descriptionlabel.setForeground(Color.GRAY); descriptionlabel.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); descriptionlabel.setVerticalAlignment(SwingConstants.TOP); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/SaveToolConfigDialog.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/SaveToolConfigDialog.java index 5197a4be1b..0320960714 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/SaveToolConfigDialog.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/SaveToolConfigDialog.java @@ -26,10 +26,10 @@ import javax.swing.border.TitledBorder; import javax.swing.event.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.options.editor.ButtonPanelFactory; import docking.widgets.OptionDialog; import docking.widgets.filechooser.GhidraFileChooser; +import docking.widgets.label.GLabel; import ghidra.framework.model.*; import ghidra.framework.plugintool.PluginTool; import ghidra.framework.preferences.Preferences; @@ -281,7 +281,7 @@ public class SaveToolConfigDialog extends DialogComponentProvider implements Lis nameField = new JTextField(11); nameField.setName("ToolName"); - namePanel.add(DockingUtils.createNonHtmlLabel("Tool Name:", SwingConstants.RIGHT)); + namePanel.add(new GLabel("Tool Name:", SwingConstants.RIGHT)); namePanel.add(nameField); return namePanel; @@ -316,7 +316,7 @@ public class SaveToolConfigDialog extends DialogComponentProvider implements Lis JPanel panel = new JPanel(new BorderLayout(5, 0)); panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - panel.add(DockingUtils.createNonHtmlLabel("Icon Name:"), BorderLayout.WEST); + panel.add(new GLabel("Icon Name:"), BorderLayout.WEST); panel.add(iconField, BorderLayout.CENTER); panel.add(browseButton, BorderLayout.EAST); return panel; diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/SelectChangedToolDialog.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/SelectChangedToolDialog.java index 410a336b6d..940e1c5429 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/SelectChangedToolDialog.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/SelectChangedToolDialog.java @@ -24,8 +24,8 @@ import java.util.List; import javax.swing.*; import docking.DialogComponentProvider; -import docking.DockingUtils; import docking.widgets.OptionDialog; +import docking.widgets.label.GHtmlLabel; import ghidra.framework.model.Tool; import ghidra.util.HTMLUtilities; import ghidra.util.layout.VerticalLayout; @@ -57,8 +57,8 @@ public class SelectChangedToolDialog extends DialogComponentProvider { JPanel panel = new JPanel(new BorderLayout()); String toolName = toolList.get(0).getToolName(); - JLabel descriptionLabel = DockingUtils.createHtmlLabel( - HTMLUtilities.toHTML("There are multiple changed instances of " + + JLabel descriptionLabel = + new GHtmlLabel(HTMLUtilities.toHTML("There are multiple changed instances of " + HTMLUtilities.friendlyEncodeHTML(toolName) + " running.

Which one would like to save to your tool chest?")); descriptionLabel.setIconTextGap(15); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/task/gui/GProgressBar.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/task/gui/GProgressBar.java index 6219f0d54d..0844be2807 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/task/gui/GProgressBar.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/task/gui/GProgressBar.java @@ -18,15 +18,14 @@ package ghidra.framework.task.gui; import java.awt.*; import java.lang.reflect.InvocationTargetException; import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.List; import javax.swing.*; -import docking.DockingUtils; import docking.ToolTipManager; import docking.util.AnimatedIcon; import docking.widgets.EmptyBorderButton; +import docking.widgets.label.GDHtmlLabel; +import docking.widgets.label.GIconLabel; import ghidra.util.Msg; import ghidra.util.SystemUtilities; import ghidra.util.layout.VerticalLayout; @@ -211,7 +210,7 @@ public class GProgressBar extends JPanel { private void buildProgressPanel(boolean includeTextField, boolean includeCancelButton, boolean includeAnimatedIcon) { - messageLabel = new JLabel(" ") { + messageLabel = new GDHtmlLabel(" ") { @Override public void invalidate() { // don't care @@ -350,27 +349,17 @@ public class GProgressBar extends JPanel { } private void createAnimatedIcon() { - List iconList = new ArrayList<>(); - iconList.add(ResourceManager.loadImage("images/hourglass24_01.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_02.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_02.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_03.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_03.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_04.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_04.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_05.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_05.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_06.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_06.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_07.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_07.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_08.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_08.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_09.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_10.png")); - iconList.add(ResourceManager.loadImage("images/hourglass24_11.png")); - AnimatedIcon progressIcon = new AnimatedIcon(iconList, 150, 0); - imageLabel = DockingUtils.createNonHtmlLabel(progressIcon); + + String[] filenames = { "images/hourglass24_01.png", "images/hourglass24_02.png", + "images/hourglass24_02.png", "images/hourglass24_03.png", "images/hourglass24_03.png", + "images/hourglass24_04.png", "images/hourglass24_04.png", "images/hourglass24_05.png", + "images/hourglass24_05.png", "images/hourglass24_06.png", "images/hourglass24_06.png", + "images/hourglass24_07.png", "images/hourglass24_07.png", "images/hourglass24_08.png", + "images/hourglass24_08.png", "images/hourglass24_09.png", "images/hourglass24_10.png", + "images/hourglass24_11.png" }; + + imageLabel = + new GIconLabel(new AnimatedIcon(ResourceManager.loadImages(filenames), 150, 0)); } } diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/task/gui/taskview/ScheduledTaskPanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/task/gui/taskview/ScheduledTaskPanel.java index 0a8774a04b..bd952f9101 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/task/gui/taskview/ScheduledTaskPanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/task/gui/taskview/ScheduledTaskPanel.java @@ -19,7 +19,7 @@ import java.awt.*; import javax.swing.*; -import docking.DockingUtils; +import docking.widgets.label.GDLabel; import ghidra.framework.task.gui.GProgressBar; public class ScheduledTaskPanel extends JPanel { @@ -37,7 +37,7 @@ public class ScheduledTaskPanel extends JPanel { layout = new ScheduledElementLayout(); setLayout(layout); - label = DockingUtils.createNonHtmlLabel(labelText); + label = new GDLabel(labelText); setBackground(Color.WHITE); add(label); } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java index 8114f751e4..f71edee94a 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java @@ -26,8 +26,8 @@ import javax.swing.*; import org.apache.commons.lang3.StringUtils; -import docking.DockingUtils; import docking.framework.DockingApplicationConfiguration; +import docking.widgets.label.GDLabel; import ghidra.GhidraApplicationLayout; import ghidra.GhidraLaunchable; import ghidra.app.plugin.core.datamgr.archive.SourceArchive; @@ -789,7 +789,7 @@ public class DataTypeArchiveTransformer implements GhidraLaunchable { monitorComponent.setVisible(true); statusPanel.add(monitorComponent, BorderLayout.EAST); // Add the status message to the status area. - JLabel statusLabel = DockingUtils.createNonHtmlLabel(" "); + JLabel statusLabel = new GDLabel(" "); statusPanel.add(statusLabel, BorderLayout.CENTER); Dimension preferredSize = statusLabel.getPreferredSize(); preferredSize.height = monitorComponent.getPreferredSize().height; diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformerPanel.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformerPanel.java index c1391f864d..64f562ffe8 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformerPanel.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformerPanel.java @@ -23,8 +23,9 @@ import java.io.IOException; import javax.swing.*; -import docking.DockingUtils; import docking.widgets.filechooser.GhidraFileChooser; +import docking.widgets.label.GHtmlLabel; +import docking.widgets.label.GLabel; import ghidra.framework.preferences.Preferences; import ghidra.util.exception.*; import ghidra.util.task.TaskMonitor; @@ -59,11 +60,10 @@ public class DataTypeArchiveTransformerPanel extends JPanel { } private void setupDescription() { - String description = - "" + "Specify the files for converting a new data type archive (.gdt)
" + + JLabel label = new GHtmlLabel( + "Specify the files for converting a new data type archive (.gdt)
" + "to match the IDs of data types in an old data type archive.
" + - "The result will be saved to the destination archive." + ""; - JLabel label = DockingUtils.createHtmlLabel(description); + "The result will be saved to the destination archive."); label.setBorder(BorderFactory.createEmptyBorder(0, 0, 8, 0)); label.setHorizontalAlignment(SwingConstants.CENTER); add(label, BorderLayout.NORTH); @@ -76,7 +76,7 @@ public class DataTypeArchiveTransformerPanel extends JPanel { gbc.gridy = 0; gbc.gridx = 0; gbc.gridwidth = 1; - filePanel.add(DockingUtils.createNonHtmlLabel("Old file name "), gbc); + filePanel.add(new GLabel("Old file name "), gbc); gbc.gridx = 1; gbc.gridwidth = 1; @@ -114,7 +114,7 @@ public class DataTypeArchiveTransformerPanel extends JPanel { gbc.gridy = 1; gbc.gridx = 0; gbc.gridwidth = 1; - filePanel.add(DockingUtils.createNonHtmlLabel("New file name "), gbc); + filePanel.add(new GLabel("New file name "), gbc); gbc.gridx = 1; gbc.gridwidth = 1; @@ -147,7 +147,7 @@ public class DataTypeArchiveTransformerPanel extends JPanel { gbc.gridy = 2; gbc.gridx = 0; gbc.gridwidth = 1; - filePanel.add(DockingUtils.createNonHtmlLabel("Destination file name "), gbc); + filePanel.add(new GLabel("Destination file name "), gbc); gbc.gridx = 1; gbc.gridwidth = 1;