package tk.eclipse.plugin.htmleditor.views; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextSelection; import tk.eclipse.plugin.htmleditor.HTMLPlugin; import tk.eclipse.plugin.htmleditor.editors.HTMLSourceEditor; /** * A default implementation of IPaletteItem. * This palette item inserts simple text. */ public class DefaultPaletteItem implements IPaletteItem { private String _name; private ImageDescriptor _image; private String _content; /** * The constructor. * * @param name item name * @param image icon * @param content insert text */ public DefaultPaletteItem(String name, ImageDescriptor image, String content) { _name = name; _image = image; _content = content; } public ImageDescriptor getImageDescriptor() { return _image; } public String getLabel() { return _name; } public String getContent() { return this._content; } public void execute(HTMLSourceEditor editor) { IDocument doc = editor.getDocumentProvider().getDocument(editor.getEditorInput()); ITextSelection sel = (ITextSelection) editor.getSelectionProvider().getSelection(); try { String content; int explicitCursorOffset = _content.indexOf("${cursor}"); if (explicitCursorOffset != -1) { content = _content.substring(0, explicitCursorOffset) + _content.substring(explicitCursorOffset + "${cursor}".length()); } else { content = _content; } int defaultCursorOffset = content.length(); if (content.indexOf("></") != -1) { defaultCursorOffset = content.indexOf("></") + 1; } int cursorOffset; int variableOffset = content.indexOf("${selection}"); if (variableOffset != -1) { doc.replace(sel.getOffset(), 0, content.substring(0, variableOffset)); doc.replace(sel.getOffset() + variableOffset + sel.getLength(), 0, content.substring(variableOffset + "${selection}".length())); if (explicitCursorOffset == -1) { cursorOffset = defaultCursorOffset; } else if (explicitCursorOffset < variableOffset) { cursorOffset = explicitCursorOffset; } else { cursorOffset = explicitCursorOffset + sel.getLength() - "${selection}".length(); } } else { doc.replace(sel.getOffset(), sel.getLength(), content); if (explicitCursorOffset == -1) { cursorOffset = defaultCursorOffset; } else { cursorOffset = explicitCursorOffset; } } editor.selectAndReveal(sel.getOffset() + cursorOffset, 0); } catch (Exception ex) { HTMLPlugin.logException(ex); } } }