diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManager.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManager.java index 76cbdea086..b2825e3951 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManager.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManager.java @@ -22,8 +22,6 @@ import java.util.Hashtable; import javax.swing.JComponent; import javax.swing.SwingUtilities; -import docking.help.Help; -import docking.help.HelpService; import generic.util.WindowUtilities; import ghidra.framework.data.DomainObjectMergeManager; import ghidra.framework.model.DomainFile; @@ -35,6 +33,8 @@ import ghidra.program.model.listing.DomainObjectChangeSet; import ghidra.util.*; import ghidra.util.exception.CancelledException; import ghidra.util.task.*; +import help.Help; +import help.HelpService; /** * Top level object that manages each step of the merge/resolve conflicts diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/ProgramMultiUserMergeManager.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/ProgramMultiUserMergeManager.java index fa20b07dd8..31e59c1e23 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/ProgramMultiUserMergeManager.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/ProgramMultiUserMergeManager.java @@ -19,8 +19,6 @@ import java.awt.*; import javax.swing.*; -import docking.help.Help; -import docking.help.HelpService; import generic.util.WindowUtilities; import ghidra.app.merge.datatypes.DataTypeMergeManager; import ghidra.app.merge.listing.*; @@ -43,6 +41,8 @@ import ghidra.program.model.listing.ProgramChangeSet; import ghidra.program.util.ProgramLocation; import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; +import help.Help; +import help.HelpService; /** * Top level object that manages each step of the merge/resolve conflicts 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 07723d28c6..61172d1192 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 @@ -32,8 +32,6 @@ import javax.swing.table.TableColumn; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FilenameUtils; -import docking.help.Help; -import docking.help.HelpService; import docking.options.editor.GenericOptionsComponent; import docking.widgets.OptionDialog; import docking.widgets.combobox.GhidraComboBox; @@ -51,6 +49,8 @@ import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.exception.AssertException; import ghidra.util.layout.VerticalLayout; +import help.Help; +import help.HelpService; import utilities.util.FileUtilities; class AnalysisPanel extends JPanel implements PropertyChangeListener { 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 df423b09bc..4bd980b492 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 @@ -35,8 +35,6 @@ import javax.swing.text.JTextComponent; import docking.DockingWindowManager; import docking.actions.KeyBindingUtils; import docking.dnd.*; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.DropDownSelectionTextField; import docking.widgets.OptionDialog; import docking.widgets.fieldpanel.support.FieldRange; @@ -58,6 +56,8 @@ import ghidra.util.*; import ghidra.util.data.DataTypeParser.AllowedDataTypes; import ghidra.util.exception.UsrException; import ghidra.util.layout.VerticalLayout; +import help.Help; +import help.HelpService; /** * Panel for editing a composite data type. Specific composite data type editors diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java index 4d7fa83e54..8ca6920578 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java @@ -29,8 +29,6 @@ import javax.swing.event.ChangeListener; import docking.ActionContext; import docking.ComponentProvider; import docking.action.*; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.fieldpanel.internal.FieldPanelCoordinator; import docking.widgets.tabbedpane.DockingTabRenderer; import ghidra.app.util.viewer.listingpanel.ListingCodeComparisonPanel; @@ -44,6 +42,8 @@ import ghidra.program.model.listing.*; import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.classfinder.ClassSearcher; +import help.Help; +import help.HelpService; import resources.ResourceManager; /** diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/MultiFunctionComparisonPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/MultiFunctionComparisonPanel.java index 37092e6dad..2c666f2b15 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/MultiFunctionComparisonPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/MultiFunctionComparisonPanel.java @@ -23,13 +23,13 @@ import java.util.Set; import javax.swing.*; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.fieldpanel.internal.FieldPanelCoordinator; import ghidra.app.services.FunctionComparisonModel; import ghidra.app.util.viewer.util.CodeComparisonPanel; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.listing.Function; +import help.Help; +import help.HelpService; /** * Extends the basic {@link FunctionComparisonPanel one-to-one comparison panel} diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/OverviewColorComponent.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/OverviewColorComponent.java index e6add5294e..5cd4bb09ef 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/OverviewColorComponent.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/OverviewColorComponent.java @@ -25,7 +25,6 @@ import java.util.List; import javax.swing.*; import docking.action.DockingActionIf; -import docking.help.Help; import ghidra.app.nav.Navigatable; import ghidra.app.services.GoToService; import ghidra.app.util.viewer.listingpanel.OverviewProvider; @@ -34,6 +33,7 @@ import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.Address; import ghidra.program.model.listing.Program; import ghidra.util.task.SwingUpdateManager; +import help.Help; /** * Overview bar component. Uses color to indicate various address based properties for a program. 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 4aa0da11ba..fe02e4353b 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 @@ -23,7 +23,6 @@ import javax.swing.border.TitledBorder; import docking.DialogComponentProvider; import docking.DockingWindowManager; -import docking.help.HelpService; import docking.widgets.button.GRadioButton; import docking.widgets.label.GLabel; import docking.widgets.textfield.IntegerTextField; @@ -31,6 +30,7 @@ import ghidra.app.plugin.core.scalartable.RangeFilterTextField.FilterType; import ghidra.framework.plugintool.PluginTool; import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; +import help.HelpService; /** * Dialog allowing the user to set parameters when initiating a scalar search on a program. 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 0e3e7d6b97..4c26b9fcdb 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 @@ -23,7 +23,6 @@ import javax.swing.*; import javax.swing.border.Border; import docking.*; -import docking.help.HelpService; import docking.widgets.label.GLabel; import docking.widgets.table.GTableFilterPanel; import docking.widgets.table.TableFilter; @@ -38,6 +37,7 @@ import ghidra.util.HelpLocation; import ghidra.util.table.*; import ghidra.util.table.actions.DeleteTableRowAction; import ghidra.util.table.actions.MakeProgramSelectionAction; +import help.HelpService; import resources.ResourceManager; /** diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainEventDisplayPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainEventDisplayPlugin.java index 74351bf01b..842f8e51df 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainEventDisplayPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainEventDisplayPlugin.java @@ -19,8 +19,6 @@ import java.awt.Font; import java.lang.reflect.Field; import java.util.Date; -import docking.help.Help; -import docking.help.HelpService; import ghidra.app.DeveloperPluginPackage; import ghidra.app.events.ProgramActivatedPluginEvent; import ghidra.app.plugin.PluginCategoryNames; @@ -30,6 +28,8 @@ import ghidra.framework.plugintool.util.PluginStatus; import ghidra.program.model.listing.Program; import ghidra.program.util.*; import ghidra.util.datastruct.IntObjectHashtable; +import help.Help; +import help.HelpService; /** * Debug Plugin to show domain object change events. diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/EventDisplayPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/EventDisplayPlugin.java index 34106a629d..aabbd9790b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/EventDisplayPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/EventDisplayPlugin.java @@ -15,12 +15,12 @@ */ package ghidra.app.plugin.debug; -import docking.help.Help; -import docking.help.HelpService; import ghidra.app.DeveloperPluginPackage; import ghidra.app.plugin.PluginCategoryNames; import ghidra.framework.plugintool.*; import ghidra.framework.plugintool.util.PluginStatus; +import help.Help; +import help.HelpService; /** * Plugin to demonstrate handling of Program within a plugin and how to diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/JavaHelpPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/JavaHelpPlugin.java index af2480d9a6..6cc07fca28 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/JavaHelpPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/JavaHelpPlugin.java @@ -37,6 +37,8 @@ import ghidra.framework.plugintool.util.PluginStatus; import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.task.*; +import help.Help; +import help.HelpService; /** * Generate a file of all components and actions in the diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/format/FieldHeader.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/format/FieldHeader.java index 41dc4f7d1f..b2b0c6f056 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/format/FieldHeader.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/format/FieldHeader.java @@ -25,13 +25,13 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import docking.action.DockingActionIf; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.fieldpanel.FieldPanel; import docking.widgets.indexedscrollpane.IndexedScrollPane; import ghidra.app.util.viewer.field.FieldFactory; import ghidra.app.util.viewer.format.actions.*; import ghidra.util.HelpLocation; +import help.Help; +import help.HelpService; /** * Class to manage the tabbed panel for field formats. 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 e4ae6b1826..cd5573ebd2 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,11 +21,11 @@ import java.awt.event.*; import javax.swing.*; import javax.swing.border.Border; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.label.GDLabel; import ghidra.app.util.viewer.field.FieldFactory; import ghidra.util.HelpLocation; +import help.Help; +import help.HelpService; /** * Class manage a header for the FieldViewer. diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingCodeComparisonPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingCodeComparisonPanel.java index 5192bf79ec..d7d49f3337 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingCodeComparisonPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingCodeComparisonPanel.java @@ -26,8 +26,6 @@ import javax.swing.event.ChangeListener; import docking.*; import docking.action.*; -import docking.help.Help; -import docking.help.HelpService; import docking.menu.ActionState; import docking.menu.MultiStateDockingAction; import docking.widgets.EventTrigger; @@ -61,6 +59,8 @@ import ghidra.program.util.*; import ghidra.util.*; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; +import help.Help; +import help.HelpService; import resources.Icons; import resources.ResourceManager; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/base/help/GhidraHelpService.java b/Ghidra/Features/Base/src/main/java/ghidra/base/help/GhidraHelpService.java index 6b89ae4188..320d271455 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/base/help/GhidraHelpService.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/base/help/GhidraHelpService.java @@ -26,6 +26,7 @@ import docking.help.*; import generic.jar.ResourceFile; import ghidra.framework.Application; import ghidra.util.Msg; +import help.HelpService; import resources.ResourceManager; /** diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserOptionsTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserOptionsTest.java index 9105c35223..ca9d948c3c 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserOptionsTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserOptionsTest.java @@ -23,8 +23,6 @@ import java.util.stream.Collectors; import org.junit.*; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.fieldpanel.field.*; import generic.test.TestUtils; import ghidra.GhidraOptions; @@ -50,6 +48,8 @@ import ghidra.program.util.BytesFieldLocation; import ghidra.test.AbstractGhidraHeadedIntegrationTest; import ghidra.test.TestEnv; import ghidra.util.HelpLocation; +import help.Help; +import help.HelpService; import util.CollectionUtils; public class CodeBrowserOptionsTest extends AbstractGhidraHeadedIntegrationTest { diff --git a/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerComponent.java b/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerComponent.java index b2c8fb1beb..f9eaf80da4 100644 --- a/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerComponent.java +++ b/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerComponent.java @@ -23,8 +23,6 @@ import java.math.BigInteger; import javax.swing.SwingUtilities; import docking.DockingUtils; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.EventTrigger; import docking.widgets.fieldpanel.FieldPanel; import docking.widgets.fieldpanel.Layout; @@ -34,6 +32,8 @@ import docking.widgets.fieldpanel.support.*; import ghidra.app.plugin.core.format.*; import ghidra.program.model.address.*; import ghidra.util.Msg; +import help.Help; +import help.HelpService; /** * FieldViewer to show data formatted according to the DataFormatModel that is passed in to the 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 a9d3e3841a..b395cd35a2 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 @@ -23,8 +23,6 @@ import java.util.List; import javax.swing.*; import javax.swing.event.*; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.fieldpanel.*; import docking.widgets.fieldpanel.field.EmptyTextField; import docking.widgets.fieldpanel.field.Field; @@ -42,6 +40,8 @@ import ghidra.util.Msg; import ghidra.util.exception.InvalidInputException; import ghidra.util.layout.HorizontalLayout; import ghidra.util.layout.PairLayout; +import help.Help; +import help.HelpService; /** * Top level component that contains has a scrolled pane for the panel of components that show the diff --git a/Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java b/Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java index 21ce1b4ca4..74abc0e85d 100644 --- a/Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java +++ b/Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java @@ -26,8 +26,6 @@ import javax.swing.text.*; import javax.swing.tree.TreeSelectionModel; import docking.DockingUtils; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.EventTrigger; import docking.widgets.OptionDialog; import docking.widgets.fieldpanel.FieldPanel; @@ -62,6 +60,8 @@ import ghidra.util.*; import ghidra.util.exception.CancelledException; import ghidra.util.exception.VersionException; import ghidra.util.task.*; +import help.Help; +import help.HelpService; import resources.ResourceManager; /** diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/actions/HelpAction.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/actions/HelpAction.java index 208bd2460b..ee2ed7903b 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/actions/HelpAction.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/actions/HelpAction.java @@ -21,12 +21,12 @@ import javax.swing.Icon; import docking.ActionContext; import docking.action.*; -import docking.help.Help; -import docking.help.HelpService; import docking.tool.ToolConstants; import ghidra.feature.vt.gui.plugin.VTPlugin; import ghidra.util.HelpLocation; import ghidra.util.Msg; +import help.Help; +import help.HelpService; import resources.ResourceManager; public class HelpAction extends DockingAction { diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTPlugin.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTPlugin.java index d0ccbde7f8..320e025640 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTPlugin.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTPlugin.java @@ -22,8 +22,6 @@ import java.util.Set; import javax.swing.*; import docking.action.DockingActionIf; -import docking.help.Help; -import docking.help.HelpService; import docking.tool.ToolConstants; import docking.wizard.WizardManager; import ghidra.GhidraOptions; @@ -48,6 +46,8 @@ import ghidra.program.model.address.AddressSetView; import ghidra.program.model.listing.Program; import ghidra.program.util.ProgramLocation; import ghidra.util.*; +import help.Help; +import help.HelpService; import resources.MultiIcon; import resources.ResourceManager; import resources.icons.*; diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/VTMarkupItemsTableProvider.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/VTMarkupItemsTableProvider.java index 1f8abd13b7..36bf28cb45 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/VTMarkupItemsTableProvider.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/VTMarkupItemsTableProvider.java @@ -31,7 +31,6 @@ import javax.swing.table.*; import docking.*; import docking.action.*; import docking.actions.PopupActionProvider; -import docking.help.HelpService; import docking.widgets.EventTrigger; import docking.widgets.fieldpanel.FieldPanel; import docking.widgets.fieldpanel.internal.FieldPanelCoordinator; @@ -63,6 +62,7 @@ import ghidra.program.util.ProgramLocation; import ghidra.util.HelpLocation; import ghidra.util.table.GhidraTable; import ghidra.util.table.GhidraThreadedTablePanel; +import help.HelpService; import resources.ResourceManager; /** 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 2e98881e14..dcb718eee9 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 @@ -27,7 +27,6 @@ import javax.swing.*; import javax.swing.border.TitledBorder; import docking.DockingWindowManager; -import docking.help.HelpService; import docking.widgets.button.GRadioButton; import docking.widgets.checkbox.GCheckBox; import docking.widgets.combobox.GComboBox; @@ -42,6 +41,7 @@ import ghidra.framework.options.*; import ghidra.util.HelpLocation; import ghidra.util.exception.InvalidInputException; import ghidra.util.layout.*; +import help.HelpService; /** * The ApplyMarkupPropertyEditor provides a custom GUI layout for the options that are used when diff --git a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/VTMatchTableProvider.java b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/VTMatchTableProvider.java index 872078b8b1..e1e355c52e 100644 --- a/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/VTMatchTableProvider.java +++ b/Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/VTMatchTableProvider.java @@ -30,7 +30,6 @@ import javax.swing.event.ListSelectionListener; import javax.swing.table.*; import docking.*; -import docking.help.HelpService; import docking.widgets.table.*; import docking.widgets.table.threaded.ThreadedTableModel; import ghidra.feature.vt.api.impl.VTChangeManager; @@ -54,6 +53,7 @@ import ghidra.util.layout.HorizontalLayout; import ghidra.util.table.GhidraTable; import ghidra.util.table.GhidraThreadedTablePanel; import ghidra.util.task.SwingUpdateManager; +import help.HelpService; public class VTMatchTableProvider extends ComponentProviderAdapter implements FilterDialogModel, VTControllerListener { diff --git a/Ghidra/Framework/Docking/build.gradle b/Ghidra/Framework/Docking/build.gradle index 233e2ba577..139ec36c1f 100644 --- a/Ghidra/Framework/Docking/build.gradle +++ b/Ghidra/Framework/Docking/build.gradle @@ -15,6 +15,7 @@ */ apply from: "$rootProject.projectDir/gradle/distributableGhidraModule.gradle" apply from: "$rootProject.projectDir/gradle/javaProject.gradle" +apply from: "$rootProject.projectDir/gradle/helpProject.gradle" apply from: "$rootProject.projectDir/gradle/jacocoProject.gradle" apply from: "$rootProject.projectDir/gradle/javaTestProject.gradle" apply from: "$rootProject.projectDir/gradle/javadoc.gradle" @@ -24,12 +25,8 @@ eclipse.project.name = 'Framework Docking' dependencies { api project(':Generic') - api 'net.java.dev.timingframework:timingframework:1.0' - - // Only include this debug version of the jh library if necessary. - //api name:'jh2.with.debug' - api 'javax.help:javahelp:2.0.05' - + api project(':Help') + // include code from src/test in Generic testImplementation project(path: ':Generic', configuration: 'testArtifacts') diff --git a/Ghidra/Framework/Docking/certification.manifest b/Ghidra/Framework/Docking/certification.manifest index 4efc981516..40ca041e72 100644 --- a/Ghidra/Framework/Docking/certification.manifest +++ b/Ghidra/Framework/Docking/certification.manifest @@ -10,6 +10,18 @@ ##MODULE IP: Tango Icons - Public Domain Module.manifest||GHIDRA||||END| data/ExtensionPoint.manifest||GHIDRA||||END| +src/main/help/help/TOC_Source.xml||GHIDRA||||END| +src/main/help/help/shared/arrow.gif||GHIDRA||||END| +src/main/help/help/shared/close16.gif||GHIDRA||||END| +src/main/help/help/shared/menu16.gif||GHIDRA||||END| +src/main/help/help/shared/note-red.png||Oxygen Icons - LGPL 3.0|||Oxygen icon theme (dual license; LGPL or CC-SA-3.0)|END| +src/main/help/help/shared/note.png||Oxygen Icons - LGPL 3.0|||Oxygen icon theme (dual license; LGPL or CC-SA-3.0)|END| +src/main/help/help/shared/note.yellow.png||Oxygen Icons - LGPL 3.0|||Oxygen icon theme (dual license; LGPL or CC-SA-3.0)|END| +src/main/help/help/shared/redo.png||GHIDRA||||END| +src/main/help/help/shared/tip.png||Oxygen Icons - LGPL 3.0|||Oxygen icon theme (dual license; LGPL or CC-SA-3.0)|END| +src/main/help/help/shared/undo.png||GHIDRA||||END| +src/main/help/help/shared/warning.png||Oxygen Icons - LGPL 3.0|||Oxygen icon theme (dual license; LGPL or CC-SA-3.0)|END| +src/main/help/help/topics/PlacheholderTopic/Placeholder.htm||GHIDRA||||END| src/main/java/docking/dnd/package.html||GHIDRA||reviewed||END| src/main/java/docking/options/editor/package.html||GHIDRA||reviewed||END| src/main/java/docking/widgets/fieldpanel/package.html||GHIDRA||reviewed||END| diff --git a/Ghidra/Framework/Docking/src/main/help/help/TOC_Source.xml b/Ghidra/Framework/Docking/src/main/help/help/TOC_Source.xml new file mode 100644 index 0000000000..8a327c6107 --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/help/help/TOC_Source.xml @@ -0,0 +1,54 @@ + + + + + + + + diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/Frontpage.css b/Ghidra/Framework/Docking/src/main/help/help/shared/Frontpage.css new file mode 100644 index 0000000000..b8471669f4 --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/help/help/shared/Frontpage.css @@ -0,0 +1,64 @@ +/* ### + * 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. + */ +/* + WARNING! + This file is copied to all help directories. If you change this file, you must copy it + to each src/main/help/help/shared directory. + + + Java Help Note: JavaHelp does not accept sizes (like in 'margin-top') in anything but + px (pixel) or with no type marking. + +*/ + +body { margin-bottom: 50px; margin-left: 10px; margin-right: 10px; margin-top: 10px; } /* some padding to improve readability */ +li { font-family:times new roman; font-size:14pt; } +h1 { color:#000080; font-family:times new roman; font-size:36pt; font-style:italic; font-weight:bold; text-align:center; } +h2 { margin: 10px; margin-top: 20px; color:#984c4c; font-family:times new roman; font-size:18pt; font-weight:bold; } +h3 { margin-left: 10px; margin-top: 20px; color:#0000ff; font-family:times new roman; `font-size:14pt; font-weight:bold; } +h4 { margin-left: 10px; margin-top: 20px; font-family:times new roman; font-size:14pt; font-style:italic; } + +/* + P tag code. Most of the help files nest P tags inside of blockquote tags (the was the + way it had been done in the beginning). The net effect is that the text is indented. In + modern HTML we would use CSS to do this. We need to support the Ghidra P tags, nested in + blockquote tags, as well as naked P tags. The following two lines accomplish this. Note + that the 'blockquote p' definition will inherit from the first 'p' definition. +*/ +p { margin-left: 40px; font-family:times new roman; font-size:14pt; } +blockquote p { margin-left: 10px; } + +p.providedbyplugin { color:#7f7f7f; margin-left: 10px; font-size:14pt; margin-top:100px } +p.ProvidedByPlugin { color:#7f7f7f; margin-left: 10px; font-size:14pt; margin-top:100px } +p.relatedtopic { color:#800080; margin-left: 10px; font-size:14pt; } +p.RelatedTopic { color:#800080; margin-left: 10px; font-size:14pt; } + +/* + We wish for a tables to have space between it and the preceding element, so that text + is not too close to the top of the table. Also, nest the table a bit so that it is clear + the table relates to the preceding text. +*/ +table { margin-left: 20px; margin-top: 10px; width: 80%;} +td { font-family:times new roman; font-size:14pt; vertical-align: top; } +th { font-family:times new roman; font-size:14pt; font-weight:bold; background-color: #EDF3FE; } + +/* + Code-like formatting for things such as file system paths and proper names of classes, + methods, etc. To apply this to a file path, use this syntax: + ... +*/ +code { color: black; font-weight: bold; font-family: courier new, monospace; font-size: 14pt; white-space: nowrap; } +code.path { color: #4682B4; font-weight: bold; font-family: courier new, monospace; font-size: 14pt; white-space: nowrap; } diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/arrow.gif b/Ghidra/Framework/Docking/src/main/help/help/shared/arrow.gif new file mode 100644 index 0000000000..bcb3db7057 Binary files /dev/null and b/Ghidra/Framework/Docking/src/main/help/help/shared/arrow.gif differ diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/close16.gif b/Ghidra/Framework/Docking/src/main/help/help/shared/close16.gif new file mode 100644 index 0000000000..f523864639 Binary files /dev/null and b/Ghidra/Framework/Docking/src/main/help/help/shared/close16.gif differ diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/menu16.gif b/Ghidra/Framework/Docking/src/main/help/help/shared/menu16.gif new file mode 100644 index 0000000000..4350a523dd Binary files /dev/null and b/Ghidra/Framework/Docking/src/main/help/help/shared/menu16.gif differ diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/note-red.png b/Ghidra/Framework/Docking/src/main/help/help/shared/note-red.png new file mode 100644 index 0000000000..b5f1d5cd1c Binary files /dev/null and b/Ghidra/Framework/Docking/src/main/help/help/shared/note-red.png differ diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/note.png b/Ghidra/Framework/Docking/src/main/help/help/shared/note.png new file mode 100644 index 0000000000..51e1c8f8c1 Binary files /dev/null and b/Ghidra/Framework/Docking/src/main/help/help/shared/note.png differ diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/note.yellow.png b/Ghidra/Framework/Docking/src/main/help/help/shared/note.yellow.png new file mode 100644 index 0000000000..f8ab6489f2 Binary files /dev/null and b/Ghidra/Framework/Docking/src/main/help/help/shared/note.yellow.png differ diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/redo.png b/Ghidra/Framework/Docking/src/main/help/help/shared/redo.png new file mode 100644 index 0000000000..88035efeec Binary files /dev/null and b/Ghidra/Framework/Docking/src/main/help/help/shared/redo.png differ diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/tip.png b/Ghidra/Framework/Docking/src/main/help/help/shared/tip.png new file mode 100644 index 0000000000..209f1d28c8 Binary files /dev/null and b/Ghidra/Framework/Docking/src/main/help/help/shared/tip.png differ diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/undo.png b/Ghidra/Framework/Docking/src/main/help/help/shared/undo.png new file mode 100644 index 0000000000..edd57f5c15 Binary files /dev/null and b/Ghidra/Framework/Docking/src/main/help/help/shared/undo.png differ diff --git a/Ghidra/Framework/Docking/src/main/help/help/shared/warning.png b/Ghidra/Framework/Docking/src/main/help/help/shared/warning.png new file mode 100644 index 0000000000..8e9133789b Binary files /dev/null and b/Ghidra/Framework/Docking/src/main/help/help/shared/warning.png differ diff --git a/Ghidra/Framework/Docking/src/main/help/help/topics/PlacheholderTopic/Placeholder.htm b/Ghidra/Framework/Docking/src/main/help/help/topics/PlacheholderTopic/Placeholder.htm new file mode 100644 index 0000000000..13961916f5 --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/help/help/topics/PlacheholderTopic/Placeholder.htm @@ -0,0 +1,17 @@ + + + + + Placholder Title + + + + +

Stub

+ +

Blah blah

+ +

Related Topics:

+ + + diff --git a/Ghidra/Framework/Docking/src/main/java/docking/ComponentNode.java b/Ghidra/Framework/Docking/src/main/java/docking/ComponentNode.java index 60668be738..daaa6405ba 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/ComponentNode.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/ComponentNode.java @@ -24,11 +24,11 @@ import javax.swing.event.ChangeListener; import org.jdom.Element; -import docking.help.HelpService; import docking.widgets.OptionDialog; import docking.widgets.tabbedpane.DockingTabRenderer; import ghidra.util.*; import ghidra.util.exception.AssertException; +import help.HelpService; import utilities.util.reflection.ReflectionUtilities; /** diff --git a/Ghidra/Framework/Docking/src/main/java/docking/ComponentProvider.java b/Ghidra/Framework/Docking/src/main/java/docking/ComponentProvider.java index 408ad63a14..cb71394ff5 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/ComponentProvider.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/ComponentProvider.java @@ -23,10 +23,10 @@ import java.util.*; import javax.swing.*; import docking.action.*; -import docking.help.HelpDescriptor; -import docking.help.HelpService; import ghidra.util.*; import ghidra.util.exception.AssertException; +import help.HelpDescriptor; +import help.HelpService; import utilities.util.reflection.ReflectionUtilities; /** diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DialogComponentProvider.java b/Ghidra/Framework/Docking/src/main/java/docking/DialogComponentProvider.java index b1fa3bd90d..605fb3d1f7 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DialogComponentProvider.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DialogComponentProvider.java @@ -29,13 +29,13 @@ import org.jdesktop.animation.timing.TimingTargetAdapter; import docking.action.*; import docking.actions.KeyBindingUtils; import docking.event.mouse.GMouseListenerAdapter; -import docking.help.HelpService; import docking.menu.DialogToolbarButton; import docking.util.AnimationUtils; import docking.widgets.label.GDHtmlLabel; import ghidra.util.*; import ghidra.util.exception.AssertException; import ghidra.util.task.*; +import help.HelpService; import utility.function.Callback; /** diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DockableComponent.java b/Ghidra/Framework/Docking/src/main/java/docking/DockableComponent.java index d485574655..6dbc56f21f 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DockableComponent.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DockableComponent.java @@ -23,9 +23,9 @@ import javax.swing.*; import javax.swing.FocusManager; import docking.action.DockingActionIf; -import docking.help.HelpService; import ghidra.util.CascadedDropTarget; import ghidra.util.HelpLocation; +import help.HelpService; /** * Wrapper class for user components. Adds the title, local toolbar and provides the drag target diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DockableHeader.java b/Ghidra/Framework/Docking/src/main/java/docking/DockableHeader.java index 12ba963af6..3ad420264f 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DockableHeader.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DockableHeader.java @@ -30,8 +30,6 @@ import org.jdesktop.animation.timing.Animator.RepeatBehavior; import org.jdesktop.animation.timing.TimingTargetAdapter; import org.jdesktop.animation.timing.interpolation.PropertySetter; -import docking.help.Help; -import docking.help.HelpService; import docking.util.AnimationUtils; import generic.util.WindowUtilities; import generic.util.image.ImageUtils; @@ -41,6 +39,8 @@ import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.bean.GGlassPane; import ghidra.util.bean.GGlassPanePainter; +import help.Help; +import help.HelpService; import resources.ResourceManager; /** diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DockingDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/DockingDialog.java index eec623712c..c75418fe9f 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DockingDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DockingDialog.java @@ -25,10 +25,10 @@ import javax.swing.*; import org.apache.commons.collections4.map.LazyMap; import docking.framework.ApplicationInformationDisplayFactory; -import docking.help.HelpDescriptor; import generic.util.WindowUtilities; import ghidra.framework.Application; import ghidra.util.bean.GGlassPane; +import help.HelpDescriptor; // NOTE: this class has a static focus component variable that is set whenever the dialog gets // activated and is scheduled to get focus at a later time. This variable is static so that only diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java b/Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java index 2252f59a9e..ca5091f4bf 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java @@ -31,7 +31,6 @@ import org.jdom.Element; import docking.action.DockingActionIf; import docking.actions.*; -import docking.help.HelpService; import docking.widgets.PasswordDialog; import generic.util.WindowUtilities; import ghidra.framework.OperatingSystem; @@ -41,6 +40,8 @@ import ghidra.util.*; import ghidra.util.datastruct.*; import ghidra.util.exception.AssertException; import ghidra.util.task.SwingUpdateManager; +import help.Help; +import help.HelpService; import util.CollectionUtils; /** @@ -72,11 +73,6 @@ public class DockingWindowManager implements PropertyChangeListener, Placeholder public static final String DOCKING_WINDOWS_OWNER = "DockingWindows"; public static final String TOOL_PREFERENCES_XML_NAME = "PREFERENCES"; - /** - * The helpService field should be set to the appropriate help service provider. - */ - private static HelpService helpService = new DefaultHelpService(); - // we use a list to maintain order private static List instances = new ArrayList<>(); @@ -161,25 +157,13 @@ public class DockingWindowManager implements PropertyChangeListener, Placeholder return "DockingWindowManager: " + root.getTitle(); } - /** - * Sets the help service for the all docking window managers. - * - * @param helpSvc the help service to use. - */ - public static void setHelpService(HelpService helpSvc) { - if (helpSvc == null) { - throw new IllegalArgumentException("HelpService may not be null"); - } - helpService = helpSvc; - } - /** * Returns the global help service. * * @return the global help service. */ public static HelpService getHelpService() { - return helpService; + return Help.getHelpService(); } private static synchronized void addInstance(DockingWindowManager winMgr) { @@ -516,6 +500,7 @@ public class DockingWindowManager implements PropertyChangeListener, Placeholder } private void registerHelpLocation(ComponentProvider provider, HelpLocation helpLocation) { + HelpService helpService = Help.getHelpService(); HelpLocation registeredHelpLocation = helpService.getHelpLocation(provider); if (registeredHelpLocation != null) { return; // nothing to do; location already registered diff --git a/Ghidra/Framework/Docking/src/main/java/docking/action/DockingActionIf.java b/Ghidra/Framework/Docking/src/main/java/docking/action/DockingActionIf.java index c038bd7865..db769a66d6 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/action/DockingActionIf.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/action/DockingActionIf.java @@ -21,7 +21,7 @@ import java.util.Set; import javax.swing.*; import docking.ActionContext; -import docking.help.HelpDescriptor; +import help.HelpDescriptor; /** * The base interface for clients that wish to create commands to be registered with a tool. diff --git a/Ghidra/Framework/Docking/src/main/java/docking/action/HelpAction.java b/Ghidra/Framework/Docking/src/main/java/docking/action/HelpAction.java index c010ede426..98df527915 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/action/HelpAction.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/action/HelpAction.java @@ -20,9 +20,9 @@ import java.awt.*; import javax.swing.KeyStroke; import docking.*; -import docking.help.HelpService; import ghidra.util.HelpLocation; import ghidra.util.SystemUtilities; +import help.HelpService; public class HelpAction extends DockingAction { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/GHelpBroker.java b/Ghidra/Framework/Docking/src/main/java/docking/help/DockingHelpBroker.java similarity index 60% rename from Ghidra/Framework/Docking/src/main/java/docking/help/GHelpBroker.java rename to Ghidra/Framework/Docking/src/main/java/docking/help/DockingHelpBroker.java index 6c64cab968..04d8054c5d 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/GHelpBroker.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/help/DockingHelpBroker.java @@ -19,7 +19,6 @@ import java.awt.*; import java.awt.geom.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.io.IOException; import java.net.URL; import java.util.List; @@ -27,7 +26,8 @@ import javax.help.*; import javax.help.event.HelpModelEvent; import javax.help.event.HelpModelListener; import javax.swing.*; -import javax.swing.text.*; +import javax.swing.text.AttributeSet; +import javax.swing.text.BadLocationException; import javax.swing.text.html.HTML; import javax.swing.text.html.HTMLDocument; @@ -39,108 +39,45 @@ import docking.util.AnimationPainter; import docking.util.AnimationUtils; import ghidra.framework.preferences.Preferences; import ghidra.util.Msg; +import ghidra.util.Swing; import ghidra.util.bean.GGlassPane; -import resources.ResourceManager; - -// NOTE: for JH 2.0, this class has been rewritten to not -// access the 'frame' and 'dialog' variable directly +import help.CustomTOCView; +import help.GHelpBroker; /** - * Ghidra help broker that displays the help set; sets the Ghidra icon on - * the help frame and attempts to maintain the user window size. + * An extension of the {@link GHelpBroker} that allows {@code Docking} classes to be installed. + *

+ * Additions include a search feature a navigation aid. */ -public class GHelpBroker extends DefaultHelpBroker { +public class DockingHelpBroker extends GHelpBroker { + private static final List ICONS = ApplicationInformationDisplayFactory.getWindowIcons(); + private static final int MAX_CALLOUT_RETRIES = 3; - private Dimension windowSize = new Dimension(1100, 700); - - private JEditorPane htmlEditorPane; - private Animator lastAnimator; - private URL loadingURL; private PropertyChangeListener pageLoadListener = new PageLoadingListener(); private HelpModelListener helpModelListener = new HelpIDChangedListener(); - private Window activationWindow; + private Animator lastAnimator; + private URL loadingURL; - // Create the zoom in/out icons that will be added to the default jHelp toolbar. - private static final ImageIcon ZOOM_OUT_ICON = - ResourceManager.loadImage("images/list-remove.png"); - private static final ImageIcon ZOOM_IN_ICON = ResourceManager.loadImage("images/list-add.png"); - - /** - * Construct a new GhidraHelpBroker. - * @param hs java help set associated with this help broker - */ - public GHelpBroker(HelpSet hs) { + public DockingHelpBroker(HelpSet hs) { super(hs); } @Override - // Overridden so that we can call the preferred version of setCurrentURL on the HelpModel, - // which fixes a bug with the history list (SCR 7639) - public void setCurrentURL(final URL URL) { - - HelpModel model = getHelpModel(); - if (model != null) { - model.setCurrentURL(URL, getHistoryName(URL), null); - } - else { - super.setCurrentURL(URL); - } + protected List getApplicationIcons() { + return ICONS; } - /* Perform some shenanigans to force Java Help to reload the given URL */ - void reloadHelpPage(URL url) { - clearContentViewer(); - prepareToCallout(url); - try { - htmlEditorPane.setPage(url); - } - catch (IOException e) { - Msg.error(this, "Unexpected error loading help page: " + url, e); - } - } - - private void clearContentViewer() { - htmlEditorPane.getDocument().putProperty(Document.StreamDescriptionProperty, null); - } - - private JScrollPane getScrollPane(JEditorPane editorPane) { - Container parent = editorPane.getParent(); - while (parent != null) { - if (parent instanceof JScrollPane) { - return (JScrollPane) parent; - } - parent = parent.getParent(); - } - return null; - } - - private JEditorPane getHTMLEditorPane(JHelpContentViewer contentViewer) { - // - // Intimate Knowledge - construction of the viewer: - // - // -BorderLayout - // -JScrollPane - // -Viewport - // -JHEditorPane extends JEditorPane - // - // - Component[] components = contentViewer.getComponents(); - JScrollPane scrollPane = (JScrollPane) components[0]; - JViewport viewport = scrollPane.getViewport(); - - return (JEditorPane) viewport.getView(); - } - - private HelpModel getHelpModel() { + @Override + protected HelpModel getCustomHelpModel() { // // Unusual Code Alert!: We have opened up access to the help system's HelpModel by way - // of our CustomTOCView object that we install elsewhere. We need - // access to the model because of a bug in the help system + // of our CustomTOCView object that we install elsewhere. We need + // access to the model because of a bug in the help system // (SCR 7639). Unfortunately, the Java Help system does not give us // access to the model directly, but we have opened up the access from - // one of our overriding components. The following code is + // one of our overriding components. The following code is // digging-out our custom component to get at the model. An // alternative approach would be to just use reflection and violate // security restrictions, but that seemed worse than this solution. @@ -160,133 +97,18 @@ public class GHelpBroker extends DefaultHelpBroker { } @Override - public void setDisplayed(boolean b) { - if (!b) { - super.setDisplayed(b); - return; - } - - // this must be before any call that triggers the help system to create its window - initializeScreenDevice(); - - WindowPresentation windowPresentation = getWindowPresentation(); - updateWindowSize(windowPresentation); - - // this has to be before getHelpWindow() or the value returned will be null - super.setDisplayed(b); - - initializeUIWindowPresentation(windowPresentation); - } - - private void initializeScreenDevice() { - if (isInitialized()) { - return; - } - - if (activationWindow == null) { - // This can happen when we show the 'What's New' help page on a fresh install. In - // that case, we were not activated from an existing window, thus, there may - // be no parent window. - return; - } - - GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - GraphicsDevice[] gs = ge.getScreenDevices(); - GraphicsConfiguration config = activationWindow.getGraphicsConfiguration(); - GraphicsDevice parentDevice = config.getDevice(); - for (int i = 0; i < gs.length; i++) { - if (gs[i] == parentDevice) { - // update the help window's screen to match that of the parent - setScreen(i); - } - } - } - - private void initializeUIWindowPresentation(WindowPresentation windowPresentation) { - - Window helpWindow = windowPresentation.getHelpWindow(); - Container contentPane = null; - if (helpWindow instanceof JFrame) { - JFrame frame = (JFrame) helpWindow; - installRootPane(frame); - frame.setIconImages(ICONS); - contentPane = frame.getContentPane(); - } - else if (helpWindow instanceof JDialog) { - JDialog dialog = (JDialog) helpWindow; - installRootPane(dialog); - contentPane = dialog.getContentPane(); - } - - initializeUIComponents(contentPane); - } - - private boolean isInitialized() { - return htmlEditorPane != null; - } - - private void initializeUIComponents(Container contentPane) { - - if (isInitialized()) { - return;// already initialized - } - - Component[] components = contentPane.getComponents(); - JHelp jHelp = (JHelp) components[0]; - addCustomToolbarItems(jHelp); - JHelpContentViewer contentViewer = jHelp.getContentViewer(); - htmlEditorPane = getHTMLEditorPane(contentViewer); - - // just creating the search wires everything together - HelpModel helpModel = getHelpModel(); + protected void installHelpSearcher(JHelp jHelp, HelpModel helpModel) { helpModel.addHelpModelListener(helpModelListener); new HelpViewSearcher(jHelp, helpModel); - - installActions(jHelp); } - /** - * Create zoom in/out buttons on the default help window toolbar. - * @param jHelp the java help object used to retrieve the help components - */ - protected void addCustomToolbarItems(final JHelp jHelp) { - - for (Component component : jHelp.getComponents()) { - if (component instanceof JToolBar) { - JToolBar toolbar = (JToolBar) component; - toolbar.addSeparator(); - - ImageIcon zoomOutIcon = ResourceManager.getScaledIcon(ZOOM_OUT_ICON, 24, 24); - JButton zoomOutBtn = new JButton(zoomOutIcon); - zoomOutBtn.setToolTipText("Zoom out"); - zoomOutBtn.addActionListener(e -> { - GHelpHTMLEditorKit.zoomOut(); - - // Need to reload the page to force the scroll panes to resize properly. A - // simple revalidate/repaint won't do it. - reloadHelpPage(getCurrentURL()); - }); - toolbar.add(zoomOutBtn); - - ImageIcon zoomInIcon = ResourceManager.getScaledIcon(ZOOM_IN_ICON, 24, 24); - JButton zoomInBtn = new JButton(zoomInIcon); - zoomInBtn.setToolTipText("Zoom in"); - zoomInBtn.addActionListener(e -> { - GHelpHTMLEditorKit.zoomIn(); - - // Need to reload the page to force the scroll panes to resize properly. A - // simple revalidate/repaint won't do it. - reloadHelpPage(getCurrentURL()); - }); - toolbar.add(zoomInBtn); - - // Once we've found the toolbar we can break out of the loop and stop looking for it. - break; - } - } + @Override + protected void showNavigationAid(URL url) { + prepareToCallout(url); } - private void installActions(JHelp help) { + @Override + protected void installActions(JHelp help) { JToolBar toolbar = null; Component[] components = help.getComponents(); for (Component c : components) { @@ -308,79 +130,24 @@ public class GHelpBroker extends DefaultHelpBroker { toolbar.add(new JButton(action)); } - private String getHistoryName(URL URL) { - String text = URL.getFile(); - int index = text.lastIndexOf('/'); - if (index != -1) { - // we want just the filename - text = text.substring(index + 1); - } - - String ref = URL.getRef(); - if (ref != null) { - text += " - " + ref; - } - return text; + @Override // opened access + protected void reloadHelpPage(URL url) { + super.reloadHelpPage(url); } - private void installRootPane(JFrame frame) { - Component oldGlassPane = frame.getGlassPane(); - if (!(oldGlassPane instanceof GGlassPane)) { - GGlassPane gGlassPane = new GGlassPane(); - frame.setGlassPane(gGlassPane); - gGlassPane.setVisible(true); - } - } +//================================================================================================= +// Navigation Aid Section +//================================================================================================= - private void installRootPane(JDialog dialog) { - Component oldGlassPane = dialog.getGlassPane(); - if (!(oldGlassPane instanceof GGlassPane)) { - GGlassPane gGlassPane = new GGlassPane(); - dialog.setGlassPane(gGlassPane); - gGlassPane.setVisible(true); - } - } - - private void updateWindowSize(WindowPresentation presentation) { - if (windowSize == null) { - return; - } - - presentation.createHelpWindow(); - presentation.setSize(windowSize); - } - - @Override - public void setActivationWindow(Window window) { - WindowPresentation windowPresentation = getWindowPresentation(); - Window helpWindow = windowPresentation.getHelpWindow(); - if (helpWindow == null) { - activationWindow = window; - super.setActivationWindow(window); - return; - } - - windowSize = helpWindow.getSize();// remember the previous size - - boolean wasModal = isModalWindow(helpWindow); - boolean willBeModal = isModalWindow(window); - if (!wasModal && willBeModal) { - // in this condition, a new window will be shown, but the old one is not properly - // closed by JavaHelp - helpWindow.setVisible(false); - } - - super.setActivationWindow(window); - } - - private boolean isModalWindow(Window window) { - if (window instanceof Dialog) { - Dialog dialog = (Dialog) window; - if (dialog.isModal()) { - return true; + private JScrollPane getScrollPane(JEditorPane editorPane) { + Container parent = editorPane.getParent(); + while (parent != null) { + if (parent instanceof JScrollPane) { + return (JScrollPane) parent; } + parent = parent.getParent(); } - return false; + return null; } private void showNavigationAid() { @@ -398,7 +165,7 @@ public class GHelpBroker extends DefaultHelpBroker { } private void calloutReferenceLater() { - SwingUtilities.invokeLater(() -> calloutReference(loadingURL)); + Swing.runLater(() -> calloutReference(loadingURL)); } private void calloutReference(final URL url) { @@ -442,10 +209,10 @@ public class GHelpBroker extends DefaultHelpBroker { * help pages and when the UI is adjusted in response to those changes. *

* Note: this method will call itself if the view is not yet updated for the requested - * model change. In that case, this method will call itself again later. This may - * need to happen more than once. However, we will only try a few times and + * model change. In that case, this method will call itself again later. This may + * need to happen more than once. However, we will only try a few times and * then just give up. - * + * * @param area the area to call out * @param callCount the number number of times this method has already been called */ @@ -477,20 +244,20 @@ public class GHelpBroker extends DefaultHelpBroker { // // Unusual Code: Not yet rendered! Try again. // - SwingUtilities.invokeLater(() -> doCalloutReference(area, numberOfCalls)); + Swing.runLater(() -> doCalloutReference(area, numberOfCalls)); return; } // - // The area of the HTML content is absolute inside of the entire document. - // However, the user is viewing the document inside of a scroll pane. So, we + // The area of the HTML content is absolute inside of the entire document. + // However, the user is viewing the document inside of a scroll pane. So, we // want the offset of the element within the viewer, not the absolute position. // area.y -= viewPosition.y; // - // Update the coordinates to be relative to the content pane, which is where we + // Update the coordinates to be relative to the content pane, which is where we // are doing the painting. // Rectangle relativeArea = SwingUtilities.convertRectangle(scrollPane, area, contentPane); @@ -519,7 +286,6 @@ public class GHelpBroker extends DefaultHelpBroker { loadingURL = url; - // TODO // updateTitle(); if (isCurrentPage(loadingURL)) { @@ -650,8 +416,8 @@ public class GHelpBroker extends DefaultHelpBroker { // At 0%, with 100% opacity; at the end, paint with 0% opacity // Composite originalComposite = g2d.getComposite(); - AlphaComposite alphaComposite = AlphaComposite.getInstance( - AlphaComposite.SrcOver.getRule(), (float) (1 - percentComplete)); + AlphaComposite alphaComposite = AlphaComposite + .getInstance(AlphaComposite.SrcOver.getRule(), (float) (1 - percentComplete)); g2d.setComposite(alphaComposite); double transition = 1 - percentComplete; @@ -686,7 +452,7 @@ public class GHelpBroker extends DefaultHelpBroker { Shape box = scaler.createTransformedShape(b); g2d.setColor(Color.GREEN); g2d.fill(box); - + box = transform.createTransformedShape(box); g2d.setColor(Color.YELLOW); g2d.fill(box); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/DockingHelpSet.java b/Ghidra/Framework/Docking/src/main/java/docking/help/DockingHelpSet.java new file mode 100644 index 0000000000..4b6dc05ab1 --- /dev/null +++ b/Ghidra/Framework/Docking/src/main/java/docking/help/DockingHelpSet.java @@ -0,0 +1,38 @@ +/* ### + * 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.help; + +import java.net.URL; + +import javax.help.HelpBroker; +import javax.help.HelpSetException; + +import help.GHelpSet; + +/** + * An extension of the {@link GHelpSet} that allows {@code Docking} classes to be installed. + */ +public class DockingHelpSet extends GHelpSet { + + public DockingHelpSet(ClassLoader loader, URL helpset) throws HelpSetException { + super(loader, helpset); + } + + @Override + public HelpBroker createHelpBroker() { + return new DockingHelpBroker(this); + } +} diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/HelpManager.java b/Ghidra/Framework/Docking/src/main/java/docking/help/HelpManager.java index 55e64a85e9..dc3678c550 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/HelpManager.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/help/HelpManager.java @@ -38,6 +38,7 @@ import ghidra.util.*; import ghidra.util.exception.AssertException; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; +import help.*; import resources.ResourceManager; import utilities.util.reflection.ReflectionUtilities; @@ -83,7 +84,7 @@ public class HelpManager implements HelpService { * @throws HelpSetException if HelpSet could not be created */ protected HelpManager(URL url) throws HelpSetException { - mainHS = new GHelpSet(new GHelpClassLoader(null), url); + mainHS = new DockingHelpSet(new GHelpClassLoader(null), url); mainHB = mainHS.createHelpBroker(); mainHS.setTitle(GHIDRA_HELP_TITLE); @@ -260,8 +261,8 @@ public class HelpManager implements HelpService { displayHelp(createHelpID(helpId), window); } catch (BadIDException e) { - Msg.info(this, "Could not find help for ID: \"" + helpId + - "\" from HelpLocation: " + loc); + Msg.info(this, + "Could not find help for ID: \"" + helpId + "\" from HelpLocation: " + loc); displayHelp(HELP_NOT_FOUND_PAGE_URL, window); } } @@ -565,12 +566,12 @@ public class HelpManager implements HelpService { /** This forces page to be redisplayed when location has not changed */ private void reloadPage(URL helpURL) { - if (!(mainHB instanceof GHelpBroker)) { + if (!(mainHB instanceof DockingHelpBroker)) { // not our broker installed; can't force a reload return; } - ((GHelpBroker) mainHB).reloadHelpPage(validateUrl(helpURL)); + ((DockingHelpBroker) mainHB).reloadHelpPage(validateUrl(helpURL)); } private URL getURLForID(ID ID) { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/ToggleNavigationAid.java b/Ghidra/Framework/Docking/src/main/java/docking/help/ToggleNavigationAid.java index 8d110f5feb..5af1ff1b19 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/ToggleNavigationAid.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/help/ToggleNavigationAid.java @@ -54,7 +54,7 @@ public class ToggleNavigationAid extends AbstractAction { showingNavigationAid = Boolean.parseBoolean(value); } else { - // not yet in the preferences; save the default + // not yet in the preferences; save the default savePreference(); } } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/menu/MultiStateDockingAction.java b/Ghidra/Framework/Docking/src/main/java/docking/menu/MultiStateDockingAction.java index 93355a3dd4..1fd1b5142c 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/menu/MultiStateDockingAction.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/menu/MultiStateDockingAction.java @@ -23,11 +23,11 @@ import javax.swing.JButton; import docking.ActionContext; import docking.action.*; -import docking.help.Help; import docking.widgets.EventTrigger; import ghidra.util.HelpLocation; import ghidra.util.Swing; import ghidra.util.exception.AssertException; +import help.Help; import resources.icons.EmptyIcon; /** diff --git a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/OptionsEditorPanel.java b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/OptionsEditorPanel.java index b4eb4d7aea..2a407360aa 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/options/editor/OptionsEditorPanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/options/editor/OptionsEditorPanel.java @@ -24,12 +24,12 @@ import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.border.Border; -import docking.help.Help; -import docking.help.HelpService; import ghidra.framework.options.*; import ghidra.util.HelpLocation; import ghidra.util.exception.AssertException; import ghidra.util.layout.VerticalLayout; +import help.Help; +import help.HelpService; /** * 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 2527a16c01..d8640fab9b 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,8 +27,6 @@ import javax.swing.*; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.MultiLineLabel; import docking.widgets.OptionDialog; import docking.widgets.label.GIconLabel; @@ -40,6 +38,8 @@ import ghidra.util.*; import ghidra.util.bean.opteditor.OptionsVetoException; import ghidra.util.layout.MiddleLayout; import ghidra.util.task.SwingUpdateManager; +import help.Help; +import help.HelpService; import resources.ResourceManager; public class OptionsPanel extends JPanel { 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 d72e15d92b..6839eaa01f 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 @@ -29,7 +29,6 @@ import javax.swing.table.TableModel; import org.jdom.Element; import docking.DockingWindowManager; -import docking.help.HelpService; import docking.menu.*; import docking.widgets.EmptyBorderButton; import docking.widgets.EventTrigger; @@ -45,6 +44,7 @@ import ghidra.util.datastruct.WeakDataStructureFactory; import ghidra.util.datastruct.WeakSet; import ghidra.util.exception.AssertException; import ghidra.util.task.SwingUpdateManager; +import help.HelpService; import resources.Icons; import resources.ResourceManager; import utilities.util.reflection.ReflectionUtilities; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeader.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeader.java index a8fe270267..e606960e1f 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeader.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableHeader.java @@ -22,10 +22,10 @@ import javax.swing.*; import javax.swing.table.*; import docking.DockingWindowManager; -import docking.help.HelpService; import docking.widgets.table.columnfilter.ColumnBasedTableFilter; import ghidra.util.HTMLUtilities; import ghidra.util.HelpLocation; +import help.HelpService; import resources.ResourceManager; /** 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 09a5acb3b0..fb2e2fc23f 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 @@ -23,7 +23,6 @@ import javax.swing.border.BevelBorder; import org.jdom.Element; import docking.DockingWindowManager; -import docking.help.HelpService; import docking.widgets.EmptyBorderButton; import docking.widgets.filter.*; import docking.widgets.label.GLabel; @@ -32,6 +31,7 @@ import docking.widgets.tree.support.GTreeFilter; import ghidra.framework.options.PreferenceState; import ghidra.util.FilterTransformer; import ghidra.util.HelpLocation; +import help.HelpService; public class DefaultGTreeFilterProvider implements GTreeFilterProvider { private static final String FILTER_STATE = "FILTER_STATE"; 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 fc2d67dbaa..3e8d1ba78a 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/wizard/WizardManager.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/wizard/WizardManager.java @@ -25,11 +25,11 @@ import javax.swing.border.TitledBorder; 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 help.Help; +import help.HelpService; import resources.ResourceManager; /** 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 5b368651a8..39e307c99f 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 @@ -27,7 +27,6 @@ import com.google.common.base.Function; import docking.DockingUtils; import docking.DockingWindowManager; import docking.actions.KeyBindingUtils; -import docking.help.HelpService; import docking.widgets.EmptyBorderButton; import docking.widgets.PopupWindow; import docking.widgets.label.GIconLabel; @@ -58,6 +57,7 @@ import ghidra.graph.viewer.vertex.*; import ghidra.util.HTMLUtilities; import ghidra.util.HelpLocation; import ghidra.util.exception.AssertException; +import help.HelpService; import resources.Icons; import resources.ResourceManager; import util.CollectionUtils; diff --git a/Ghidra/Framework/Help/build.gradle b/Ghidra/Framework/Help/build.gradle index 9f9785185e..9e13b753c3 100644 --- a/Ghidra/Framework/Help/build.gradle +++ b/Ghidra/Framework/Help/build.gradle @@ -24,8 +24,13 @@ eclipse.project.name = 'Framework Help' dependencies { api project(':Utility') - api project(':Docking') + api project(':Generic') + + api 'net.java.dev.timingframework:timingframework:1.0' + + // Only include this debug version of the jh library if necessary. + //api name:'jh2.with.debug' + api 'javax.help:javahelp:2.0.05' -// api name:'jh' - provided by Docking } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DefaultHelpService.java b/Ghidra/Framework/Help/src/main/java/docking/DefaultHelpService.java similarity index 97% rename from Ghidra/Framework/Docking/src/main/java/docking/DefaultHelpService.java rename to Ghidra/Framework/Help/src/main/java/docking/DefaultHelpService.java index feb1e90b06..42ff57ade0 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DefaultHelpService.java +++ b/Ghidra/Framework/Help/src/main/java/docking/DefaultHelpService.java @@ -19,10 +19,10 @@ import java.awt.*; import javax.swing.JButton; -import docking.help.HelpDescriptor; -import docking.help.HelpService; import ghidra.util.HelpLocation; import ghidra.util.Msg; +import help.HelpDescriptor; +import help.HelpService; public class DefaultHelpService implements HelpService { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/CustomFavoritesView.java b/Ghidra/Framework/Help/src/main/java/help/CustomFavoritesView.java similarity index 99% rename from Ghidra/Framework/Docking/src/main/java/docking/help/CustomFavoritesView.java rename to Ghidra/Framework/Help/src/main/java/help/CustomFavoritesView.java index 425f286955..29f2cb8cf6 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/CustomFavoritesView.java +++ b/Ghidra/Framework/Help/src/main/java/help/CustomFavoritesView.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package docking.help; +package help; import java.awt.Component; import java.awt.event.KeyAdapter; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/CustomSearchView.java b/Ghidra/Framework/Help/src/main/java/help/CustomSearchView.java similarity index 98% rename from Ghidra/Framework/Docking/src/main/java/docking/help/CustomSearchView.java rename to Ghidra/Framework/Help/src/main/java/help/CustomSearchView.java index 03ac427283..bcc74b6d91 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/CustomSearchView.java +++ b/Ghidra/Framework/Help/src/main/java/help/CustomSearchView.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. @@ -14,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package docking.help; +package help; import ghidra.util.Msg; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/CustomTOCView.java b/Ghidra/Framework/Help/src/main/java/help/CustomTOCView.java similarity index 99% rename from Ghidra/Framework/Docking/src/main/java/docking/help/CustomTOCView.java rename to Ghidra/Framework/Help/src/main/java/help/CustomTOCView.java index a8b7a8ce9f..942bffb27d 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/CustomTOCView.java +++ b/Ghidra/Framework/Help/src/main/java/help/CustomTOCView.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package docking.help; +package help; import java.awt.Component; import java.net.MalformedURLException; diff --git a/Ghidra/Framework/Help/src/main/java/help/GHelpBroker.java b/Ghidra/Framework/Help/src/main/java/help/GHelpBroker.java new file mode 100644 index 0000000000..2912226ba5 --- /dev/null +++ b/Ghidra/Framework/Help/src/main/java/help/GHelpBroker.java @@ -0,0 +1,331 @@ +/* ### + * 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 help; + +import java.awt.*; +import java.io.IOException; +import java.net.URL; +import java.util.List; + +import javax.help.*; +import javax.swing.*; +import javax.swing.text.Document; + +import ghidra.util.Msg; +import ghidra.util.bean.GGlassPane; +import resources.ResourceManager; + +// NOTE: for JH 2.0, this class has been rewritten to not +// access the 'frame' and 'dialog' variable directly + +/** + * Ghidra help broker that displays the help set; sets the application icon on the help frame and + * attempts to maintain the user window size. + */ +public class GHelpBroker extends DefaultHelpBroker { + + // Create the zoom in/out icons that will be added to the default jHelp toolbar. + private static final ImageIcon ZOOM_OUT_ICON = + ResourceManager.loadImage("images/list-remove.png"); + private static final ImageIcon ZOOM_IN_ICON = ResourceManager.loadImage("images/list-add.png"); + + private Dimension windowSize = new Dimension(1100, 700); + + protected JEditorPane htmlEditorPane; + private Window activationWindow; + + /** + * Construct a new GhidraHelpBroker. + * @param hs java help set associated with this help broker + */ + public GHelpBroker(HelpSet hs) { + super(hs); + } + + @Override + // Overridden so that we can call the preferred version of setCurrentURL on the HelpModel, + // which fixes a bug with the history list (SCR 7639) + public void setCurrentURL(final URL URL) { + + HelpModel model = getCustomHelpModel(); + if (model != null) { + model.setCurrentURL(URL, getHistoryName(URL), null); + } + else { + super.setCurrentURL(URL); + } + } + + protected List getApplicationIcons() { + return null; + } + + protected HelpModel getCustomHelpModel() { + return null; + } + + /* Perform some shenanigans to force Java Help to reload the given URL */ + protected void reloadHelpPage(URL url) { + clearContentViewer(); + showNavigationAid(url); + try { + htmlEditorPane.setPage(url); + } + catch (IOException e) { + Msg.error(this, "Unexpected error loading help page: " + url, e); + } + } + + protected void showNavigationAid(URL url) { + // this base class does not have a navigation aid + } + + private void clearContentViewer() { + htmlEditorPane.getDocument().putProperty(Document.StreamDescriptionProperty, null); + } + + private JEditorPane getHTMLEditorPane(JHelpContentViewer contentViewer) { + // + // Intimate Knowledge - construction of the viewer: + // + // -BorderLayout + // -JScrollPane + // -Viewport + // -JHEditorPane extends JEditorPane + // + // + Component[] components = contentViewer.getComponents(); + JScrollPane scrollPane = (JScrollPane) components[0]; + JViewport viewport = scrollPane.getViewport(); + + return (JEditorPane) viewport.getView(); + } + + @Override + public void setDisplayed(boolean b) { + if (!b) { + super.setDisplayed(b); + return; + } + + // this must be before any call that triggers the help system to create its window + initializeScreenDevice(); + + WindowPresentation windowPresentation = getWindowPresentation(); + updateWindowSize(windowPresentation); + + // this has to be before getHelpWindow() or the value returned will be null + super.setDisplayed(b); + + initializeUIWindowPresentation(windowPresentation); + } + + private void initializeScreenDevice() { + if (isInitialized()) { + return; + } + + if (activationWindow == null) { + // This can happen when we show the 'What's New' help page on a fresh install. In + // that case, we were not activated from an existing window, thus, there may + // be no parent window. + return; + } + + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice[] gs = ge.getScreenDevices(); + GraphicsConfiguration config = activationWindow.getGraphicsConfiguration(); + GraphicsDevice parentDevice = config.getDevice(); + for (int i = 0; i < gs.length; i++) { + if (gs[i] == parentDevice) { + // update the help window's screen to match that of the parent + setScreen(i); + } + } + } + + private void initializeUIWindowPresentation(WindowPresentation windowPresentation) { + + Window helpWindow = windowPresentation.getHelpWindow(); + Container contentPane = null; + if (helpWindow instanceof JFrame) { + JFrame frame = (JFrame) helpWindow; + installRootPane(frame); + List icons = getApplicationIcons(); + if (icons != null) { + frame.setIconImages(icons); + } + contentPane = frame.getContentPane(); + } + else if (helpWindow instanceof JDialog) { + JDialog dialog = (JDialog) helpWindow; + installRootPane(dialog); + contentPane = dialog.getContentPane(); + } + + initializeUIComponents(contentPane); + } + + private boolean isInitialized() { + return htmlEditorPane != null; + } + + private void initializeUIComponents(Container contentPane) { + + if (isInitialized()) { + return;// already initialized + } + + Component[] components = contentPane.getComponents(); + JHelp jHelp = (JHelp) components[0]; + addCustomToolbarItems(jHelp); + JHelpContentViewer contentViewer = jHelp.getContentViewer(); + htmlEditorPane = getHTMLEditorPane(contentViewer); + + // just creating the search wires everything together + HelpModel helpModel = getCustomHelpModel(); + installHelpSearcher(jHelp, helpModel); + if (helpModel != null) { + installHelpSearcher(jHelp, helpModel); + } + + installActions(jHelp); + } + + protected void installHelpSearcher(JHelp jHelp, HelpModel helpModel) { + // this base class does not provide an in-page search feature + } + + /** + * Create zoom in/out buttons on the default help window toolbar. + * @param jHelp the java help object used to retrieve the help components + */ + protected void addCustomToolbarItems(final JHelp jHelp) { + + for (Component component : jHelp.getComponents()) { + if (component instanceof JToolBar) { + JToolBar toolbar = (JToolBar) component; + toolbar.addSeparator(); + + ImageIcon zoomOutIcon = ResourceManager.getScaledIcon(ZOOM_OUT_ICON, 24, 24); + JButton zoomOutBtn = new JButton(zoomOutIcon); + zoomOutBtn.setToolTipText("Zoom out"); + zoomOutBtn.addActionListener(e -> { + GHelpHTMLEditorKit.zoomOut(); + + // Need to reload the page to force the scroll panes to resize properly. A + // simple revalidate/repaint won't do it. + reloadHelpPage(getCurrentURL()); + }); + toolbar.add(zoomOutBtn); + + ImageIcon zoomInIcon = ResourceManager.getScaledIcon(ZOOM_IN_ICON, 24, 24); + JButton zoomInBtn = new JButton(zoomInIcon); + zoomInBtn.setToolTipText("Zoom in"); + zoomInBtn.addActionListener(e -> { + GHelpHTMLEditorKit.zoomIn(); + + // Need to reload the page to force the scroll panes to resize properly. A + // simple revalidate/repaint won't do it. + reloadHelpPage(getCurrentURL()); + }); + toolbar.add(zoomInBtn); + + // Once we've found the toolbar we can break out of the loop and stop looking for it. + break; + } + } + } + + protected void installActions(JHelp help) { + // subclasses may have actions + } + + private String getHistoryName(URL URL) { + String text = URL.getFile(); + int index = text.lastIndexOf('/'); + if (index != -1) { + // we want just the filename + text = text.substring(index + 1); + } + + String ref = URL.getRef(); + if (ref != null) { + text += " - " + ref; + } + return text; + } + + private void installRootPane(JFrame frame) { + Component oldGlassPane = frame.getGlassPane(); + if (!(oldGlassPane instanceof GGlassPane)) { + GGlassPane gGlassPane = new GGlassPane(); + frame.setGlassPane(gGlassPane); + gGlassPane.setVisible(true); + } + } + + private void installRootPane(JDialog dialog) { + Component oldGlassPane = dialog.getGlassPane(); + if (!(oldGlassPane instanceof GGlassPane)) { + GGlassPane gGlassPane = new GGlassPane(); + dialog.setGlassPane(gGlassPane); + gGlassPane.setVisible(true); + } + } + + private void updateWindowSize(WindowPresentation presentation) { + if (windowSize == null) { + return; + } + + presentation.createHelpWindow(); + presentation.setSize(windowSize); + } + + @Override + public void setActivationWindow(Window window) { + WindowPresentation windowPresentation = getWindowPresentation(); + Window helpWindow = windowPresentation.getHelpWindow(); + if (helpWindow == null) { + activationWindow = window; + super.setActivationWindow(window); + return; + } + + windowSize = helpWindow.getSize();// remember the previous size + + boolean wasModal = isModalWindow(helpWindow); + boolean willBeModal = isModalWindow(window); + if (!wasModal && willBeModal) { + // in this condition, a new window will be shown, but the old one is not properly + // closed by JavaHelp + helpWindow.setVisible(false); + } + + super.setActivationWindow(window); + } + + private boolean isModalWindow(Window window) { + if (window instanceof Dialog) { + Dialog dialog = (Dialog) window; + if (dialog.isModal()) { + return true; + } + } + return false; + } +} diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/GHelpHTMLEditorKit.java b/Ghidra/Framework/Help/src/main/java/help/GHelpHTMLEditorKit.java similarity index 99% rename from Ghidra/Framework/Docking/src/main/java/docking/help/GHelpHTMLEditorKit.java rename to Ghidra/Framework/Help/src/main/java/help/GHelpHTMLEditorKit.java index 4fd0f7b57f..9598c6100a 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/GHelpHTMLEditorKit.java +++ b/Ghidra/Framework/Help/src/main/java/help/GHelpHTMLEditorKit.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package docking.help; +package help; import java.awt.Desktop; import java.awt.Image; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/GHelpSet.java b/Ghidra/Framework/Help/src/main/java/help/GHelpSet.java similarity index 99% rename from Ghidra/Framework/Docking/src/main/java/docking/help/GHelpSet.java rename to Ghidra/Framework/Help/src/main/java/help/GHelpSet.java index b60a15a30f..6b1cd1cc22 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/GHelpSet.java +++ b/Ghidra/Framework/Help/src/main/java/help/GHelpSet.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package docking.help; +package help; import java.io.IOException; import java.io.InputStream; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/Help.java b/Ghidra/Framework/Help/src/main/java/help/Help.java similarity index 80% rename from Ghidra/Framework/Docking/src/main/java/docking/help/Help.java rename to Ghidra/Framework/Help/src/main/java/help/Help.java index b1bc8faee7..93b3adbdd7 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/Help.java +++ b/Ghidra/Framework/Help/src/main/java/help/Help.java @@ -13,13 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package docking.help; +package help; import docking.DefaultHelpService; -import docking.DockingWindowManager; /** - * Creates the HelpManager for the application. This is just a glorified global variable for + * Creates the HelpManager for the application. This is just a glorified global variable for * the application. */ public class Help { @@ -28,17 +27,16 @@ public class Help { /** * Get the help service - * + * * @return null if the call to setMainHelpSetURL() failed */ public static HelpService getHelpService() { return helpService; } - // allows help services to install themselves - static void installHelpService(HelpService service) { + // allows help services to install themselves + public static void installHelpService(HelpService service) { helpService = service; - DockingWindowManager.setHelpService(helpService); } } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/HelpDescriptor.java b/Ghidra/Framework/Help/src/main/java/help/HelpDescriptor.java similarity index 90% rename from Ghidra/Framework/Docking/src/main/java/docking/help/HelpDescriptor.java rename to Ghidra/Framework/Help/src/main/java/help/HelpDescriptor.java index 7d517b7282..93ea38bb69 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/HelpDescriptor.java +++ b/Ghidra/Framework/Help/src/main/java/help/HelpDescriptor.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. @@ -14,18 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package docking.help; +package help; public interface HelpDescriptor { - + /** * Returns the object for which help locations are defined. This may be the implementor of * this interface or some other delegate object. + * @return the help object */ public Object getHelpObject(); - + /** - * Returns a descriptive String about the help object that this descriptor represents. + * Returns a descriptive String about the help object that this descriptor represents. + * @return the help info */ public String getHelpInfo(); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/help/HelpService.java b/Ghidra/Framework/Help/src/main/java/help/HelpService.java similarity index 99% rename from Ghidra/Framework/Docking/src/main/java/docking/help/HelpService.java rename to Ghidra/Framework/Help/src/main/java/help/HelpService.java index 13faa88019..bdf2e643be 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/help/HelpService.java +++ b/Ghidra/Framework/Help/src/main/java/help/HelpService.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package docking.help; +package help; import java.awt.Component; import java.net.URL; diff --git a/Ghidra/Framework/Help/src/main/java/help/JavaHelpSetBuilder.java b/Ghidra/Framework/Help/src/main/java/help/JavaHelpSetBuilder.java index ef64829312..caf97ef9dd 100644 --- a/Ghidra/Framework/Help/src/main/java/help/JavaHelpSetBuilder.java +++ b/Ghidra/Framework/Help/src/main/java/help/JavaHelpSetBuilder.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,22 +15,14 @@ */ package help; -import java.io.BufferedWriter; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.nio.file.DirectoryStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.Set; +import java.io.*; +import java.nio.file.*; +import java.util.*; public class JavaHelpSetBuilder { private static final String TAB = "\t"; - private static final Set searchFileNames = - new HashSet(Arrays.asList(new String[] { "DOCS", "DOCS.TAB", "OFFSETS", - "POSITIONS", "SCHEMA", "TMAP" })); + private static final Set searchFileNames = new HashSet(Arrays + .asList(new String[] { "DOCS", "DOCS.TAB", "OFFSETS", "POSITIONS", "SCHEMA", "TMAP" })); private static int indentionLevel; private final String moduleName; @@ -97,7 +88,7 @@ public class JavaHelpSetBuilder { indentionLevel++; writeLine("TOC", writer); writeLine("", writer); - writeLine("docking.help.CustomTOCView", writer); + writeLine("" + CustomTOCView.class.getName() + "", writer); writeLine("" + helpSetTOCFile.getFileName() + "", writer); indentionLevel--; @@ -116,7 +107,7 @@ public class JavaHelpSetBuilder { writeLine("Search", writer); writeLine("", writer); // writeLine("javax.help.SearchView", writer); - writeLine("docking.help.CustomSearchView", writer); + writeLine("" + CustomSearchView.class.getName() + "", writer); if (hasIndexerFiles(helpSearchDirectory)) { writeLine("" + @@ -148,7 +139,7 @@ public class JavaHelpSetBuilder { // writeLine( "", writer ); // writeLine( "javax.help.FavoritesView", writer ); writeLine("", writer); - writeLine("docking.help.CustomFavoritesView", writer); + writeLine("" + CustomFavoritesView.class.getName() + "", writer); indentionLevel--; writeLine("", writer); @@ -158,8 +149,8 @@ public class JavaHelpSetBuilder { throws IOException { writer.write(""); writer.newLine(); - writer.write(""); + writer.write(""); writer.newLine(); writer.newLine(); diff --git a/Ghidra/Framework/Help/src/main/java/help/validator/location/HelpModuleCollection.java b/Ghidra/Framework/Help/src/main/java/help/validator/location/HelpModuleCollection.java index a6d5c05057..d1cfbaaed9 100644 --- a/Ghidra/Framework/Help/src/main/java/help/validator/location/HelpModuleCollection.java +++ b/Ghidra/Framework/Help/src/main/java/help/validator/location/HelpModuleCollection.java @@ -26,9 +26,9 @@ import javax.help.Map.ID; import javax.help.TOCView; import javax.swing.tree.DefaultMutableTreeNode; -import docking.help.CustomTOCView.CustomTreeItemDecorator; import help.HelpBuildUtils; import help.TOCItemProvider; +import help.CustomTOCView.CustomTreeItemDecorator; import help.validator.model.*; /** diff --git a/Ghidra/Framework/Help/src/main/java/help/validator/location/JarHelpModuleLocation.java b/Ghidra/Framework/Help/src/main/java/help/validator/location/JarHelpModuleLocation.java index 7827499dea..9aa875dbac 100644 --- a/Ghidra/Framework/Help/src/main/java/help/validator/location/JarHelpModuleLocation.java +++ b/Ghidra/Framework/Help/src/main/java/help/validator/location/JarHelpModuleLocation.java @@ -26,8 +26,8 @@ import java.util.regex.Pattern; import javax.help.HelpSet; import javax.help.HelpSetException; -import docking.help.GHelpSet; import ghidra.util.exception.AssertException; +import help.GHelpSet; import help.validator.model.GhidraTOCFile; public class JarHelpModuleLocation extends HelpModuleLocation { diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndTool.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndTool.java index e69a7696da..2afa2f2b59 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndTool.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndTool.java @@ -37,8 +37,6 @@ import db.buffers.DataBuffer; import docking.*; import docking.action.DockingAction; import docking.action.MenuData; -import docking.help.Help; -import docking.help.HelpService; import docking.tool.ToolConstants; import docking.util.AnimationUtils; import docking.util.image.ToolIconURL; @@ -77,6 +75,8 @@ import ghidra.util.exception.VersionException; import ghidra.util.task.*; import ghidra.util.xml.GenericXMLOutputter; import ghidra.util.xml.XmlUtilities; +import help.Help; +import help.HelpService; /** * Tool that serves as the the Ghidra Project Window. Only those plugins that diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/LogPanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/LogPanel.java index 2a74043fbc..bd339a3e40 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/LogPanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/LogPanel.java @@ -25,14 +25,14 @@ import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.Configuration; import docking.StatusBarSpacer; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.EmptyBorderButton; import docking.widgets.label.GDLabel; import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.layout.HorizontalLayout; import ghidra.util.task.BufferedSwingRunner; +import help.Help; +import help.HelpService; import log.LogListener; import log.LogPanelAppender; import resources.ResourceManager; diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ProjectDataPanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ProjectDataPanel.java index 1266652123..6c6b795d3b 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ProjectDataPanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ProjectDataPanel.java @@ -26,8 +26,6 @@ import javax.swing.*; import docking.ActionContext; import docking.ComponentProvider; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.tabbedpane.DockingTabRenderer; import ghidra.framework.main.datatable.ProjectDataTablePanel; import ghidra.framework.main.datatree.ProjectDataTreePanel; @@ -35,6 +33,8 @@ import ghidra.framework.model.*; import ghidra.framework.options.SaveState; import ghidra.util.HelpLocation; import ghidra.util.Msg; +import help.Help; +import help.HelpService; /** * Manages the data tree for the active project, and the trees for the diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ProjectInfoDialog.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ProjectInfoDialog.java index 2b7dc12fe7..87e0cf7a16 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ProjectInfoDialog.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ProjectInfoDialog.java @@ -26,8 +26,6 @@ import javax.swing.*; import javax.swing.border.BevelBorder; import docking.DialogComponentProvider; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.OptionDialog; import docking.widgets.label.GDLabel; import docking.widgets.label.GLabel; @@ -45,6 +43,8 @@ import ghidra.util.exception.CancelledException; import ghidra.util.layout.PairLayout; import ghidra.util.layout.VerticalLayout; import ghidra.util.task.*; +import help.Help; +import help.HelpService; import resources.ResourceManager; /** diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolButton.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolButton.java index 1fb96282cc..38e5b42790 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolButton.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolButton.java @@ -29,8 +29,6 @@ import org.jdesktop.animation.timing.TimingTargetAdapter; import docking.DockingWindowManager; import docking.dnd.*; -import docking.help.Help; -import docking.help.HelpService; import docking.tool.ToolConstants; import docking.util.image.ToolIconURL; import docking.widgets.EmptyBorderButton; @@ -40,6 +38,8 @@ import ghidra.framework.plugintool.PluginTool; import ghidra.util.*; import ghidra.util.bean.GGlassPane; import ghidra.util.exception.AssertException; +import help.Help; +import help.HelpService; /** * Component that is a drop target for a DataTreeTransferable object. 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 774b5049e9..f4c0ee02ab 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,8 +23,6 @@ import java.util.HashMap; import javax.swing.*; import javax.swing.border.Border; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.combobox.GComboBox; import docking.widgets.dialogs.InputDialog; import ghidra.framework.model.*; @@ -32,6 +30,8 @@ import ghidra.framework.plugintool.PluginTool; import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.exception.DuplicateNameException; +import help.Help; +import help.HelpService; class WorkspacePanel extends JPanel implements WorkspaceChangeListener { private final static long serialVersionUID = 1L; 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 d9333dcee4..559ea7631f 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,8 +25,6 @@ import javax.swing.*; import docking.ActionContext; import docking.ComponentProvider; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.label.GHtmlLabel; import docking.widgets.table.*; import docking.widgets.table.threaded.*; @@ -36,6 +34,8 @@ import ghidra.framework.plugintool.PluginTool; import ghidra.util.*; import ghidra.util.bean.GGlassPane; import ghidra.util.bean.GGlassPanePainter; +import help.Help; +import help.HelpService; public class ProjectDataTablePanel extends JPanel { diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/ProjectDataTreePanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/ProjectDataTreePanel.java index 7671fafffc..77aebb4327 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/ProjectDataTreePanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/ProjectDataTreePanel.java @@ -27,8 +27,6 @@ import javax.swing.tree.TreeSelectionModel; import docking.ActionContext; import docking.ComponentProvider; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.tree.GTreeNode; import docking.widgets.tree.support.GTreeSelectionListener; import ghidra.framework.main.FrontEndPlugin; @@ -36,6 +34,8 @@ import ghidra.framework.main.FrontEndTool; import ghidra.framework.model.*; import ghidra.framework.plugintool.PluginTool; import ghidra.util.HelpLocation; +import help.Help; +import help.HelpService; /** * Panel that contains a DataTree for showing project data. diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java index 8e94e0f681..6066598315 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java @@ -37,8 +37,6 @@ import docking.actions.PopupActionProvider; import docking.actions.ToolActions; import docking.framework.AboutDialog; import docking.framework.ApplicationInformationDisplayFactory; -import docking.help.Help; -import docking.help.HelpService; import docking.tool.ToolConstants; import docking.tool.util.DockingToolConstants; import docking.util.image.ToolIconURL; @@ -57,6 +55,8 @@ import ghidra.framework.plugintool.util.*; import ghidra.framework.project.ProjectDataService; import ghidra.util.*; import ghidra.util.task.*; +import help.Help; +import help.HelpService; /** * Base class that is a container to manage plugins and their actions, and to coordinate the diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/ExtensionTablePanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/ExtensionTablePanel.java index da59db975d..ea7daacfdc 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/ExtensionTablePanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/ExtensionTablePanel.java @@ -23,12 +23,12 @@ import java.util.Set; import javax.swing.*; import javax.swing.table.TableColumn; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.table.*; import ghidra.app.util.GenericHelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.util.HelpLocation; +import help.Help; +import help.HelpService; /** * Container for the {@link GTable} that displays ghidra extensions. 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 22293fc04b..93224434db 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 @@ -32,8 +32,6 @@ import docking.KeyEntryTextField; import docking.action.DockingActionIf; import docking.action.KeyBindingData; import docking.actions.KeyBindingUtils; -import docking.help.Help; -import docking.help.HelpService; import docking.tool.util.DockingToolConstants; import docking.widgets.*; import docking.widgets.label.GIconLabel; @@ -45,6 +43,8 @@ import ghidra.util.*; import ghidra.util.exception.AssertException; import ghidra.util.layout.PairLayout; import ghidra.util.layout.VerticalLayout; +import help.Help; +import help.HelpService; import resources.Icons; import resources.ResourceManager; diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/PluginInstallerDialog.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/PluginInstallerDialog.java index 1c81c082d1..2847172ba2 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/PluginInstallerDialog.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/PluginInstallerDialog.java @@ -22,14 +22,14 @@ import javax.swing.*; import javax.swing.table.TableColumn; import docking.DialogComponentProvider; -import docking.help.Help; -import docking.help.HelpService; import docking.widgets.table.*; import ghidra.app.util.GenericHelpTopics; import ghidra.framework.plugintool.PluginConfigurationModel; import ghidra.framework.plugintool.PluginTool; import ghidra.framework.plugintool.util.PluginDescription; import ghidra.util.HelpLocation; +import help.Help; +import help.HelpService; /** * Dialog that displays plugins in a tabular format, allowing users to install or uninstall them. The