[Pydev-cvs] org.python.pydev/src/org/python/pydev/editor/codecompletion PyCompletionProposalExtens
Brought to you by:
fabioz
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2518/src/org/python/pydev/editor/codecompletion Modified Files: PyCompletionPresentationUpdater.java PyLinkedModeCompletionProposal.java Added Files: PyCompletionProposalExtension2.java Log Message: Index: PyCompletionPresentationUpdater.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyCompletionPresentationUpdater.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** PyCompletionPresentationUpdater.java 14 Jul 2006 01:48:35 -0000 1.2 --- PyCompletionPresentationUpdater.java 15 Jul 2006 17:54:37 -0000 1.3 *************** *** 19,23 **** public class PyCompletionPresentationUpdater { - private PyLinkedModeCompletionProposal proposal; private StyleRange fRememberedStyleRange; --- 19,22 ---- *************** *** 31,36 **** ! public PyCompletionPresentationUpdater(PyLinkedModeCompletionProposal proposal) { ! this.proposal = proposal; } --- 30,34 ---- ! public PyCompletionPresentationUpdater() { } --- NEW FILE: PyCompletionProposalExtension2.java --- /* * Created on Jul 15, 2006 * @author Fabio */ package org.python.pydev.editor.codecompletion; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.DocumentEvent; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.contentassist.ICompletionProposalExtension2; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Image; import org.python.pydev.core.docutils.PySelection; import org.python.pydev.plugin.PydevPlugin; public abstract class PyCompletionProposalExtension2 extends PyCompletionProposal implements ICompletionProposalExtension2{ protected PyCompletionPresentationUpdater presentationUpdater; protected int fLen; protected boolean fLastIsPar; public PyCompletionProposalExtension2(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, int priority, int onApplyAction, String args) { super(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo, priority, onApplyAction, args); presentationUpdater = new PyCompletionPresentationUpdater(); } /** * Called when Ctrl is selected during the completions * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension2#selected(org.eclipse.jface.text.ITextViewer, boolean) */ public void selected(ITextViewer viewer, boolean smartToggle) { if(smartToggle){ StyledText text= viewer.getTextWidget(); if (text == null || text.isDisposed()) return; int widgetCaret= text.getCaretOffset(); IDocument document = viewer.getDocument(); int finalOffset = widgetCaret; try { if(finalOffset >= document.getLength()){ unselected(viewer); return; } char c; do{ c = document.getChar(finalOffset); finalOffset++; }while(isValidChar(c) && finalOffset < document.getLength()); if(c == '('){ fLastIsPar = true; }else{ fLastIsPar = false; } if(!isValidChar(c)){ finalOffset--; } this.fLen = finalOffset-widgetCaret; this.presentationUpdater.updateStyle(viewer, widgetCaret, this.fLen); } catch (BadLocationException e) { PydevPlugin.log(e); } }else{ unselected(viewer); } } /** * @param c * @return */ private boolean isValidChar(char c) { return c != ' ' && c != '(' && c!= '{' && c != '[' && c != '"' && c!= '.' && c!= '\n' && c != '\n' && c != ')' && c != ']' && c != '}'; } public void unselected(ITextViewer viewer) { this.presentationUpdater.repairPresentation(viewer); } public boolean validate(IDocument document, int offset, DocumentEvent event) { String[] strs = PySelection.getActivationTokenAndQual(document, offset, false); String qualifier = strs[1].toLowerCase(); String displayString = getDisplayString().toLowerCase(); if(displayString.startsWith(qualifier)){ return true; } return false; } } Index: PyLinkedModeCompletionProposal.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyLinkedModeCompletionProposal.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** PyLinkedModeCompletionProposal.java 15 Jul 2006 17:02:18 -0000 1.7 --- PyLinkedModeCompletionProposal.java 15 Jul 2006 17:54:37 -0000 1.8 *************** *** 9,17 **** import org.eclipse.jface.text.BadLocationException; - import org.eclipse.jface.text.DocumentEvent; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.contentassist.ICompletionProposal; - import org.eclipse.jface.text.contentassist.ICompletionProposalExtension2; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.jface.text.link.LinkedModeModel; --- 9,15 ---- *************** *** 20,41 **** import org.eclipse.jface.text.link.ProposalPosition; import org.eclipse.swt.SWT; - import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.texteditor.link.EditorLinkedModeUI; - import org.python.pydev.core.docutils.PySelection; import org.python.pydev.core.uiutils.RunInUiThread; import org.python.pydev.plugin.PydevPlugin; ! public class PyLinkedModeCompletionProposal extends PyCompletionProposal implements ICompletionProposalExtension2{ private int firstParameterLen = 0; - private PyCompletionPresentationUpdater presentationUpdater; - private int fLen; - private boolean fLastIsPar; public PyLinkedModeCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, int priority, int onApplyAction, String args) { super(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo, priority, onApplyAction, args); - presentationUpdater = new PyCompletionPresentationUpdater(this); } --- 18,33 ---- import org.eclipse.jface.text.link.ProposalPosition; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.texteditor.link.EditorLinkedModeUI; import org.python.pydev.core.uiutils.RunInUiThread; import org.python.pydev.plugin.PydevPlugin; ! public class PyLinkedModeCompletionProposal extends PyCompletionProposalExtension2{ private int firstParameterLen = 0; public PyLinkedModeCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, int priority, int onApplyAction, String args) { super(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo, priority, onApplyAction, args); } *************** *** 117,120 **** --- 109,113 ---- PydevPlugin.log(e); } + return; } *************** *** 187,261 **** - /** - * Called when Ctrl is selected during the completions - * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension2#selected(org.eclipse.jface.text.ITextViewer, boolean) - */ - public void selected(ITextViewer viewer, boolean smartToggle) { - if(smartToggle){ - StyledText text= viewer.getTextWidget(); - if (text == null || text.isDisposed()) - return; - - int widgetCaret= text.getCaretOffset(); - IDocument document = viewer.getDocument(); - int finalOffset = widgetCaret; - - try { - if(finalOffset >= document.getLength()){ - unselected(viewer); - return; - } - char c; - do{ - c = document.getChar(finalOffset); - finalOffset++; - }while(isValidChar(c) && finalOffset < document.getLength()); - - if(c == '('){ - fLastIsPar = true; - }else{ - fLastIsPar = false; - } - - if(!isValidChar(c)){ - finalOffset--; - } - - this.fLen = finalOffset-widgetCaret; - this.presentationUpdater.updateStyle(viewer, widgetCaret, this.fLen); - } catch (BadLocationException e) { - PydevPlugin.log(e); - } - - }else{ - unselected(viewer); - } - } - - /** - * @param c - * @return - */ - private boolean isValidChar(char c) { - return c != ' ' && c != '(' && c!= '{' && c != '[' && c != '"' && c!= '.' && c!= '\n' && c != '\n' && - c != ')' && c != ']' && c != '}'; - } - - public void unselected(ITextViewer viewer) { - this.presentationUpdater.repairPresentation(viewer); - } - - public boolean validate(IDocument document, int offset, DocumentEvent event) { - String[] strs = PySelection.getActivationTokenAndQual(document, offset, false); - - String qualifier = strs[1].toLowerCase(); - - String displayString = getDisplayString().toLowerCase(); - if(displayString.startsWith(qualifier)){ - return true; - } - - return false; - } - } --- 180,182 ---- |