| 1 package org.antlr.works.idea; 2 3 import javax.swing.*; 4 import java.awt.event.ActionEvent ; 5 import java.awt.event.ActionListener ; 6 import java.util.ArrayList ; 7 import java.util.Iterator ; 8 import java.util.List ; 9 39 40 public class IdeaManager { 41 42 protected List <IdeaProvider> providers = new ArrayList <IdeaProvider>(); 43 protected Timer timer; 44 protected IdeaOverlay overlay; 45 protected IdeaManagerDelegate delegate; 46 protected boolean enabled = true; 47 protected int lastPosition; 48 49 public IdeaManager() { 50 timer = new Timer(1000, new TimerActionListener()); 51 timer.setRepeats(false); 52 } 53 54 public void setDelegate(IdeaManagerDelegate delegate) { 55 this.delegate = delegate; 56 } 57 58 public void setOverlay(IdeaOverlay overlay) { 59 this.overlay = overlay; 60 } 61 62 public void setEnabled(boolean flag) { 63 this.enabled = flag; 64 if(!enabled) { 65 hide(); 66 } 67 } 68 69 public boolean enabled() { 70 return enabled; 71 } 72 73 public void addProvider(IdeaProvider provider) { 74 providers.add(provider); 75 } 76 77 public void close() { 78 timer.stop(); 79 } 80 81 public void hide() { 82 timer.stop(); 83 overlay.hide(); 84 } 85 86 public void displayAnyIdeasAvailable(int position) { 87 if(!enabled) 88 return; 89 90 List <IdeaAction> ideas = generateIdeaActions(position); 91 if(ideas == null || ideas.isEmpty()) 92 overlay.hide(); 93 else { 94 lastPosition = position; 95 overlay.setIdeas(ideas); 96 timer.restart(); 97 } 98 } 99 100 public List <IdeaAction> generateIdeaActions(int position) { 101 List <IdeaAction> actions = new ArrayList <IdeaAction>(); 102 for(Iterator <IdeaProvider> iter = providers.iterator(); iter.hasNext(); ) { 103 IdeaProvider provider = iter.next(); 104 List <IdeaAction> pactions = provider.ideaProviderGetActions(position); 105 if(pactions != null && !pactions.isEmpty()) { 106 actions.addAll(pactions); 107 } 108 } 109 return actions; 110 } 111 112 protected class TimerActionListener implements ActionListener { 113 public void actionPerformed(ActionEvent e) { 114 115 List <IdeaAction> ideas = generateIdeaActions(lastPosition); 116 if(ideas.size() == 0) 117 return; 118 119 122 overlay.setIdeas(ideas); 123 124 if(delegate != null) { 125 if(!delegate.ideaManagerWillDisplayIdea()) 126 return; 127 } 128 129 overlay.display(); 130 } 131 } 132 } 133 | Popular Tags |