1 19 20 28 29 package org.netbeans.modules.xml.schema.abe; 30 31 import java.awt.AWTKeyStroke ; 32 import java.awt.Component ; 33 import java.awt.Container ; 34 import java.awt.FocusTraversalPolicy ; 35 import java.awt.KeyboardFocusManager ; 36 import java.awt.event.KeyEvent ; 37 import java.util.Collections ; 38 import java.util.HashSet ; 39 import java.util.Set ; 40 import org.netbeans.modules.xml.schema.abe.visitors.TraversalVisitor; 41 import org.netbeans.modules.xml.schema.abe.visitors.UpTraversalVisitor; 42 import org.netbeans.modules.xml.schema.abe.visitors.BackTraversalVisitor; 43 import org.netbeans.modules.xml.schema.abe.visitors.FrontTraversalVisitor; 44 import org.netbeans.modules.xml.schema.abe.visitors.DownTraversalVisitor; 45 46 50 public class FocusTraversalManager{ 51 52 public enum NavigationType{ 53 FRONT, 54 BACK, 55 UP, 56 DOWN, 57 NONE 58 } 59 boolean metaKeyDown; 60 61 InstanceUIContext context; 62 KeyEvent currentEvent; 63 ABEBaseDropPanel currentComp; 64 65 public FocusTraversalManager(InstanceUIContext context) { 66 this.context = context; 67 } 68 69 public void handleEvent(KeyEvent e, ABEBaseDropPanel panel) { 70 this.currentEvent = e; 71 this.currentComp = panel; 72 73 NavigationType navType = getNavigationType(e); 74 ABEBaseDropPanel nextFocuComp = null; 75 TraversalVisitor tv = null; 76 switch(navType){ 77 case FRONT: 78 tv = new FrontTraversalVisitor(panel); 79 break; 80 case BACK: 81 tv = new BackTraversalVisitor(panel); 82 break; 83 case UP: 84 tv = new UpTraversalVisitor(panel); 85 break; 86 case DOWN: 87 tv = new DownTraversalVisitor(panel); 88 break; 89 case NONE: 90 return; 91 } 92 panel.accept(tv); 93 nextFocuComp = tv.getResult(); 94 if(nextFocuComp != null){ 95 if(e.isControlDown()){ 96 context.getComponentSelectionManager().addToSelectedComponents(nextFocuComp); 98 }else{ 99 context.getComponentSelectionManager().setSelectedComponent(nextFocuComp); 101 } 102 UIUtilities.scrollViewTo(nextFocuComp, context); 103 } 104 e.consume(); 106 107 } 108 109 public static NavigationType getNavigationType(KeyEvent e){ 110 int keyCode = e.getKeyCode(); 111 112 if(keyCode == KeyEvent.VK_RIGHT) 113 return NavigationType.FRONT; 114 115 123 124 return NavigationType.NONE; 125 } 126 127 public boolean isFocusChangeEvent(KeyEvent e) { 128 if(getNavigationType(e) == NavigationType.NONE) 129 return false; 130 return true; 131 } 132 133 134 135 136 } 137 | Popular Tags |