Revision: ebf39a06503c Branch: rt1835-UndoRemoveElement Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Mon Dec 8 19:05:31 2014 UTC Log: Added rough implementation of undoing removal of an element https://code.google.com/p/brailleblaster/source/detail?r=ebf39a06503c Modified: /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java/src/main/org/brailleblaster/perspectives/braille/stylers/ElementInserter.java /src/main/org/brailleblaster/perspectives/braille/stylers/ElementRemover.java
/src/main/org/brailleblaster/wordprocessor/WPManager.java =======================================--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java Wed Dec 3 14:32:23 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java Mon Dec 8 19:05:31 2014 UTC
@@ -3,6 +3,7 @@ import org.brailleblaster.perspectives.braille.Manager; import org.brailleblaster.perspectives.braille.document.BrailleDocument; import org.brailleblaster.perspectives.braille.mapping.maps.MapList; +import org.brailleblaster.perspectives.braille.stylers.ElementRemover; import org.brailleblaster.perspectives.braille.stylers.HideActionHandler;import org.brailleblaster.perspectives.braille.viewInitializer.ViewInitializer;
@@ -24,6 +25,8 @@ case Insert: break; case Delete: + ElementRemover remover = new ElementRemover(manager, list, vi); + remover.removeNode(event); break; case Hide: HideActionHandler h = new HideActionHandler(manager, list, vi); =======================================--- /src/main/org/brailleblaster/perspectives/braille/stylers/ElementInserter.java Thu Dec 4 16:29:20 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/ElementInserter.java Mon Dec 8 19:05:31 2014 UTC
@@ -68,13 +68,7 @@if(ev.getNode() instanceof Element && ((Element)ev.getNode()).getAttributeValue("semantics").contains("style")){ ArrayList<TextMapElement>elList = constructMapElements((Element)ev.getNode(), 0);
- for(int i = 0, index = ev.getListIndex(); i < elList.size(); i++, index++){
- list.add(index, elList.get(i));- list.get(index).setOffsets(ev.getTextOffset() + 1, ev.getTextOffset() + 1);
- for(int j = 0; j < list.get(index).brailleList.size(); j++){- list.get(index).brailleList.get(j).setOffsets(ev.getBrailleOffset() + 1, ev.getBrailleOffset() + 1);
- } - }+ insertInList(elList, ev.getListIndex(), ev.getTextOffset() + 1, ev.getBrailleOffset() + 1);
if(list.size() - 1 != ev.getListIndex() + 1) list.shiftOffsetsFromIndex(ev.getListIndex() + 1, 1, 1); @@ -88,21 +82,25 @@ if(ev.getNode() instanceof Element) elList = constructMapElements((Element)ev.getNode(), 0); else- elList = constructMapElements((Element)ev.getParent(), ev.getParentIndex()); + elList = constructMapElement((Element)ev.getParent(), ev.getParentIndex());
- for(int i = 0, index = ev.getListIndex(); i < elList.size(); i++, index++){
- list.add(index, elList.get(i)); - list.get(index).setOffsets(ev.getTextOffset(), ev.getTextOffset()); - for(int j = 0; j < list.get(index).brailleList.size(); j++){- list.get(index).brailleList.get(j).setOffsets(ev.getBrailleOffset(), ev.getBrailleOffset());
- } - }+ insertInList(elList, ev.getListIndex(), ev.getTextOffset(), ev.getBrailleOffset());
+ tree.rebuildTree(ev.getTreeIndex()); } list.setCurrent(ev.getListIndex()); manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE)); } ++ public void insertInList(ArrayList<TextMapElement>elList, int index, int textOffset, int brailleOffset){
+ for(int i = 0; i < elList.size(); i++, index++){ + list.add(index, elList.get(i)); + list.get(index).setOffsets(textOffset, textOffset); + for(int j = 0; j < list.get(index).brailleList.size(); j++)+ list.get(index).brailleList.get(j).setOffsets(brailleOffset, brailleOffset);
+ } + } private void insertElementAtBeginning(Message m){ if(list.getCurrentIndex() > 0 && list.getCurrent().start != 0) @@ -179,6 +177,28 @@ else if(e.getChild(i) instanceof Element) elList.addAll(constructMapElements((Element)e.getChild(i), 0)); } + } + + return elList; + } ++ private ArrayList<TextMapElement> constructMapElement(Element e, int index){
+ ArrayList<TextMapElement> elList = new ArrayList<TextMapElement>(); + if(e.getAttributeValue("semantics").contains("pagenum")) + elList.add(makePageMapElement(e)); + else { + for(int i = index; i < index + 2; i++){ + if(e.getChild(i) instanceof Text) + elList.add(new TextMapElement(e.getChild(i)));+ else if(e.getChild(i) instanceof Element && ((Element)e.getChild(i)).getLocalName().equals("brl") && !isBoxline(e)){
+ for(int j = 0; j < e.getChild(i).getChildCount(); j++){ + if(e.getChild(i).getChild(j) instanceof Text)+ elList.get(elList.size() - 1).brailleList.add(new BrailleMapElement(e.getChild(i).getChild(j)));
+ } + }+ else if(e.getChild(i) instanceof Element && ((Element)e.getChild(i)).getLocalName().equals("brl") && isBoxline(e))
+ elList.add(new BrlOnlyMapElement(e.getChild(i), e)); + } } return elList; =======================================--- /src/main/org/brailleblaster/perspectives/braille/stylers/ElementRemover.java Thu Dec 4 18:40:23 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/ElementRemover.java Mon Dec 8 19:05:31 2014 UTC
@@ -10,9 +10,12 @@ 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.BrlOnlyMapElement; +import org.brailleblaster.perspectives.braille.mapping.elements.PageMapElement; 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.viewInitializer.ViewInitializer;
import org.brailleblaster.perspectives.braille.views.tree.BBTree; import org.brailleblaster.perspectives.braille.views.wp.BrailleView; @@ -44,6 +47,20 @@ else removeElement(m); } + + public void removeNode(Event ev){+ int length = list.get(ev.getListIndex()).end - list.get(ev.getListIndex()).end;
+ Message m = Message.createRemoveNodeMessage(ev.getListIndex(), length); + removeNode(m); ++ if(ev.getNode() instanceof Element && isBlockElement(list.get(ev.getListIndex()))){
+ text.replaceTextRange(ev.getTextOffset(), 1, ""); + braille.replaceTextRange(ev.getBrailleOffset(), 1, ""); + list.shiftOffsetsFromIndex(ev.getListIndex(), -1, -1); + } ++ manager.dispatch(Message.createSetCurrentMessage(Sender.TREE, ev.getTextOffset(), false));
+ } private void removeElement(Message message){ int index = (Integer)message.getValue("index"); @@ -137,4 +154,26 @@ private boolean emptyList(){ return list.size() == 0; } + + private boolean isBlockElement(TextMapElement t){ + if( t instanceof PageMapElement || t instanceof BrlOnlyMapElement) + return true; + else {+ if(t.parentElement().getAttributeValue("semantics").contains("style") && t.parentElement().indexOf(t.n) == 0)
+ return true;+ else if(firstInLineElement(t.parentElement()) && t.parentElement().indexOf(t.n) == 0)
+ return true; + } + return false; + } + + private boolean firstInLineElement(Element e){ + Element parent = (Element)e.getParent();+ if(parent.getAttribute("semantics") != null && parent.getAttributeValue("semantics").contains("style")){
+ if(parent.indexOf(e) == 0) + return true; + } + + return false; + } } =======================================--- /src/main/org/brailleblaster/wordprocessor/WPManager.java Thu Oct 30 13:39:56 2014 UTC +++ /src/main/org/brailleblaster/wordprocessor/WPManager.java Mon Dec 8 19:05:31 2014 UTC
@@ -152,7 +152,8 @@ display.sleep(); } } catch (Throwable e) { -/* logger.debug("Uncaught exception detected", e); + logger.error("Uncaught exception detected", e); + /* MessageBox questionBox = new MessageBox(this.shell, SWT.ICON_QUESTION | SWT.YES | SWT.NO); questionBox.setMessage(lh.localValue("UnexpectedError.Message"));