1 /* 2 * Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE 3 */ 4 package de.ilias.services.filemanager.events; 5 6 import de.ilias.services.filemanager.content.ListItem; 7 import de.ilias.services.filemanager.controller.MainController; 8 import java.util.Iterator; 9 import java.util.logging.Logger; 10 import javafx.event.Event; 11 import javafx.event.EventHandler; 12 import javafx.scene.Node; 13 import javafx.scene.control.ListView; 14 import javafx.scene.input.KeyCode; 15 import javafx.scene.input.KeyEvent; 16 17 /** 18 * Class ListItemKeyEventHandler 19 * 20 * @author Stefan Meyer <smeyer.ilias@gmx.de> 21 */ 22 public class ListItemKeyEventHandler extends ListItemEventHandler implements EventHandler<KeyEvent> { 23 24 protected static final Logger logger = Logger.getLogger(ListItemKeyEventHandler.class.getName()); 25 26 private boolean multipleSelected = false; 27 28 /** 29 * Construcor 30 */ ListItemKeyEventHandler(ListItem item)31 public ListItemKeyEventHandler(ListItem item) { 32 super(item); 33 } 34 35 /** 36 * Check if multiple items are selected 37 * @return 38 */ areMultipleSelected()39 public boolean areMultipleSelected() { 40 return this.multipleSelected; 41 } 42 43 /** 44 * Handles key event 45 * @param ke 46 */ handle(KeyEvent ke)47 public void handle(KeyEvent ke) { 48 49 if(ke.getEventType() == KeyEvent.KEY_RELEASED) { 50 // open action 51 if((ke.isControlDown() && ke.getCode() == KeyCode.O) || ke.getCode() == KeyCode.ENTER) { 52 // Handle open action 53 logger.info("Handling open action"); 54 this.initListItem(ke); 55 if(!areMultipleSelected()) { 56 this.handleOpenAction(true); 57 } 58 ke.consume(); 59 return; 60 } 61 if(ke.isControlDown() && ke.getCode() == KeyCode.R) { 62 // Handle open action 63 logger.info("Handling rename"); 64 this.initListItem(ke); 65 if(!areMultipleSelected()) { 66 this.handleRenameAction(); 67 } 68 ke.consume(); 69 return; 70 71 } 72 if(ke.isControlDown() && ke.getCode() == KeyCode.L) { 73 // Handle revision state opening actions 74 logger.info("Handling revision state editing"); 75 this.initListItem(ke); 76 if(!areMultipleSelected()) { 77 this.handleRevisionStateEditingAction(); 78 } 79 ke.consume(); 80 return; 81 } 82 if(ke.isControlDown() && ke.getCode() == KeyCode.C) { 83 // Handle open action 84 logger.info("Handling copy to clipboard action"); 85 this.initListItem(ke); 86 this.handleCopyToClipboard(); 87 ke.consume(); 88 return; 89 } 90 if(ke.isControlDown() && ke.getCode() == KeyCode.A) { 91 logger.info("Select all"); 92 this.selectAllItems((ListView) ke.getSource()); 93 ke.consume(); 94 return; 95 } 96 if(ke.isShiftDown() && ke.isControlDown() && ke.getCode() == KeyCode.I) { 97 logger.info("Invert selection"); 98 this.invertSelection((ListView) ke.getSource()); 99 ke.consume(); 100 return; 101 } 102 if(ke.isControlDown() && ke.getCode() == KeyCode.V) { 103 logger.info("Handling paste"); 104 this.initListItem(ke); 105 this.handlePasteAction(); 106 ke.consume(); 107 return; 108 } 109 if(ke.getCode() == KeyCode.DELETE) { 110 logger.info("Handling delete"); 111 this.initListItem(ke); 112 this.handleDeleteAction(); 113 ke.consume(); 114 return; 115 } 116 } 117 ke.consume(); 118 return; 119 } 120 121 /** 122 * init list item from key event 123 * @param ke 124 */ initListItem(KeyEvent ke)125 protected void initListItem(KeyEvent ke) { 126 127 // container as default list item 128 this.setListItem((ListItem)((Node) ke.getSource()).getUserData()); 129 130 Iterator itemIte = ((ListView)ke.getSource()).getSelectionModel().getSelectedItems().iterator(); 131 int counter = 0; 132 while(itemIte.hasNext()) { 133 setListItem((ListItem) ((Node) itemIte.next()).getUserData()); 134 counter++; 135 } 136 if(counter > 1) { 137 multipleSelected = true; 138 } 139 } 140 141 } 142