[brailleblaster] 4 new revisions pushed by brandon....@xxxxxxxxx on 2014-12-22 18:30 GMT

  • From: brailleblaster@xxxxxxxxxxxxxx
  • To: brailleblaster@xxxxxxxxxxxxx
  • Date: Mon, 22 Dec 2014 18:31:02 +0000

4 new revisions:

Revision: 5ecb5bbddba8
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Mon Dec 22 14:31:48 2014 UTC
Log:      Changed keyword to constant
https://code.google.com/p/brailleblaster/source/detail?r=5ecb5bbddba8

Revision: 728f92fd1d15
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Mon Dec 22 15:26:49 2014 UTC
Log:      Subclassed event class
https://code.google.com/p/brailleblaster/source/detail?r=728f92fd1d15

Revision: 29099bb8ef34
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Mon Dec 22 18:29:25 2014 UTC
Log:      Added uno event for space between elements
https://code.google.com/p/brailleblaster/source/detail?r=29099bb8ef34

Revision: 38772ce3c778
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Mon Dec 22 18:32:06 2014 UTC
Log:      Fix bug in styles not being reset when inserting space
https://code.google.com/p/brailleblaster/source/detail?r=38772ce3c778

==============================================================================
Revision: 5ecb5bbddba8
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Mon Dec 22 14:31:48 2014 UTC
Log:      Changed keyword to constant
https://code.google.com/p/brailleblaster/source/detail?r=5ecb5bbddba8

Modified:
/src/main/org/brailleblaster/perspectives/braille/stylers/BoxlineHandler.java
 /src/main/org/brailleblaster/perspectives/braille/stylers/Handler.java
/src/main/org/brailleblaster/perspectives/braille/stylers/InsertElementHandler.java /src/main/org/brailleblaster/perspectives/braille/stylers/RemoveElementHandler.java
 /src/main/org/brailleblaster/perspectives/braille/stylers/StyleHandler.java

=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/BoxlineHandler.java Thu Dec 18 17:01:08 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/BoxlineHandler.java Mon Dec 22 14:31:48 2014 UTC
@@ -121,7 +121,7 @@
                        TextMapElement tempElement= itr.next();
                        if(tempElement instanceof BrlOnlyMapElement){
BrlOnlyMapElement b = list.findJoiningBoxline((BrlOnlyMapElement)tempElement); - if((b == null && !tempElement.parentElement().getAttributeValue("semantics").contains("middleBox") && !tempElement.parentElement().getAttributeValue("semantics").contains("bottomBox") ) + if((b == null && !tempElement.parentElement().getAttributeValue(SEMANTICS).contains("middleBox") && !tempElement.parentElement().getAttributeValue(SEMANTICS).contains("bottomBox") )
                                                || (b != null && (b.start > end || 
b.end < start))){
                                        invalid = true;
                                        LocaleHandler lh = new LocaleHandler();
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/Handler.java Thu Dec 18 17:16:36 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/Handler.java Mon Dec 22 14:31:48 2014 UTC
@@ -14,6 +14,8 @@
 import nu.xom.Element;

 public abstract class Handler {
+       protected static final String SEMANTICS = "semantics";
+
        protected static final String BOXLINE = "boxline";
        protected static final String FULLBOX = "fullBox";
        protected static final String TOPBOX = "topBox";
@@ -59,7 +61,7 @@

        protected boolean firstInLineElement(Element e){
                Element parent = (Element)e.getParent();
- if(parent.getAttribute("semantics") != null && parent.getAttributeValue("semantics").contains("style")){ + if(parent.getAttribute(SEMANTICS) != null && parent.getAttributeValue(SEMANTICS).contains("style")){
                        if(parent.indexOf(e) == 0)
                                return true;
                }
@@ -76,7 +78,7 @@
        }

        protected boolean isHeading(Element e){
-               Attribute atr = e.getAttribute("semantics");
+               Attribute atr = e.getAttribute(SEMANTICS);

                if(atr != null){
                        if(atr.getValue().contains("heading"))
@@ -87,7 +89,7 @@
        }

        protected boolean isInLine(Element e){
-               Attribute atr = e.getAttribute("semantics");
+               Attribute atr = e.getAttribute(SEMANTICS);
                if(atr != null){
                        String [] tokens = atr.getValue().split(",");
                        if(tokens[0].equals("action"))
@@ -97,7 +99,7 @@
        }

        protected boolean checkSemanticsAttribute(Element e, String value){
-               Attribute atr = e.getAttribute("semantics");
+               Attribute atr = e.getAttribute(SEMANTICS);

                if(atr == null || !atr.getValue().contains(value))
                        return false;
@@ -106,7 +108,7 @@
        }

        protected String getSemanticAttribute(Element e){
-               Attribute atr = e.getAttribute("semantics");
+               Attribute atr = e.getAttribute(SEMANTICS);
                if(atr != null){
                        String val = atr.getValue();
                        String[] tokens = val.split(",");
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/InsertElementHandler.java Thu Dec 18 17:16:36 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/InsertElementHandler.java Mon Dec 22 14:31:48 2014 UTC
@@ -64,7 +64,7 @@
                else
                        p.insertChild(ev.getNode(), ev.getParentIndex());

- if(ev.getNode() instanceof Element && ((Element)ev.getNode()).getAttributeValue("semantics").contains("style")){ + if(ev.getNode() instanceof Element && ((Element)ev.getNode()).getAttributeValue(SEMANTICS).contains("style")){ ArrayList<TextMapElement>elList = constructMapElements((Element)ev.getNode(), 0);

if(!list.empty() && ev.getListIndex() > 0 && list.get(ev.getListIndex() - 1).end == ev.getTextOffset())
@@ -173,7 +173,7 @@

private ArrayList<TextMapElement> constructMapElements(Element e, int index){
                ArrayList<TextMapElement> elList = new 
ArrayList<TextMapElement>();
-               if(e.getAttributeValue("semantics").contains("pagenum"))
+               if(e.getAttributeValue(SEMANTICS).contains("pagenum"))
                        elList.add(makePageMapElement(e));
                else {
                        for(int i = index; i < e.getChildCount(); i++){
@@ -197,7 +197,7 @@

private ArrayList<TextMapElement> constructMapElement(Element e, int index){
                ArrayList<TextMapElement> elList = new 
ArrayList<TextMapElement>();
-               if(e.getAttributeValue("semantics").contains("pagenum"))
+               if(e.getAttributeValue(SEMANTICS).contains("pagenum"))
                        elList.add(makePageMapElement(e));
                else {
                        for(int i = index; i < index + 2; i++){
@@ -259,8 +259,8 @@
        }

        private boolean hasSameSemantics(Element e, Element newElement){
-               Attribute sem1 = e.getAttribute("semantics");
-               Attribute sem2 = newElement.getAttribute("semantics");
+               Attribute sem1 = e.getAttribute(SEMANTICS);
+               Attribute sem2 = newElement.getAttribute(SEMANTICS);
                if(sem1.equals(sem2))
                        return true;
                else
@@ -297,7 +297,7 @@
String file = BBIni.getTempFilesPath() + BBIni.getFileSep() + fu.getFileName(manager.getWorkingPath()) + ".sem";
                String id = e.getAttributeValue("id");
                sfh.removeSemanticEntry(file, id);
-               String [] tokens = e.getAttributeValue("semantics").split(",");
+               String [] tokens = e.getAttributeValue(SEMANTICS).split(",");
                sfh.writeEntry(file, tokens[1], e.getLocalName(), id);
        }

@@ -310,7 +310,7 @@
        }

        private boolean shouldInsertBlankLine(ArrayList<TextMapElement>elList){
- return elList.get(elList.size() - 1).parentElement().getAttributeValue("semantics").contains("style") + return elList.get(elList.size() - 1).parentElement().getAttributeValue(SEMANTICS).contains("style") || firstInLineElement(elList.get(0).parentElement()) || elList.get(0) instanceof PageMapElement || elList.get(0) instanceof BrlOnlyMapElement;
        }

=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/RemoveElementHandler.java Thu Dec 18 17:16:36 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/RemoveElementHandler.java Mon Dec 22 14:31:48 2014 UTC
@@ -116,7 +116,7 @@
                }
                else {
                        Element e = t.parentElement();
-                       
while(!e.getAttributeValue("semantics").contains("style")){
+                       
while(!e.getAttributeValue(SEMANTICS).contains("style")){
                                
if(((Element)e.getParent()).getChildElements().size() <= 1)
                                        e = (Element)e.getParent();
                                else
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/StyleHandler.java Thu Dec 18 17:16:36 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/StyleHandler.java Mon Dec 22 14:31:48 2014 UTC
@@ -63,7 +63,7 @@
                        
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));

                        Element e = (Element)event.getNode();
-                       String semantic = 
e.getAttributeValue("semantics").split(",")[1];
+                       String semantic = 
e.getAttributeValue(SEMANTICS).split(",")[1];
                        Styles style = manager.getStyleTable().get(semantic);
                        Message message = 
Message.createUpdateStyleMessage(style, false, false);
                        handleStyleSingleSelected(message);

==============================================================================
Revision: 728f92fd1d15
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Mon Dec 22 15:26:49 2014 UTC
Log:      Subclassed event class
https://code.google.com/p/brailleblaster/source/detail?r=728f92fd1d15

Added:
/src/main/org/brailleblaster/perspectives/braille/eventQueue/ModelEvent.java
 /src/main/org/brailleblaster/perspectives/braille/eventQueue/ViewEvent.java
Modified:
 /src/main/org/brailleblaster/perspectives/braille/eventQueue/Event.java
 /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java
 /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java
/src/main/org/brailleblaster/perspectives/braille/stylers/HideActionHandler.java /src/main/org/brailleblaster/perspectives/braille/stylers/InsertElementHandler.java /src/main/org/brailleblaster/perspectives/braille/stylers/RemoveElementHandler.java
 /src/main/org/brailleblaster/perspectives/braille/stylers/StyleHandler.java
/src/main/org/brailleblaster/perspectives/braille/stylers/TextUpdateHandler.java

=======================================
--- /dev/null
+++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/ModelEvent.java Mon Dec 22 15:26:49 2014 UTC
@@ -0,0 +1,50 @@
+package org.brailleblaster.perspectives.braille.eventQueue;
+
+import java.util.ArrayList;
+
+import nu.xom.Node;
+import nu.xom.ParentNode;
+
+public class ModelEvent extends Event{
+       Node node;
+       ParentNode parent;
+       ArrayList<Integer> treeIndexes;
+       int firstSectionIndex, listIndex, parentIndex;
+
+ public ModelEvent(EventTypes eventType, Node node, int firstSectionIndex, int listIndex,
+                       int textOffset, int brailleOffset, ArrayList<Integer> 
treeIndexes) {
+
+               super(eventType, textOffset, brailleOffset);
+
+               this.node = (Node)node.copy();
+               this.parent = node.getParent();
+               this.parentIndex = parent.indexOf(node);
+               this.firstSectionIndex = firstSectionIndex;
+               this.listIndex = listIndex;
+               this.treeIndexes = treeIndexes;
+       }
+
+       public Node getNode(){
+               return node;
+       }
+
+       public ParentNode getParent(){
+               return parent;
+       }
+
+       public int getParentIndex(){
+               return parentIndex;
+       }
+
+       public int getFirstSectionIndex(){
+               return firstSectionIndex;
+       }
+
+       public int getListIndex(){
+               return listIndex;
+       }
+
+       public ArrayList<Integer> getTreeIndex(){
+               return treeIndexes;
+       }
+}
=======================================
--- /dev/null
+++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/ViewEvent.java Mon Dec 22 15:26:49 2014 UTC
@@ -0,0 +1,9 @@
+package org.brailleblaster.perspectives.braille.eventQueue;
+
+public class ViewEvent extends Event{
+
+ public ViewEvent(EventTypes eventType, int textOffset, int brailleOffset) {
+
+               super(eventType, textOffset, brailleOffset);
+       }
+}
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/Event.java Wed Dec 10 14:36:26 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/Event.java Mon Dec 22 15:26:49 2014 UTC
@@ -1,43 +1,15 @@
 package org.brailleblaster.perspectives.braille.eventQueue;

-import java.util.ArrayList;
-
-import nu.xom.Node;
-import nu.xom.ParentNode;
-
 public class Event {
        EventTypes eventType;
-       Node node;
-       int firstSectionIndex, listIndex, parentIndex, textOffset, 
brailleOffset;
-       ArrayList<Integer> treeIndexes;
-       ParentNode parent;

- public Event(EventTypes eventType, Node node, int firstSectionIndex, int listIndex, int textOffset, int brailleOffset, ArrayList<Integer> treeIndexes){
-               this.eventType = eventType;
-               this.node = (Node)node.copy();
-               this.parent = node.getParent();
-               this.parentIndex = parent.indexOf(node);
-               this.firstSectionIndex = firstSectionIndex;
-               this.listIndex = listIndex;
-               this.textOffset = textOffset;
-               this.brailleOffset = brailleOffset;
-               this.treeIndexes = treeIndexes;
-       }
-
-       public Node getNode(){
-               return node;
-       }
-
-       public ParentNode getParent(){
-               return parent;
-       }
+       int textOffset, brailleOffset;

-       public int getParentIndex(){
-               return parentIndex;
-       }
+       public Event(EventTypes eventType, int textOffset, int brailleOffset){
+               this.eventType = eventType;

-       public int getListIndex(){
-               return listIndex;
+               this.textOffset = textOffset;
+               this.brailleOffset = brailleOffset;
        }

        public int getTextOffset(){
@@ -47,14 +19,6 @@
        public int getBrailleOffset(){
                return brailleOffset;
        }
-
-       public ArrayList<Integer> getTreeIndex(){
-               return treeIndexes;
-       }
-
-       public int getFirstSectionIndex(){
-               return firstSectionIndex;
-       }

        public EventTypes getEventType(){
                return eventType;
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java Thu Dec 18 17:01:08 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java Mon Dec 22 15:26:49 2014 UTC
@@ -24,7 +24,7 @@
                        switch(event.eventType){
                                case Update:
                                        TextUpdateHandler tuh = new 
TextUpdateHandler(manager, vi, list);
-                                       tuh.redoText(event);
+                                       tuh.redoText(frame);
                                        break;
                                case Insert:
                                        break;
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Thu Dec 18 14:36:09 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Mon Dec 22 15:26:49 2014 UTC
@@ -23,7 +23,7 @@
                        switch(event.eventType){
                                case Update:
                                        TextUpdateHandler tuh = new 
TextUpdateHandler(manager, vi, list);
-                                       tuh.undoText(event);
+                                       tuh.undoText(frame);
                                        break;
                                case Insert:
                                        break;
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/HideActionHandler.java Thu Dec 18 17:16:36 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/HideActionHandler.java Mon Dec 22 15:26:49 2014 UTC
@@ -9,9 +9,9 @@
 import org.brailleblaster.BBIni;
 import org.brailleblaster.perspectives.braille.Manager;
import org.brailleblaster.perspectives.braille.document.BBSemanticsTable.StylesType;
-import org.brailleblaster.perspectives.braille.eventQueue.Event;
 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.mapping.elements.BrlOnlyMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.PageMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.TextMapElement;
@@ -49,7 +49,7 @@
        public void hideText(EventFrame f){
                eventFrame = new EventFrame();
                while(!f.empty() && 
f.peek().getEventType().equals(EventTypes.Hide)){
-                       Event ev = f.pop();
+                       ModelEvent ev = (ModelEvent)f.pop();
manager.dispatch(Message.createSetCurrentMessage(Sender.TREE, list.get(ev.getListIndex()).start, false));

                        //resets selection to recreate hide event by user
@@ -194,7 +194,7 @@
                }

                if(!boxlineAdded)
- eventFrame.addEvent(new Event(EventTypes.Hide, parent, vi.getStartIndex(), list.indexOf(itemList.get(0)), startPos, brailleStartPos, treeIndexes)); + eventFrame.addEvent(new ModelEvent(EventTypes.Hide, parent, vi.getStartIndex(), list.indexOf(itemList.get(0)), startPos, brailleStartPos, treeIndexes));

                if(parent.getLocalName().equals("sidebar"))
                        boxlineAdded = true;
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/InsertElementHandler.java Mon Dec 22 14:31:48 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/InsertElementHandler.java Mon Dec 22 15:26:49 2014 UTC
@@ -12,9 +12,9 @@
 import org.brailleblaster.document.SemanticFileHandler;
 import org.brailleblaster.perspectives.braille.Manager;
 import org.brailleblaster.perspectives.braille.document.BrailleDocument;
-import org.brailleblaster.perspectives.braille.eventQueue.Event;
 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.mapping.elements.BrailleMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.BrlOnlyMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.PageMapElement;
@@ -46,13 +46,13 @@

        public void insertElement(EventFrame f){
                frame = new EventFrame();
- while(f.size() > 0 && f.get(f.size() - 1).getEventType().equals(EventTypes.Delete)){
-                       insertElement(f.pop());
+               while(f.size() > 0 && 
f.peek().getEventType().equals(EventTypes.Delete)){
+                       insertElement((ModelEvent)f.pop());
                }
                manager.addRedoEvent(frame);
        }

-       private void insertElement(Event ev){
+       private void insertElement(ModelEvent ev){
                ParentNode p = ev.getParent();
                if(ev.getNode() instanceof Text){
                        p.insertChild(ev.getNode(), ev.getParentIndex());
@@ -93,18 +93,18 @@

                list.setCurrent(ev.getListIndex());
                
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
- frame.addEvent(new Event(EventTypes.Delete, p.getChild(ev.getParentIndex()), vi.getStartIndex(), ev.getListIndex(), ev.getTextOffset(), ev.getBrailleOffset(), tree.getItemPath())); + frame.addEvent(new ModelEvent(EventTypes.Delete, p.getChild(ev.getParentIndex()), vi.getStartIndex(), ev.getListIndex(), ev.getTextOffset(), ev.getBrailleOffset(), tree.getItemPath()));
        }

        public void resetElement(EventFrame f){
                frame = new EventFrame();
                while(!f.empty() && 
f.peek().getEventType().equals(EventTypes.Hide)){
-                       resetElement(f.pop());
+                       resetElement((ModelEvent)f.pop());
                }
                manager.addRedoEvent(frame);
        }

-       private void resetElement(Event event){
+       private void resetElement(ModelEvent event){
                if(vi.getStartIndex() != event.getFirstSectionIndex())
                        list = vi.resetViews(event.getFirstSectionIndex());

@@ -121,7 +121,7 @@
                if(!onScreen(event.getTextOffset()))
                        setTopIndex(event.getTextOffset());

- frame.addEvent(new Event(EventTypes.Hide, event.getNode(), vi.getStartIndex(), event.getListIndex(), list.get(event.getListIndex()).start, list.get(event.getListIndex()).brailleList.getFirst().start, tree.getItemPath())); + frame.addEvent(new ModelEvent(EventTypes.Hide, event.getNode(), vi.getStartIndex(), event.getListIndex(), list.get(event.getListIndex()).start, list.get(event.getListIndex()).brailleList.getFirst().start, tree.getItemPath()));
        }

private void insertInList(ArrayList<TextMapElement>elList, int index, int textOffset, int brailleOffset){
@@ -268,7 +268,7 @@
        }

        //returns element removed from DOM
-       private Element replaceElement(Event f){
+       private Element replaceElement(ModelEvent f){
                ParentNode parent = f.getParent();
                Element replacedElement = 
(Element)parent.getChild(f.getParentIndex());
                parent.replaceChild(replacedElement, f.getNode());
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/RemoveElementHandler.java Mon Dec 22 14:31:48 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/RemoveElementHandler.java Mon Dec 22 15:26:49 2014 UTC
@@ -10,6 +10,7 @@
 import org.brailleblaster.perspectives.braille.eventQueue.Event;
 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.mapping.elements.TextMapElement;
 import org.brailleblaster.perspectives.braille.mapping.maps.MapList;
 import org.brailleblaster.perspectives.braille.messages.Message;
@@ -36,7 +37,7 @@
        public void removeNode(EventFrame frame){
                eventFrame = new EventFrame();
while(!frame.empty() && frame.peek().getEventType().equals(EventTypes.Delete)){
-                       Event ev = frame.pop();
+                       ModelEvent ev = (ModelEvent)frame.pop();

int length = list.get(ev.getListIndex()).end - list.get(ev.getListIndex()).end;
                        Message m = 
Message.createRemoveNodeMessage(ev.getListIndex(), length);
@@ -106,7 +107,7 @@
                if(node instanceof Element)
                        message.put("element", node);

- return new Event(EventTypes.Delete, node, vi.getStartIndex(), index, list.get(index).start, list.get(index).brailleList.getFirst().start, treeIndex); + return new ModelEvent(EventTypes.Delete, node, vi.getStartIndex(), index, list.get(index).start, list.get(index).brailleList.getFirst().start, treeIndex);
                //return f;
        }

=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/StyleHandler.java Mon Dec 22 14:31:48 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/StyleHandler.java Mon Dec 22 15:26:49 2014 UTC
@@ -13,6 +13,7 @@
 import org.brailleblaster.perspectives.braille.eventQueue.Event;
 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.mapping.elements.BrlOnlyMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.PageMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.TextMapElement;
@@ -58,7 +59,7 @@

        private void updateStyle(EventFrame f){
while(!f.empty() && f.peek().getEventType().equals(EventTypes.Style_Change)){
-                       Event event = f.pop();
+                       ModelEvent event = (ModelEvent)f.pop();
                        list.setCurrent(event.getListIndex());
                        
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));

@@ -78,7 +79,7 @@
        private void handleStyleSingleSelected(Message message) {
                Element parent = parentStyle(list.getCurrent(), message);
ArrayList<TextMapElement> itemList = list.findTextMapElements(list.getCurrentIndex(), parent, true); - Event e = new Event(EventTypes.Style_Change, parent, vi.getStartIndex(), list.indexOf(itemList.get(0)), itemList.get(0).start, itemList.get(0).brailleList.getFirst().start, tree.getItemPath()); + Event e = new ModelEvent(EventTypes.Style_Change, parent, vi.getStartIndex(), list.indexOf(itemList.get(0)), itemList.get(0).start, itemList.get(0).brailleList.getFirst().start, tree.getItemPath());
                document.changeSemanticAction(message, parent);
                adjustStyle(itemList, message);

@@ -106,7 +107,7 @@
                                Element parent = parentStyle(tempElement, 
styleMessage);
                                parents.add(parent);
ArrayList<TextMapElement> itemList = list.findTextMapElements(list.getNodeIndex(tempElement), parent, true); - Event event = new Event(EventTypes.Style_Change, parent, vi.getStartIndex(), list.indexOf(itemList.get(0)), itemList.get(0).start, itemList.get(0).brailleList.getFirst().start, tree.getItemPath()); + Event event = new ModelEvent(EventTypes.Style_Change, parent, vi.getStartIndex(), list.indexOf(itemList.get(0)), itemList.get(0).start, itemList.get(0).brailleList.getFirst().start, tree.getItemPath());
                                document.changeSemanticAction(message, parent);
                                adjustStyle( itemList,styleMessage);
                                frame.addEvent(event);
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/TextUpdateHandler.java Thu Dec 18 17:16:36 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/TextUpdateHandler.java Mon Dec 22 15:26:49 2014 UTC
@@ -5,6 +5,7 @@
 import org.brailleblaster.perspectives.braille.eventQueue.Event;
 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.mapping.elements.TextMapElement;
 import org.brailleblaster.perspectives.braille.mapping.maps.MapList;
 import org.brailleblaster.perspectives.braille.messages.Message;
@@ -34,22 +35,28 @@
                manager.getArchiver().setDocumentEdited(true);
        }

-       public void undoText(Event ev){
-               list.setCurrent(ev.getListIndex());
-               
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
-               addRedoEvent();
- Message m = Message.createUpdateMessage(list.getCurrent().start, ev.getNode().getValue(), list.getCurrent().end - list.getCurrent().start);
-               resetText(m);
-               
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
+       public void undoText(EventFrame f){
+               while(!f.empty() && 
f.peek().getEventType().equals(EventTypes.Update)){
+                       ModelEvent ev = (ModelEvent)f.pop();
+                       list.setCurrent(ev.getListIndex());
+                       
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
+                       addRedoEvent();
+ Message m = Message.createUpdateMessage(list.getCurrent().start, ev.getNode().getValue(), list.getCurrent().end - list.getCurrent().start);
+                       resetText(m);
+                       
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
+               }
        }

-       public void redoText(Event ev){
-               list.setCurrent(ev.getListIndex());
-               
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
-               addUndoEvent();
- Message m = Message.createUpdateMessage(list.getCurrent().start, ev.getNode().getValue(), list.getCurrent().end - list.getCurrent().start);
-               resetText(m);
-               
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
+       public void redoText(EventFrame f){
+               while(!f.empty() && 
f.peek().getEventType().equals(EventTypes.Update)){
+                       ModelEvent ev = (ModelEvent)f.pop();
+                       list.setCurrent(ev.getListIndex());
+                       
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
+                       addUndoEvent();
+ Message m = Message.createUpdateMessage(list.getCurrent().start, ev.getNode().getValue(), list.getCurrent().end - list.getCurrent().start);
+                       resetText(m);
+                       
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
+               }
        }

        private void resetText(Message message){
@@ -71,7 +78,7 @@
        private EventFrame addEvent(){
                EventFrame f = new EventFrame();
                TextMapElement t = list.getCurrent();
- Event e = new Event(EventTypes.Update, t.n, vi.getStartIndex(), list.getCurrentIndex(), t.start, + Event e = new ModelEvent(EventTypes.Update, t.n, vi.getStartIndex(), list.getCurrentIndex(), t.start,
                                t.brailleList.getFirst().start, 
tree.getItemPath());
                f.addEvent(e);


==============================================================================
Revision: 29099bb8ef34
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Mon Dec 22 18:29:25 2014 UTC
Log:      Added uno event for space between elements
https://code.google.com/p/brailleblaster/source/detail?r=29099bb8ef34

Modified:
/src/main/org/brailleblaster/perspectives/braille/eventQueue/EventTypes.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/Message.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/EventTypes.java Mon Dec 15 19:50:35 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/EventTypes.java Mon Dec 22 18:29:25 2014 UTC
@@ -2,6 +2,8 @@

 public enum EventTypes {
        Update,
+       Edit,
+       Whitespace,
        Delete,
        Hide,
        Style_Change,
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Mon Dec 22 15:26:49 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Mon Dec 22 18:29:25 2014 UTC
@@ -6,6 +6,7 @@
import org.brailleblaster.perspectives.braille.stylers.InsertElementHandler;
 import org.brailleblaster.perspectives.braille.stylers.StyleHandler;
 import org.brailleblaster.perspectives.braille.stylers.TextUpdateHandler;
+import org.brailleblaster.perspectives.braille.stylers.WhiteSpaceHandler;
import org.brailleblaster.perspectives.braille.viewInitializer.ViewInitializer;

 public class UndoQueue extends EventQueue {
@@ -18,8 +19,8 @@

        @Override
protected void handleEvent(EventFrame frame, ViewInitializer vi, BrailleDocument doc, MapList list, Manager manager){
-               for(int i = frame.size() - 1; !frame.empty() && i >= 0; i--){
-                       Event event = frame.get(i);
+               while(!frame.empty()){
+                       Event event = frame.get(frame.size() - 1);
                        switch(event.eventType){
                                case Update:
                                        TextUpdateHandler tuh = new 
TextUpdateHandler(manager, vi, list);
@@ -39,6 +40,10 @@
                                        StyleHandler sh = new 
StyleHandler(manager, vi, list);
                                        sh.undoStyle(frame);
                                        break;
+                               case Whitespace:
+                                       WhiteSpaceHandler wsh = new 
WhiteSpaceHandler(manager, list);
+                                       wsh.UndoDelete(frame);
+                                       break;
                                default:
                                        break;
                        }
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/ViewEvent.java Mon Dec 22 15:26:49 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/ViewEvent.java Mon Dec 22 18:29:25 2014 UTC
@@ -2,8 +2,14 @@

 public class ViewEvent extends Event{

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

                super(eventType, textOffset, brailleOffset);
+               this.text = text;
+       }
+
+       public String getText(){
+               return text;
        }
 }
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/messages/Message.java Wed Dec 10 20:14:45 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/messages/Message.java Mon Dec 22 18:29:25 2014 UTC
@@ -156,10 +156,11 @@
                return m;
        }

- public static Message createTextDeletionMessage(int offset, int length, boolean update){ + public static Message createTextDeletionMessage(int offset, int length, String replacedText, boolean update){
                Message m = new Message(BBEvent.WHITESPACE_DELETION);
                m.put("offset", offset);
                m.put("length", length);
+               m.put("replacedText", replacedText);
                m.put("update", update);

                return m;
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/WhiteSpaceHandler.java Thu Dec 11 16:43:03 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/WhiteSpaceHandler.java Mon Dec 22 18:29:25 2014 UTC
@@ -1,9 +1,13 @@
 package org.brailleblaster.perspectives.braille.stylers;

 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.mapping.elements.TextMapElement;
 import org.brailleblaster.perspectives.braille.mapping.maps.MapList;
 import org.brailleblaster.perspectives.braille.messages.Message;
+import org.brailleblaster.perspectives.braille.messages.Sender;
 import org.brailleblaster.perspectives.braille.views.wp.BrailleView;
 import org.brailleblaster.perspectives.braille.views.wp.TextView;

@@ -49,6 +53,34 @@
                }
                else
                        braille.removeWhitespace(0,  
(Integer)message.getValue("length"));
+
+ addUndoEvent((Integer)message.getValue("offset"), brailleStart, (String)message.getValue("replacedText"));
        }
-
+
+       public void UndoDelete(EventFrame frame){
+ while(!frame.empty() && frame.peek().getEventType().equals(EventTypes.Whitespace))
+                       insertWhitespace((ViewEvent)frame.pop());
+       }
+
+       private void insertWhitespace(ViewEvent ev){
+               text.insertText(ev.getTextOffset(), ev.getText());
+               braille.insertText(ev.getBrailleOffset(), ev.getText());
+
+               int pos = ev.getTextOffset() + ev.getText().length();
+
+               if(pos != text.view.getCharCount()){
+                       Message curMessage = 
Message.createGetCurrentMessage(Sender.TREE, pos);
+                       manager.dispatch(curMessage);
+ list.shiftOffsetsFromIndex(list.getCurrentIndex(), ev.getText().length(), ev.getText().length());
+
+                       text.view.setCaretOffset(list.getCurrent().start);
+                       
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
+               }
+       }
+
+       private void addUndoEvent(int textStart, int brailleStart, String text){
+               EventFrame frame = new EventFrame();
+ frame.addEvent( new ViewEvent(EventTypes.Whitespace, textStart, brailleStart, text));
+               manager.addUndoEvent(frame);
+       }
 }
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Mon Dec 15 19:50:35 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Mon Dec 22 18:29:25 2014 UTC
@@ -447,8 +447,12 @@
                setViewData(message);
        }

-       private void sendDeleteSpaceMessage(int start, int offset){
- Message message = Message.createTextDeletionMessage(start, offset, false); + private void sendDeleteSpaceMessage(int start, int offset, ExtendedModifyEvent e){
+               int length = selectionLength > -1 ? selectionLength : 0;
+               int textPos = length == 0 ? 0 : e.replacedText.length() - 
length;
+
+ String replacedText = e.replacedText.substring(textPos, textPos + Math.abs(offset)); + Message message = Message.createTextDeletionMessage(start, offset, replacedText, false);
                manager.dispatch(message);

                if(message.getValue("update").equals(true)){
@@ -1090,7 +1094,7 @@
                                        selectionStart = currentEnd;
                                }

-                               deleteSelection();
+                               deleteSelection(e);
                                setCurrent(placeholder);
                                view.setCaretOffset(e.start + e.length);
                        }
@@ -1131,11 +1135,11 @@
                setListenerLock(true);
                if(e.replacedText.length() > 1){
                        setCurrent(view.getCaretOffset());
-                       deleteSelection();
+                       deleteSelection(e);
                }
                else if(currentChar == SWT.BS){
if(oldCursorPosition == currentStart && view.getCaretOffset() >= previousEnd)
-                               deleteSpaceAndShift(view.getCaretOffset(), 
offset);
+                               deleteSpaceAndShift(view.getCaretOffset(), 
offset, e);
else if(oldCursorPosition == currentStart && view.getCaretOffset() < previousEnd){
                                if(textChanged)
                                        sendUpdate();
@@ -1144,7 +1148,7 @@
                                makeTextChange(offset);
                        }
                        else if(oldCursorPosition > currentEnd)
-                               deleteSpaceAndShift(view.getCaretOffset(), 
offset);
+                               deleteSpaceAndShift(view.getCaretOffset(), 
offset, e);
                        else
                                makeTextChange(offset);
                }
@@ -1156,7 +1160,7 @@
                                        sendUpdate();

                                nextStart += offset;
-                               sendDeleteSpaceMessage(view.getCaretOffset(), 
offset);
+                               sendDeleteSpaceMessage(view.getCaretOffset(), 
offset, e);
                        }
else if(oldCursorPosition == currentEnd && view.getCaretOffset() == nextStart){
                                if(textChanged)
@@ -1166,18 +1170,18 @@
                                makeTextChange(offset);
                        }
else if ((previousEnd == -1 && selectionLength > 0 && selectionStart < currentStart && selectionStart + selectionLength <= currentStart)|| (oldCursorPosition < currentStart && (previousEnd == -1 || oldCursorPosition > previousEnd)))
-                               deleteSpaceAndShift(view.getCaretOffset(), 
offset);
+                               deleteSpaceAndShift(view.getCaretOffset(), 
offset, e);
else if( (oldCursorPosition == currentEnd && nextStart == -1)|| (oldCursorPosition > currentEnd && (oldCursorPosition < nextStart || nextStart == -1)))
-                               deleteSpaceAndShift(view.getCaretOffset(), 
offset);
+                               deleteSpaceAndShift(view.getCaretOffset(), 
offset, e);
                        else
                                makeTextChange(offset);
                }
                else {
                        offset = -1;
if((previousEnd == -1 || selectionStart >= previousEnd) && selectionStart + selectionLength <= currentStart)
-                               deleteSpaceAndShift(selectionStart, offset);
+                               deleteSpaceAndShift(selectionStart, offset, e);
else if(selectionStart == currentEnd && (nextStart == -1 || selectionStart + selectionLength <= nextStart)){
-                               deleteSpaceAndShift(selectionStart, offset);
+                               deleteSpaceAndShift(selectionStart, offset, e);
                        }
                        else {
                                makeTextChange(offset);
@@ -1193,7 +1197,7 @@
                setListenerLock(false);
        }

-       private void deleteSelection(){
+       private void deleteSelection(ExtendedModifyEvent e){
if(selectionStart >= currentStart && selectionStart + selectionLength <= currentEnd)
                        makeTextChange(-selectionLength);
else if(selectionStart + selectionLength > currentEnd && selectionStart + selectionLength >= nextStart || previousEnd == -1){
@@ -1213,7 +1217,7 @@
                                }
                                else if(selectionStart  == currentEnd && 
nextStart == -1){
                                        changes= (currentEnd + selectionLength) 
- currentEnd;
-                                       sendDeleteSpaceMessage(selectionStart, 
-changes);
+                                       sendDeleteSpaceMessage(selectionStart, 
-changes, e);
                                        selectionLength -= changes;
                                }
                                else if(selectionStart > currentStart && 
selectionStart != currentEnd){
@@ -1235,7 +1239,7 @@
                                        if(selectionLength < changes)
                                                changes = selectionLength;

-                                       sendDeleteSpaceMessage(selectionStart, 
-changes);
+                                       sendDeleteSpaceMessage(selectionStart, 
-changes, e);
                                        if(changes != 0)
                                                selectionLength -= changes;
                                        else
@@ -1247,7 +1251,7 @@
                                else if(selectionStart < currentStart && 
previousEnd <= -1){
                                        changes = currentStart - selectionStart;
                                        selectionLength -= changes;
-                                       sendDeleteSpaceMessage(selectionStart, 
-changes);
+                                       sendDeleteSpaceMessage(selectionStart, 
-changes, e);

                                        setCurrent(currentStart);
                                        view.setCaretOffset(currentStart);
@@ -1255,7 +1259,7 @@
                                else if(selectionStart < currentStart){
                                        changes = currentStart - selectionStart;
                                        selectionLength -= changes;
-                                       sendDeleteSpaceMessage(selectionStart, 
-changes);
+                                       sendDeleteSpaceMessage(selectionStart, 
-changes, e);

                                        setCurrent(currentStart);
                                        view.setCaretOffset(currentStart);
@@ -1347,9 +1351,9 @@
        }

//a helper method for common series of methods that typically, but not always, follow one another
-       private void deleteSpaceAndShift(int start, int offset){
+ private void deleteSpaceAndShift(int start, int offset, ExtendedModifyEvent e){
                shiftLeft(offset);
-               sendDeleteSpaceMessage(start, offset);
+               sendDeleteSpaceMessage(start, offset, e);
        }

        private boolean isFirst(Node n){

==============================================================================
Revision: 38772ce3c778
Branch:   rt1835-UndoRemoveElement
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Mon Dec 22 18:32:06 2014 UTC
Log:      Fix bug in styles not being reset when inserting space
https://code.google.com/p/brailleblaster/source/detail?r=38772ce3c778

Modified:
/src/main/org/brailleblaster/perspectives/braille/stylers/WhiteSpaceHandler.java
 /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java
 /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java

=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/WhiteSpaceHandler.java Mon Dec 22 18:29:25 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/WhiteSpaceHandler.java Mon Dec 22 18:32:06 2014 UTC
@@ -74,6 +74,8 @@
list.shiftOffsetsFromIndex(list.getCurrentIndex(), ev.getText().length(), ev.getText().length());

                        text.view.setCaretOffset(list.getCurrent().start);
+                       text.refreshStyle(list.getCurrent());
+                       braille.refreshStyle(list.getCurrent());
                        
manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE));
                }
        }
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java Fri Dec 12 17:44:51 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java Mon Dec 22 18:32:06 2014 UTC
@@ -717,6 +717,26 @@
                        setListenerLock(false);
                }
        }
+
+       public void refreshStyle(TextMapElement t){
+               Styles style = stylesTable.makeStylesElement(t.parentElement(), 
t.n);
+ String text = view.getTextRange(t.brailleList.getFirst().start, t.brailleList.getLast().end - t.brailleList.getFirst().start);
+               int margin = 0;
+               if(style.contains(StylesType.format) && t.brailleList.size() > 
0)
+ setAlignment(t.brailleList.getFirst().start, t.brailleList.getLast().end, style);
+
+               //reset margin in case it is not applied
+ if(t.brailleList.getFirst().start == view.getOffsetAtLine(view.getLineAtOffset(t.brailleList.getFirst().start)))
+                       handleLineWrap(t.brailleList.getFirst().start, text, 0, 
false);
+
+               if(style.contains(StylesType.leftMargin)) {
+                       margin = 
Integer.valueOf((String)style.get(StylesType.leftMargin));
+ handleLineWrap(t.brailleList.getFirst().start, text, margin, style.contains(StylesType.firstLineIndent));
+               }
+
+ if(isFirst(t.brailleList.getFirst().n) && style.contains(StylesType.firstLineIndent))
+                       setFirstLineIndent(t.brailleList.getFirst().start, 
style);
+       }

        public void removeMathML(TextMapElement t){
                int total = t.brailleList.getLast().end - 
t.brailleList.getFirst().start;
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Mon Dec 22 18:29:25 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Mon Dec 22 18:32:06 2014 UTC
@@ -746,6 +746,32 @@
                spaceBeforeText = 0;
                setListenerLock(false);
        }
+
+       public void refreshStyle(TextMapElement t){
+ Styles style = stylesTable.makeStylesElement((Element)t.parentElement(), t.n);
+               String text = view.getTextRange(t.start, t.end - t.start);
+               int margin = 0;
+               if(style.contains(StylesType.leftMargin)){
+                       margin = 
Integer.valueOf((String)style.get(StylesType.leftMargin));
+ handleLineWrap(currentStart, text, margin, style.contains(StylesType.firstLineIndent));
+               }
+
+ if(isFirst(t.n) && style.contains(StylesType.firstLineIndent) && text.length() > 0)
+                       setFirstLineIndent(t.start, style);
+
+               if(style.contains(StylesType.emphasis))
+ setFontStyleRange(t.start, text.length(), (StyleRange)style.get(StylesType.emphasis));
+               else {
+                       StyleRange range = getStyleRange();
+                       if(range != null)
+                                resetStyleRange(range);
+               }
+
+               if(style.contains(StylesType.format))
+                       setAlignment(currentStart, currentEnd, style);
+               else
+                       setAlignment(currentStart, currentEnd, SWT.LEFT);
+       }

        public void removeMathML(Message m){
                setListenerLock(true);

Other related posts:

  • » [brailleblaster] 4 new revisions pushed by brandon....@xxxxxxxxx on 2014-12-22 18:30 GMT - brailleblaster