private void createKeyBindings(FVTable table, ChunkModel model, ChunkReader reader,
			FVEventListener eventListener) {
		
		// These key bindings are identical to the ones set in the FVTable class. These are 
		// necessary for cases where the user hits a key that should manipulate the table, but 
		// keyboard focus is on the slider.
		InputMap im_table = getInputMap();
		ActionMap am_table = getActionMap();
		im_table.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "DownArrow");
		am_table.put("DownArrow", new ArrowDownAction(eventListener));
		im_table.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "UpArrow");
		am_table.put("UpArrow", new ArrowUpAction(eventListener));
		im_table.put(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, 0), "PageDown");
		am_table.put("PageDown", new PageDownAction(eventListener));
		im_table.put(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP, 0), "PageUp");
		am_table.put("PageUp", new PageUpAction(eventListener));
		im_table.put(KeyStroke.getKeyStroke(KeyEvent.VK_HOME, 0), "Home");
		am_table.put("Home", new HomeAction(eventListener));
		im_table.put(KeyStroke.getKeyStroke(KeyEvent.VK_END, 0), "End");
		am_table.put("End", new EndAction(eventListener));
		
		// Recognize when the shift key has been pressed and released, so we know how to handle 
		// selection.
		im_table.put(KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, InputEvent.SHIFT_DOWN_MASK, false), "ShiftPressed");
		am_table.put("ShiftPressed", new AbstractAction() {

			@Override
			public void actionPerformed(ActionEvent e) {
				table.setShiftDown(true);	
			}	
		});
		im_table.put(KeyStroke.getKeyStroke("released SHIFT"), "ShiftReleased");
		am_table.put("ShiftReleased", new AbstractAction() {

			@Override
			public void actionPerformed(ActionEvent e) {
				table.setShiftDown(false);	
			}	
		});
		
		// Now create a binding for the CTRL-A, select all action.
		im_table.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_DOWN_MASK, false), "SelectAll");
		im_table.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.META_DOWN_MASK, false), "SelectAll");
		am_table.put("SelectAll", new AbstractAction() {

			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					model.selectedByteStart = 0;
					model.selectedByteEnd = reader.getFileSize()-1;
					
					FVEvent copyEvt = new FVEvent(EventType.COPY_SELECTION, null);
					eventListener.send(copyEvt);
				}
				catch (IOException e1) {
					Msg.error(this, "error reading file size", e1);
				}
			}
		});
	}
Create key bindings for the slider. These are also captured by the {@link FVTable}, but if
focus is on this slider we still want these keys to work.  

We have to capture the following:
  - arrow down
  - arrow up
  - page down
  - page up
  - home
  - end
  - Ctrl-C (Command-C for mac) for copy
  - Ctrl-A (Command-A for mac) for select all
  - Shift pressed 
  - Shift released
  
@param table
@param model
@param reader
@param eventListener
Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVSlider.java