Brandon, What are boxlines and how do you add them? Thanks for any info on this. Best regards from Ohio, Vic -----Original Message----- From: brailleblaster-bounce@xxxxxxxxxxxxx [mailto:brailleblaster-bounce@xxxxxxxxxxxxx] On Behalf Of brailleblaster@xxxxxxxxxxxxxx Sent: Tuesday, July 29, 2014 12:56 PM To: brailleblaster@xxxxxxxxxxxxx Subject: [brailleblaster] 6 new revisions pushed by brandon....@xxxxxxxxx on 2014-07-29 16:55 GMT 6 new revisions: Revision: dd8a9cda2e13 Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Wed Jul 23 17:43:09 2014 UTC Log: Added ability to dynaimically add boxlines to basic block elements suc... http://code.google.com/p/brailleblaster/source/detail?r=dd8a9cda2e13 Revision: acadcacbef30 Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Fri Jul 25 18:18:06 2014 UTC Log: Added boxlines to elements with lines before and after are now honored http://code.google.com/p/brailleblaster/source/detail?r=acadcacbef30 Revision: ff7834cb4ac3 Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Mon Jul 28 18:33:55 2014 UTC Log: Fixed bug with new boxline element not being added to section element http://code.google.com/p/brailleblaster/source/detail?r=ff7834cb4ac3 Revision: c3669c7ebbf3 Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Tue Jul 29 13:38:39 2014 UTC Log: Fixed bug in opening html based UTD files http://code.google.com/p/brailleblaster/source/detail?r=c3669c7ebbf3 Revision: 3123a0d696ae Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Tue Jul 29 15:38:12 2014 UTC Log: Committing changes before merge http://code.google.com/p/brailleblaster/source/detail?r=3123a0d696ae Revision: 73ad8f58eb4a Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Tue Jul 29 15:38:38 2014 UTC Log: merged with main branch http://code.google.com/p/brailleblaster/source/detail?r=73ad8f58eb4a ============================================================================ == Revision: dd8a9cda2e13 Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Wed Jul 23 17:43:09 2014 UTC Log: Added ability to dynaimically add boxlines to basic block elements such as a paragraph http://code.google.com/p/brailleblaster/source/detail?r=dd8a9cda2e13 Added: /src/main/org/brailleblaster/perspectives/braille/stylepanel/StylePanel.java Modified: /src/main/org/brailleblaster/document/SemanticFileHandler.java /src/main/org/brailleblaster/perspectives/braille/Manager.java /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.j ava /src/main/org/brailleblaster/perspectives/braille/stylepanel/EditPanel.java /src/main/org/brailleblaster/perspectives/braille/stylepanel/StyleManager.ja va /src/main/org/brailleblaster/perspectives/braille/views/tree/XMLTree.java /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java ======================================= --- /dev/null +++ /src/main/org/brailleblaster/perspectives/braille/stylepanel/StylePanel.java Wed Jul 23 17:43:09 2014 UTC @@ -0,0 +1,102 @@ +package org.brailleblaster.perspectives.braille.stylepanel; + +import org.brailleblaster.localization.LocaleHandler; +import org.brailleblaster.perspectives.braille.document.BBSemanticsTable.Styles; +import org.brailleblaster.perspectives.braille.document.BBSemanticsTable.StylesType ; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.FormAttachment; +import org.eclipse.swt.layout.FormData; +import org.eclipse.swt.layout.FormLayout; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Spinner; + +public abstract class StylePanel { + static LocaleHandler lh = new LocaleHandler(); + + private final static int LEFT_MARGIN = 0; + private final static int RIGHT_MARGIN = 15; + private final static int TOP_MARGIN = 50; + private final static int BOTTOM_MARGIN = 100; + + protected Group group; + protected StyleManager sm; + + public StylePanel(StyleManager sm, Group documentWindow){ + this.sm = sm; + this.group = new Group(documentWindow, SWT.FILL | SWT.BORDER); + this.group.setText(lh.localValue("editStyle")); + setLayoutData(this.group, LEFT_MARGIN, RIGHT_MARGIN, TOP_MARGIN, BOTTOM_MARGIN); + this.group.setLayout(new FormLayout()); + } + + protected void setLayoutData(Control c, int left, int right, int top, int bottom){ + FormData location = new FormData(); + + location.left = new FormAttachment(left); + location.right = new FormAttachment(right); + location.top = new FormAttachment(top); + location.bottom = new FormAttachment(bottom); + + c.setLayoutData(location); + } + + protected void resetLayout(){ + group.pack(); + group.getParent().layout(); + } + + protected Label makeLabel(String text, int left, int right, int top, int bottom){ + Label l = new Label(group, SWT.BORDER | SWT.CENTER); + l.setText(text); + setLayoutData(l, left, right, top, bottom); + + return l; + } + + protected Spinner makeSpinner(int left, int right, int top, int bottom){ + Spinner sp = new Spinner(group, SWT.BORDER); + setLayoutData(sp, left, right, top, bottom); + return sp; + } + + protected void setSpinnerData(Spinner sp, Styles style, StylesType type){ + if(style.contains(type)) + sp.setSelection(Integer.valueOf((String)style.get(type))); + else + sp.setSelection(0); + } + + protected Combo makeCombo(String [] values, int left, int right, int top, int bottom){ + Combo cb = new Combo(group, SWT.BORDER); + cb.setItems(values); + setLayoutData(cb, left, right, top, bottom); + + return cb; + } + + protected void showTable(){ + group.setVisible(true); + } + + protected void hideTable(){ + group.setVisible(false); + } + + protected Group getGroup(){ + return group; + } + + protected void dispose(){ + group.dispose(); + } + + protected boolean isVisible(){ + if(!group.isDisposed() && group.isVisible()) + return true; + else + return false; + } +} ======================================= --- /src/main/org/brailleblaster/document/SemanticFileHandler.java Thu Jul 17 11:34:16 2014 UTC +++ /src/main/org/brailleblaster/document/SemanticFileHandler.java Wed Jul 23 17:43:09 2014 UTC @@ -6,6 +6,7 @@ import java.io.FileReader; import java.io.IOException; import java.util.HashMap; +import java.util.Map.Entry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -185,4 +186,16 @@ public String getDefault(String elementName){ return defaults.get(elementName); } + + public String getElementBySemantic(String semantic){ + return getKeyByValue(semantic); + } + + private String getKeyByValue(String sem) { + for (Entry<String, String> entry : defaults.entrySet()) { + if (entry.getValue().equals(sem)) + return entry.getKey(); + } + return null; + } } ======================================= --- /src/main/org/brailleblaster/perspectives/braille/Manager.java Thu Jul 17 20:03:48 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/Manager.java Wed Jul 23 17:43:09 2014 UTC @@ -55,6 +55,7 @@ import org.brailleblaster.perspectives.braille.document.BBSemanticsTable.Styles; import org.brailleblaster.perspectives.braille.document.BBSemanticsTable.StylesType ; import org.brailleblaster.perspectives.braille.document.BrailleDocument; +import org.brailleblaster.perspectives.braille.mapping.elements.BrlOnlyMapElement; import org.brailleblaster.perspectives.braille.mapping.elements.Range; import org.brailleblaster.perspectives.braille.mapping.elements.SectionElement; import org.brailleblaster.perspectives.braille.mapping.elements.TextMapElement; @@ -742,8 +743,7 @@ if (arch.getCurrentConfig().equals("epub.cfg")){ text.insertNewNode(list.get(posList.get(posList.size() - 1)).end,"aside"); } - else{ - + else{ text.insertNewNode(list.get(posList.get(posList.size() - 1)).end,"prodnote"); } @@ -816,7 +816,7 @@ document.changeSemanticAction(message, list.getCurrent().parentElement()); message.put("style", styles.get(styles.getKeyFromAttribute(parent))); ArrayList<TextMapElement> itemList = list.findTextMapElements(list.getCurrentIndex(), parent, true); - + int start = list.indexOf(itemList.get(0)); int end = list.indexOf(itemList.get(itemList.size() - 1)); int origPos = list.get(list.getNodeIndex(itemList.get(0))).start; @@ -838,6 +838,7 @@ message.put("brailleNext", -1); } + //else { text.adjustStyle(message, itemList); braille.adjustStyle(message, itemList); @@ -847,11 +848,53 @@ list.shiftOffsetsFromIndex(end + 1, (Integer)message.getValue("linesAfterOffset"), (Integer)message.getValue("linesAfterOffset"), origPos); treeView.adjustItemStyle(list.getCurrent()); + //} + + if(((Styles)message.getValue("Style")).getName().equals("boxline")) + createBoxline(parent, message, itemList); + group.setRedraw(true); } else new Notify(lh.localValue("nothingToApply")); } + + private void createBoxline(Element p, Message m, ArrayList<TextMapElement> itemList){ + Element wrapper = document.wrapElement(p, "boxline"); + if(wrapper != null){ + //document.translateElement(wrapper); + int startPos = list.indexOf(itemList.get(0)); + BrlOnlyMapElement b1 = new BrlOnlyMapElement(p.getParent().getChild(0), (Element)p.getParent()); + b1.setOffsets(list.get(startPos).start, list.get(startPos).start + b1.textLength()); + b1.setBrailleOffsets(list.get(startPos).brailleList.getFirst().start, list.get(startPos).brailleList.getFirst().start + b1.getText().length()); + list.add(startPos, b1); + + text.insertText(itemList.get(0).start, list.get(startPos).getText() + "\n"); + braille.insertText(itemList.get(0).brailleList.getFirst().start, list.get(startPos).brailleList.getFirst().value() + "\n"); + list.shiftOffsetsFromIndex(startPos + 1, list.get(startPos).getText().length() + 1, list.get(startPos).brailleList.getFirst().value().length() + 1, list.get(startPos + 1).start); + + int endPos = list.indexOf(itemList.get(itemList.size() - 1)) + 1; + BrlOnlyMapElement b2 = new BrlOnlyMapElement(p.getParent().getChild(p.getParent().getChildCount() - 1), (Element)p.getParent()); + b2.setOffsets(list.get(endPos - 1).end + 1, list.get(endPos - 1).end + 1 + b2.textLength()); + b2.setBrailleOffsets(list.get(endPos - 1).brailleList.getLast().end + 1, list.get(endPos - 1).brailleList.getLast().end + 1 + b2.getText().length()); + list.add(endPos, b2); + + text.insertText(itemList.get(itemList.size() - 1).end, "\n" + list.get(endPos).getText()); + braille.insertText(itemList.get(itemList.size() - 1).brailleList.getLast().end, "\n" + list.get(endPos).brailleList.getFirst().value()); + list.shiftOffsetsFromIndex(endPos + 1, list.get(endPos).getText().length() + 1, list.get(endPos).brailleList.getFirst().value().length() + 1, list.get(endPos).start); + + for(int i = 0; i < itemList.size(); i++) + treeView.removeItem(itemList.get(i), new Message(null)); + + treeView.newTreeItem(list.get(startPos), treeView.getSelectionIndex(), 0); + handleSetCurrent(Message.createSetCurrentMessage(Sender.TREE, list.get(list.getCurrentIndex() + 1).start, false)); + dispatch(Message.createUpdateCursorsMessage(Sender.TREE)); + + for(int i = 0; i < list.size(); i++){ + System.out.println("Start: " + list.get(i).start + "\tEnd: " + list.get(i).end + "\t" + list.get(i).getClass()); + } + } + } public void saveAs(){ BBFileDialog dialog = new BBFileDialog(wp.getShell(), SWT.SAVE, arch.getFileTypes(), arch.getFileExtensions()); ======================================= --- /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.j ava Thu Jul 17 11:34:16 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.j ava Wed Jul 23 17:43:09 2014 UTC @@ -12,6 +12,7 @@ import nu.xom.Element; import nu.xom.Elements; import nu.xom.Node; +import nu.xom.ParentNode; import nu.xom.ParsingException; import nu.xom.Text; @@ -650,6 +651,32 @@ } } + return null; + } + + + public Element wrapElement(Element e, String type){ + if(type.equals("boxline")){ + Element boxline = new Element(semHandler.getElementBySemantic(type)); + Element sb1 = new Element("brl"); + sb1.appendChild(new Text("777777777777777")); + + Element sb2 = new Element("brl"); + sb2.appendChild(new Text("GGGGGGGGGGGGGGG")); + + boxline.addAttribute(new Attribute("semantics","style,boxline")); + boxline.appendChild(sb1); + boxline.appendChild(sb2); + + ParentNode parent = e.getParent(); + int index = parent.indexOf(e); + boxline.insertChild(parent.removeChild(e), 1); + //boxline.appendChild(parent.removeChild(e)); + parent.insertChild(boxline, index); + addNamespace(boxline); + return boxline; + } + return null; } } ======================================= --- /src/main/org/brailleblaster/perspectives/braille/stylepanel/EditPanel.java Fri Apr 4 15:29:56 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylepanel/EditPanel.java Wed Jul 23 17:43:09 2014 UTC @@ -1,30 +1,18 @@ package org.brailleblaster.perspectives.braille.stylepanel; -import org.brailleblaster.localization.LocaleHandler; import org.brailleblaster.perspectives.braille.document.BBSemanticsTable.Styles; import org.brailleblaster.perspectives.braille.document.BBSemanticsTable.StylesType ; import org.brailleblaster.util.Notify; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.layout.FormAttachment; -import org.eclipse.swt.layout.FormData; -import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Text; -public class EditPanel { - static LocaleHandler lh = new LocaleHandler(); - - private final static int LEFT_MARGIN = 0; - private final static int RIGHT_MARGIN = 15; - private final static int TOP_MARGIN = 50; - private final static int BOTTOM_MARGIN = 100; - +public class EditPanel extends StylePanel { //For use in making localized UI final private String [] emphasisList = {lh.localValue("bold"), lh.localValue("italic"), lh.localValue("underline")}; //For determining combo box position in relation to liblouis value @@ -38,8 +26,6 @@ protected static final int RIGHT = 2; protected Styles originalStyle; - protected Group group; - protected StyleManager sm; protected Text styleName; private Label styleLabel, linesBeforeLabel, linesAfterLabel, marginLabel, indentLabel, alignmentLabel, emphasisLabel; @@ -47,12 +33,8 @@ protected Spinner linesBeforeSpinner, linesAfterSpinner, marginSpinner, indentSpinner; public EditPanel(StyleManager sm, Group documentWindow, Styles style){ - this.sm = sm; + super(sm, documentWindow); originalStyle = style; - this.group = new Group(documentWindow, SWT.FILL | SWT.BORDER); - this.group.setText(lh.localValue("editStyle")); - setLayoutData(this.group, LEFT_MARGIN, RIGHT_MARGIN, TOP_MARGIN, BOTTOM_MARGIN); - this.group.setLayout(new FormLayout()); styleLabel = makeLabel(lh.localValue("styleName"), 0, 50, 0, 10); styleName = new Text(group, SWT.BORDER); @@ -96,50 +78,7 @@ emphasisCombo.setToolTipText(lh.localValue("emphasisTooltip")); } - protected void setLayoutData(Control c, int left, int right, int top, int bottom){ - FormData location = new FormData(); - - location.left = new FormAttachment(left); - location.right = new FormAttachment(right); - location.top = new FormAttachment(top); - location.bottom = new FormAttachment(bottom); - - c.setLayoutData(location); - } - protected void resetLayout(){ - group.pack(); - group.getParent().layout(); - } - - private Label makeLabel(String text, int left, int right, int top, int bottom){ - Label l = new Label(group, SWT.BORDER | SWT.CENTER); - l.setText(text); - setLayoutData(l, left, right, top, bottom); - - return l; - } - - private Spinner makeSpinner(int left, int right, int top, int bottom){ - Spinner sp = new Spinner(group, SWT.BORDER); - setLayoutData(sp, left, right, top, bottom); - return sp; - } - - protected void setSpinnerData(Spinner sp, Styles style, StylesType type){ - if(style.contains(type)) - sp.setSelection(Integer.valueOf((String)style.get(type))); - else - sp.setSelection(0); - } - - private Combo makeCombo(String [] values, int left, int right, int top, int bottom){ - Combo cb = new Combo(group, SWT.BORDER); - cb.setItems(values); - setLayoutData(cb, left, right, top, bottom); - - return cb; - } protected Styles getNewStyle(){ Styles newStyle; @@ -150,7 +89,6 @@ else newStyle = sm.getSemanticsTable().getNewStyle(styleName.getText()); - int selectionIndex = emphasisCombo.getSelectionIndex(); if(selectionIndex != -1){ if(selectionIndex == BOLD) @@ -197,27 +135,9 @@ } } + @Override protected void showTable(){ group.setVisible(true); styleName.setFocus(); } - - protected void hideTable(){ - group.setVisible(false); - } - - protected Group getGroup(){ - return group; - } - - protected void dispose(){ - group.dispose(); - } - - protected boolean isVisible(){ - if(!group.isDisposed() && group.isVisible()) - return true; - else - return false; - } } ======================================= --- /src/main/org/brailleblaster/perspectives/braille/stylepanel/StyleManager.ja va Thu Jul 3 16:07:57 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylepanel/StyleManager.ja va Wed Jul 23 17:43:09 2014 UTC @@ -50,7 +50,7 @@ public class StyleManager{ private StyleTable table; - private EditPanel editor; + private StylePanel editor; private String configFile; Manager dm; TextMapElement t; @@ -83,7 +83,10 @@ lastSelection = table.getTable().getSelectionIndex(); String style = table.getTable().getSelection()[0].getText(1); this.table.dispose(); - editor = new EditStyleView(this, dm.getGroup(), semanticsTable.get(style)); + if(semanticsTable.get(style).getName().equals("boxline")) + editor = new EditBoxLineView(this, dm.getGroup(), semanticsTable.get(style)); + else + editor = new EditStyleView(this, dm.getGroup(), semanticsTable.get(style)); dm.setTabList(); } @@ -102,6 +105,7 @@ public void apply(String item){ Message m = new Message(BBEvent.UPDATE_STYLE); Styles style = semanticsTable.get(item); + if(style != null){ m.put("Style", style); dm.dispatch(m); ======================================= --- /src/main/org/brailleblaster/perspectives/braille/views/tree/XMLTree.java Thu Jul 17 19:46:53 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/tree/XMLTree.java Wed Jul 23 17:43:09 2014 UTC @@ -200,7 +200,7 @@ @Override public void newTreeItem(TextMapElement t, int index, int offset){ - Element parentElement = (Element)t.n.getParent(); + Element parentElement = (Element)t.parentElement(); while(parentElement.getAttributeValue("semantics").contains("action")){ parentElement = (Element)parentElement.getParent(); } ======================================= --- /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java Mon Jul 21 19:30:53 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java Wed Jul 23 17:43:09 2014 UTC @@ -467,22 +467,25 @@ String textBefore = ""; Styles style = (Styles)m.getValue("style"); Styles previousStyle = (Styles)m.getValue("previousStyle"); + boolean boxline = style.getName().equals("boxline"); + if(!boxline){ setListenerLock(true); - view.setLineIndent(view.getLineAtOffset(start), getLineNumber(start, view.getTextRange(start, (end - start))), 0); - view.setLineAlignment(view.getLineAtOffset(start), getLineNumber(start, view.getTextRange(start, (end - start))), SWT.LEFT); + view.setLineIndent(view.getLineAtOffset(start), getLineNumber(start, view.getTextRange(start, (end - start))), 0); + view.setLineAlignment(view.getLineAtOffset(start), getLineNumber(start, view.getTextRange(start, (end - start))), SWT.LEFT); - if(!style.contains(StylesType.linesBefore) && previousStyle.contains(StylesType.linesBefore)) - removeLinesBefore(m); - - if(!style.contains(StylesType.linesAfter) && previousStyle.contains(StylesType.linesAfter)) - removeLinesAfter(m); + if(!style.contains(StylesType.linesBefore) && previousStyle.contains(StylesType.linesBefore)) + removeLinesBefore(m); + if(!style.contains(StylesType.linesAfter) && previousStyle.contains(StylesType.linesAfter)) + removeLinesAfter(m); + } start = (Integer)m.getValue("start"); end = (Integer)m.getValue("end"); int prev = (Integer)m.getValue("braillePrev"); int next = (Integer)m.getValue("brailleNext"); + if(!boxline){ for (Entry<StylesType, Object> entry : style.getEntrySet()) { switch(entry.getKey()){ case linesBefore: @@ -530,6 +533,7 @@ } } setListenerLock(false); + } } private int getPrev(Message m){ ======================================= --- /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Mon Jul 21 19:30:53 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Wed Jul 23 17:43:09 2014 UTC @@ -307,6 +307,8 @@ if(view.getLineAtOffset(view.getCaretOffset()) != currentLine) sendStatusBarUpdate(view.getLineAtOffset(view.getCaretOffset())); + + System.out.println("Pos:\t" + view.getCaretOffset()); } }); @@ -501,6 +503,7 @@ Message message = Message.createSetCurrentMessage(Sender.TEXT, pos, false); manager.dispatch(message); setViewData(message); + System.out.println("Start:\t" + currentStart + " CurrentEnd:\t" + currentEnd); } private void sendDeleteSpaceMessage(int start, int offset){ @@ -824,7 +827,7 @@ handleLineWrap(start, reformattedText, margin, style.contains(StylesType.firstLineIndent)); } - if(isFirst(n) && style.contains(StylesType.firstLineIndent)) + if(!(list.get(listIndex) instanceof BrlOnlyMapElement) && isFirst(n) && style.contains(StylesType.firstLineIndent)) setFirstLineIndent(start, style); if(style.contains(StylesType.format)) @@ -1513,86 +1516,89 @@ //Get previous style for comparison on adding or removing lines before or after Styles style = (Styles)m.getValue("style"); Styles previousStyle = (Styles)m.getValue("previousStyle"); - + boolean boxline = style.getName().equals("boxline"); + setListenerLock(true); //Reset indent, alignment, and emphasis - view.setLineIndent(view.getLineAtOffset(start), getLineNumber(start, view.getTextRange(start, (end - start))), 0); - view.setLineAlignment(view.getLineAtOffset(start), getLineNumber(start, view.getTextRange(start, (end - start))), SWT.LEFT); - setFontStyleRange(start, end - start, new StyleRange()); + if(!boxline){ + view.setLineIndent(view.getLineAtOffset(start), getLineNumber(start, view.getTextRange(start, (end - start))), 0); + view.setLineAlignment(view.getLineAtOffset(start), getLineNumber(start, view.getTextRange(start, (end - start))), SWT.LEFT); + setFontStyleRange(start, end - start, new StyleRange()); - if(!style.contains(StylesType.linesBefore) && previousStyle.contains(StylesType.linesBefore)) - removeLinesBefore(m); + if(!style.contains(StylesType.linesBefore) && previousStyle.contains(StylesType.linesBefore)) + removeLinesBefore(m); - if(!style.contains(StylesType.linesAfter) && previousStyle.contains(StylesType.linesAfter)) - removeLinesAfter(m); + if(!style.contains(StylesType.linesAfter) && previousStyle.contains(StylesType.linesAfter)) + removeLinesAfter(m); + } + start = (Integer)m.getValue("start"); end = (Integer)m.getValue("end"); int prev = (Integer)m.getValue("prev"); int next = (Integer)m.getValue("next"); - - for (Entry<StylesType, Object> entry : style.getEntrySet()) { - switch(entry.getKey()){ - case linesBefore: - int linesBeforeOffset; - if(start != prev){ - view.replaceTextRange(prev, (start - prev), ""); - length = start - prev; - } - spaces = Integer.valueOf((String)entry.getValue()); + if(!boxline){ + for (Entry<StylesType, Object> entry : style.getEntrySet()) { + switch(entry.getKey()){ + case linesBefore: + int linesBeforeOffset; + if(start != prev){ + view.replaceTextRange(prev, (start - prev), ""); + length = start - prev; + } + spaces = Integer.valueOf((String)entry.getValue()); - textBefore = makeInsertionString(spaces,'\n'); - linesBeforeOffset = spaces - length; + textBefore = makeInsertionString(spaces,'\n'); + linesBeforeOffset = spaces - length; - insertBefore(start - (start - prev), textBefore); - m.put("linesBeforeOffset", linesBeforeOffset); - start += linesBeforeOffset; - end += linesBeforeOffset; - if(next != -1) - next += linesBeforeOffset; - break; - case linesAfter: - length = 0; - int linesAfterOffset; - if(end != next && next != 0){ - view.replaceTextRange(end, (next - end), ""); - length = next - end; - } + insertBefore(start - (start - prev), textBefore); + m.put("linesBeforeOffset", linesBeforeOffset); + start += linesBeforeOffset; + end += linesBeforeOffset; + if(next != -1) + next += linesBeforeOffset; + break; + case linesAfter: + length = 0; + int linesAfterOffset; + if(end != next && next != 0){ + view.replaceTextRange(end, (next - end), ""); + length = next - end; + } - spaces = Integer.valueOf((String)entry.getValue()); - textBefore = makeInsertionString(spaces,'\n'); - insertBefore(end, textBefore); - linesAfterOffset = spaces - length; - m.put("linesAfterOffset", linesAfterOffset); - break; - case format: - setAlignment(start, end, style); - break; - case firstLineIndent: - if(Integer.valueOf((String)entry.getValue()) > 0 || style.contains(StylesType.leftMargin)) - setFirstLineIndent(start, style); - break; - case leftMargin: - if(style.contains(StylesType.firstLineIndent)) - handleLineWrap(start, view.getTextRange(start, (end - start)), Integer.valueOf((String)entry.getValue()), true); - else - handleLineWrap(start, view.getTextRange(start, (end - start)), Integer.valueOf((String)entry.getValue()), false); - break; + spaces = Integer.valueOf((String)entry.getValue()); + textBefore = makeInsertionString(spaces,'\n'); + insertBefore(end, textBefore); + linesAfterOffset = spaces - length; + m.put("linesAfterOffset", linesAfterOffset); + break; + case format: + setAlignment(start, end, style); + break; + case firstLineIndent: + if(Integer.valueOf((String)entry.getValue()) > 0 || style.contains(StylesType.leftMargin)) + setFirstLineIndent(start, style); + break; + case leftMargin: + if(style.contains(StylesType.firstLineIndent)) + handleLineWrap(start, view.getTextRange(start, (end - start)), Integer.valueOf((String)entry.getValue()), true); + else + handleLineWrap(start, view.getTextRange(start, (end - start)), Integer.valueOf((String)entry.getValue()), false); + break; + default: + break; + } - default: - break; - } - - int offset = (Integer)m.getValue("offset"); + int offset = (Integer)m.getValue("offset"); - //inline elements may have different emphasis, so all must be check seperately - for(int i = 0; i < list.size(); i++){ - Styles nodeStyle = stylesTable.makeStylesElement(list.get(i).parentElement(), list.get(i).n); - if(nodeStyle.contains(StylesType.emphasis)) - setFontStyleRange(list.get(i).start + offset, (list.get(i).end + offset) - (list.get(i).start + offset), (StyleRange)nodeStyle.get(StylesType.emphasis)); + //inline elements may have different emphasis, so all must be check seperately + for(int i = 0; i < list.size(); i++){ + Styles nodeStyle = stylesTable.makeStylesElement(list.get(i).parentElement(), list.get(i).n); + if(nodeStyle.contains(StylesType.emphasis)) + setFontStyleRange(list.get(i).start + offset, (list.get(i).end + offset) - (list.get(i).start + offset), (StyleRange)nodeStyle.get(StylesType.emphasis)); + } } - + setListenerLock(false); } - setListenerLock(false); } //private helper method used by adjust style ============================================================================ == Revision: acadcacbef30 Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Fri Jul 25 18:18:06 2014 UTC Log: Added boxlines to elements with lines before and after are now honored http://code.google.com/p/brailleblaster/source/detail?r=acadcacbef30 Modified: /src/main/org/brailleblaster/perspectives/braille/Manager.java /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.j ava /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java ======================================= --- /src/main/org/brailleblaster/perspectives/braille/Manager.java Wed Jul 23 17:43:09 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/Manager.java Fri Jul 25 18:18:06 2014 UTC @@ -813,7 +813,9 @@ Element parent = document.getParent(list.getCurrent().n, true); message.put("previousStyle", styles.get(styles.getKeyFromAttribute(parent))); - document.changeSemanticAction(message, list.getCurrent().parentElement()); + if(!((Styles)message.getValue("Style")).getName().equals("boxline")) + document.changeSemanticAction(message, list.getCurrent().parentElement()); + message.put("style", styles.get(styles.getKeyFromAttribute(parent))); ArrayList<TextMapElement> itemList = list.findTextMapElements(list.getCurrentIndex(), parent, true); @@ -862,25 +864,48 @@ private void createBoxline(Element p, Message m, ArrayList<TextMapElement> itemList){ Element wrapper = document.wrapElement(p, "boxline"); if(wrapper != null){ - //document.translateElement(wrapper); + Element boxline = document.translateElement((Element)wrapper.copy()); int startPos = list.indexOf(itemList.get(0)); - BrlOnlyMapElement b1 = new BrlOnlyMapElement(p.getParent().getChild(0), (Element)p.getParent()); - b1.setOffsets(list.get(startPos).start, list.get(startPos).start + b1.textLength()); - b1.setBrailleOffsets(list.get(startPos).brailleList.getFirst().start, list.get(startPos).brailleList.getFirst().start + b1.getText().length()); + + int start, brailleStart; + if(m.contains("previousStyle") && ((Styles)m.getValue("previousStyle")).contains(StylesType.linesBefore)){ + start = (Integer)m.getValue("prev"); + brailleStart = (Integer)m.getValue("braillePrev"); + } + else { + start = itemList.get(0).start; + brailleStart = itemList.get(0).brailleList.getFirst().start; + } + + wrapper.insertChild(boxline.removeChild(0), 0); + BrlOnlyMapElement b1 = new BrlOnlyMapElement(wrapper.getChild(0), (Element)wrapper); + b1.setOffsets(start, start + b1.textLength()); + b1.setBrailleOffsets(brailleStart, brailleStart + b1.getText().length()); list.add(startPos, b1); - text.insertText(itemList.get(0).start, list.get(startPos).getText() + "\n"); - braille.insertText(itemList.get(0).brailleList.getFirst().start, list.get(startPos).brailleList.getFirst().value() + "\n"); + text.insertText(start, list.get(startPos).getText() + "\n"); + braille.insertText(brailleStart, list.get(startPos).brailleList.getFirst().value() + "\n"); list.shiftOffsetsFromIndex(startPos + 1, list.get(startPos).getText().length() + 1, list.get(startPos).brailleList.getFirst().value().length() + 1, list.get(startPos + 1).start); int endPos = list.indexOf(itemList.get(itemList.size() - 1)) + 1; - BrlOnlyMapElement b2 = new BrlOnlyMapElement(p.getParent().getChild(p.getParent().getChildCount() - 1), (Element)p.getParent()); - b2.setOffsets(list.get(endPos - 1).end + 1, list.get(endPos - 1).end + 1 + b2.textLength()); - b2.setBrailleOffsets(list.get(endPos - 1).brailleList.getLast().end + 1, list.get(endPos - 1).brailleList.getLast().end + 1 + b2.getText().length()); + int end, brailleEnd; + if(m.contains("previousStyle") && ((Styles)m.getValue("previousStyle")).contains(StylesType.linesAfter)){ + end = (Integer)m.getValue("next") + b1.getText().length() + 1; + brailleEnd = (Integer)m.getValue("brailleNext") + b1.getText().length() + 1; + } + else { + end = list.get(endPos - 1).end; + brailleEnd = itemList.get(itemList.size() - 1).brailleList.getLast().end; + } + + wrapper.appendChild(boxline.removeChild(boxline.getChildCount() - 1)); + BrlOnlyMapElement b2 = new BrlOnlyMapElement(wrapper.getChild(wrapper.getChildCount() - 1), (Element)wrapper); + b2.setOffsets(end + 1, end + 1 + b2.textLength()); + b2.setBrailleOffsets(brailleEnd + 1, brailleEnd + 1 + b2.getText().length()); list.add(endPos, b2); - - text.insertText(itemList.get(itemList.size() - 1).end, "\n" + list.get(endPos).getText()); - braille.insertText(itemList.get(itemList.size() - 1).brailleList.getLast().end, "\n" + list.get(endPos).brailleList.getFirst().value()); + + text.insertText(end, "\n" + list.get(endPos).getText()); + braille.insertText(brailleEnd, "\n" + list.get(endPos).brailleList.getFirst().value()); list.shiftOffsetsFromIndex(endPos + 1, list.get(endPos).getText().length() + 1, list.get(endPos).brailleList.getFirst().value().length() + 1, list.get(endPos).start); for(int i = 0; i < itemList.size(); i++) @@ -889,10 +914,6 @@ treeView.newTreeItem(list.get(startPos), treeView.getSelectionIndex(), 0); handleSetCurrent(Message.createSetCurrentMessage(Sender.TREE, list.get(list.getCurrentIndex() + 1).start, false)); dispatch(Message.createUpdateCursorsMessage(Sender.TREE)); - - for(int i = 0; i < list.size(); i++){ - System.out.println("Start: " + list.get(i).start + "\tEnd: " + list.get(i).end + "\t" + list.get(i).getClass()); - } } } ======================================= --- /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.j ava Wed Jul 23 17:43:09 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.j ava Fri Jul 25 18:18:06 2014 UTC @@ -393,7 +393,9 @@ String xml = getXMLString(e.toXML().toString()); d = getXML(xml); Element parent = d.getRootElement(); - return (Element)parent.removeChild(0); + Element transElement = (Element)parent.removeChild(0); + addNamespace(transElement); + return transElement; } private void removeNode(TextMapElement t, Message message){ @@ -657,23 +659,13 @@ public Element wrapElement(Element e, String type){ if(type.equals("boxline")){ - Element boxline = new Element(semHandler.getElementBySemantic(type)); - Element sb1 = new Element("brl"); - sb1.appendChild(new Text("777777777777777")); - - Element sb2 = new Element("brl"); - sb2.appendChild(new Text("GGGGGGGGGGGGGGG")); - + Element boxline = new Element(semHandler.getElementBySemantic(type)); boxline.addAttribute(new Attribute("semantics","style,boxline")); - boxline.appendChild(sb1); - boxline.appendChild(sb2); - ParentNode parent = e.getParent(); int index = parent.indexOf(e); - boxline.insertChild(parent.removeChild(e), 1); - //boxline.appendChild(parent.removeChild(e)); + boxline.appendChild(parent.removeChild(e)); parent.insertChild(boxline, index); - addNamespace(boxline); + addNamespace(boxline); return boxline; } ======================================= --- /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Wed Jul 23 17:43:09 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Fri Jul 25 18:18:06 2014 UTC @@ -307,8 +307,6 @@ if(view.getLineAtOffset(view.getCaretOffset()) != currentLine) sendStatusBarUpdate(view.getLineAtOffset(view.getCaretOffset())); - - System.out.println("Pos:\t" + view.getCaretOffset()); } }); @@ -503,7 +501,6 @@ Message message = Message.createSetCurrentMessage(Sender.TEXT, pos, false); manager.dispatch(message); setViewData(message); - System.out.println("Start:\t" + currentStart + " CurrentEnd:\t" + currentEnd); } private void sendDeleteSpaceMessage(int start, int offset){ ============================================================================ == Revision: ff7834cb4ac3 Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Mon Jul 28 18:33:55 2014 UTC Log: Fixed bug with new boxline element not being added to section element http://code.google.com/p/brailleblaster/source/detail?r=ff7834cb4ac3 Modified: /src/main/org/brailleblaster/perspectives/braille/Manager.java /src/main/org/brailleblaster/perspectives/braille/mapping/elements/BrlOnlyMa pElement.java /src/main/org/brailleblaster/perspectives/braille/stylepanel/StyleTable.java /src/main/org/brailleblaster/perspectives/braille/viewInitializer/ViewInitia lizer.java ======================================= --- /src/main/org/brailleblaster/perspectives/braille/Manager.java Fri Jul 25 18:18:06 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/Manager.java Mon Jul 28 18:33:55 2014 UTC @@ -881,7 +881,7 @@ BrlOnlyMapElement b1 = new BrlOnlyMapElement(wrapper.getChild(0), (Element)wrapper); b1.setOffsets(start, start + b1.textLength()); b1.setBrailleOffsets(brailleStart, brailleStart + b1.getText().length()); - list.add(startPos, b1); + vi.addElementToSection(list, b1, startPos); text.insertText(start, list.get(startPos).getText() + "\n"); braille.insertText(brailleStart, list.get(startPos).brailleList.getFirst().value() + "\n"); @@ -902,7 +902,7 @@ BrlOnlyMapElement b2 = new BrlOnlyMapElement(wrapper.getChild(wrapper.getChildCount() - 1), (Element)wrapper); b2.setOffsets(end + 1, end + 1 + b2.textLength()); b2.setBrailleOffsets(brailleEnd + 1, brailleEnd + 1 + b2.getText().length()); - list.add(endPos, b2); + vi.addElementToSection(list, b2, endPos); text.insertText(end, "\n" + list.get(endPos).getText()); braille.insertText(brailleEnd, "\n" + list.get(endPos).brailleList.getFirst().value()); ======================================= --- /src/main/org/brailleblaster/perspectives/braille/mapping/elements/BrlOnlyMa pElement.java Thu Jul 10 17:59:36 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/mapping/elements/BrlOnlyMa pElement.java Mon Jul 28 18:33:55 2014 UTC @@ -35,9 +35,9 @@ public Element parentElement(){ return this.parent; } + public void setBrailleOffsets(int start, int end){ this.brailleList.getFirst().start = start; this.brailleList.getFirst().end = end; } - } ======================================= --- /src/main/org/brailleblaster/perspectives/braille/stylepanel/StyleTable.java Thu Jul 3 16:07:57 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/stylepanel/StyleTable.java Mon Jul 28 18:33:55 2014 UTC @@ -380,8 +380,7 @@ disposeFont(editButton); disposeFont(deleteButton); disposeFont(applyButton); - group.dispose(); - + group.dispose(); } private void disposeFont(Button b){ ======================================= --- /src/main/org/brailleblaster/perspectives/braille/viewInitializer/ViewInitia lizer.java Thu Jul 17 19:46:53 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/viewInitializer/ViewInitia lizer.java Mon Jul 28 18:33:55 2014 UTC @@ -278,6 +278,47 @@ return position; } + + /** Adds a new TextMapElement to both the list containing all element in the views and the section map list + * @param list: the visible list containing map elements in the text and braille views + * @param t: element to insert + * @param index: index at which element is being put in visible MapList, also used to determine which section to also add element + */ + public void addElementToSection(MapList list, TextMapElement t, int index){ + int sectionIndex; + //if index is list size then element is appended and not inserted + if(index == list.size()) + sectionIndex = findSectionIndex(list.get(index - 1)); + else + sectionIndex = findSectionIndex(list.get(index)); + + if(sectionIndex != -1){ + SectionElement section = sectionList.get(sectionIndex); + int listIndex; + if(index == list.size()) + section.getList().indexOf(section.getList().add(t)); + else { + listIndex = section.getList().indexOf(section.getList().get(index)); + section.getList().add(listIndex, t); + } + list.add(index, t); + } + } + + /** Used to find a section element by view initializer methods + * @param t: text map element used to find section + * @return int with index value of section in the sectionlist + */ + private int findSectionIndex(TextMapElement t){ + int index = findFirst(); + for(int i = index; i < sectionList.size(); i++){ + if(sectionList.get(i).getList().contains(t)) + return i; + } + + return -1; + } + public ArrayList<SectionElement> getSectionList() { return sectionList; ============================================================================ == Revision: c3669c7ebbf3 Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Tue Jul 29 13:38:39 2014 UTC Log: Fixed bug in opening html based UTD files http://code.google.com/p/brailleblaster/source/detail?r=c3669c7ebbf3 Modified: /src/main/org/brailleblaster/perspectives/braille/viewInitializer/ViewFactor y.java ======================================= --- /src/main/org/brailleblaster/perspectives/braille/viewInitializer/ViewFactor y.java Thu Jul 3 16:07:57 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/viewInitializer/ViewFactor y.java Tue Jul 29 13:38:39 2014 UTC @@ -3,6 +3,7 @@ import org.brailleblaster.archiver.Archiver; import org.brailleblaster.archiver.EPub3Archiver; import org.brailleblaster.archiver.TextArchiver; +import org.brailleblaster.archiver.UTDArchiver; import org.brailleblaster.archiver.WebArchiver; import org.brailleblaster.perspectives.braille.document.BrailleDocument; import org.brailleblaster.perspectives.braille.views.tree.BBTree; @@ -11,7 +12,7 @@ public class ViewFactory { public static ViewInitializer createUpdater(Archiver arch, BrailleDocument doc, TextView text, BrailleView braille, BBTree tree){ - if(arch instanceof EPub3Archiver) + if(arch instanceof EPub3Archiver || (arch instanceof UTDArchiver && arch.getCurrentConfig().equals("epub.cfg"))) return new EPubInitializer(doc, text, braille, tree); else if(arch instanceof WebArchiver || arch instanceof TextArchiver) return new WebInitializer(doc, text, braille, tree); ============================================================================ == Revision: 3123a0d696ae Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Tue Jul 29 15:38:12 2014 UTC Log: Committing changes before merge http://code.google.com/p/brailleblaster/source/detail?r=3123a0d696ae Modified: /src/main/org/brailleblaster/perspectives/braille/Manager.java /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.j ava ======================================= --- /src/main/org/brailleblaster/perspectives/braille/Manager.java Mon Jul 28 18:33:55 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/Manager.java Tue Jul 29 15:38:12 2014 UTC @@ -861,12 +861,18 @@ new Notify(lh.localValue("nothingToApply")); } + /** Wraps a block level element in the appropriate tag then translates and adds boxline brl top and bottom nodes + * @param p: parent of text nodes, the block element to be wrapped in a boxline + * @param m: message passed to views containing offset positions + * @param itemList: arraylist containing text nodes of the block element + */ private void createBoxline(Element p, Message m, ArrayList<TextMapElement> itemList){ Element wrapper = document.wrapElement(p, "boxline"); if(wrapper != null){ Element boxline = document.translateElement((Element)wrapper.copy()); int startPos = list.indexOf(itemList.get(0)); + //find start position int start, brailleStart; if(m.contains("previousStyle") && ((Styles)m.getValue("previousStyle")).contains(StylesType.linesBefore)){ start = (Integer)m.getValue("prev"); @@ -877,16 +883,19 @@ brailleStart = itemList.get(0).brailleList.getFirst().start; } + //insert top boxline wrapper.insertChild(boxline.removeChild(0), 0); BrlOnlyMapElement b1 = new BrlOnlyMapElement(wrapper.getChild(0), (Element)wrapper); b1.setOffsets(start, start + b1.textLength()); b1.setBrailleOffsets(brailleStart, brailleStart + b1.getText().length()); vi.addElementToSection(list, b1, startPos); + //set text text.insertText(start, list.get(startPos).getText() + "\n"); braille.insertText(brailleStart, list.get(startPos).brailleList.getFirst().value() + "\n"); list.shiftOffsetsFromIndex(startPos + 1, list.get(startPos).getText().length() + 1, list.get(startPos).brailleList.getFirst().value().length() + 1, list.get(startPos + 1).start); + //find end position int endPos = list.indexOf(itemList.get(itemList.size() - 1)) + 1; int end, brailleEnd; if(m.contains("previousStyle") && ((Styles)m.getValue("previousStyle")).contains(StylesType.linesAfter)){ @@ -898,19 +907,23 @@ brailleEnd = itemList.get(itemList.size() - 1).brailleList.getLast().end; } + //insert bottom boxline wrapper.appendChild(boxline.removeChild(boxline.getChildCount() - 1)); BrlOnlyMapElement b2 = new BrlOnlyMapElement(wrapper.getChild(wrapper.getChildCount() - 1), (Element)wrapper); b2.setOffsets(end + 1, end + 1 + b2.textLength()); b2.setBrailleOffsets(brailleEnd + 1, brailleEnd + 1 + b2.getText().length()); vi.addElementToSection(list, b2, endPos); + //set text text.insertText(end, "\n" + list.get(endPos).getText()); braille.insertText(brailleEnd, "\n" + list.get(endPos).brailleList.getFirst().value()); list.shiftOffsetsFromIndex(endPos + 1, list.get(endPos).getText().length() + 1, list.get(endPos).brailleList.getFirst().value().length() + 1, list.get(endPos).start); + //remove items from tree for(int i = 0; i < itemList.size(); i++) treeView.removeItem(itemList.get(i), new Message(null)); + //add aside or sidebar to tree treeView.newTreeItem(list.get(startPos), treeView.getSelectionIndex(), 0); handleSetCurrent(Message.createSetCurrentMessage(Sender.TREE, list.get(list.getCurrentIndex() + 1).start, false)); dispatch(Message.createUpdateCursorsMessage(Sender.TREE)); ======================================= --- /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.j ava Fri Jul 25 18:18:06 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/document/BrailleDocument.j ava Tue Jul 29 15:38:12 2014 UTC @@ -656,7 +656,6 @@ return null; } - public Element wrapElement(Element e, String type){ if(type.equals("boxline")){ Element boxline = new Element(semHandler.getElementBySemantic(type)); ============================================================================ == Revision: 73ad8f58eb4a Branch: default Author: Brandon Roller <brandon.r.roller@xxxxxxxxx> Date: Tue Jul 29 15:38:38 2014 UTC Log: merged with main branch http://code.google.com/p/brailleblaster/source/detail?r=73ad8f58eb4a Modified: /src/main/org/brailleblaster/perspectives/braille/Manager.java /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java ======================================= --- /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Fri Jul 25 18:18:06 2014 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Tue Jul 29 15:38:38 2014 UTC @@ -103,6 +103,8 @@ private PaintObjectListener paintObjListener; private int originalStart, originalEnd; private TextMapElement currentElement; + int startSelection; + int endSelection; public TextView (Manager manager, Group documentWindow, BBSemanticsTable table) { super (manager, documentWindow, LEFT_MARGIN, RIGHT_MARGIN, TOP_MARGIN, BOTTOM_MARGIN, table); @@ -117,7 +119,16 @@ view.addSelectionListener(selectionListener = new SelectionAdapter(){ @Override public void widgetSelected(SelectionEvent e) { + selectionArray = view.getSelectionRanges(); + //Added this part for start and end of text selection + for (int i = 0; i < selectionArray.length-1; i++) { + startSelection=selectionArray[i]; + endSelection=selectionArray[i]+selectionArray[i+1]; + + + } + System.out.println(startSelection+" "+endSelection); if(selectionArray[1] > 0){ setSelection(selectionArray[0], selectionArray[1]); currentChar = ' ';