2 new revisions: Revision: 9fb229a1292c Branch: rt1835-UndoRemoveElement Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Thu Dec 4 16:29:20 2014 UTC Log: Added handling of undoing removal of a text node https://code.google.com/p/brailleblaster/source/detail?r=9fb229a1292c Revision: 2a48d28e0d47 Branch: rt1835-UndoRemoveElement Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Thu Dec 4 16:32:11 2014 UTC Log: Merged with default https://code.google.com/p/brailleblaster/source/detail?r=2a48d28e0d47 ============================================================================== Revision: 9fb229a1292c Branch: rt1835-UndoRemoveElement Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Thu Dec 4 16:29:20 2014 UTC Log: Added handling of undoing removal of a text node https://code.google.com/p/brailleblaster/source/detail?r=9fb229a1292c Modified: /src/main/org/brailleblaster/BBIni.java/src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.java
/src/main/org/brailleblaster/perspectives/braille/eventQueue/Event.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/ElementRemover.java
/src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java /src/main/org/brailleblaster/perspectives/braille/views/wp/WPView.java ======================================= --- /src/main/org/brailleblaster/BBIni.java Wed Dec 3 14:32:23 2014 UTC +++ /src/main/org/brailleblaster/BBIni.java Thu Dec 4 16:29:20 2014 UTC @@ -63,10 +63,6 @@ * @author cmyers * */ -/** - * @author cmyers - * - */ public final class BBIni { private static BBIni bbini; @@ -112,7 +108,6 @@ public final static String propExtension = ".properties"; private static boolean hSubcommands = false; private static boolean hLiblouisutdml = false; - // private static FileHandler logFile; private static final String BBID = "brlblst"; private static String instanceId; private static String defaultCfg; =======================================--- /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.java Wed Dec 3 17:29:00 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.java Thu Dec 4 16:29:20 2014 UTC
@@ -301,36 +301,29 @@ int index = (Integer)message.getValue("index"); if(list.get(index).isMathML()) removeMathML(list.get(index), message); + else if(message.contains("element")) + removeElement(message); else - removeNode(list.get((Integer)message.getValue("index")), message); + removeNode(list.get((Integer)message.getValue("index"))); + } + + private void removeElement(Message m){ + Element e = (Element)m.getValue("element"); + e.getParent().removeChild(e); }/** Removes a node from the DOM, checks whether other children exists, if not the entire element is removed
* @param t : TextMapElement containing node to remove * @param message : message to put element information */ - private void removeNode(TextMapElement t, Message message){- if(hasNonBrailleChildren(t.parentElement()) && !(t.n instanceof Element)){
- Element e = (Element)t.brailleList.getFirst().n.getParent(); - t.parentElement().removeChild(e); - t.parentElement().removeChild(t.n); - } - else { - Element parent = t.parentElement(); - while(!parent.getAttributeValue("semantics").contains("style")){ - if(((Element)parent.getParent()).getChildElements().size() <= 1) - parent = (Element)parent.getParent(); - else - break; - } - - message.put("element", parent); - parent.getParent().removeChild(parent); - } + private void removeNode(TextMapElement t){ + Element e = (Element)t.brailleList.getFirst().n.getParent(); + t.parentElement().removeChild(e); + t.parentElement().removeChild(t.n); } /** Removes MathML from DOM - * @param t : TextMapElemetn to remove + * @param t : TextMapElement to remove * @param m : message to contain offset information */ private void removeMathML(TextMapElement t, Message m){ @@ -527,7 +520,7 @@ * @param e : Element to check * @return true if non-braille children exist, false if not */ - private boolean hasNonBrailleChildren(Element e){ + public boolean hasNonBrailleChildren(Element e){ Elements els = e.getChildElements(); for(int i = 0; i <els.size(); i++){ if(!els.get(i).getLocalName().equals("brl")){ =======================================--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/Event.java Fri Nov 21 17:40:12 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/Event.java Thu Dec 4 16:29:20 2014 UTC
@@ -2,21 +2,21 @@ import java.util.ArrayList; -import nu.xom.Element; +import nu.xom.Node; import nu.xom.ParentNode; public class Event { EventTypes eventType; - Element element; + Node node; int firstSectionIndex, listIndex, parentIndex, textOffset, brailleOffset; ArrayList<Integer> treeIndexes; ParentNode parent;- public Event(EventTypes eventType, Element e, int firstSectionIndex, int listIndex, int textOffset, int brailleOffset, ArrayList<Integer> treeIndexes){ + public Event(EventTypes eventType, Node node, int firstSectionIndex, int listIndex, int textOffset, int brailleOffset, ArrayList<Integer> treeIndexes){
this.eventType = eventType; - this.element = (Element)e.copy(); - this.parent = e.getParent(); - this.parentIndex = parent.indexOf(e); + this.node = (Node)node.copy(); + this.parent = node.getParent(); + this.parentIndex = parent.indexOf(node); this.firstSectionIndex = firstSectionIndex; this.listIndex = listIndex; this.textOffset = textOffset; @@ -24,8 +24,8 @@ this.treeIndexes = treeIndexes; } - public Element getElement(){ - return element; + public Node getNode(){ + return node; } public ParentNode getParent(){ =======================================--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Wed Dec 3 14:32:23 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Thu Dec 4 16:29:20 2014 UTC
@@ -28,6 +28,8 @@ es.resetElement(event); break; case Delete:+ ElementInserter inserter = new ElementInserter(vi, doc, list, manager);
+ inserter.insertElement(event); break; default: break; =======================================--- /src/main/org/brailleblaster/perspectives/braille/stylers/ElementInserter.java Wed Dec 3 17:29:00 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/ElementInserter.java Thu Dec 4 16:29:20 2014 UTC
@@ -52,6 +52,57 @@ else insertElementAtEnd(m); } + + public void insertElement(Event ev){ + ParentNode p = ev.getParent(); + if(ev.getNode() instanceof Text){ + p.insertChild(ev.getNode(), ev.getParentIndex()); + Element brl = new Element("brl"); + brl.appendChild(new Text("")); + p.insertChild(brl, ev.getParentIndex() + 1);+ ((Element)p.getChild(ev.getParentIndex() + 1)).setNamespaceURI(doc.getRootElement().getNamespaceURI());
+ } + else + p.insertChild(ev.getNode(), ev.getParentIndex()); ++ 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);
+ } + } + + if(list.size() - 1 != ev.getListIndex() + 1) + list.shiftOffsetsFromIndex(ev.getListIndex() + 1, 1, 1); + + text.insertLineBreak(ev.getTextOffset()); + braille.insertLineBreak(ev.getBrailleOffset()); + tree.rebuildTree(ev.getTreeIndex()); + } + else { + ArrayList<TextMapElement>elList; + if(ev.getNode() instanceof Element) + elList = constructMapElements((Element)ev.getNode(), 0); + else+ elList = constructMapElements((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());
+ } + } + tree.rebuildTree(ev.getTreeIndex()); + } + + list.setCurrent(ev.getListIndex()); + manager.dispatch(Message.createUpdateCursorsMessage(Sender.TREE)); + } private void insertElementAtBeginning(Message m){ if(list.getCurrentIndex() > 0 && list.getCurrent().start != 0) @@ -96,9 +147,9 @@ list = vi.resetViews(f.getFirstSectionIndex()); Element replacedElement = replaceElement(f); - updateSemanticEntry(replacedElement, f.getElement()); + updateSemanticEntry(replacedElement, (Element)f.getNode()); - ArrayList<TextMapElement> elList = constructMapElements(f.getElement());+ ArrayList<TextMapElement> elList = constructMapElements((Element)f.getNode(), 0); setViews(elList, f.getListIndex(), f.getTextOffset(), f.getBrailleOffset());
manager.getTreeView().rebuildTree(f.getTreeIndex()); @@ -109,12 +160,12 @@ setTopIndex(f.getTextOffset()); } - private ArrayList<TextMapElement> constructMapElements(Element e){+ private ArrayList<TextMapElement> constructMapElements(Element e, int index){
ArrayList<TextMapElement> elList = new ArrayList<TextMapElement>(); if(e.getAttributeValue("semantics").contains("pagenum")) elList.add(makePageMapElement(e)); else { - for(int i = 0; i < e.getChildCount(); i++){ + for(int i = index; i < e.getChildCount(); 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)){
@@ -126,7 +177,7 @@else if(e.getChild(i) instanceof Element && ((Element)e.getChild(i)).getLocalName().equals("brl") && isBoxline(e))
elList.add(new BrlOnlyMapElement(e.getChild(i), e)); else if(e.getChild(i) instanceof Element) - elList.addAll(constructMapElements((Element)e.getChild(i))); + elList.addAll(constructMapElements((Element)e.getChild(i), 0)); } } @@ -197,7 +248,7 @@ private Element replaceElement(Event f){ ParentNode parent = f.getParent(); Element replacedElement = (Element)parent.getChild(f.getParentIndex()); - parent.replaceChild(replacedElement, f.getElement()); + parent.replaceChild(replacedElement, f.getNode()); return replacedElement; } =======================================--- /src/main/org/brailleblaster/perspectives/braille/stylers/ElementRemover.java Mon Dec 1 18:24:59 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/ElementRemover.java Thu Dec 4 16:29:20 2014 UTC
@@ -1,7 +1,14 @@ package org.brailleblaster.perspectives.braille.stylers; +import java.util.ArrayList; + +import nu.xom.Element; +import nu.xom.Node; + import org.brailleblaster.perspectives.braille.Manager; +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.TextMapElement;
import org.brailleblaster.perspectives.braille.mapping.maps.MapList; import org.brailleblaster.perspectives.braille.messages.Message; @@ -32,8 +39,10 @@ int index = (Integer)m.getValue("index"); if(list.get(index).isMathML() ) removeMathMLElement(m); - else + else { + addEvent(m); removeElement(m); + } } private void removeElement(Message message){ @@ -43,13 +52,8 @@ list.get(index).brailleList.clear(); vi.remove(list, index); - if(list.size() == 0){ - text.removeListeners(); - braille.removeListeners(); - tree.removeListeners(); - list.clearList(); - text.view.setEditable(false); - } + if(emptyList()) + disableViews(); } private void removeMathMLElement(Message m){ @@ -64,12 +68,49 @@ list.updateOffsets(index, m); vi.remove(list, index); - if(list.size() == 0){ - text.removeListeners(); - braille.removeListeners(); - tree.removeListeners(); - list.clearList(); - text.view.setEditable(false); + if(emptyList()) + disableViews(); + } + + private void addEvent(Message message){ + int index = (Integer)message.getValue("index"); + ArrayList<Integer>treeIndex = tree.getItemPath(); + EventFrame f = new EventFrame(); + Node node = findElement(list.get(index)); + + if(node instanceof Element) + message.put("element", node); ++ f.addEvent(new Event(EventTypes.Delete, node, vi.getStartIndex(), index, list.get(index).start, list.get(index).brailleList.getFirst().start, treeIndex));
+ manager.addUndoEvent(f); + } + + private Node findElement(TextMapElement t){+ if(manager.getDocument().hasNonBrailleChildren(t.parentElement()) && !(t.n instanceof Element)){
+ return t.n; } + else { + Element e = t.parentElement(); + while(!e.getAttributeValue("semantics").contains("style")){ + if(((Element)e.getParent()).getChildElements().size() <= 1) + e = (Element)e.getParent(); + else + break; + } + + return e; + } + } + + private void disableViews(){ + text.removeListeners(); + braille.removeListeners(); + tree.removeListeners(); + list.clearList(); + text.view.setEditable(false); + } + + private boolean emptyList(){ + return list.size() == 0; } } =======================================--- /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java Mon Dec 1 18:24:59 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java Thu Dec 4 16:29:20 2014 UTC
@@ -925,15 +925,6 @@ view.setCaretOffset(originalPosition); setListenerLock(false); } - - public void insertLineBreak(int insertPosition){ - setListenerLock(true); - int pos = view.getCaretOffset(); - view.setCaretOffset(insertPosition); - view.insert("\n"); - view.setCaretOffset(pos); - setListenerLock(false); - } @Override public void addPageNumber(PageMapElement p, boolean insert) { =======================================--- /src/main/org/brailleblaster/perspectives/braille/views/wp/WPView.java Fri Oct 31 18:59:14 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/WPView.java Thu Dec 4 16:29:20 2014 UTC
@@ -422,4 +422,13 @@ public int getTotal(){ return total; } + + public void insertLineBreak(int insertPosition){ + setListenerLock(true); + int pos = view.getCaretOffset(); + view.setCaretOffset(insertPosition); + view.insert("\n"); + view.setCaretOffset(pos); + setListenerLock(false); + } } ============================================================================== Revision: 2a48d28e0d47 Branch: rt1835-UndoRemoveElement Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Thu Dec 4 16:32:11 2014 UTC Log: Merged with default https://code.google.com/p/brailleblaster/source/detail?r=2a48d28e0d47 Modified: /src/main/org/brailleblaster/BBIni.java /src/main/org/brailleblaster/settings/ui/PageNumbersTab.java ======================================= --- /src/main/org/brailleblaster/BBIni.java Thu Dec 4 16:29:20 2014 UTC +++ /src/main/org/brailleblaster/BBIni.java Thu Dec 4 16:32:11 2014 UTC @@ -155,17 +155,13 @@ propManager = new PropertyFileManager(userSettings); // Receive about.properties - aboutProject = userProgramDataPath + fileSep + "settings" + fileSep - + "about.properties"; - if (!fu.exists(aboutProject)) { - fu.copyFile(programDataPath + fileSep + "settings" + fileSep - + "about.properties", aboutProject); - }+ aboutProject = programDataPath + fileSep + "settings" + fileSep + "about.properties" ;
//Load values Properties prop = new Properties(); - try { + try { prop.load(new FileInputStream(BBIni.getAbout())); + //new FileInputStream(BBIni.getAbout()).; } catch (IOException e) { e.printStackTrace(); } =======================================--- /src/main/org/brailleblaster/settings/ui/PageNumbersTab.java Mon Dec 1 18:24:59 2014 UTC +++ /src/main/org/brailleblaster/settings/ui/PageNumbersTab.java Thu Dec 4 16:32:11 2014 UTC
@@ -4,7 +4,6 @@ import org.brailleblaster.localization.LocaleHandler; import org.brailleblaster.settings.SettingsManager; - import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent;