Revision: 55817f4e8a8c Branch: rt1720-UndoStyles Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Mon Dec 15 20:54:13 2014 UTC Log: Fixed bug with multiple hide events https://code.google.com/p/brailleblaster/source/detail?r=55817f4e8a8c Modified: /src/main/org/brailleblaster/perspectives/braille/Manager.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/ElementInserter.java /src/main/org/brailleblaster/perspectives/braille/stylers/HideActionHandler.java
=======================================--- /src/main/org/brailleblaster/perspectives/braille/Manager.java Mon Dec 15 19:50:35 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/Manager.java Mon Dec 15 20:54:13 2014 UTC
@@ -1467,7 +1467,7 @@ public void undo(){ EventFrame f = undoQueue.popEvent(vi, document, list, this);- if(f != null && f.size() > 0 && !f.get(0).getEventType().equals(EventTypes.Update) && !f.get(0).getEventType().equals(EventTypes.Style_Change)) + if(f != null && f.size() > 0 && !f.get(0).getEventType().equals(EventTypes.Update) && !f.get(0).getEventType().equals(EventTypes.Style_Change) & !f.get(0).getEventType().equals(EventTypes.Hide))
redoQueue.add(f); } =======================================--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java Mon Dec 15 19:50:35 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java Mon Dec 15 20:54:13 2014 UTC
@@ -38,7 +38,7 @@ break; case Hide: HideActionHandler h = new HideActionHandler(manager, list, vi); - h.hideText(event); + h.hideText(f); break; default: break; =======================================--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Mon Dec 15 19:50:35 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Mon Dec 15 20:54:13 2014 UTC
@@ -29,7 +29,7 @@ break; case Hide: ElementInserter es = new ElementInserter(vi, doc, list, manager); - es.resetElement(event); + es.resetElement(f); break; case Style_Change: StyleHandler s = new StyleHandler(manager, vi, list); =======================================--- /src/main/org/brailleblaster/perspectives/braille/stylers/ElementInserter.java Mon Dec 8 20:51:17 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/ElementInserter.java Mon Dec 15 20:54:13 2014 UTC
@@ -13,6 +13,8 @@ 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.mapping.elements.BrailleMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.BrlOnlyMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.PageMapElement;
@@ -35,6 +37,7 @@ TextView text; BrailleView braille; BBTree tree; + EventFrame frame;public ElementInserter(ViewInitializer vi, BrailleDocument doc, MapList list, Manager manager){
this.vi = vi; @@ -143,22 +146,29 @@ tree.newTreeItem(list.get(list.getCurrentIndex() + 1), index, 1); } - public void resetElement(Event f){ - if(vi.getStartIndex() != f.getFirstSectionIndex()) - list = vi.resetViews(f.getFirstSectionIndex()); + public void resetElement(EventFrame f){ + frame = new EventFrame();+ while(f.size() > 0 && f.get(f.size() - 1).getEventType().equals(EventTypes.Hide)){
+ Event event = f.pop(); + if(vi.getStartIndex() != event.getFirstSectionIndex()) + list = vi.resetViews(event.getFirstSectionIndex()); - Element replacedElement = replaceElement(f); - updateSemanticEntry(replacedElement, (Element)f.getNode()); + Element replacedElement = replaceElement(event); + updateSemanticEntry(replacedElement, (Element)event.getNode());- ArrayList<TextMapElement> elList = constructMapElements((Element)f.getNode(), 0); - setViews(elList, f.getListIndex(), f.getTextOffset(), f.getBrailleOffset()); + ArrayList<TextMapElement> elList = constructMapElements((Element)event.getNode(), 0); + setViews(elList, event.getListIndex(), event.getTextOffset(), event.getBrailleOffset());
- manager.getTreeView().rebuildTree(f.getTreeIndex());- manager.dispatch(Message.createSetCurrentMessage(Sender.TREE, list.get(f.getListIndex()).start, false));
- manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE)); + manager.getTreeView().rebuildTree(event.getTreeIndex());+ manager.dispatch(Message.createSetCurrentMessage(Sender.TREE, list.get(event.getListIndex()).start, false));
+ manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE)); - if(!onScreen(f.getTextOffset())) - setTopIndex(f.getTextOffset()); + 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()));
+ } + manager.addRedoEvent(frame); }private ArrayList<TextMapElement> constructMapElements(Element e, int index){
=======================================--- /src/main/org/brailleblaster/perspectives/braille/stylers/HideActionHandler.java Mon Dec 15 19:50:35 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/HideActionHandler.java Mon Dec 15 20:54:13 2014 UTC
@@ -45,41 +45,61 @@ } public void hideText(){ + eventFrame = new EventFrame(); if(list.size() > 0 && text.view.getCharCount() > 0){ - if(text.isMultiSelected()) - hideMultipleElements(); - else if(!(list.getCurrent() instanceof BrlOnlyMapElement)) + if(text.isMultiSelected()){ + boolean valid = hideMultipleElements(); + if(valid) + manager.addUndoEvent(eventFrame); + } + else if(!(list.getCurrent() instanceof BrlOnlyMapElement)){ hideSingleElement(); + manager.addUndoEvent(eventFrame); + } else invalidSelection(); } } - public void hideText(Event ev){- manager.dispatch(Message.createSetCurrentMessage(Sender.TREE, list.get(ev.getListIndex()).start, false));
+ public void hideText(EventFrame f){ + eventFrame = new EventFrame();+ while(f.size() > 0 && f.get(f.size() - 1).getEventType().equals(EventTypes.Hide)){
+ Event ev = f.pop();+ manager.dispatch(Message.createSetCurrentMessage(Sender.TREE, list.get(ev.getListIndex()).start, false));
- //resets selection to recreate hide event by user - if(list.getCurrent() instanceof BrlOnlyMapElement){- BrlOnlyMapElement b = list.findJoiningBoxline((BrlOnlyMapElement)list.getCurrent());
- int start =list.getCurrent().start; - int end = b.end; - text.setCurrentSelection(start, end); - } + //resets selection to recreate hide event by user + if(list.getCurrent() instanceof BrlOnlyMapElement){+ BrlOnlyMapElement b = list.findJoiningBoxline((BrlOnlyMapElement)list.getCurrent());
+ int start =list.getCurrent().start; + int end = b.end; + text.setCurrentSelection(start, end); + } - hideText(); + redoHide(); + } + manager.addUndoEvent(eventFrame); + } + + private void redoHide(){ + if(list.size() > 0 && text.view.getCharCount() > 0){ + if(text.isMultiSelected()) + hideMultipleElements(); + else if(!(list.getCurrent() instanceof BrlOnlyMapElement)) + hideSingleElement(); + else + invalidSelection(); + } } private void hideSingleElement(){ text.update(false); int index = list.getCurrentIndex(); - eventFrame = new EventFrame(); boxlineAdded = false; hide(list.getCurrent()); updateCurrentElement(index); - manager.addUndoEvent(eventFrame); } - private void hideMultipleElements(){ + private boolean hideMultipleElements(){ int start=text.getSelectedText()[0]; int end=text.getSelectedText()[1]; boolean invalid = false; @@ -90,7 +110,6 @@ Integer index = null; if(!invalid){ itr = itemSet.iterator(); - eventFrame = new EventFrame(); boxlineAdded = false; while (itr.hasNext()) { TextMapElement tempElement= itr.next(); @@ -100,8 +119,10 @@ hide(tempElement); } updateCurrentElement(index); - manager.addUndoEvent(eventFrame); + return true; } + + return invalid; } private void updateCurrentElement(int index){