2 new revisions: Revision: 14716d1e93a9 Branch: rt1447-MergeElements Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Mon Mar 2 18:38:06 2015 UTC Log: Moved more code from views to selection handler https://code.google.com/p/brailleblaster/source/detail?r=14716d1e93a9 Revision: 1b84efe0a2a5 Branch: rt1447-MergeElements Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Mon Mar 2 20:07:37 2015 UTC Log: Began implementation of undo/redo for multiple element selection https://code.google.com/p/brailleblaster/source/detail?r=1b84efe0a2a5 ============================================================================== Revision: 14716d1e93a9 Branch: rt1447-MergeElements Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Mon Mar 2 18:38:06 2015 UTC Log: Moved more code from views to selection handler https://code.google.com/p/brailleblaster/source/detail?r=14716d1e93a9 Modified: /src/main/org/brailleblaster/perspectives/braille/messages/Message.java/src/main/org/brailleblaster/perspectives/braille/stylers/SelectionHandler.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/messages/Message.java Sun Mar 1 18:00:25 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/messages/Message.java Mon Mar 2 18:38:06 2015 UTC
@@ -141,9 +141,9 @@ return m; } - public static Message createSelectionMessage(int start, int end){+ public static Message createSelectionMessage(String replacementText, int start, int end){
Message m = new Message(BBEvent.SELECTION); - //m.put("replacementText", replacementText); + m.put("replacementText", replacementText); m.put("start", start); m.put("end", end); =======================================--- /src/main/org/brailleblaster/perspectives/braille/stylers/SelectionHandler.java Sun Mar 1 20:50:50 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/SelectionHandler.java Mon Mar 2 18:38:06 2015 UTC
@@ -26,6 +26,7 @@ public void removeSelection(Message m){ int startPos = (Integer)m.getValue("start"); int endPos = (Integer)m.getValue("end"); + String replacementText = (String)m.getValue("replacementText"); int startIndex = getIndex(startPos); int endIndex = getIndex(endPos); Element firstEl = getBlockElement(startIndex); @@ -48,15 +49,15 @@ nodes = nodeIndexes(first.n, firstEl); } else - updateElement(first, endPos, first.end); + updateElement(first, endPos, first.end, replacementText); } else - updateElement(first, first.start, startPos); + updateElement(first, first.start, startPos, replacementText); } list.setCurrent(endIndex); if(!first.equals(last)) - updateElement(last, endPos, last.end); + updateElement(last, endPos, last.end, ""); } for(int i = startIndex + 1; i < endIndex; i++) @@ -67,7 +68,7 @@ textStart = startPos; }- clearViewRanges(textStart, brailleStart, last, startIndex, endPos - startPos, endPos); + clearViewRanges(textStart, brailleStart, last, startIndex, endPos - startPos, endPos, replacementText);
ArrayList<Integer> indexes = tree.getItemPath(); removeTreeItem(startIndex, firstEl); clearListItems(firstList); @@ -99,18 +100,23 @@ } if(!readOnly(first)){ - if(startPos != first.end){ - if(first.start > startPos){ + if(startPos != first.end || replacementText.length() > 0){ + if(first.start > startPos && replacementText.length() == 0){ if(endPos > first.end){ clearText(first); emptyNode = true; nodes = nodeIndexes(first.n, firstEl); } + else { + updateElement(first, endPos, first.end, replacementText); + } + } + else { + if(startPos < first.start)+ updateElement(first, first.start, first.start, replacementText);
else - updateElement(first, endPos, first.end); + updateElement(first, first.start, startPos, replacementText); } - else - updateElement(first, first.start, startPos); }int removed = clearElement(list.indexOf(first) + 1, list.indexOf(firstList.get(firstList.size() - 1)) + 1);
endIndex -= removed; @@ -137,7 +143,7 @@ if(!readOnly(last) && !clearAll){ list.setCurrent(endIndex); - updateElement(last, endPos, last.end); + updateElement(last, endPos, last.end, "");int removed = clearElement(list.indexOf(lastList.get(0)), list.indexOf(last));
endIndex -= removed; } @@ -153,7 +159,7 @@ textStart = startPos; }- clearViewRanges(textStart, brailleStart, list.get(endIndex), startIndex, endPos - startPos, endPos); + clearViewRanges(textStart, brailleStart, list.get(endIndex), startIndex, endPos - startPos, endPos, replacementText);
ArrayList<Integer> indexes = tree.getItemPath(); list.setCurrent(endIndex); ArrayList<Integer> indexes2 = tree.getItemPath(); @@ -229,13 +235,18 @@ return textList; } - private void updateElement(TextMapElement t, int start, int end){+ private void updateElement(TextMapElement t, int start, int end, String replacementText){
int offset = start - t.start; if(end < start) start = 0; - int linebreaks = (t.end - t.start) - t.textLength();- String newText = t.getText().substring(offset, offset + (end - start) - linebreaks);
+ int linebreaks; + if(start != end) + linebreaks = (t.end - t.start) - t.textLength(); + else + linebreaks = 0; ++ String newText = t.getText().substring(offset, offset + (end - start) - linebreaks) + replacementText;
Text textNode = (Text)t.n; textNode.setValue(newText); } @@ -314,7 +325,7 @@ vi.remove(list, list.indexOf(elList.get(i))); }- private void clearViewRanges(int start, int brailleStart, TextMapElement last, int index, int length, int endPos){ + private void clearViewRanges(int start, int brailleStart, TextMapElement last, int index, int length, int endPos, String replacementText){
int end = last.end; int brailleEnd = last.brailleList.getLast().end; if(endPos > end){ @@ -322,7 +333,7 @@ end = endPos; } - text.replaceTextRange(start, (end - length) - start, "");+ text.replaceTextRange(start, (end - length) - start + replacementText.length(), "");
braille.replaceTextRange(brailleStart, brailleEnd - brailleStart, "");list.shiftOffsetsFromIndex(index, -(end - start), -(brailleEnd - brailleStart));
} =======================================--- /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java Sun Mar 1 18:11:14 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java Mon Mar 2 18:38:06 2015 UTC
@@ -1016,7 +1016,6 @@public void resetSelectionElement(Message m, MapList list, TextMapElement t, BrailleMapElement b, int pos){
Styles style = stylesTable.makeStylesElement(t.parentElement(), t.n);boolean isFirst = t instanceof PageMapElement || t instanceof BrlOnlyMapElement || isFirst(b.n); - boolean isLast = t instanceof PageMapElement || t instanceof BrlOnlyMapElement || isLast(b.n);
int margin = 0; int lineBreaks = 0; int originalPosition = view.getCaretOffset(); @@ -1024,8 +1023,7 @@ Element parent = (Element)b.n.getParent(); int index = parent.indexOf(b.n); setListenerLock(true); - view.setCaretOffset(pos); - + view.setCaretOffset(pos); if(t instanceof BrlOnlyMapElement || t instanceof PageMapElement){ index = list.indexOf(t); @@ -1086,19 +1084,9 @@b.setOffsets(lineBreaks + start, lineBreaks + start + b.n.getValue().length()); list.shiftOffsetsFromIndex(list.indexOf(t) + 1, 0, b.n.getValue().length() + lineBreaks);
- // WhiteSpaceManager wsp = new WhiteSpaceManager(manager, this, list); - int linesBefore = 0; - // if(isFirst)- // linesBefore = wsp.setLinesBeforeBraille(t, b, lineBreaks + start, style);
- - int linesAfter = 0; - // if(isLast)- // linesAfter = wsp.setLinesAfterBraille(t, b, lineBreaks + start + b.n.getValue().length() + linesBefore, style);
- -- b.setOffsets(lineBreaks + linesBefore + start, lineBreaks + start + b.n.getValue().length() + linesBefore);
- m.put("brailleLength", linesBefore + linesAfter);- m.put("brailleOffset", start + b.n.getValue().length() + linesBefore + linesAfter + lineBreaks); + b.setOffsets(lineBreaks + start, lineBreaks + start + b.n.getValue().length());
+ m.put("brailleLength", 0); + m.put("brailleOffset", start + b.n.getValue().length() + lineBreaks); //reset margin in case it is not applied @@ -1114,7 +1102,7 @@ setFirstLineIndent(t.brailleList.getFirst().start, style); if(style.contains(StylesType.format))- setAlignment(start + linesBefore,start + b.n.getValue().length(),style);
+ setAlignment(start,start + b.n.getValue().length(),style); view.setCaretOffset(originalPosition); } =======================================--- /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Sun Mar 1 18:11:14 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Mon Mar 2 18:38:06 2015 UTC
@@ -1046,8 +1046,6 @@ setListenerLock(false); }public void resetSelectionElement(Message m, ViewInitializer vi, MapList list, int listIndex, int start, TextMapElement t){
- int linesBefore = 0; - int linesAfter = 0;Styles style = stylesTable.makeStylesElement((Element)t.n.getParent(), t.n);
String reformattedText; setListenerLock(true); @@ -1063,60 +1061,50 @@ if(listIndex > 0 && list.get(listIndex - 1).end == start){if(listIndex < list.size() - 1 && list.get(listIndex + 1).start > start){
view.insert("\n" + reformattedText);- t.setOffsets(1 + start + linesBefore, 1 + linesBefore + start + reformattedText.length());
+ t.setOffsets(1 + start, 1 + start + reformattedText.length());list.shiftOffsetsFromIndex(listIndex + 1, reformattedText.length(), 0);
- m.put("textLength",linesBefore + linesAfter + 1);- m.put("textOffset", reformattedText.length() + linesBefore + linesAfter + start + 1);
+ m.put("textLength", 1); + m.put("textOffset", reformattedText.length() + start + 1); } else { view.insert("\n" + reformattedText + "\n");- t.setOffsets(1 + start + linesBefore, 1 + linesBefore + start + reformattedText.length());
+ t.setOffsets(1 + start , 1 + start + reformattedText.length());list.shiftOffsetsFromIndex(listIndex + 1, reformattedText.length(), 0);
- m.put("textLength",linesBefore + linesAfter + 2);- m.put("textOffset", reformattedText.length() + linesBefore + linesAfter + start + 2);
+ m.put("textLength", 2); + m.put("textOffset", reformattedText.length() + start + 2); } } else {if((listIndex < list.size() - 1 && list.get(listIndex + 1).start > start) || listIndex == list.size() - 1){
view.insert(reformattedText);- t.setOffsets(start + linesBefore, linesBefore + start + reformattedText.length());
+ t.setOffsets(start, start + reformattedText.length());list.shiftOffsetsFromIndex(listIndex + 1, reformattedText.length(), 0);
- m.put("textLength",linesBefore + linesAfter);- m.put("textOffset", reformattedText.length() + linesBefore + linesAfter + start);
+ m.put("textLength", 0); + m.put("textOffset", reformattedText.length() + start); } else{ view.insert(reformattedText + "\n");- t.setOffsets(start + linesBefore, linesBefore + start + reformattedText.length());
+ t.setOffsets(start, start + reformattedText.length());list.shiftOffsetsFromIndex(listIndex + 1, reformattedText.length(), 0);
- m.put("textLength",linesBefore + linesAfter + 1);- m.put("textOffset", reformattedText.length() + linesBefore + linesAfter + start + 1);
+ m.put("textLength", 1); + m.put("textOffset", reformattedText.length() + start + 1); } } view.setLineIndent(view.getLineAtOffset(t.start), 1, 0); } else {boolean isFirst = t instanceof PageMapElement || t instanceof BrlOnlyMapElement || isFirst(t.n); - boolean isLast = t instanceof PageMapElement || t instanceof BrlOnlyMapElement || isLast(t.n);
view.insert(reformattedText); t.setOffsets(start, start + reformattedText.length()); list.shiftOffsetsFromIndex(listIndex + 1, reformattedText.length(), 0); - int margin = 0; + int margin = 0; + t.setOffsets(start, start + reformattedText.length()); + m.put("textLength", 0); + m.put("textOffset", reformattedText.length() + start); - WhiteSpaceManager wsp = new WhiteSpaceManager(manager, this, list); - - // if(isFirst) - // linesBefore = wsp.setLinesBefore(t, start, style); - - // if(isLast)- // linesAfter = wsp.setLinesAfter(t, start + reformattedText.length() + linesBefore, style);
-- t.setOffsets(start + linesBefore, linesBefore + start + reformattedText.length());
- m.put("textLength", linesBefore + linesAfter);- m.put("textOffset", reformattedText.length() + linesBefore + linesAfter + start);
- - start += linesBefore; + //start += linesBefore; //reset margin in case it is not applied if(start == view.getOffsetAtLine(view.getLineAtOffset(start))) handleLineWrap(start, reformattedText, 0, false); @@ -1352,46 +1340,13 @@ private void handleTextEdit(ExtendedModifyEvent e){ int changes = e.length; - int placeholder; if(e.replacedText.length() > 0){ if(e.start < stateObj.getCurrentStart()){ setCurrent(e.start); } if(e.start + e.replacedText.length() > stateObj.getCurrentEnd()){ - view.setCaretOffset(e.start); - setCurrent(view.getCaretOffset()); - - if(selection.getSelectionStart() < stateObj.getCurrentStart())- sendAdjustRangeMessage("start", stateObj.getCurrentStart() - selection.getSelectionStart());
- else if(selection.getSelectionStart() > stateObj.getCurrentEnd())- sendAdjustRangeMessage("end", selection.getSelectionStart()- stateObj.getCurrentEnd());
- - placeholder = stateObj.getCurrentStart(); - if(e.length < e.replacedText.length()){- setSelection(selection.getSelectionStart() + e.length, selection.getSelectionLength() - e.length);
- changes = stateObj.getCurrentEnd() - selection.getSelectionStart(); - makeTextChange(-changes); - selection.adjustSelectionLength(-changes); - sendUpdate(); - setCurrent(view.getCaretOffset()); - - // if(stateObj.getNextStart() == -1) - selection.setSelectionStart(stateObj.getCurrentEnd()); - // else { - // selection.setSelectionStart(stateObj.getNextStart()); - - } - else {- selection.adjustSelectionLength(-(stateObj.getCurrentEnd() - e.start));
- makeTextChange(changes - (stateObj.getCurrentEnd() - e.start)); - sendUpdate(); - setCurrent(view.getCaretOffset()); - selection.setSelectionStart(stateObj.getCurrentEnd()); - } - deleteSelection(e); - setCurrent(placeholder); view.setCaretOffset(e.start + e.length); } else { @@ -1506,7 +1461,7 @@ recordEvent(e, false); } else {- manager.dispatch(Message.createSelectionMessage(selection.getSelectionStart(), selection.getSelectionEnd())); + manager.dispatch(Message.createSelectionMessage(view.getTextRange(e.start, e.length) , selection.getSelectionStart(), selection.getSelectionEnd()));
} setSelection(-1, -1); ============================================================================== Revision: 1b84efe0a2a5 Branch: rt1447-MergeElements Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Mon Mar 2 20:07:37 2015 UTC Log: Began implementation of undo/redo for multiple element selection https://code.google.com/p/brailleblaster/source/detail?r=1b84efe0a2a5 Modified:/src/main/org/brailleblaster/perspectives/braille/eventQueue/EventTypes.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/SelectionHandler.java
=======================================--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/EventTypes.java Fri Jan 23 17:19:49 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/EventTypes.java Mon Mar 2 20:07:37 2015 UTC
@@ -3,6 +3,7 @@ public enum EventTypes { Update, Edit, + Selection, Merge, Whitespace, Delete, =======================================--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java Fri Jan 23 17:19:49 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/RedoQueue.java Mon Mar 2 20:07:37 2015 UTC
@@ -7,6 +7,7 @@ import org.brailleblaster.perspectives.braille.stylers.MergeElementHandler;import org.brailleblaster.perspectives.braille.stylers.RemoveElementHandler;
import org.brailleblaster.perspectives.braille.stylers.HideActionHandler; +import org.brailleblaster.perspectives.braille.stylers.SelectionHandler; import org.brailleblaster.perspectives.braille.stylers.StyleHandler; import org.brailleblaster.perspectives.braille.stylers.TextUpdateHandler; import org.brailleblaster.perspectives.braille.stylers.WhiteSpaceHandler; @@ -33,6 +34,10 @@ TextUpdateHandler tuh = new TextUpdateHandler(manager, vi, list); tuh.redoText(frame); break; + case Selection: + SelectionHandler selH = new SelectionHandler(manager, vi, list); + selH.redoSelection(frame); + break; case Merge: MergeElementHandler meh = new MergeElementHandler(manager, vi, list); meh.redoMerge(frame); =======================================--- /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Mon Jan 26 21:27:33 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/eventQueue/UndoQueue.java Mon Mar 2 20:07:37 2015 UTC
@@ -6,6 +6,7 @@import org.brailleblaster.perspectives.braille.stylers.InsertElementHandler;
import org.brailleblaster.perspectives.braille.stylers.MergeElementHandler;import org.brailleblaster.perspectives.braille.stylers.RemoveElementHandler;
+import org.brailleblaster.perspectives.braille.stylers.SelectionHandler; import org.brailleblaster.perspectives.braille.stylers.StyleHandler; import org.brailleblaster.perspectives.braille.stylers.TextUpdateHandler; import org.brailleblaster.perspectives.braille.stylers.WhiteSpaceHandler; @@ -32,6 +33,10 @@ TextUpdateHandler tuh = new TextUpdateHandler(manager, vi, list); tuh.undoText(frame); break; + case Selection: + SelectionHandler selH = new SelectionHandler(manager, vi, list); + selH.undoSelection(frame); + break; case Merge: MergeElementHandler meh = new MergeElementHandler(manager, vi, list); meh.undoMerge(frame); =======================================--- /src/main/org/brailleblaster/perspectives/braille/stylers/SelectionHandler.java Mon Mar 2 18:38:06 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylers/SelectionHandler.java Mon Mar 2 20:07:37 2015 UTC
@@ -9,6 +9,7 @@ import nu.xom.Text; import org.brailleblaster.perspectives.braille.Manager; +import org.brailleblaster.perspectives.braille.eventQueue.EventFrame;import org.brailleblaster.perspectives.braille.mapping.elements.BrailleMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.BrlOnlyMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.PageMapElement;
@@ -439,4 +440,12 @@ return nodes; } + + public void undoSelection(EventFrame frame){ + + } + + public void redoSelection(EventFrame frame){ + + } }