[brailleblaster] push by brandon....@xxxxxxxxx - undo/redo handles read only elements on 2015-03-06 21:25 GMT

  • From: brailleblaster@xxxxxxxxxxxxxx
  • To: brailleblaster@xxxxxxxxxxxxx
  • Date: Fri, 06 Mar 2015 21:25:49 +0000

Revision: 23dc0dfc4e73
Branch:   rt1447-MergeElements
Author:   Brandon Roller<brandon.r.roller@xxxxxxxxx>
Date:     Fri Mar  6 20:15:10 2015 UTC
Log:      undo/redo handles read only elements
https://code.google.com/p/brailleblaster/source/detail?r=23dc0dfc4e73

Modified:
/src/main/org/brailleblaster/perspectives/braille/eventQueue/EventFrame.java
 /src/main/org/brailleblaster/perspectives/braille/mapping/maps/MapList.java
 /src/main/org/brailleblaster/perspectives/braille/stylers/Handler.java
/src/main/org/brailleblaster/perspectives/braille/stylers/SelectionHandler.java
 /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java

=======================================
--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/EventFrame.java Fri Jan 23 17:19:49 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/EventFrame.java Fri Mar 6 20:15:10 2015 UTC
@@ -13,6 +13,10 @@
        public void addEvent(Event event){
                eventList.add(event);
        }
+
+       public void addEvent(int index, Event event){
+               eventList.add(index, event);
+       }

        public int size(){
                return eventList.size();
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/mapping/maps/MapList.java Sun Mar 1 17:37:36 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/mapping/maps/MapList.java Fri Mar 6 20:15:10 2015 UTC
@@ -526,7 +526,7 @@

                int countDown = index -  1;
                int countUp = index + 1;
- while(countDown >= 0 && doc.getParent(this.get(countDown).n, ignoreInlineElement).equals(parent)){ + while(countDown >= 0 && get(countDown).parentElement() != null && doc.getParent(this.get(countDown).n, ignoreInlineElement).equals(parent)){
                        list.add(0, this.get(countDown));
                        countDown--;
                }
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/Handler.java Sun Mar 1 17:40:40 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/Handler.java Fri Mar 6 20:15:10 2015 UTC
@@ -136,5 +136,11 @@
        protected boolean readOnly(TextMapElement t){
                return t instanceof BrlOnlyMapElement || t instanceof 
PageMapElement;
        }
+
+       protected boolean readOnly(Element e){
+               String sem = getSemanticAttribute(e);
+
+               return sem.equals("boxline") || sem.equals("pagenum");
+       }

 }
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/stylers/SelectionHandler.java Wed Mar 4 12:58:20 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/SelectionHandler.java Fri Mar 6 20:15:10 2015 UTC
@@ -88,8 +88,11 @@
                                clearAll = true;
                }

- updateFirstNode(firstEl, first, startPos, endPos, replacementText); + addEvent(firstEl, list.indexOf(firstList.get(0)), textStart, brailleStart, (ArrayList<Integer>)indexes.clone()); + addEvents(list.indexOf(firstList.get(firstList.size() - 1)) + 1, list.indexOf(lastList.get(0))); + addEvent(lastEl, list.indexOf(lastList.get(0)), lastList.get(0).start, lastList.get(0).brailleList.getFirst().start, (ArrayList<Integer>)indexes.clone());

+ updateFirstNode(firstEl, first, startPos, endPos, replacementText);
                if(!readOnly(first)){
int removed = clearElement(list.indexOf(first) + 1, list.indexOf(firstList.get(firstList.size() - 1)) + 1);
                        endIndex -= removed;
@@ -109,10 +112,10 @@
if(!(readOnly.get(j) instanceof BrlOnlyMapElement) && !(readOnly.get(j) instanceof PageMapElement)){
                                        readOnly.remove(j);
                                        j--;
-                               }
-
+                               }
                        }
                }
+

                if(!readOnly(last) && !clearAll){
                        list.setCurrent(endIndex);
@@ -132,6 +135,7 @@
                        textStart = startPos;
                }

+               list.setCurrent(startIndex);
clearViewRanges(textStart, brailleStart, list.get(endIndex), startIndex, endPos - startPos, endPos, replacementText);
                clearListItems(firstList);
                clearListItems(lastList);
@@ -279,6 +283,26 @@
                                e.getParent().removeChild(e);
                }
        }
+    }
+
+    private void addEvents(int start, int end){
+       int index = start;
+       ArrayList<TextMapElement> elList = new ArrayList<TextMapElement>();
+       while(index < end){
+               if(!readOnly(list.get(index))){
+                       Element e = getBlockElement(index);
+                       ArrayList<TextMapElement>local = 
getBlockMapElements(index, e);
+                       elList.addAll(local);
+                       index = list.indexOf(elList.get(elList.size() - 1)) + 1;
+ addEvent(e, list.indexOf(local.get(0)), local.get(0).start, local.get(0).brailleList.getFirst().start, tree.getItemPath());
+               }
+               else {
+ addEvent(list.get(index).parentElement(), index, list.get(index).start, list.get(index).brailleList.getFirst().start, tree.getItemPath());
+                       elList.add(list.get(index));
+                       index++;
+               }
+
+       }
     }

     private ArrayList<TextMapElement> removeElements(int start, int end){
@@ -287,7 +311,8 @@
        while(index < end){
                if(!readOnly(list.get(index))){
                        Element e = getBlockElement(index);
-                       elList.addAll(getBlockMapElements(index, e));
+                       ArrayList<TextMapElement>local = 
getBlockMapElements(index, e);
+                       elList.addAll(local);
                        index = list.indexOf(elList.get(elList.size() - 1)) + 1;
                }
                else {
@@ -327,7 +352,7 @@
        setViews(mapList,startIndex, textStart, brailleStart);
        tree.rebuildTree(indexes);
        }
- private void setViews(ArrayList<TextMapElement> elList, int index, int textOffset, int brailleOffset ){ + private void setViews(ArrayList<TextMapElement> elList, int index, int textOffset, int brailleOffset){
                Message m = new Message(null);
                int count = elList.size();

@@ -342,8 +367,7 @@
                                brailleOffset = 
(Integer)m.getValue("brailleOffset");
                                brailleLength += 
(Integer)m.getValue("brailleLength");
                        }
-
-                       //int textLength = list.get(index).end - 
list.get(index).start;
+
                        int textLength = (Integer)m.getValue("textLength");
                        textOffset = (Integer)m.getValue("textOffset");
                        list.shiftOffsetsFromIndex(index + 1, textLength, 
brailleLength);
@@ -433,44 +457,145 @@
ModelEvent ev = new ModelEvent(EventTypes.Selection, blockElement, vi.getStartIndex(), listIndex, textStart, brailleStart, treeIndexes);
        evFrame.addEvent(ev);
     }
+
+ private void pushEvent(Element blockElement, int listIndex, int textStart, int brailleStart, ArrayList<Integer> treeIndexes){ + ModelEvent ev = new ModelEvent(EventTypes.Selection, blockElement, vi.getStartIndex(), listIndex, textStart, brailleStart, treeIndexes);
+       evFrame.addEvent(0, ev);
+    }

     public void undoSelection(EventFrame frame){
        evFrame = new EventFrame();
-       handleEventFrame(frame);
+       boolean firstBlock = true;
+
+ while(!frame.empty() && frame.peek().getEventType().equals(EventTypes.Selection)){
+               ModelEvent ev = (ModelEvent)frame.push();
+               //System.out.println(ev.getNode().toXML().toString());
+               for(int i = 0; i < list.size(); i++)
+ System.out.println(i + ":\t" + list.get(i).getText() + " " + list.get(i).start + " " + list.get(i).end);
+               if(!readOnly((Element)ev.getNode())){
+                       if(firstBlock || frame.size() == 0){
+                               Element e = getBlockElement(ev.getListIndex());
+ ArrayList<TextMapElement> maplist = getBlockMapElements(ev.getListIndex(), e);
+                               TextMapElement first = maplist.get(0);
+                               TextMapElement last = 
maplist.get(maplist.size() - 1);
+
+                               int index = list.indexOf(first);
+                               int textStart = first.start;
+                               int brailleStart = 
first.brailleList.getFirst().start;
+                               addEvent(e, index, textStart, brailleStart, 
tree.getItemPath());
+
+       //              if(firstBlock || frame.size() == 0){
+                               e.getParent().replaceChild(e, ev.getNode());
+ clearViewRanges(textStart, first.brailleList.getFirst().start, last, list.indexOf(first), 0, last.end, "");
+                               clearListItems(maplist);
+               //      }
+       //              else
+       //                      ev.getParent().insertChild(ev.getNode(), 
ev.getParentIndex());
+
+                               int size = 
repopulateRange((Element)ev.getNode(), index);
+                               maplist = getListRange(index, size);
+ if(!firstBlock && ev.getListIndex() > 0 && !readOnly(list.get(ev.getListIndex() - 1))){
+                               text.insertText(textStart, "\n");
+                               textStart++;
+                               braille.insertText(brailleStart, "\n");
+                               brailleStart++;
+                               list.shiftOffsetsFromIndex(index, 1, 1);
+                       }
+ rebuildViews(maplist, index, textStart, brailleStart, ev.getTreeIndex());
+                       }
+                       else
+                               insertEvent(ev);
+               }
+               else
+                       readOnlyEvent(ev, false);
+
+               firstBlock = false;
+       }
        if(evFrame.size() > 0)
                manager.addRedoEvent(evFrame);
     }

     public void redoSelection(EventFrame frame){
        evFrame = new EventFrame();
-       handleEventFrame(frame);
+       boolean firstBlock = true;
+ while(!frame.empty() && frame.peek().getEventType().equals(EventTypes.Selection)){
+               ModelEvent ev = (ModelEvent)frame.pop();
+               if(!readOnly((Element)ev.getNode())){
+                       Element e = getBlockElement(ev.getListIndex());
+ ArrayList<TextMapElement> maplist = getBlockMapElements(ev.getListIndex(), e);
+                       TextMapElement first = maplist.get(0);
+                       TextMapElement last = maplist.get(maplist.size() - 1);
+
+                       int index = list.indexOf(first);
+                       int textStart = first.start;
+                       int brailleStart = first.brailleList.getFirst().start;
+                       pushEvent(e, index, textStart, brailleStart, 
tree.getItemPath());
+ if(!(firstBlock || frame.empty()) || (!firstBlock && list.indexOf(last) < list.size() - 1 && !readOnly(list.get(list.indexOf(last) + 1)))) + clearViewRanges(textStart, first.brailleList.getFirst().start, last, list.indexOf(first), 0, last.end + 1, "");
+                       else
+ clearViewRanges(textStart, first.brailleList.getFirst().start, last, list.indexOf(first), 0, last.end, "");
+
+                       clearListItems(maplist);
+                       if(firstBlock || frame.empty()){
+                               e.getParent().replaceChild(e, ev.getNode());
+                               int size = 
repopulateRange((Element)ev.getNode(), index);
+                               maplist = getListRange(index, size);
+ rebuildViews(maplist, index, textStart, brailleStart, ev.getTreeIndex());
+                       }
+                       else
+                               e.getParent().removeChild(e);
+               }
+               else
+                       readOnlyEvent(ev, true);
+
+               firstBlock = false;
+       }
        if(evFrame.size() > 0)
                manager.addUndoEvent(evFrame);
     }

-    private void handleEventFrame(EventFrame frame){
- while(!frame.empty() && frame.peek().getEventType().equals(EventTypes.Selection)){
-               ModelEvent ev = (ModelEvent)frame.pop();
-               resetSelection(ev);
-       }
+    private void insertEvent(ModelEvent ev){
+       Element e = (Element)ev.getNode();
+       int index = ev.getListIndex();
+       int textStart = ev.getTextOffset();
+       int brailleStart = ev.getBrailleOffset();
+       ev.getParent().insertChild(ev.getNode(), ev.getParentIndex());
+       addEvent(e, index, textStart, brailleStart, tree.getItemPath());
+       int size = repopulateRange(e, index);
+               ArrayList<TextMapElement>maplist = getListRange(index, size);
+
+ System.out.println(list.get(ev.getListIndex() - 1).end + " " + list.get(ev.getListIndex() + 1).start);
+               if(ev.getListIndex() > 0 && 
!readOnly(list.get(ev.getListIndex() - 1))){
+           //  text.insertText(textStart, "\n");
+           //  textStart++;
+           //  braille.insertText(brailleStart, "\n");
+           //  brailleStart++;
+           //  list.shiftOffsetsFromIndex(index, 1, 1);
+                       //int start = list.get(ev.getListIndex() - 1).end;
+                        text.insertText(list.get(ev.getListIndex() - 1).end, 
"\n");
+                //     textStart++;
+ braille.insertText(list.get(ev.getListIndex() - 1).brailleList.getLast().end, "\n");
+                       //brailleStart++;
+                       list.shiftOffsetsFromIndex(index, 1, 1);
+               }
+               rebuildViews(maplist, index, textStart, brailleStart, 
ev.getTreeIndex());
+
     }

-    private void resetSelection(ModelEvent ev){
-       Element e = getBlockElement(ev.getListIndex());
- ArrayList<TextMapElement> maplist = getBlockMapElements(ev.getListIndex(), e);
-       TextMapElement first = maplist.get(0);
-       TextMapElement last = maplist.get(maplist.size() - 1);
-
-       int index = list.indexOf(first);
-       int textStart = first.start;
-       int brailleStart = first.brailleList.getFirst().start;
-       addEvent(e, index, textStart, brailleStart, tree.getItemPath());
- clearViewRanges(textStart, first.brailleList.getFirst().start, last, list.indexOf(first), 0, last.end, "");
-       clearListItems(maplist);
+    private void readOnlyEvent(ModelEvent ev, boolean push){
+       ArrayList<TextMapElement> maplist = new ArrayList<TextMapElement>();
+       TextMapElement t = list.get(ev.getListIndex());
+       maplist.add(t);
+       if(push)
+ pushEvent(t.parentElement(), ev.getListIndex(), ev.getTextOffset(), ev.getBrailleOffset(), tree.getItemPath());
+       else
+ addEvent(t.parentElement(), ev.getListIndex(), ev.getTextOffset(), ev.getBrailleOffset(), tree.getItemPath());

-       e.getParent().replaceChild(e, ev.getNode());
-       int size = repopulateRange((Element)ev.getNode(), index);
-               maplist = getListRange(index, size);
- rebuildViews(maplist, index, textStart, brailleStart, ev.getTreeIndex());
+       int start = ev.getTextOffset();
+       int brailleStart = ev.getBrailleOffset();
+ clearViewRanges(t.start, t.brailleList.getFirst().start, t, ev.getListIndex(), 0, t.end, "");
+       t.setOffsets(0, 0);
+       t.brailleList.getFirst().setOffsets(0, 0);
+ rebuildViews(maplist, ev.getListIndex(), start, brailleStart, ev.getTreeIndex());
     }
 }
=======================================
--- /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Mon Mar 2 18:38:06 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Fri Mar 6 20:15:10 2015 UTC
@@ -400,6 +400,8 @@

                                if(view.getLineAtOffset(view.getCaretOffset()) 
!= currentLine)
                                        
sendStatusBarUpdate(view.getLineAtOffset(view.getCaretOffset()));
+
+                               System.out.println("Text pos: " + 
view.getCaretOffset());
                        }
                });

@@ -1104,7 +1106,6 @@
                        m.put("textLength", 0);
                        m.put("textOffset", reformattedText.length() + start);

-                       //start += linesBefore;
                        //reset margin in case it is not applied
                        if(start == 
view.getOffsetAtLine(view.getLineAtOffset(start)))
                                handleLineWrap(start, reformattedText, 0, 
false);

Other related posts:

  • » [brailleblaster] push by brandon....@xxxxxxxxx - undo/redo handles read only elements on 2015-03-06 21:25 GMT - brailleblaster