Update of /cvsroot/groupscheme/groupscheme/src/grewpedit/src/plugins/jedit In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv2984/plugins/jedit Modified Files: JEditGroupEditor.java build.xml Added Files: GroupSessionPlugin.java JEBufferListener.java JEditGDocument.java Log Message: finished the basic plugin for jEdit without cursor awareness --- NEW FILE: GroupSessionPlugin.java --- import org.gjt.sp.jedit.EBPlugin; import org.gjt.sp.jedit.View; import org.gjt.sp.jedit.Buffer; import java.util.Vector; import javax.swing.JScrollPane; public class GroupSessionPlugin extends EBPlugin { // EditPlugin public static final String NAME = "groupsession"; //public static final String MENU = "quicknotepad.menu"; //public static final String PROPERTY_PREFIX = "plugin.QuickNotepadPlugin."; public static final String OPTION_PREFIX = "options.groupsession."; public static final Vector<JEditGroupSession> sessions = new Vector<JEditGroupSession>(); public void start() { System.err.println("GROUPSESIONPLUGIN - START() - "+this); } public void stop() { System.err.println("GROUPSESIONPLUGIN - STOP() - "+this); // for (GroupSession ge : sessions) // ge.disconnect(); } public static JScrollPane/*JEditGroupSession*/ getGroupSession(View view, String position) { JEditGroupSession gs = getSession(view); if (gs == null) { JEditGroupEditor ge = new JEditGroupEditor(view.getEditPane().getTextArea(), "localhost", 14000); gs = new JEditGroupSession(ge, view, position); sessions.add(gs); } return new JScrollPane(gs); } private static JEditGroupSession getSession(View view) { Buffer buf = view.getBuffer(); for (JEditGroupSession e : sessions) { if (buf.equals(e.getBuffer())) return e; } return null; } /* public static GroupJEditor getGroupSession(View view, String position) { GroupJEditor ge = getSession(view); if (ge == null) { ge = new GroupJEditor(view, position); sessions.add(ge); } return ge; } private static GroupJEditor getSession(View view) { Buffer buf = view.getBuffer(); for (GroupJEditor e : sessions) { if (buf.equals(e.getBuffer())) return e; } return null; } */ } --- NEW FILE: JEBufferListener.java --- import xdocument.*; import org.gjt.sp.jedit.buffer.BufferAdapter; import org.gjt.sp.jedit.buffer.JEditBuffer; /** * Designed to communicate with other clients to maintain a * shared {@link GDocument} state for a group of client's. **/ public class JEBufferListener<C extends GDocumentClient> extends BufferAdapter { C client; public JEBufferListener(C client) { this.client = client; } /** * Called when text is inserted into the buffer. **/ public void contentInserted(JEditBuffer buffer, int startLine, int offset, int numLines, int length) { try { String str = buffer.getText(offset, length); TextEdit edit = new TextEdit(offset, str, length, null); client.insertUpdate(edit); } catch (Exception ex) { util.Util.error("Could not get the String to insert.", ex, null); return; } } /** * Called when text is removed from the buffer. **/ public void contentRemoved(JEditBuffer buffer, int startLine, int offset, int numLines, int length) { client.removeUpdate(new TextEdit(offset, length, null)); } /** * Called to notify the text area that the buffer has been reloaded. ** public void bufferLoaded(JEditBuffer buffer) { } /** * Called to notify the text area that folds need to be collapsed if the "collapseFolds" property is set. ** public void foldHandlerChanged(JEditBuffer buffer) { } /** * Called when line fold levels change. ** public void foldLevelChanged(JEditBuffer buffer, int startLine, int endLine) { } /** * Called when text is about to be removed from the buffer, but is still present. ** public void preContentRemoved(JEditBuffer buffer, int startLine, int offset, int numLines, int length) { } /** * Called after an undo or compound edit has finished. ** public void transactionComplete(JEditBuffer buffer) { } */ } --- NEW FILE: JEditGDocument.java --- import xdocument.*; import util.Util; import org.gjt.sp.jedit.textarea.JEditTextArea; import org.gjt.sp.jedit.buffer.JEditBuffer; import org.gjt.sp.jedit.buffer.BufferListener; import javax.swing.SwingUtilities; import javax.swing.text.*; import java.awt.Color; /** * The class that represents a group document and servers as a bi-directional * local/remote client edit facilitator. **/ public class JEditGDocument<C extends GDocumentClient, //E extends TextEdit<String>> E extends TextEdit<? extends GroupCursor.Cursor>> implements GDocument<C, E> { C client; private JEditTextArea tarea; private JEditBuffer buff; private BufferListener listener; private HighlightCursor<Integer, Color> gcursor; private boolean saved, forwarding; public JEditGDocument(C client, JEditTextArea tarea, BufferListener listener){ this.client = client; this.tarea = tarea; this.listener = listener; this.gcursor = null; buff = tarea.getBuffer(); buff.addBufferListener(listener); saved = true; client.setDocument(this); } public boolean isSaved() { return saved; } public void setSaved(boolean b) { saved = b; } public void setCursor(HighlightCursor<Integer, Color> c) { gcursor = c; } ////////////// GDocument Interface Methods /////////////////// public C getClient() { return client; } public void setForwardingUpdates(boolean toClient) { forwarding = toClient; } public boolean isForwardingUpdates() { return forwarding; } public void connectionClosed() { buff.removeBufferListener(listener); tarea.setBackground(new Color(175, 175, 175)); // if (gcursor != null) // gcursor.clear(); // Util.warning("Lost Group Connection! ", tarea); } public int getLength() { return buff.getLength(); } public void insertUpdate(E e) throws Exception { synchronized(buff) { if (!SwingUtilities.isEventDispatchThread()) System.err.println("NOT IN THE EVENT QUEUE!!!"); buff.removeBufferListener(listener); //buff.insertString(e.offset, e.text, null); buff.insert(e.offset, e.text); cursorUpdate(e.details); buff.addBufferListener(listener); } } public void removeUpdate(E e) throws Exception { synchronized(buff) { if (!SwingUtilities.isEventDispatchThread()) System.err.println("NOT IN THE EVENT QUEUE!!!"); buff.removeBufferListener(listener); buff.remove(e.offset, e.length); cursorUpdate(e.details); buff.addBufferListener(listener); } } public void changedUpdate(E e) throws Exception { synchronized(buff) { if (!SwingUtilities.isEventDispatchThread()) System.err.println("NOT IN THE EVENT QUEUE!!!"); buff.removeBufferListener(listener); //buff.setCharacterAttributes(e.offset, e.length, null, false); cursorUpdate(e.details); buff.addBufferListener(listener); } } public void cursorUpdate(GroupCursor.Cursor cursor) throws Exception { //System.err.println("cursor "+cursor); if (gcursor != null && cursor != null) gcursor.cursorUpdate((GroupCursor.Cursor<Integer,Color>)cursor); } public GroupCursor.Cursor getMyCursor(int pos) { if (gcursor != null) { gcursor.moveMyCursor(pos); return gcursor.getMyCursor(); } return null; } } Index: JEditGroupEditor.java =================================================================== RCS file: /cvsroot/groupscheme/groupscheme/src/grewpedit/src/plugins/jedit/JEditGroupEditor.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- JEditGroupEditor.java 7 May 2007 00:05:23 -0000 1.1 +++ JEditGroupEditor.java 7 May 2007 14:50:51 -0000 1.2 @@ -1,15 +1,19 @@ +// From GrewpEdit import plugins.*; -import xdocument.GroupCursor; import xdocument.*; import xdocument.mset.*; -import widget.*; +import widget.ChatPanel; +import widget.GroupList; import net.*; import event.*; import util.*; +// From jEdit +import org.gjt.sp.jedit.textarea.JEditTextArea; + +// From Java import javax.swing.*; import javax.swing.text.*; -import javax.swing.event.DocumentEvent; import java.awt.Color; import java.io.File; @@ -18,21 +22,21 @@ GroupList members; ChatPanel chat; JFileChooser fc = new JFileChooser(); - JComponent editor; + JEditTextArea editor; String host, localhost; int port; GroupClient gc = null; GroupServer gs = null; - MSETDocClient<JavaGDocument, DocumentEvent> client; - JavaGDocument<MSETDocClient, TextEdit<GroupCursor.Cursor>> gdoc; + MSETGDocumentClient<JEditGDocument, TextEdit> client; + JEditGDocument<MSETGDocumentClient, TextEdit<GroupCursor.Cursor>> gdoc; HighlightCursor<Integer, Color> gcursor = null; String[] miscActs = new String[] { "Refresh Cursors", "Save Chat", "Save NodeView", "Save SubNodeView" }; - public JEditGroupEditor(JComponent editor, String host, int port) { + public JEditGroupEditor(JEditTextArea editor, String host, int port) { this.editor = editor; this.host = host; this.port = port; @@ -40,13 +44,13 @@ } public Object clearState() { -// String state = editor.getText(); -// editor.setText(""); - return null;//state; + String state = editor.getText(); + editor.setText(""); + return state; } public void setState(Object o) { - //editor.setText(o.toString()); + editor.setText(o.toString()); } public JComponent getEditor() { return editor; } @@ -88,11 +92,11 @@ gc = new GroupClient(user, group, host, port, "", ""); - client = null;//new MSETDocClient<JavaGDocument, DocumentEvent>(gc); - gdoc = null;/*new JavaGDocument<MSETDocClient, TextEdit<GroupCursor.Cursor>> - (client,editor);*/ + client = new MSETGDocumentClient<JEditGDocument, TextEdit>(gc); + gdoc = new JEditGDocument<MSETGDocumentClient,TextEdit<GroupCursor.Cursor>> + (client, editor, new JEBufferListener(client)); - gc.connect();//client.connect(); + client.connect(); Color cid = Util.randomColor(); // gcursor = new HighlightCursor<Integer, Color> // (new Integer(gc.getID()), cid, 5, editor); @@ -134,27 +138,12 @@ else if (act.equals("Save NodeView") && client != null) { File f = FileIO.saveAs(fc, fc.getSelectedFile(), chat); if (f != null) - ;//Graphviz.save(Graphviz.TREE_VIEW, f, client.getMSET()); + Graphviz.save(Graphviz.TREE_VIEW, f, client.getMSET()); } else if (act.equals("Save SubNodeView") && client != null) { File f = FileIO.saveAs(fc, fc.getSelectedFile(), chat); if (f != null) - ;//Graphviz.save(Graphviz.SUBNODE_VIEW, f, client.getMSET()); + Graphviz.save(Graphviz.SUBNODE_VIEW, f, client.getMSET()); } } - - - public static void main(String[] args) { - JFrame f = new JFrame("test"); - JTextPane tp = new JTextPane(); - f.getContentPane().add(tp); - f.setSize(350, 350); - f.setVisible(true); - JFrame f2 = new JFrame("JEdit / GrewpEdit"); - GroupSession con = - new GroupSession(new JEditGroupEditor(tp, "localhost", 14000)); - f2.add(con); - f2.pack(); - f2.setVisible(true); - } } Index: build.xml =================================================================== RCS file: /cvsroot/groupscheme/groupscheme/src/grewpedit/src/plugins/jedit/build.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- build.xml 7 May 2007 00:05:23 -0000 1.1 +++ build.xml 7 May 2007 14:50:51 -0000 1.2 @@ -4,8 +4,7 @@ <property file="build.properties"/> - <!-- property name="jedit.install.dir" value="../.."/ --> - <property name="jedit.install.dir" value="/usr/share/jedit/"/> + <property name="jedit.install.dir" value="/usr/share/jEdit/"/> <property name="grewpedit.class.path" value="../../../class/"/> <property name="jar.name" value="GroupSession.jar"/> |