Yes, that is next on the agenda alow with removing boxlines. Once implemented if you select multiple elements and slect boxline it will wrap all the elements inside boxlines as a group, not individually. On Thu, Jul 31, 2014 at 4:25 PM, Vic Beckley <vic.beckley3@xxxxxxxxx> wrote: > Brandon, > > > > Thanks for the help. I assumed that was what it would do. It seems to work > very well so far. It is really a nice feature. > > > > Do boxlines work with multiple elements selected? It seems to put each > element in a separate box. I would like to be able to select several > paragraphs and apply a boxline style to the group of elements. What I mean > is have only one box surrounding the group of paragraphs. Is this possible? > Is it possible or planned? > > > > > > Best regards from Ohio, > > > > Vic > > > > *From:* brailleblaster-bounce@xxxxxxxxxxxxx [mailto: > brailleblaster-bounce@xxxxxxxxxxxxx] *On Behalf Of *Brandon Roller > *Sent:* Thursday, July 31, 2014 3:30 PM > *To:* brailleblaster@xxxxxxxxxxxxx > *Subject:* [brailleblaster] Re: 5 new revisions pushed by > sahel.ma...@xxxxxxxxx on 2014-07-31 18:56 GMT > > > > Let's say you highlighted three paragraphs and selected heading 2 in the > style panel. It would apply heading 2 styles to all three. > > > > On Thu, Jul 31, 2014 at 3:02 PM, Vic Beckley <vic.beckley3@xxxxxxxxx> > wrote: > > What exactly is "multi select styles?" How do you use it? > > > Best regards from Ohio, > > Vic > > -----Original Message----- > From: brailleblaster-bounce@xxxxxxxxxxxxx > [mailto:brailleblaster-bounce@xxxxxxxxxxxxx] On Behalf Of > brailleblaster@xxxxxxxxxxxxxx > Sent: Thursday, July 31, 2014 2:57 PM > To: brailleblaster@xxxxxxxxxxxxx > Subject: [brailleblaster] 5 new revisions pushed by sahel.ma...@xxxxxxxxx > on > 2014-07-31 18:56 GMT > > 5 new revisions: > > Revision: 9b58e3b359cf > Branch: default > Author: Sahel "sahel.mastoureshgh@xxxxxxxxx" > Date: Thu Jul 24 20:04:42 2014 UTC > Log: Reverting some of files second time > http://code.google.com/p/brailleblaster/source/detail?r=9b58e3b359cf > > Revision: d5bb11f3fb3b > Branch: default > Author: Sahel "sahel.mastoureshgh@xxxxxxxxx" > Date: Thu Jul 31 15:34:17 2014 UTC > Log: Adding multi select style > http://code.google.com/p/brailleblaster/source/detail?r=d5bb11f3fb3b > > Revision: b1edff6fec3e > Branch: default > Author: Sahel "sahel.mastoureshgh@xxxxxxxxx" > Date: Thu Jul 31 15:38:44 2014 UTC > Log: commited before mereging > http://code.google.com/p/brailleblaster/source/detail?r=b1edff6fec3e > > Revision: 30910e3d2f45 > Branch: default > Author: Sahel "sahel.mastoureshgh@xxxxxxxxx" > Date: Thu Jul 31 18:51:41 2014 UTC > Log: Fixed merge conflicts > http://code.google.com/p/brailleblaster/source/detail?r=30910e3d2f45 > > Revision: 1e17b7a92010 > Branch: default > Author: Sahel "sahel.mastoureshgh@xxxxxxxxx" > Date: Thu Jul 31 18:54:23 2014 UTC > Log: Fixed merge conflicts second > http://code.google.com/p/brailleblaster/source/detail?r=1e17b7a92010 > > > ============================================================================ > == > Revision: 9b58e3b359cf > Branch: default > Author: Sahel "sahel.mastoureshgh@xxxxxxxxx" > Date: Thu Jul 24 20:04:42 2014 UTC > Log: Reverting some of files second time > http://code.google.com/p/brailleblaster/source/detail?r=9b58e3b359cf > > Modified: > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > ======================================= > --- > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > Thu Jul 24 19:01:54 2014 UTC > +++ > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > Thu Jul 24 20:04:42 2014 UTC > @@ -103,8 +103,6 @@ > 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); > @@ -119,16 +117,7 @@ > 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 = ' '; > > > ============================================================================ > == > Revision: d5bb11f3fb3b > Branch: default > Author: Sahel "sahel.mastoureshgh@xxxxxxxxx" > Date: Thu Jul 31 15:34:17 2014 UTC > Log: Adding multi select style > http://code.google.com/p/brailleblaster/source/detail?r=d5bb11f3fb3b > > 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/Manager.java Thu > Jul > 24 19:35:48 2014 UTC > +++ /src/main/org/brailleblaster/perspectives/braille/Manager.java Thu > Jul > 31 15:34:17 2014 UTC > @@ -36,6 +36,11 @@ > import java.io.File; > import java.io.IOException; > import java.util.ArrayList; > +import java.util.HashMap; > +import java.util.HashSet; > +import java.util.Iterator; > +import java.util.LinkedHashSet; > +import java.util.Set; > > import org.slf4j.Logger; > import org.slf4j.LoggerFactory; > @@ -55,6 +60,8 @@ > 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.PageMapElement; > import org.brailleblaster.perspectives.braille.mapping.elements.Range; > import > org.brailleblaster.perspectives.braille.mapping.elements.SectionElement; > import > org.brailleblaster.perspectives.braille.mapping.elements.TextMapElement; > @@ -806,52 +813,126 @@ > else > braille.positionScrollbar(text.view.getTopIndex()); > } > + /*** > + * Get parent style of the current TextMapElement > + * @param current > + * @param message > + * @return > + */ > + private Element parentStyle(TextMapElement current, Message > message) > { > + Element parent = document.getParent(current.n, true); > + message.put("previousStyle", > styles.get(styles.getKeyFromAttribute(parent))); > + document.changeSemanticAction(message, > current.parentElement()); > + message.put("style", > styles.get(styles.getKeyFromAttribute(parent))); > + return parent; > + > + } > + /*** > + * Handle style for all cases > + * @param message > + */ > > - private void handleUpdateStyle(Message message){ > - if(document.getDOM() != null && > text.view.getText().length() > > 0){ > + private void handleUpdateStyle(Message message) { > + if (document.getDOM() != null && > text.view.getText().length() > 0) { > group.setRedraw(false); > - Element parent = > document.getParent(list.getCurrent().n, true); > + if (message.getValue("multiSelect").equals(false)) > { > + handleStyleCursorSelected(message); > > - message.put("previousStyle", > styles.get(styles.getKeyFromAttribute(parent))); > - document.changeSemanticAction(message, > list.getCurrent().parentElement()); > - message.put("style", > styles.get(styles.getKeyFromAttribute(parent))); > - ArrayList<TextMapElement> itemList = > list.findTextMapElements(list.getCurrentIndex(), parent, true); > + } else { > + handleStyleMultiSelected(message); > + } > + > + } else > + new Notify(lh.localValue("nothingToApply")); > + } > + /*** > + * Handle style if user just move cursor > + * @param message > + */ > + private void handleStyleCursorSelected(Message message) { > + Element parent = parentStyle(list.getCurrent(), message); > + ArrayList<TextMapElement> itemList = > list.findTextMapElements( > + list.getCurrentIndex(), parent, true); > + adjustStyle(itemList, message); > + > + } > + /*** > + * Apply styles to selected text for multiple elements > + * @param start > + * @param end > + * @param message > + */ > + private void handleStyleMultiSelected(Message message){ > > - 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; > - if(start > 0){ > - message.put("prev", list.get(start - > 1).end); > - message.put("braillePrev", list.get(start - > > 1).brailleList.getLast().end); > + int start=text.getSelectedText()[0]; > + int end=text.getSelectedText()[1]; > + > + Set<TextMapElement> itemSet = getElementSelected(start, > end); > + > + Iterator<TextMapElement> itr = itemSet.iterator(); > + while (itr.hasNext()) > + { > + TextMapElement tempElement= itr.next(); > + > + > > if(tempElement.parentElement().getAttributeValue("semantics").contains("styl > e") > || > > tempElement.parentElement().getAttributeValue("semantics").contains("action" > )) > + { > + Message styleMessage = new Message(null); > + styleMessage.put("Style", > message.getValue("Style")); > + Element parent = parentStyle(tempElement, > styleMessage); > + > + ArrayList<TextMapElement> itemList = > list.findTextMapElements(list.getNodeIndex(tempElement), parent, true); > + adjustStyle( itemList,styleMessage); > } > - else { > - message.put("prev", -1); > - message.put("braillePrev", -1); > - } > - > - if(end < list.size() - 1){ > - message.put("next", list.get(end + > 1).start); > - message.put("brailleNext", list.get(end + > 1).brailleList.getFirst().start); > - } > - else { > - message.put("next", -1); > - message.put("brailleNext", -1); > - } > - > - text.adjustStyle(message, itemList); > - braille.adjustStyle(message, itemList); > - > - if(message.contains("linesBeforeOffset")) > - list.shiftOffsetsFromIndex(start, > (Integer)message.getValue("linesBeforeOffset"), > (Integer)message.getValue("linesBeforeOffset"), origPos); > - if(message.contains("linesAfterOffset") && > list.size() > 1 && end < > list.size() - 1) > - list.shiftOffsetsFromIndex(end + 1, > (Integer)message.getValue("linesAfterOffset"), > (Integer)message.getValue("linesAfterOffset"), origPos); > + } > + > + } > + /*** > + * Adjust style of elements in the list base on previous and next > element > + * @param itemList : all selected items which we want style to be > applied > + * @param message : passing information regarding styles > + */ > > - treeView.adjustItemStyle(list.getCurrent()); > - group.setRedraw(true); > + private void adjustStyle(ArrayList<TextMapElement> itemList, > Message > > message) { > + 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; > + if (start > 0) { > + message.put("prev", list.get(start - 1).end); > + message.put("braillePrev", > + list.get(start - > 1).brailleList.getLast().end); > + } else { > + message.put("prev", -1); > + message.put("braillePrev", -1); > } > - else > - new Notify(lh.localValue("nothingToApply")); > + > + if (end < list.size() - 1) { > + message.put("next", list.get(end + 1).start); > + message.put("brailleNext", > + list.get(end + > 1).brailleList.getFirst().start); > + } else { > + message.put("next", -1); > + message.put("brailleNext", -1); > + } > + > + text.adjustStyle(message, itemList); > + braille.adjustStyle(message, itemList); > + > + if (message.contains("linesBeforeOffset")) > + list.shiftOffsetsFromIndex(start, > + (Integer) > message.getValue("linesBeforeOffset"), > + (Integer) > message.getValue("linesBeforeOffset"), origPos); > + if (message.contains("linesAfterOffset") && list.size() > 1 > + && end < list.size() - 1) > + list.shiftOffsetsFromIndex(end + 1, > + (Integer) > message.getValue("linesAfterOffset"), > + (Integer) > message.getValue("linesAfterOffset"), origPos); > + > + treeView.adjustItemStyle(list.getCurrent()); > + group.setRedraw(true); > + > } > + > + > > public void saveAs(){ > BBFileDialog dialog = new BBFileDialog(wp.getShell(), > SWT.SAVE, > arch.getFileTypes(), arch.getFileExtensions()); > @@ -1199,6 +1280,37 @@ > else > return null; > } > + /*** > + * Return all elements that selected in text > + * @param start :start location of where text selected > + * @param end: where selection ended > + * @return: Set of all element where in selection > + */ > + public Set<TextMapElement> getElementSelected(int start, int end) { > + > + Set<TextMapElement> elementSelectedSet = new > LinkedHashSet<TextMapElement>(); > + Set<Element> parentElement = new LinkedHashSet<Element>(); > + int j=start; > + while( j < end) { > + TextMapElement t = getElementInRange(j); > + > + if ((t != null) && (!((t instanceof > BrlOnlyMapElement )||(t instanceof > PageMapElement)))) { > + Element currentParent = > document.getParent(t.n, true); > + > if(!(parentElement.contains(currentParent))){ > + parentElement.add(currentParent); > + elementSelectedSet.add(t); > + } > + > + j=t.end+1; > + > + } > + else > + { > + j=j+1; > + } > + } > + return elementSelectedSet; > + } > > public TextMapElement getElementInBrailleRange(int offset){ > Message m = new Message(null); > ======================================= > --- > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > Thu Jul 24 20:04:42 2014 UTC > +++ > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > Thu Jul 31 15:34:17 2014 UTC > @@ -103,6 +103,7 @@ > private PaintObjectListener paintObjListener; > private int originalStart, originalEnd; > private TextMapElement currentElement; > + private boolean multiSelected; > > public TextView (Manager manager, Group documentWindow, > BBSemanticsTable > table) { > super (manager, documentWindow, LEFT_MARGIN, RIGHT_MARGIN, > TOP_MARGIN, > BOTTOM_MARGIN, table); > @@ -110,6 +111,7 @@ > this.spaceBeforeText = 0; > this.spaceAfterText = 0; > this.manager = manager; > + multiSelected=false; > } > > @Override > @@ -119,7 +121,7 @@ > public void widgetSelected(SelectionEvent e) { > selectionArray = view.getSelectionRanges(); > if(selectionArray[1] > 0){ > - setSelection(selectionArray[0], > selectionArray[1]); > + multiSelected=true; > currentChar = ' '; > if(currentChanges > 0) > sendUpdate(); > @@ -1755,4 +1757,19 @@ > spaceBeforeText = 0; > spaceBeforeText = 0; > } > + public int[] getSelectedText() > + { > + int [] temp=new int[2]; > + if(selectionArray!=null){ > + temp[0]=selectionArray[0]; > + temp[1]=selectionArray[0]+selectionArray[1]; > + } > + return temp; > + } > + > + public boolean isMultiSelected() { > + return multiSelected; > + } > + > + > } > > > ============================================================================ > == > Revision: b1edff6fec3e > Branch: default > Author: Sahel "sahel.mastoureshgh@xxxxxxxxx" > Date: Thu Jul 31 15:38:44 2014 UTC > Log: commited before mereging > http://code.google.com/p/brailleblaster/source/detail?r=b1edff6fec3e > > Modified: > /src/main/org/brailleblaster/archiver/NimasArchiver.java > > > /src/main/org/brailleblaster/perspectives/braille/stylepanel/StyleManager.ja > va > > ======================================= > --- /src/main/org/brailleblaster/archiver/NimasArchiver.java Thu Jul 24 > 19:10:40 2014 UTC > +++ /src/main/org/brailleblaster/archiver/NimasArchiver.java Thu Jul 31 > 15:38:44 2014 UTC > @@ -85,7 +85,7 @@ > > // Segment the single NIMAS file. This will make rendering > // faster in certain perspectives. > - writeNimasSegments(); > + //writeNimasSegments(); > > currentConfig = getAutoCfg("nimas"); // Nimas document. > filterNames = new String[] {"XML", "XML Zip", "BRF", > "UTDML"}; > ======================================= > --- > > /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 > Thu Jul 31 15:38:44 2014 UTC > @@ -102,8 +102,18 @@ > public void apply(String item){ > Message m = new Message(BBEvent.UPDATE_STYLE); > Styles style = semanticsTable.get(item); > + > if(style != null){ > m.put("Style", style); > + if(dm.getText().isMultiSelected()==true) > + { > + m.put("multiSelect", true); > + } > + else > + { > + m.put("multiSelect", false); > + > + } > dm.dispatch(m); > } > } > > > ============================================================================ > == > Revision: 30910e3d2f45 > Branch: default > Author: Sahel "sahel.mastoureshgh@xxxxxxxxx" > Date: Thu Jul 31 18:51:41 2014 UTC > Log: Fixed merge conflicts > http://code.google.com/p/brailleblaster/source/detail?r=30910e3d2f45 > > Modified: > /src/main/org/brailleblaster/archiver/NimasArchiver.java > /src/main/org/brailleblaster/perspectives/braille/Manager.java > > > /src/main/org/brailleblaster/perspectives/braille/stylepanel/StyleManager.ja > va > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > ======================================= > --- /src/main/org/brailleblaster/archiver/NimasArchiver.java Thu Jul 31 > 15:38:44 2014 UTC > +++ /src/main/org/brailleblaster/archiver/NimasArchiver.java Thu Jul 31 > 18:51:41 2014 UTC > @@ -30,26 +30,12 @@ > > package org.brailleblaster.archiver; > > -import java.io.BufferedOutputStream; > import java.io.File; > -import java.io.FileNotFoundException; > -import java.io.FileOutputStream; > import java.io.IOException; > -import java.io.OutputStream; > -import java.io.OutputStreamWriter; > -import java.io.PrintWriter; > -import java.io.StringWriter; > import java.util.ArrayList; > -import java.util.HashMap; > import java.util.HashSet; > import java.util.Set; > > -import javax.xml.parsers.DocumentBuilderFactory; > -import javax.xml.parsers.ParserConfigurationException; > -import javax.xml.transform.dom.DOMSource; > -import javax.xml.transform.stream.StreamResult; > -import javax.xml.transform.stream.StreamSource; > - > import nu.xom.Attribute; > import nu.xom.Builder; > import nu.xom.Document; > @@ -58,17 +44,12 @@ > import nu.xom.Nodes; > import nu.xom.ParsingException; > import nu.xom.ValidityException; > -import nu.xom.XPathContext; > -import nu.xom.converters.DOMConverter; > -import nu.xom.xslt.XSLException; > -import nu.xom.xslt.XSLTransform; > > import org.brailleblaster.BBIni; > import org.brailleblaster.document.BBDocument; > import org.brailleblaster.util.FileUtils; > import org.brailleblaster.util.Notify; > import org.brailleblaster.util.Zipper; > -import org.w3c.dom.DOMImplementation; > > > > //////////////////////////////////////////////////////////////////////////// > ////// > // Prepares Nimas Archive for opening. > @@ -76,21 +57,27 @@ > > > Set <String> allPaths; > - > + // The number of documents we COULD have if wrote them all to disk. > + int numPotentialFiles = 0; > > NimasArchiver(String docToPrepare) { > + > super(docToPrepare); > + > + currentConfig = getAutoCfg("nimas"); // Nimas document. > + filterNames = new String[] {"XML", "XML Zip", "BRF", > "UTDML"}; > + filterExtensions = new String[] {"*.xml", "*.zip", "*.brf", > "*.utd"}; > + allPaths = new HashSet<String>(); > + > + // Unzip file if needed. > if(docToPrepare.endsWith(".zip")) > unzip(docToPrepare); > > // Segment the single NIMAS file. This will make rendering > // faster in certain perspectives. > - //writeNimasSegments(); > - > - currentConfig = getAutoCfg("nimas"); // Nimas document. > - filterNames = new String[] {"XML", "XML Zip", "BRF", > "UTDML"}; > - filterExtensions = new String[] {"*.xml", "*.zip", "*.brf", > "*.utd"}; > - allPaths=new HashSet<String>(); > + > + // Write the first file to disk. > + wrtieToDisk(0); > } > > @Override > @@ -100,7 +87,7 @@ > path = workingDocPath; > > if(fu.createXMLFile(doc.getNewXML(), path)){ > - String tempSemFile = BBIni.getTempFilesPath() + > BBIni.getFileSep() + > fu.getFileName(path) + ".sem"; > + String tempSemFile = BBIni.getTempFilesPath() + > BBIni.getFileSep() + > fu.getFileName(path) + ".sem"; > copySemanticsFile(tempSemFile, fu.getPath(path) + > BBIni.getFileSep() + > fu.getFileName(path) + ".sem"); > } > else { > @@ -131,6 +118,7 @@ > String sp = BBIni.getFileSep(); > String tempOutPath = BBIni.getTempFilesPath() + > filePath.substring(filePath.lastIndexOf(sp), filePath.lastIndexOf(".")) + > sp; > workingDocPath = unzipr.Unzip(filePath, tempOutPath); > + > // Store paths. > zippedPath = filePath; > } > @@ -194,7 +182,30 @@ > arch.save(doc, path); > return arch; > } > + > + > > //////////////////////////////////////////////////////////////////////////// > ///// > + // Clears the list of path indices so we can once again create them > on > the fly. > + // Needed when we save a nimas file. We have to delete all of the > temp > files, > + // zip, then recreate them for the user. > + public void resetDuplicatePathList() { > + allPaths.clear(); > + } > > + > > //////////////////////////////////////////////////////////////////////////// > ///// > + // Resets the path list(resetDuplicatePathList()), and writes a > + // chunked document to disk using the specified index. > + public void resetThenWrite(int idx) { > + resetDuplicatePathList(); > + wrtieToDisk(idx); > + } > + > + > > //////////////////////////////////////////////////////////////////////////// > ///// > + // Returns the number of potential files we would have > + // if all of them were written to disk. > + public int getNumPotentialFiles() { > + return numPotentialFiles; > + } > + > /*** > * Write to the disk once at time if the file is not there already > * @param index > @@ -203,20 +214,23 @@ > public String wrtieToDisk(int index){ > // Build string path. > String outPath = workingDocPath.substring(0, > workingDocPath.lastIndexOf(BBIni.getFileSep())) + BBIni.getFileSep() + > Integer.toString(index) + ".xml"; > - if(!(allPaths.contains(Integer.toString(index)))){ > + if( !(allPaths.contains(Integer.toString(index))) ){ > > - Document curDoc=manageNimas(index); > + // Break up document by level1 elements and > retrieve > the current one. > + Document curDoc = manageNimas(index); > + > // Create file utility for saving our xml files. > FileUtils fu = new FileUtils(); > > // Write file. > fu.createXMLFile( curDoc, outPath ); > allPaths.add(Integer.toString(index)); > + > + // Add this file to the temp list so it will be > deleted later. > + tempList.add(outPath); > } > > return outPath; > - > - > } > > /*** > @@ -231,14 +245,39 @@ > File temp = new File(sourcePath); > //get all level1 element > Nodes allNode=getLevel1(); > + > + // Store the number of files we would create if we > + // ran through all of the indices. > + numPotentialFiles = allNode.size(); > + > if (index<allNode.size()){ > Node node=allNode.get(index); > currentDoc=breakDocument(temp,node); > + } > + > + // Get the number of <img> elements. > + if(getImgCountList().size() == 0) > + { > + // Go through every <level1> element, and count the > + // images. > + for(int curLvl1 = 0; curLvl1 < allNode.size(); > curLvl1++) > + { > + // Add the count. > + Node nd = allNode.get(curLvl1); > + addToNumImgsList( new > Document((Element)nd.copy()), curLvl1); > + } > > + // Save paths to files that we may create. > + // Fill list. > + if(epubFileList.size() == 0) { > + for(int curF = 0; curF < numPotentialFiles; > curF++) { > + > epubFileList.add(workingDocPath.substring(0, > workingDocPath.lastIndexOf(BBIni.getFileSep())) + BBIni.getFileSep() + > Integer.toString(curF) + ".xml"); > + } > + } > } > > - return currentDoc; > > + return currentDoc; > } > > > @@ -359,60 +398,60 @@ > } > > > > //////////////////////////////////////////////////////////////////////////// > / > - // Writes segmented NIMAS documents to disc and returns a list of > their > + // Writes segmented NIMAS documents to disk and returns a list of > their > // paths. > - public ArrayList<String> writeNimasSegments() > - { > - // Grab list of documents after breaking them up by level1's. > - ArrayList<Document> docs = manageNimas(); > - > - // Create file utility for saving our xml files. > - FileUtils fu = new FileUtils(); > - > - // Path to xsl file. Add three slashes to avoid BS. > - String xslPath = "file:///" + BBIni.getProgramDataPath() + > BBIni.getFileSep() + "xsl" + BBIni.getFileSep() + "dtb2005html.xsl"; > +// public ArrayList<String> writeNimasSegments() > +// { > +// // Grab list of documents after breaking them up by level1's. > +// ArrayList<Document> docs = manageNimas(); > +// > +// // Create file utility for saving our xml files. > +// FileUtils fu = new FileUtils(); > +// > +// // Path to xsl file. Add three slashes to avoid BS. > +// String xslPath = "file:///" + BBIni.getProgramDataPath() + > BBIni.getFileSep() + "xsl" + BBIni.getFileSep() + "dtb2005html.xsl"; > +//// > +//// // Build the xsl document. > +// Document xslDoc = null; > +// Builder builder = new Builder(); > +// try { xslDoc = builder.build(xslPath); } > +// catch (ValidityException e1) { e1.printStackTrace(); } > +// catch (ParsingException e1) { e1.printStackTrace(); } > +// catch (IOException e1) { e1.printStackTrace(); } > +// > +// // Create the transform. > +// XSLTransform xslt = null; > +// try { xslt = new XSLTransform(xslDoc); } > +// catch (XSLException e1) { e1.printStackTrace(); } > // > -// // Build the xsl document. > - Document xslDoc = null; > - Builder builder = new Builder(); > - try { xslDoc = builder.build(xslPath); } > - catch (ValidityException e1) { e1.printStackTrace(); } > - catch (ParsingException e1) { e1.printStackTrace(); } > - catch (IOException e1) { e1.printStackTrace(); } > - > - // Create the transform. > - XSLTransform xslt = null; > - try { xslt = new XSLTransform(xslDoc); } > - catch (XSLException e1) { e1.printStackTrace(); } > - > - // Loop through the documents, write to file, count images in > each. > - for(int curDoc = 0; curDoc < docs.size(); curDoc++) > - { > - // Finally transform the document. > - Nodes newDocNodes = null; > - try { newDocNodes = xslt.transform( > docs.get(curDoc) > ); } > - catch (XSLException e) { e.printStackTrace(); } > - Document transformedDoc = > XSLTransform.toDocument(newDocNodes); > - > - // Build string path. > - String outPath = workingDocPath.substring(0, > workingDocPath.lastIndexOf(BBIni.getFileSep())) + BBIni.getFileSep() + > Integer.toString(curDoc) + ".xhtml"; > - > - // Add path to list. > - epubFileList.add(outPath); > - > - // Count the images in this document. > - addToNumImgsList(docs.get(curDoc)); > - > - // Write file. > - fu.createXMLFile( transformedDoc, outPath ); > -// fu.createXMLFile( docs.get(curDoc), outPath ); > - > - } // for(int curDoc... > - > - // Create the opf file. > - return epubFileList; > - > - } // writeNimasSegments() > +// // Loop through the documents, write to file, count images in > each. > +// for(int curDoc = 0; curDoc < docs.size(); curDoc++) > +// { > +// // Finally transform the document. > +// Nodes newDocNodes = null; > +// try { newDocNodes = xslt.transform( > docs.get(curDoc) > ); } > +// catch (XSLException e) { e.printStackTrace(); } > +// Document transformedDoc = > XSLTransform.toDocument(newDocNodes); > +// > +// // Build string path. > +// String outPath = workingDocPath.substring(0, > workingDocPath.lastIndexOf(BBIni.getFileSep())) + BBIni.getFileSep() + > Integer.toString(curDoc) + ".xhtml"; > +// > +// // Add path to list. > +// epubFileList.add(outPath); > +// > +// // Count the images in this document. > +// addToNumImgsList(docs.get(curDoc)); > +// > +// // Write file. > +// fu.createXMLFile( transformedDoc, outPath ); > +//// fu.createXMLFile( docs.get(curDoc), outPath ); > +// > +// } // for(int curDoc... > +// > +// // Create the opf file. > +// return epubFileList; > +// > +// } // writeNimasSegments() > > > > //////////////////////////////////////////////////////////////////////////// > / > // Helper: Uses list created with manageNimas() to create an OPF > file for > ======================================= > --- /src/main/org/brailleblaster/perspectives/braille/Manager.java Thu > Jul > 31 15:34:17 2014 UTC > +++ /src/main/org/brailleblaster/perspectives/braille/Manager.java Thu > Jul > 31 18:51:41 2014 UTC > @@ -749,8 +749,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"); > } > > @@ -837,12 +836,11 @@ > group.setRedraw(false); > if (message.getValue("multiSelect").equals(false)) > { > handleStyleCursorSelected(message); > - > } else { > handleStyleMultiSelected(message); > } > - > - } else > + } > + else > new Notify(lh.localValue("nothingToApply")); > } > /*** > @@ -853,7 +851,7 @@ > Element parent = parentStyle(list.getCurrent(), message); > ArrayList<TextMapElement> itemList = > list.findTextMapElements( > list.getCurrentIndex(), parent, true); > - adjustStyle(itemList, message); > + adjustStyle(itemList, message,parent); > > } > /*** > @@ -881,7 +879,7 @@ > Element parent = parentStyle(tempElement, > styleMessage); > > ArrayList<TextMapElement> itemList = > list.findTextMapElements(list.getNodeIndex(tempElement), parent, true); > - adjustStyle( itemList,styleMessage); > + adjustStyle( itemList,styleMessage,parent); > } > } > > @@ -892,7 +890,7 @@ > * @param message : passing information regarding styles > */ > > - private void adjustStyle(ArrayList<TextMapElement> itemList, > Message > > message) { > + private void adjustStyle(ArrayList<TextMapElement> itemList, > Message > > message,Element parent) { > 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; > @@ -928,11 +926,84 @@ > (Integer) > message.getValue("linesAfterOffset"), origPos); > > treeView.adjustItemStyle(list.getCurrent()); > + > if(((Styles)message.getValue("Style")).getName().equals("boxline")) > + createBoxline(parent, message, itemList); > group.setRedraw(true); > > } > > > + > + /** 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()); > + System.out.println(boxline.toXML().toString()); > + 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"); > + brailleStart = > (Integer)m.getValue("braillePrev"); > + } > + else { > + start = itemList.get(0).start; > + 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)){ > + 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; > + } > + > + //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)); > + } > + } > > public void saveAs(){ > BBFileDialog dialog = new BBFileDialog(wp.getShell(), > SWT.SAVE, > arch.getFileTypes(), arch.getFileExtensions()); > ======================================= > --- > > /src/main/org/brailleblaster/perspectives/braille/stylepanel/StyleManager.ja > va > Thu Jul 31 15:38:44 2014 UTC > +++ > > /src/main/org/brailleblaster/perspectives/braille/stylepanel/StyleManager.ja > va > Thu Jul 31 18:51:41 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,7 +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); > if(dm.getText().isMultiSelected()==true) > ======================================= > --- > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > Thu Jul 31 15:34:17 2014 UTC > +++ > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > Thu Jul 31 18:51:41 2014 UTC > @@ -826,7 +826,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)) > @@ -1515,86 +1515,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: 1e17b7a92010 > Branch: default > Author: Sahel "sahel.mastoureshgh@xxxxxxxxx" > Date: Thu Jul 31 18:54:23 2014 UTC > Log: Fixed merge conflicts second > http://code.google.com/p/brailleblaster/source/detail?r=1e17b7a92010 > > Modified: > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > ======================================= > --- > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > Thu Jul 31 18:51:41 2014 UTC > +++ > /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java > > Thu Jul 31 18:54:23 2014 UTC > @@ -103,7 +103,12 @@ > private PaintObjectListener paintObjListener; > private int originalStart, originalEnd; > private TextMapElement currentElement; > + > + int startSelection; > + int endSelection; > + > private boolean multiSelected; > + > > public TextView (Manager manager, Group documentWindow, > BBSemanticsTable > table) { > super (manager, documentWindow, LEFT_MARGIN, RIGHT_MARGIN, > TOP_MARGIN, > BOTTOM_MARGIN, table); > @@ -119,7 +124,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){ > multiSelected=true; > currentChar = ' '; > > >