[brailleblaster] 2 new revisions pushed by brandon....@xxxxxxxxx on 2014-12-30 20:13 GMT

  • From: brailleblaster@xxxxxxxxxxxxxx
  • To: brailleblaster@xxxxxxxxxxxxx
  • Date: Tue, 30 Dec 2014 20:13:07 +0000

2 new revisions:

Revision: be06b8d3c028
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Tue Dec 30 20:12:11 2014 UTC
Log:      Added class to record typing in view
https://code.google.com/p/brailleblaster/source/detail?r=be06b8d3c028

Revision: aff66dc780e8
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Tue Dec 30 20:13:40 2014 UTC
Log:      Added undo/redo when typing
https://code.google.com/p/brailleblaster/source/detail?r=aff66dc780e8

==============================================================================
Revision: be06b8d3c028
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Tue Dec 30 20:12:11 2014 UTC
Log:      Added class to record typing in view
https://code.google.com/p/brailleblaster/source/detail?r=be06b8d3c028

Added:
/src/main/org/brailleblaster/perspectives/braille/views/wp/formatters/EditRecorder.java

=======================================
--- /dev/null
+++ /src/main/org/brailleblaster/perspectives/braille/views/wp/formatters/EditRecorder.java Tue Dec 30 20:12:11 2014 UTC
@@ -0,0 +1,91 @@
+package org.brailleblaster.perspectives.braille.views.wp.formatters;
+
+import org.brailleblaster.perspectives.braille.Manager;
+import org.brailleblaster.perspectives.braille.eventQueue.EventFrame;
+import org.brailleblaster.perspectives.braille.eventQueue.EventTypes;
+import org.brailleblaster.perspectives.braille.eventQueue.ViewEvent;
+import org.brailleblaster.perspectives.braille.messages.Message;
+import org.brailleblaster.perspectives.braille.views.wp.TextView;
+import org.eclipse.swt.custom.ExtendedModifyEvent;
+
+public class EditRecorder {
+
+       EventFrame frame;
+       String currentLine;
+       Manager manager;
+       TextView text;
+
+       public EditRecorder(Manager manager, TextView text) {
+               this.manager = manager;
+               this.text = text;
+       }
+
+       public void recordEditEvent(Message m){
+               EventFrame frame = new EventFrame();
+               ExtendedModifyEvent e = 
(ExtendedModifyEvent)m.getValue("event");
+
+ int lineStart = text.view.getOffsetAtLine(text.view.getLineAtOffset(e.start));
+               int offset = e.start - lineStart;
+               String lineText = 
text.view.getLine(text.view.getLineAtOffset(e.start));
+               int index = offset;
+               while(index < lineText.length() && lineText.charAt(index) != ' 
')
+                       index++;
+
+               int wordEnd = index;
+               index = offset;
+               while(index > 0 && lineText.charAt(index) != ' ')
+                       index--;
+
+               int wordStart = index;
+ String recordedText = lineText.substring(wordStart, offset) + e.replacedText + lineText.substring(offset + e.length, wordEnd);
+               wordStart = lineStart + wordStart;
+               wordEnd = lineStart + wordEnd;
+ frame.addEvent(new ViewEvent(EventTypes.Edit, wordStart, wordEnd, 0, 0, recordedText));
+               manager.addUndoEvent(frame);
+       }
+
+       public void recordDeleteEvent(Message m){
+               EventFrame frame = new EventFrame();
+               ExtendedModifyEvent e = 
(ExtendedModifyEvent)m.getValue("event");
+
+ int lineStart = text.view.getOffsetAtLine(text.view.getLineAtOffset(e.start));
+               int offset = e.start - lineStart;
+               String lineText = currentLine;
+               int index = offset;
+ while(index < lineText.length() && (lineText.charAt(index) != ' ' || index < (offset + e.replacedText.length())))
+                       index++;
+
+               int wordEnd = index;
+               index = offset;
+               while(index > 0 && lineText.charAt(index) != ' ')
+                       index--;
+
+               int wordStart = index;
+ String recordedText = lineText.substring(wordStart, offset) + lineText.substring(offset + e.length, wordEnd);
+               wordStart = lineStart + wordStart;
+               wordEnd = lineStart + wordEnd - e.replacedText.length();
+ frame.addEvent(new ViewEvent(EventTypes.Edit, wordStart, wordEnd, 0, 0, recordedText));
+               manager.addUndoEvent(frame);
+       }
+
+       public void recordLine(String currentLine){
+               this.currentLine = currentLine;
+       }
+
+       public void recordLine(int start, int end){
+               int firstLine = text.view.getLineAtOffset(start);
+               int lastLine = text.view.getLineAtOffset(end);
+               currentLine = text.view.getLine(firstLine);
+               if(firstLine != lastLine){
+                       do{
+                               firstLine++;
+                               this.currentLine += "\n";
+                               this.currentLine += 
text.view.getLine(firstLine);
+                       } while(firstLine <= lastLine);
+               }
+       }
+
+       public String getCurrentLine(){
+               return currentLine;
+       }
+}

==============================================================================
Revision: aff66dc780e8
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Tue Dec 30 20:13:40 2014 UTC
Log:      Added undo/redo when typing
https://code.google.com/p/brailleblaster/source/detail?r=aff66dc780e8

Modified:
 /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java
 /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java
 /src/main/org/brailleblaster/perspectives/braille/eventQueue/ViewEvent.java
 /src/main/org/brailleblaster/perspectives/braille/messages/BBEvent.java
 /src/main/org/brailleblaster/perspectives/braille/messages/Message.java
/src/main/org/brailleblaster/perspectives/braille/stylers/TextUpdateHandler.java /src/main/org/brailleblaster/perspectives/braille/stylers/WhiteSpaceHandler.java
 /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java

=======================================
--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java Tue Dec 23 16:39:37 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java Tue Dec 30 20:13:40 2014 UTC
@@ -24,6 +24,10 @@
                for(int i = 0; i < frame.size(); i++){
                        Event event = frame.get(i);
                        switch(event.eventType){
+                               case Edit:
+ TextUpdateHandler editUpdater = new TextUpdateHandler(manager, vi, list);
+                                       editUpdater.redoEdit(frame);
+                                       break;
                                case Update:
                                        TextUpdateHandler tuh = new 
TextUpdateHandler(manager, vi, list);
                                        tuh.redoText(frame);
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Tue Dec 23 16:39:37 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Tue Dec 30 20:13:40 2014 UTC
@@ -47,6 +47,9 @@
                                        WhiteSpaceHandler wsh = new 
WhiteSpaceHandler(manager, list);
                                        wsh.UndoDelete(frame);
                                        break;
+                               case Edit:
+ TextUpdateHandler editHandler = new TextUpdateHandler(manager, vi, list);
+                                       editHandler.undoEdit(frame);
                                default:
                                        break;
                        }
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/ViewEvent.java Mon Dec 22 18:29:25 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/ViewEvent.java Tue Dec 30 20:13:40 2014 UTC
@@ -3,13 +3,25 @@
 public class ViewEvent extends Event{

        String text;
- public ViewEvent(EventTypes eventType, int textOffset, int brailleOffset, String text) {
+       int textEnd, brailleEnd;
+
+ public ViewEvent(EventTypes eventType, int textStart, int textEnd, int brailleOffset, int brailleEnd, String text) {

-               super(eventType, textOffset, brailleOffset);
+               super(eventType, textStart, brailleOffset);
                this.text = text;
+               this.textEnd = textEnd;
+               this.brailleEnd = brailleEnd;
        }

        public String getText(){
                return text;
        }
+
+       public int getTextEnd(){
+               return textEnd;
+       }
+
+       public int getBrailleEnd(){
+               return brailleEnd;
+       }
 }
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/messages/BBEvent.java Wed Dec 10 20:14:45 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/messages/BBEvent.java Tue Dec 30 20:13:40 2014 UTC
@@ -34,6 +34,7 @@
        INCREMENT,
        DECREMENT,
        WHITESPACE_DELETION,
+       EDIT,
        UPDATE,
        INSERT_NODE,
        REMOVE_NODE,
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/messages/Message.java Mon Dec 22 18:29:25 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/messages/Message.java Tue Dec 30 20:13:40 2014 UTC
@@ -35,6 +35,7 @@

import org.brailleblaster.perspectives.braille.document.BBSemanticsTable.Styles; import org.brailleblaster.perspectives.braille.mapping.elements.TextMapElement;
+import org.eclipse.swt.custom.ExtendedModifyEvent;

 import nu.xom.Text;

@@ -190,6 +191,13 @@
                m.put("isBoxline", isBoxline);
                return m;
        }
+
+       public static Message createEditEventMesag(ExtendedModifyEvent e){
+               Message m = new Message(BBEvent.EDIT);
+               m.put("event", e);
+
+               return m;
+       }

        public void put(String key, Object value){
                args.put(key, value);
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/TextUpdateHandler.java Mon Dec 22 15:26:49 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/TextUpdateHandler.java Tue Dec 30 20:13:40 2014 UTC
@@ -6,6 +6,7 @@
 import org.brailleblaster.perspectives.braille.eventQueue.EventFrame;
 import org.brailleblaster.perspectives.braille.eventQueue.EventTypes;
 import org.brailleblaster.perspectives.braille.eventQueue.ModelEvent;
+import org.brailleblaster.perspectives.braille.eventQueue.ViewEvent;
import org.brailleblaster.perspectives.braille.mapping.elements.TextMapElement;
 import org.brailleblaster.perspectives.braille.mapping.maps.MapList;
 import org.brailleblaster.perspectives.braille.messages.Message;
@@ -84,4 +85,39 @@

                return f;
        }
+
+       public void undoEdit(EventFrame f){
+               EventFrame frame = new EventFrame();
+               while(!f.empty() && 
f.peek().getEventType().equals(EventTypes.Edit)){
+                       ViewEvent ev = (ViewEvent)f.pop();
+                       text.view.setCaretOffset(ev.getTextOffset());
+
+                       int start = ev.getTextOffset();
+                       int end = ev.getTextOffset() + ev.getText().length();
+ //String replacedtext = text.view.getText(ev.getTextOffset(), ev.getTextOffset() + ev.getText().length()); + String replacedtext = text.view.getTextRange(ev.getTextOffset(), ev.getTextEnd() - ev.getTextOffset());
+
+ frame.addEvent(new ViewEvent(EventTypes.Edit, start, end, 0, 0, replacedtext)); + text.undoEdit(ev.getTextOffset(), ev.getTextEnd() - ev.getTextOffset(), ev.getText());
+               }
+
+               manager.addRedoEvent(frame);
+       }
+
+       public void redoEdit(EventFrame f){
+               EventFrame frame = new EventFrame();
+               while(!f.empty() && 
f.peek().getEventType().equals(EventTypes.Edit)){
+                       ViewEvent ev = (ViewEvent)f.pop();
+                       text.view.setCaretOffset(ev.getTextOffset());
+
+                       int start = ev.getTextOffset();
+                       int end =  ev.getTextOffset() + ev.getText().length();
+ String replacedText = text.view.getTextRange(ev.getTextOffset(), ev.getTextEnd() - ev.getTextOffset());
+
+ frame.addEvent(new ViewEvent(EventTypes.Edit, start, end, 0,0, replacedText)); + text.undoEdit(ev.getTextOffset(), ev.getTextEnd() - ev.getTextOffset(), ev.getText());
+               }
+
+               manager.addUndoEvent(frame);
+       }
 }
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/WhiteSpaceHandler.java Mon Dec 22 19:03:56 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/WhiteSpaceHandler.java Tue Dec 30 20:13:40 2014 UTC
@@ -56,7 +56,7 @@
                else
                        braille.removeWhitespace(0,  
(Integer)message.getValue("length"));

- eventFrame.addEvent(new ViewEvent(EventTypes.Whitespace, (Integer)message.getValue("offset"), brailleStart, (String)message.getValue("replacedText"))); + eventFrame.addEvent(new ViewEvent(EventTypes.Whitespace, (Integer)message.getValue("offset"), 0, brailleStart, 0,(String)message.getValue("replacedText")));
                manager.addUndoEvent(eventFrame);
        }

=======================================
--- /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Tue Dec 23 16:46:40 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Tue Dec 30 20:13:40 2014 UTC
@@ -48,6 +48,7 @@
 import org.brailleblaster.perspectives.braille.messages.Message;
 import org.brailleblaster.perspectives.braille.messages.Sender;
import org.brailleblaster.perspectives.braille.viewInitializer.ViewInitializer; +import org.brailleblaster.perspectives.braille.views.wp.formatters.EditRecorder; import org.brailleblaster.perspectives.braille.views.wp.formatters.WhiteSpaceManager;
 import org.brailleblaster.util.Notify;

@@ -105,13 +106,15 @@
        private EditMenu menu;

        private boolean multiSelected;
-
+       private EditRecorder editRecorder;
+
public TextView (Manager manager, SashForm sash, BBSemanticsTable table) {
                super (manager, sash, table);
                this.total = 0;
                this.spaceBeforeText = 0;
                this.spaceAfterText = 0;
                this.manager = manager;
+               this.editRecorder = new EditRecorder(manager, this);
                menu = new EditMenu(this, manager);
                multiSelected=false;
                readOnly = false;
@@ -141,6 +144,11 @@
                                oldCursorPosition = view.getCaretOffset();
                                currentChar = e.keyCode;

+                               if(selectionLength > 0)
+ editRecorder.recordLine(selectionStart, selectionStart + selectionLength);
+                               else
+ editRecorder.recordLine(view.getLine(view.getLineAtOffset(view.getCaretOffset())));
+
                                if(readOnly){
if((Character.isDigit(e.character) && !validEdit())|| (Character.isLetter(e.character) && !validEdit()) || e.keyCode == SWT.CR)
                                                e.doit = false;
@@ -296,7 +304,7 @@
                                if(!getLock()){
if(currentChar == SWT.ARROW_DOWN || currentChar == SWT.ARROW_LEFT || currentChar == SWT.ARROW_RIGHT || currentChar == SWT.ARROW_UP || currentChar == SWT.PAGE_DOWN || currentChar == SWT.PAGE_UP){
                                                if(e.caretOffset >= currentEnd || 
e.caretOffset < currentStart){
-                                                       if(textChanged == true){
+                                                       if(textChanged == true 
&& currentChanges != 0){
                                                                sendUpdate();
                                                        }

@@ -1134,10 +1142,12 @@
                                else if(e.start + e.replacedText.length() == 
currentEnd){
                                        changes -= e.replacedText.length();
                                        makeTextChange(changes);
+                                       recordEvent(e, true);
                                }
                                else {
                                        changes = e.length - selectionLength;
                                        makeTextChange(changes);
+                                       recordEvent(e, true);
                                }
                        }
                }
@@ -1149,6 +1159,7 @@
                                sendAdjustRangeMessage("start", currentStart - 
oldCursorPosition);

                        makeTextChange(changes);
+                       recordEvent(e, true);
                }

                checkStyleRange(range);
@@ -1174,8 +1185,10 @@
                        }
                        else if(oldCursorPosition > currentEnd)
                                deleteSpaceAndShift(view.getCaretOffset(), 
offset, e);
-                       else
+                       else{
                                makeTextChange(offset);
+                               recordEvent(e, false);
+                       }
                }
                else if(currentChar == SWT.DEL){
                        offset = -1;
@@ -1198,8 +1211,10 @@
                                deleteSpaceAndShift(view.getCaretOffset(), 
offset, e);
else if( (oldCursorPosition == currentEnd && nextStart == -1)|| (oldCursorPosition > currentEnd && (oldCursorPosition < nextStart || nextStart == -1)))
                                deleteSpaceAndShift(view.getCaretOffset(), 
offset, e);
-                       else
+                       else {
                                makeTextChange(offset);
+                               recordEvent(e, false);
+                       }
                }
                else {
                        offset = -1;
@@ -1207,8 +1222,10 @@
                                deleteSpaceAndShift(selectionStart, offset, e);
else if(selectionStart == currentEnd && (nextStart == -1 || selectionStart + selectionLength <= nextStart))
                                deleteSpaceAndShift(selectionStart, offset, e);
-                       else
+                       else {
                                makeTextChange(offset);
+                               recordEvent(e, false);
+                       }
                }

if(currentStart == currentEnd && (currentStart == previousEnd || currentStart == nextStart)){
@@ -1221,8 +1238,10 @@
        }

        private void deleteSelection(ExtendedModifyEvent e){
- if(selectionStart >= currentStart && selectionStart + selectionLength <= currentEnd) + if(selectionStart >= currentStart && selectionStart + selectionLength <= currentEnd){
                        makeTextChange(-selectionLength);
+                       recordEvent(e, false);
+               }
else if(selectionStart + selectionLength > currentEnd && selectionStart + selectionLength >= nextStart || previousEnd == -1){
                        int changes = 0;
                        while(selectionLength > 0){
@@ -1321,6 +1340,14 @@
                if(currentElement instanceof PageMapElement)
                        view.setCaretOffset(previousEnd);
        }
+
+       private void recordEvent(ExtendedModifyEvent e, boolean edit){
+               Message message = Message.createEditEventMesag(e);
+               if(edit)
+                       editRecorder.recordEditEvent(message);
+               else
+                       editRecorder.recordDeleteEvent(message);
+       }

        private void handleReadOnlySelection(TextMapElement p, boolean partial){
                int pos = p.end;
@@ -1461,6 +1488,11 @@
        }

        public void cut(){
+               if(selectionLength > 0)
+ editRecorder.recordLine(selectionStart, selectionStart + selectionLength);
+               else
+ editRecorder.recordLine(view.getLine(view.getLineAtOffset(view.getCaretOffset())));
+
                if(validCut())
                        view.cut();
        }
@@ -1800,6 +1832,7 @@
                setListenerLock(true);
                menu.dispose();
                recreateView(sashform);
+               editRecorder = new EditRecorder(manager, this);
                total = 0;
                spaceBeforeText = 0;
                spaceAfterText = 0;
@@ -1934,4 +1967,10 @@
                        multiSelected = false;
                }
        }
+
+       public void undoEdit(int start, int length, String text){
+               int changes = text.length() - length;
+               replaceTextRange(start, length, text);
+               makeTextChange(changes);
+       }
 }

Other related posts:

  • » [brailleblaster] 2 new revisions pushed by brandon....@xxxxxxxxx on 2014-12-30 20:13 GMT - brailleblaster