private void handleFVEvent(FVEvent event) {

		switch (event.eventType) {

			case COPY_SELECTION:

				try {
					// 1. Read in the bytes containing the selected range.
					List<byte[]> byteArrays =
						reader.readBytes(model.selectedByteStart, model.selectedByteEnd);

					// 2. Create strings from the byte arrays.
					StringBuilder strBuilder = new StringBuilder();
					for (byte[] byteArray : byteArrays) {
						String str = new String(byteArray);
						strBuilder.append(str);
					}
					StringSelection stringSelection = new StringSelection(strBuilder.toString());

					// 3. Copy it to the clipboard.
					Clipboard clipboard = GClipboard.getSystemClipboard();
					clipboard.setContents(stringSelection, null);
				}
				catch (IOException e) {
					Msg.error(this, "Error reading bytes from file", e);
				}

				break;
			case DECREMENT_SELECTION:
				if (table.getSelectedRow() >= 0) {
					table.decrementSelection((int) event.arg);
					slider.syncWithViewport();
					table.restoreSelection();
				}
				break;

			case DECREMENT_AND_ADD_SELECTION:
				if (table.getSelectedRow() >= 0) {
					table.decrementAndAddSelection((int) event.arg);
					slider.syncWithViewport();
					table.restoreSelection();
				}
				break;

			case FILE_CHANGED:
				reloadFile();
				break;

			case INCREMENT_SELECTION:
				if (table.getSelectedRow() >= 0) {
					table.incrementSelection((int) event.arg);
					slider.syncWithViewport();
					table.restoreSelection();
				}
				break;

			case INCREMENT_AND_ADD_SELECTION:
				if (table.getSelectedRow() >= 0) {
					table.incrementAndAddSelection((int) event.arg);
					slider.syncWithViewport();
					table.restoreSelection();
				}
				break;

			case OPEN_FILE_LOCATION:
				try {
					FileUtilities.openNative(reader.getFile().getParentFile());
				}
				catch (IOException e) {
					Msg.error(this, "Error opening log file: " + reader.getFile(), e);
				}
				break;

			case RELOAD_FILE:
				reloadFile();
				break;

			case SCROLL_HOME:
				viewTopOfFile();
				setScrollLock(true);
				break;

			case SCROLL_END:
				boolean updateSlider = event.arg == null ? true : (boolean) event.arg;
				viewEndOfFile(updateSlider);
				viewportUtility.moveViewportToBottom();
				break;

			case SLIDER_CHANGED:

				try {
					long newFilePos = (long) event.arg;
					newFilePos =
						newFilePos > reader.getFileSize() ? reader.getFileSize() - 1 : newFilePos;
					updateViewToFilePos(newFilePos);
					table.restoreSelection();
				}
				catch (IOException e) {
					Msg.error(this, "Error retrieving file size from reader", e);
				}

				break;

			case SCROLL_LOCK_OFF:
				setScrollLock(false);
				break;

			case SCROLL_LOCK_ON:
				setScrollLock(true);
				break;

			case VIEWPORT_UPDATE:
				slider.syncWithViewport();
				table.restoreSelection();
				break;

			default:
		}
	}
Processes events received via the {@link FVEvent} mechanism.

@param event the event type received
Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FileViewer.java