view src/remoteeditor/editors/RemoteEditor.java @ 11:b3cff9bd2cbc

*** empty log message ***
author pin
date Mon, 23 Oct 2006 00:19:15 +0900
parents 4bc1dad743f0
children 4e88130303cc
line wrap: on
line source

package remoteeditor.editors;

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);
		
		try {
			System.out.println(document.getNumberOfLines(0, textOffset));
		} catch (BadLocationException e1) {
			e1.printStackTrace();
		}
		
		try {
			rep.insert(event.getOffset(), event.getLength(), inputText);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}


	public void packetReceived(RSocketEvent evt) {
			final int offset = evt.getOffset();
			final int length = evt.getLength();
			final String text = evt.getText();
			System.out.println(offset + " : " + length);
			if(textOffset != offset){
			viewer.getTextWidget().getDisplay().syncExec(new Runnable() {
				public void run() {
					try {
						document.replace(offset, 0, text);
					} catch (BadLocationException e) {
						e.printStackTrace();
					}
				}
		    });
			}
	}


}