diff --git a/pdex/Todo, GSoC 2013.txt b/pdex/Todo, GSoC 2013.txt index 2185b7af6..2f7dd80c8 100644 --- a/pdex/Todo, GSoC 2013.txt +++ b/pdex/Todo, GSoC 2013.txt @@ -27,6 +27,10 @@ Finer details * Reflection API - getMethods vs getDeclaredMethods. * Need to add offset correction to ASTGenerator and its lookup methods. Or leave it for later? All set to implement +Completion List +* Dynamically update the list instead of recreating on every keystroke(new list data, pos, etc.) +* List should get hidden on hitting esc key + Offset Mapping ============== First major hurdle is offset mapping diff --git a/pdex/src/processing/mode/experimental/CompletionPanel.java b/pdex/src/processing/mode/experimental/CompletionPanel.java index e3c8ec4ef..b18b28d12 100644 --- a/pdex/src/processing/mode/experimental/CompletionPanel.java +++ b/pdex/src/processing/mode/experimental/CompletionPanel.java @@ -2,6 +2,7 @@ package processing.mode.experimental; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Dimension; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -45,18 +46,19 @@ public class CompletionPanel { scrollPane = new JScrollPane(); scrollPane.setViewportView(completionList = createSuggestionList(position, items)); popupMenu.add(scrollPane, BorderLayout.CENTER); + popupMenu.setPopupSize(200, 250); //TODO: Eradicate this evil this.textarea.errorCheckerService.astGenerator .updateJavaDoc((CompletionCandidate) completionList.getSelectedValue()); popupMenu.show(textarea, location.x, textarea.getBaseline(0, 0) + location.y); - System.out.println("Suggestion shown"); + System.out.println("Suggestion constructed" + System.nanoTime()); } public boolean isVisible() { return popupMenu.isVisible(); } - public JList createSuggestionList(final int position, + private JList createSuggestionList(final int position, final DefaultListModel items) { JList list = new JList(items); @@ -75,15 +77,21 @@ public class CompletionPanel { return list; } - public boolean updateList(final DefaultListModel items, String newSubword, int position){ + public boolean updateList(final DefaultListModel items, String newSubword, int position){ + scrollPane.getViewport().removeAll(); + Dimension dimen = popupMenu.getSize(); completionList.setModel(items); - completionList.validate(); - completionList.repaint(); + completionList.validate(); completionList.setSelectedIndex(0); + scrollPane.setViewportView(completionList); + scrollPane.validate(); + popupMenu.setSize(dimen); + this.subWord = new String(newSubword); if (subWord.indexOf('.') != -1) this.subWord = subWord.substring(subWord.lastIndexOf('.') + 1); insertionPosition = position; + System.out.println("Suggestion updated" + System.nanoTime()); return true; } @@ -107,7 +115,7 @@ public class CompletionPanel { public void hideSuggestion() { popupMenu.setVisible(false); - System.out.println("Suggestion hidden"); + System.out.println("Suggestion hidden" + System.nanoTime()); //textarea.errorCheckerService.astGenerator.jdocWindowVisible(false); } diff --git a/pdex/src/processing/mode/experimental/TextArea.java b/pdex/src/processing/mode/experimental/TextArea.java index 982d83e7b..808611f3c 100644 --- a/pdex/src/processing/mode/experimental/TextArea.java +++ b/pdex/src/processing/mode/experimental/TextArea.java @@ -133,10 +133,23 @@ public class TextArea extends JEditTextArea { if(suggestion.isVisible()){ System.out.println("esc key"); hideSuggestion(); + evt.consume(); return; } } } + if(evt.getKeyCode() == KeyEvent.VK_ENTER){ + if (suggestion != null) { + if (suggestion.isVisible()) { + if (suggestion.insertSelection()) { + hideSuggestion(); // Kill it! + evt.consume(); + return; + } + } + } + } + if (evt.getID() == KeyEvent.KEY_PRESSED) { switch (evt.getKeyCode()) { @@ -156,26 +169,27 @@ public class TextArea extends JEditTextArea { return; } break; - case KeyEvent.VK_ENTER: - if (suggestion != null) { - if (suggestion.isVisible()) { - if (suggestion.insertSelection()) { - //final int position = getCaretPosition(); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - try { - //getDocument().remove(position - 1, 1); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - return; - } - } - } - break; +// case KeyEvent.VK_ENTER: +// if (suggestion != null) { +// if (suggestion.isVisible()) { +// if (suggestion.insertSelection()) { +// hideSuggestion(); // Kill it! +// //final int position = getCaretPosition(); +// SwingUtilities.invokeLater(new Runnable() { +// @Override +// public void run() { +// try { +// //getDocument().remove(position - 1, 1); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// }); +// return; +// } +// } +// } +// break; case KeyEvent.VK_BACK_SPACE: System.out.println("BK Key"); break; @@ -227,7 +241,7 @@ public class TextArea extends JEditTextArea { if (evt.getID() == KeyEvent.KEY_TYPED) { errorCheckerService.runManualErrorCheck(); System.out.println(" Typing: " + fetchPhrase(evt) + " " - + (evt.getKeyChar() == KeyEvent.VK_BACK_SPACE)); + + (evt.getKeyChar() == KeyEvent.VK_ENTER)); } @@ -256,6 +270,10 @@ public class TextArea extends JEditTextArea { System.out.print(" x char: " + s.charAt(x)); //int xLS = off - getLineStartNonWhiteSpaceOffset(line); char keyChar = evt.getKeyChar(); + if(keyChar == KeyEvent.VK_ENTER){ + System.out.println("Enter consumed."); + return null; + } if (keyChar == KeyEvent.VK_BACK_SPACE || keyChar == KeyEvent.VK_DELETE) ; // accepted these keys else if (keyChar == KeyEvent.CHAR_UNDEFINED)