From 633837ffa7b6a428a865ec1e171d8fa05eb87a33 Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Fri, 5 Jul 2013 21:01:51 +0530 Subject: [PATCH] changing to def list model --- .../mode/experimental/ASTGenerator.java | 41 ++++---- .../mode/experimental/CompletionPanel.java | 52 +++++----- .../mode/experimental/TextArea.java | 97 ++++++++++++++++--- 3 files changed, 135 insertions(+), 55 deletions(-) diff --git a/pdex/src/processing/mode/experimental/ASTGenerator.java b/pdex/src/processing/mode/experimental/ASTGenerator.java index 99c522ba4..2f1f3e03e 100644 --- a/pdex/src/processing/mode/experimental/ASTGenerator.java +++ b/pdex/src/processing/mode/experimental/ASTGenerator.java @@ -27,6 +27,7 @@ import java.util.TreeMap; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; +import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JFrame; @@ -180,13 +181,13 @@ public class ASTGenerator { frmOccurenceList.add(sp2); //occurenceListFrame.setVisible(true); -// frameAutoComp = new JFrame(); -// frameAutoComp.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); -// frameAutoComp.setBounds(new Rectangle(1280, 100, 460, 620)); + frameAutoComp = new JFrame(); + frameAutoComp.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + frameAutoComp.setBounds(new Rectangle(1280, 100, 460, 620)); tableAuto = new JTable(); -// JScrollPane sp2 = new JScrollPane(); -// sp2.setViewportView(tableAuto); -// frameAutoComp.add(sp2); + JScrollPane sp3 = new JScrollPane(); + sp3.setViewportView(tableAuto); + frameAutoComp.add(sp3); // jdocWindow = new JFrame(); // jdocWindow.setTitle("P5 InstaHelp"); @@ -240,11 +241,11 @@ public class ASTGenerator { if (!frame2.isVisible()) { frame2.setVisible(true); } -// if (!frameAutoComp.isVisible()) { -// -// frameAutoComp.setVisible(true); -// -// } + if (!frameAutoComp.isVisible()) { + + frameAutoComp.setVisible(true); + + } // if (!jdocWindow.isVisible()) { // long t = System.currentTimeMillis(); // loadJars(); @@ -772,9 +773,12 @@ public class ASTGenerator { Collections.sort(candidates); CompletionCandidate[][] candi = new CompletionCandidate[candidates .size()][1]; + + DefaultListModel defListModel = new DefaultListModel(); for (int i = 0; i < candi.length; i++) { candi[i][0] = candidates.get(i); + defListModel.addElement(candidates.get(i)); } System.out.println("K = " + candidates.size()); DefaultTableModel tm = new DefaultTableModel( @@ -783,11 +787,10 @@ public class ASTGenerator { tableAuto.setModel(tm); tableAuto.validate(); tableAuto.repaint(); - //String[] items = - CompletionCandidate[] candi2 = candidates - .toArray(new CompletionCandidate[candidates.size()]); - if (candidates.size() > 0) - errorCheckerService.getEditor().textArea().showSuggestion(candi2); +// CompletionCandidate[] candidatesArray = candidates +// .toArray(new CompletionCandidate[candidates.size()]); + errorCheckerService.getEditor().textArea() + .showSuggestion(defListModel); } }; @@ -859,7 +862,9 @@ public class ASTGenerator { } public void updateJavaDoc(final CompletionCandidate candidate) { - String methodmatch = candidate.toString(); + //TODO: Work on this later. + return; + /*String methodmatch = candidate.toString(); if (methodmatch.indexOf('(') != -1) { methodmatch = methodmatch.substring(0, methodmatch.indexOf('(')); } @@ -886,7 +891,7 @@ public class ASTGenerator { }); break; } - } + }*/ //jdocWindow.setVisible(false); } diff --git a/pdex/src/processing/mode/experimental/CompletionPanel.java b/pdex/src/processing/mode/experimental/CompletionPanel.java index 3e0f7678d..1f62ecb6b 100644 --- a/pdex/src/processing/mode/experimental/CompletionPanel.java +++ b/pdex/src/processing/mode/experimental/CompletionPanel.java @@ -7,16 +7,18 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; +import javax.swing.DefaultListModel; import javax.swing.JList; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; +import javax.swing.ListModel; import javax.swing.ListSelectionModel; import javax.swing.text.BadLocationException; import processing.app.syntax.JEditTextArea; public class CompletionPanel { - private JList list; + private JList completionList; private JPopupMenu popupMenu; @@ -29,7 +31,7 @@ public class CompletionPanel { private JScrollPane scrollPane; public CompletionPanel(JEditTextArea textarea, int position, String subWord, - CompletionCandidate[] items, Point location) { + DefaultListModel items, Point location) { this.textarea = (TextArea) textarea; this.insertionPosition = position; if (subWord.indexOf('.') != -1) @@ -41,17 +43,13 @@ public class CompletionPanel { popupMenu.setOpaque(false); popupMenu.setBorder(null); scrollPane = new JScrollPane(); - scrollPane.setViewportView(list = createSuggestionList(position, items)); + scrollPane.setViewportView(completionList = createSuggestionList(position, items)); popupMenu.add(scrollPane, BorderLayout.CENTER); this.textarea.errorCheckerService.astGenerator - .updateJavaDoc((CompletionCandidate) list.getSelectedValue()); + .updateJavaDoc((CompletionCandidate) completionList.getSelectedValue()); popupMenu.show(textarea, location.x, textarea.getBaseline(0, 0) + location.y); - - } - - public void hide() { - popupMenu.setVisible(false); + System.out.println("Suggestion shown"); } public boolean isVisible() { @@ -59,7 +57,7 @@ public class CompletionPanel { } public JList createSuggestionList(final int position, - final CompletionCandidate[] items) { + final DefaultListModel items) { JList list = new JList(items); list.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1)); @@ -76,11 +74,18 @@ public class CompletionPanel { }); return list; } + + public boolean updateList(final CompletionCandidate[] items){ + ListModel lm = completionList.getModel(); + DefaultListModel dlm = new DefaultListModel(); + + return true; + } public boolean insertSelection() { - if (list.getSelectedValue() != null) { + if (completionList.getSelectedValue() != null) { try { - final String selectedSuggestion = ((CompletionCandidate) list + final String selectedSuggestion = ((CompletionCandidate) completionList .getSelectedValue()).getCompletionString().substring(subWord.length()); textarea.getDocument().insertString(insertionPosition, selectedSuggestion, null); @@ -96,44 +101,45 @@ public class CompletionPanel { } public void hideSuggestion() { - hide(); + popupMenu.setVisible(false); + System.out.println("Suggestion hidden"); //textarea.errorCheckerService.astGenerator.jdocWindowVisible(false); } public void moveUp() { - if (list.getSelectedIndex() == 0) { + if (completionList.getSelectedIndex() == 0) { scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getMaximum()); - selectIndex(list.getModel().getSize() - 1); + selectIndex(completionList.getModel().getSize() - 1); return; } else { - int index = Math.max(list.getSelectedIndex() - 1, 0); + int index = Math.max(completionList.getSelectedIndex() - 1, 0); selectIndex(index); } int step = scrollPane.getVerticalScrollBar().getMaximum() - / list.getModel().getSize(); + / completionList.getModel().getSize(); scrollPane.getVerticalScrollBar().setValue(scrollPane .getVerticalScrollBar() .getValue() - step); textarea.errorCheckerService.astGenerator - .updateJavaDoc((CompletionCandidate) list.getSelectedValue()); + .updateJavaDoc((CompletionCandidate) completionList.getSelectedValue()); } public void moveDown() { - if (list.getSelectedIndex() == list.getModel().getSize() - 1) { + if (completionList.getSelectedIndex() == completionList.getModel().getSize() - 1) { scrollPane.getVerticalScrollBar().setValue(0); selectIndex(0); return; } else { - int index = Math.min(list.getSelectedIndex() + 1, list.getModel() + int index = Math.min(completionList.getSelectedIndex() + 1, completionList.getModel() .getSize() - 1); selectIndex(index); } textarea.errorCheckerService.astGenerator - .updateJavaDoc((CompletionCandidate) list.getSelectedValue()); + .updateJavaDoc((CompletionCandidate) completionList.getSelectedValue()); int step = scrollPane.getVerticalScrollBar().getMaximum() - / list.getModel().getSize(); + / completionList.getModel().getSize(); scrollPane.getVerticalScrollBar().setValue(scrollPane .getVerticalScrollBar() .getValue() @@ -141,7 +147,7 @@ public class CompletionPanel { } private void selectIndex(int index) { - list.setSelectedIndex(index); + completionList.setSelectedIndex(index); // final int position = textarea.getCaretPosition(); // SwingUtilities.invokeLater(new Runnable() { // @Override diff --git a/pdex/src/processing/mode/experimental/TextArea.java b/pdex/src/processing/mode/experimental/TextArea.java index 1ec3c2ffc..77b054cdd 100644 --- a/pdex/src/processing/mode/experimental/TextArea.java +++ b/pdex/src/processing/mode/experimental/TextArea.java @@ -30,6 +30,7 @@ import java.awt.event.MouseMotionListener; import java.util.HashMap; import java.util.Map; +import javax.swing.DefaultListModel; import javax.swing.SwingUtilities; import javax.swing.text.BadLocationException; @@ -126,7 +127,65 @@ public class TextArea extends JEditTextArea { } public void processKeyEvent(KeyEvent evt) { + + if(evt.getKeyCode() == KeyEvent.VK_ESCAPE){ + if(suggestion != null){ + if(suggestion.isVisible()){ + System.out.println("esc key"); + hideSuggestion(); + return; + } + } + } + if (evt.getID() == KeyEvent.KEY_PRESSED) { + switch (evt.getKeyCode()) { + case KeyEvent.VK_DOWN: + if (suggestion != null) + if (suggestion.isVisible()) { + //System.out.println("KeyDown"); + suggestion.moveDown(); + return; + } + break; + case KeyEvent.VK_UP: + if (suggestion != null) + if (suggestion.isVisible()) { + //System.out.println("KeyUp"); + suggestion.moveUp(); + 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_BACK_SPACE: + System.out.println("BK Key"); + break; + default: + break; + } + } + super.processKeyEvent(evt); + + /* if (evt.getKeyCode() == KeyEvent.VK_DOWN && suggestion != null) { if (suggestion.isVisible()) { //System.out.println("KeyDown"); @@ -162,16 +221,17 @@ public class TextArea extends JEditTextArea { } else if (evt.getKeyChar() == KeyEvent.VK_BACK_SPACE) { System.out.println("BK Key"); } - } + + }*/ - super.processKeyEvent(evt); - if (evt.getID() == KeyEvent.KEY_TYPED) { - errorCheckerService.runManualErrorCheck(); - System.out.println(" Typing: " + fetchPhrase(evt) + " " - + (evt.getKeyChar() == KeyEvent.VK_BACK_SPACE)); + if (evt.getID() == KeyEvent.KEY_TYPED) { + errorCheckerService.runManualErrorCheck(); + System.out.println(" Typing: " + fetchPhrase(evt) + " " + + (evt.getKeyChar() == KeyEvent.VK_BACK_SPACE)); - } + } + } private String fetchPhrase(KeyEvent evt) { @@ -560,7 +620,8 @@ public class TextArea extends JEditTextArea { // } // // }); - } else if (Character.isWhitespace(e.getKeyChar())) { + } else if (Character.isWhitespace(e.getKeyChar()) + || e.getKeyChar() == KeyEvent.VK_ESCAPE) { hideSuggestion(); } } @@ -571,18 +632,22 @@ public class TextArea extends JEditTextArea { }); } - public void showSuggestionLater(final CompletionCandidate[] items) { + public void showSuggestionLater(final DefaultListModel defListModel) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - showSuggestion(items); + showSuggestion(defListModel); } }); } - protected void showSuggestion(CompletionCandidate[] items) { - hideSuggestion(); + protected void showSuggestion(DefaultListModel defListModel) { + if(defListModel.size() == 0){ + return; + } + + hideSuggestion(); final int position = getCaretPosition(); Point location = new Point(); try { @@ -594,6 +659,7 @@ public class TextArea extends JEditTextArea { e2.printStackTrace(); return; } + String text = getText(); int start = Math.max(0, position - 1); while (start > 0) { @@ -604,14 +670,17 @@ public class TextArea extends JEditTextArea { break; } } + if (start > position) { return; } + final String subWord = text.substring(start, position); if (subWord.length() < 2) { return; } - suggestion = new CompletionPanel(this, position, subWord, items, location); + + suggestion = new CompletionPanel(this, position, subWord, defListModel, location); // requestFocusInWindow(); SwingUtilities.invokeLater(new Runnable() { @Override @@ -623,7 +692,7 @@ public class TextArea extends JEditTextArea { private void hideSuggestion() { if (suggestion != null) { - suggestion.hide(); + suggestion.hideSuggestion(); } }