Mercurial > hg > RemoteEditor > Eclipse
view src/remoteeditor/editors/RemoteEditor.java @ 19:cc68a00f9850
*** empty log message ***
author | pin |
---|---|
date | Tue, 31 Oct 2006 16:30:54 +0900 |
parents | e87cae12907e |
children | 8b58e6bb09c1 |
line wrap: on
line source
package remoteeditor.editors; import java.io.IOException; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextListener; import org.eclipse.jface.text.TextEvent; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.editors.text.TextEditor; import remoteeditor.network.REP; import remoteeditor.network.RSocketEvent; import remoteeditor.network.RSocketListener; public class RemoteEditor extends TextEditor implements ITextListener, RSocketListener{ private ISourceViewer viewer; private IDocument document; REP rep; private int textOffset; public RemoteEditor() throws Exception { super(); rep = new REP(); rep.addSocketListener(this); } public void createPartControl(Composite parent) { super.createPartControl(parent); viewer = getSourceViewer(); viewer.addTextListener(this); document = viewer.getDocument(); } public void dispose() { rep.dispose(); super.dispose(); } public void textChanged(TextEvent event) { String replacedText = event.getReplacedText(); String inputText = event.getText(); // ページ先頭からの文字数(改行を含む)による座標 textOffset = event.getOffset(); System.out.println("replace = " + replacedText); System.out.println("input = " + inputText + " : " + inputText.length()); int line = 0; int offset; int length = 0; String lineText = null; try { line = document.getNumberOfLines(0, textOffset); // lineno を取得してます。 offset = document.getLineOffset(line-1); length = document.getLineLength(line-1); lineText = document.get(offset, length); } catch (BadLocationException e1) { e1.printStackTrace(); } if(inputText.contains("\n")){ try { rep.insert(line+1, length, "\n"); //insert, delete, replace を 行数で判断 } catch (Exception e) { e.printStackTrace(); } }else if(inputText.length() != 0){ try { rep.replace(line, length, lineText); } catch (IOException e) { e.printStackTrace(); } }else if(!replacedText.equals("\n")){ try { rep.replace(line, length, lineText); } catch (IOException e) { e.printStackTrace(); } }else { try { rep.delete(line+1, length, "\n"); } catch (IOException e) { e.printStackTrace(); } } } public void packetReceived(RSocketEvent evt) { final int offset = evt.getLineNo(); final int length = evt.getLength(); final String text = evt.getText(); System.out.println(offset + " : " + length); if(evt.getCmd() == REP.REP_INSERT_CMD){ viewer.getTextWidget().getDisplay().syncExec(new Runnable() { public void run() { try { document.replace(offset, 0, text); } catch (BadLocationException e) { e.printStackTrace(); } } }); } } }