1 19 20 package org.netbeans.modules.xml.schema.completion; 21 22 import java.awt.Color ; 23 import java.awt.Component ; 24 import java.awt.Font ; 25 import java.awt.Graphics ; 26 import java.awt.event.KeyEvent ; 27 import javax.swing.text.*; 28 import javax.swing.Icon ; 29 import javax.xml.XMLConstants ; 30 import org.netbeans.editor.BaseDocument; 31 import org.netbeans.api.editor.completion.Completion; 32 import org.netbeans.spi.editor.completion.CompletionItem; 33 import org.netbeans.spi.editor.completion.CompletionTask; 34 import org.netbeans.modules.xml.axi.AXIComponent; 35 import org.netbeans.modules.xml.schema.completion.spi.CompletionContext; 36 import org.netbeans.modules.xml.schema.completion.util.CompletionContextImpl; 37 import org.netbeans.modules.xml.schema.completion.util.CompletionUtil; 38 import org.netbeans.modules.xml.text.syntax.dom.StartTag; 39 import org.netbeans.spi.editor.completion.support.AsyncCompletionTask; 40 41 45 public abstract class CompletionResultItem implements CompletionItem { 46 47 50 public CompletionResultItem(AXIComponent component, CompletionContext context) { 51 this.context = (CompletionContextImpl)context; 52 this.axiComponent = component; 53 this.typedChars = context.getTypedChars(); 54 } 55 56 Icon getIcon(){ 57 return icon; 58 } 59 60 public AXIComponent getAXIComponent() { 61 return axiComponent; 62 } 63 64 68 public abstract String getItemText(); 69 70 73 public String getReplacementText(){ 74 return replacementText; 75 } 76 77 public String toString() { 78 return getItemText(); 79 } 80 81 Color getPaintColor() { return Color.BLUE; } 82 83 90 private boolean replaceText( JTextComponent component, String text, int offset, int len) { 91 BaseDocument doc = (BaseDocument)component.getDocument(); 92 doc.atomicLock(); 93 try { 94 doc.remove( offset, len ); 95 doc.insertString( offset, text, null); 96 StartTag docRoot = context.getDocRoot(); 97 String prefix = CompletionUtil.getPrefixFromTag(text); 98 if(prefix == null) 99 return true; 100 101 if(!context.isPrefixBeingUsed(prefix)) { 103 String tns = context.getTargetNamespaceByPrefix(prefix); 104 doc.insertString( docRoot.getElementOffset() + 105 docRoot.getElementLength()-1, " "+ 106 XMLConstants.XMLNS_ATTRIBUTE+":"+prefix+"=\"" + 107 tns + "\"", null); 108 } 109 } catch( BadLocationException exc ) { 113 return false; } finally { 115 doc.atomicUnlock(); 116 } 117 return true; 118 } 119 120 public CompletionTask createDocumentationTask() { 124 return new AsyncCompletionTask(new DocumentationQuery(this)); 125 } 126 127 public CompletionTask createToolTipTask() { 128 return new AsyncCompletionTask(new ToolTipQuery(this)); 129 } 130 131 public void defaultAction(JTextComponent component) { 132 int charsToRemove = (typedChars==null)?0:typedChars.length(); 133 int substOffset = component.getCaretPosition() - charsToRemove; 134 135 if(!shift) Completion.get().hideAll(); 136 replaceText(component, getReplacementText(), substOffset, charsToRemove); 137 } 138 139 public CharSequence getInsertPrefix() { 140 return getItemText(); 141 } 142 143 public abstract Component getPaintComponent(boolean isSelected); 144 145 public int getPreferredWidth(Graphics g, Font defaultFont) { 146 Component renderComponent = getPaintComponent(false); 147 return renderComponent.getPreferredSize().width; 148 } 149 150 public int getSortPriority() { 151 return 0; 152 } 153 154 public CharSequence getSortText() { 155 return getItemText(); 156 } 157 158 public boolean instantSubstitution(JTextComponent component) { 159 defaultAction(component); 160 return true; 161 } 162 163 public void processKeyEvent(KeyEvent e) { 164 shift = (e.getKeyCode() == KeyEvent.VK_ENTER && e.getID() == KeyEvent.KEY_PRESSED && e.isShiftDown()); 165 } 166 167 public void render(Graphics g, Font defaultFont, 168 Color defaultColor, Color backgroundColor, 169 int width, int height, boolean selected) { 170 Component renderComponent = getPaintComponent(selected); 171 renderComponent.setFont(defaultFont); 172 renderComponent.setForeground(defaultColor); 173 renderComponent.setBackground(backgroundColor); 174 renderComponent.setBounds(0, 0, width, height); 175 ((CompletionPaintComponent)renderComponent).paintComponent(g); 176 } 177 178 protected boolean shift = false; 179 protected String typedChars; 180 protected String replacementText; 181 protected String displayText; 182 protected javax.swing.Icon icon; 183 protected CompletionPaintComponent component; 184 protected AXIComponent axiComponent; 185 private CompletionContextImpl context; 186 187 private static Color foreground = Color.black; 188 private static Color background = Color.white; 189 private static Color selectionForeground = Color.black; 190 private static Color selectionBackground = new Color (204, 204, 255); 191 private static final int XML_ITEMS_SORT_PRIORITY = 20; 192 193 public static final String ICON_ELEMENT = "element.png"; public static final String ICON_ATTRIBUTE = "attribute.png"; public static final String ICON_LOCATION = "/org/netbeans/modules/xml/schema/completion/resources/"; } 197 | Popular Tags |