diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/event/FVEventListener.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/event/FVEventListener.java index 24d38e220a..2a1a94db22 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/event/FVEventListener.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/event/FVEventListener.java @@ -19,9 +19,13 @@ import java.util.Observable; import java.util.Observer; /** - * Extension of the Java {@link Observer} class that allows clients to send {@link FVEvent} + * Extension of the Java {@link Observer} class that allows clients to send {@link FVEvent} * messages to subscribers. * + *
Note: this 'listener' class serves as an event 'hub', where clients can push events to this + * class and register to receive events from this class. The events given to this listener are + * heterogeneous and serve as a general message passing system for this API. This class should + * be replaced by simple object communication by using normal method calls. */ public class FVEventListener extends Observable { diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVToolBar.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVToolBar.java index 729d7f9a4e..9e7b7f0a1b 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVToolBar.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVToolBar.java @@ -27,21 +27,17 @@ import ghidra.framework.main.logviewer.event.FVEventListener; import resources.ResourceManager; /** - * Toolbar that contains widgets for controlling the {@link FileViewer}. Currently there is one - * widget: - * - * 1. SCROLL LOCK - When selected, this will lock the view so it will not move when new data - * comes in. - * + * Toolbar that contains widgets for controlling the {@link FileViewer}. */ public class FVToolBar extends JToolBar { - private EmptyBorderToggleButton scrollLockBtn; - private EmptyBorderButton fileOpenBtn; + private EmptyBorderToggleButton scrollLockButton; + private EmptyBorderButton fileOpenButton; private FVEventListener eventListener; /** * Constructor. + * @param eventListener the event listener that will be notified of action events */ public FVToolBar(FVEventListener eventListener) { this.eventListener = eventListener; @@ -49,47 +45,47 @@ public class FVToolBar extends JToolBar { createFileOpenTool(); } - public EmptyBorderToggleButton getScrollLockBtn() { - return scrollLockBtn; + public boolean isScrollLockOn() { + return scrollLockButton.isSelected(); } - /********************************************************************************* - * PRIVATE METHODS - *********************************************************************************/ + public void setScrollLockOn(boolean lock) { + scrollLockButton.setSelected(lock); + } + +//================================================================================================= +// Private Methods +//================================================================================================= private void createFileOpenTool() { - ImageIcon icon = ResourceManager.loadImage("images/lock.png"); - Action lockAction = new ScrollLockAction("undefined", icon, "Scroll Lock"); - scrollLockBtn = new EmptyBorderToggleButton(); - scrollLockBtn.setAction(lockAction); - scrollLockBtn.setText("Scroll Lock"); - scrollLockBtn.setHideActionText(true); - scrollLockBtn.setToolTipText("Scroll Lock"); - add(scrollLockBtn); + Action openAction = new FileOpenAction(); + fileOpenButton = new EmptyBorderButton(); + fileOpenButton.setAction(openAction); + fileOpenButton.setText("Opens the log file folder"); + fileOpenButton.setHideActionText(true); + add(fileOpenButton); } private void createScrollLockTool() { - ImageIcon icon = ResourceManager.loadImage("images/openSmallFolder.png"); - Action openAction = new FileOpenAction("undefined", icon, "Scroll Lock"); - fileOpenBtn = new EmptyBorderButton(); - fileOpenBtn.setAction(openAction); - fileOpenBtn.setText("Opens the log file folder"); - fileOpenBtn.setHideActionText(true); - fileOpenBtn.setToolTipText("Opens the log file folder"); - add(fileOpenBtn); + Action lockAction = new ScrollLockAction(); + scrollLockButton = new EmptyBorderToggleButton(); + scrollLockButton.setAction(lockAction); + scrollLockButton.setText("Scroll Lock"); + scrollLockButton.setHideActionText(true); + add(scrollLockButton); } private class ScrollLockAction extends AbstractAction { - public ScrollLockAction(String text, Icon icon, String desc) { - super(text, icon); - putValue(SHORT_DESCRIPTION, desc); + public ScrollLockAction() { + super("FVScrollLockAction", ResourceManager.loadImage("images/lock.png")); + putValue(SHORT_DESCRIPTION, "Scroll Lock"); } @Override public void actionPerformed(ActionEvent e) { FVEvent tailEvt; - if (scrollLockBtn.isSelected()) { + if (scrollLockButton.isSelected()) { tailEvt = new FVEvent(EventType.SCROLL_LOCK_ON, null); } else { @@ -101,9 +97,9 @@ public class FVToolBar extends JToolBar { private class FileOpenAction extends AbstractAction { - public FileOpenAction(String text, Icon icon, String desc) { - super(text, icon); - putValue(SHORT_DESCRIPTION, desc); + public FileOpenAction() { + super("FVFileOpenAction", ResourceManager.loadImage("images/openSmallFolder.png")); + putValue(SHORT_DESCRIPTION, "Opens the log file folder"); } @Override diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FileViewer.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FileViewer.java index 8726422449..53b03de770 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FileViewer.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FileViewer.java @@ -18,7 +18,6 @@ package ghidra.framework.main.logviewer.ui; import java.awt.BorderLayout; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.*; @@ -29,28 +28,30 @@ import ghidra.framework.main.logviewer.event.*; import ghidra.framework.main.logviewer.event.FVEvent.EventType; import ghidra.framework.main.logviewer.model.*; import ghidra.util.Msg; +import ghidra.util.Swing; import utilities.util.FileUtilities; /** * UI for viewing the contents of very large files efficiently. Pieces of a file are read in using - * the {@link ChunkReader}, which are then displayed line-by-line in {@link FVTable}. As - * users scroll up/down, new sections of the file are swapped in as appropriate. - * + * the {@link ChunkReader}, which are then displayed line-by-line in {@link FVTable}. As users + * scroll up/down, new sections of the file are swapped in as appropriate. + *
* Notes: - * 1. The viewer consists of a simple JTable and a custom JSlider. The table displays lines of + *