Revision: 8b98269c969f Branch: rt1508-MoveUTDLibrary Author: Brandon Roller<brandon.r.roller@xxxxxxxxx> Date: Mon Feb 23 19:57:20 2015 UTC Log: merged with default https://code.google.com/p/brailleblaster/source/detail?r=8b98269c969f Deleted: /src/main/org/brailleblaster/perspectives/braille/ui/BBToolBar.java Modified: /src/main/org/brailleblaster/BBIni.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/ui/BBToolBar.java Fri Jan 30 21:57:11 2015 UTC
+++ /dev/null @@ -1,278 +0,0 @@ -/* BrailleBlaster Braille Transcription Application - * - * Copyright (C) 2014 -* American Printing House for the Blind, Inc. www.aph.org -* and - * ViewPlus Technologies, Inc. www.viewplus.com - * and - * Abilitiessoft, Inc. www.abilitiessoft.com - * All rights reserved - * - * This file may contain code borrowed from files produced by various - * Java development teams. These are gratefully acknowledged. - * - * This file is free software; you can redistribute it and/or modify it - * under the terms of the Apache 2.0 License, as given at - * http://www.apache.org/licenses/ - * - * This file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE - * See the Apache 2.0 License for more details. - * - * You should have received a copy of the Apache 2.0 License along with - * this program; see the file LICENSE. - * If not, see - * http://www.apache.org/licenses/ - * - * Maintained by Keith Creasy <kcreasy@xxxxxxx>, Project Manager - */ - -package org.brailleblaster.perspectives.braille.ui; - -import org.brailleblaster.BBIni; -import org.brailleblaster.localization.LocaleHandler; -import org.brailleblaster.perspectives.braille.Manager; -import org.brailleblaster.perspectives.braille.views.wp.BrailleView; -import org.brailleblaster.perspectives.braille.views.wp.TextView; -import org.brailleblaster.util.ImageHelper; -import org.brailleblaster.wordprocessor.BBFileDialog; -import org.brailleblaster.wordprocessor.WPManager; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -//import org.eclipse.swt.graphics.Font; -//import org.eclipse.swt.graphics.FontData; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.FormAttachment; -import org.eclipse.swt.layout.FormData; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Monitor; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.ToolBar; -import org.eclipse.swt.widgets.ToolItem; - -public class BBToolBar { - - int MAX_W = 32; - int MAX_H = 32; - - private ToolBar toolBar; - WPManager wordProc; - ImageHelper imgHelper; - Manager currentEditor; - String curView = null; - - String sep = null; - String distPath = null; - - // FO - public BBToolBar(Shell shell, final WPManager wp, Manager manager) { - setEditor(manager); - LocaleHandler lh = new LocaleHandler(); - toolBar = new ToolBar(shell, SWT.NONE); - FormData location = new FormData(); - location.left = new FormAttachment(0); - location.right = new FormAttachment(40); - location.top = new FormAttachment(0); - toolBar.setLayoutData(location); - wordProc = wp; - imgHelper = new ImageHelper(); - - // Calculate max width and height for toolbar buttons. - Monitor mon[] = Display.getDefault().getMonitors(); - Rectangle screenSize = mon[0].getBounds(); - - MAX_W = screenSize.width / 30; - MAX_H = MAX_W; - - sep = BBIni.getFileSep();- distPath = BBIni.getProgramDataPath().substring(0, BBIni.getProgramDataPath().lastIndexOf(sep));
- distPath += sep + "programData"; - - // FO - String tlabel; - ToolItem openItem = new ToolItem(toolBar, SWT.PUSH); - tlabel = lh.localValue("&Open"); - openItem.setText(tlabel.replace("&", ""));- openItem.setImage( imgHelper.createScaledImage(new Image(null, distPath + sep + "images" + sep + "open.png"), MAX_W, MAX_H) ); -// openItem.setImage( new Image(null, distPath + sep + "images" + sep + "open.png") );
- openItem.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - String filePath = fileOpenDialog(); - int index= wp.getFolder().getSelectionIndex(); - if(index == -1 && filePath != null){ - wp.addDocumentManager(filePath); - } - else if(filePath != null){ - if(currentEditor.canReuseTab()){ - currentEditor.closeUntitledTab(); - currentEditor.openDocument(filePath); - currentEditor.checkTreeFocus(); - } - else - wp.addDocumentManager(filePath); - } - } - }); - - ToolItem saveItem = new ToolItem(toolBar, SWT.PUSH); - // FO - tlabel = lh.localValue("&Save"); - saveItem.setText(tlabel.replace("&", ""));- saveItem.setImage(new Image(null, distPath + sep + "images" + sep + "save.png"));
- saveItem.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (BBIni.debugging()) { - // dm.setReturn (WP.OpenDocumentGetFile); - } - else { - int index= wp.getFolder().getSelectionIndex(); - if(index == -1){ - //wp.addDocumentManager(null); - //wp.getList().getFirst().fileSave(); - } - else { - // wp.getList().get(index).fileSave(); - currentEditor.fileSave(); - } - } - } - }); - - ToolItem saveAsItem = new ToolItem(toolBar, SWT.PUSH); - saveAsItem.setText("Save As");- saveAsItem.setImage(new Image(null, distPath + sep + "images" + sep + "saveAs.png"));
- saveAsItem.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (BBIni.debugging()) { - // dm.setReturn (WP.OpenDocumentGetFile); - } - else { - int index= wp.getFolder().getSelectionIndex(); - if(index == -1){ - // wp.addDocumentManager(null); - // wp.getList().getFirst().saveAs(); - } - else { - //wp.getList().get(index).saveAs(); - currentEditor.saveAs(); - } - } - } - }); - - ToolItem translateItem = new ToolItem(toolBar, SWT.PUSH); - // FO - tlabel = lh.localValue("&Translate"); - translateItem.setText(tlabel.replace("&", ""));- translateItem.setImage(new Image(null, distPath + sep + "images" + sep + "translate.png"));
- // FO - translateItem.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - // dm.translateView(true); - } - }); - - ToolItem embossNow = new ToolItem(toolBar, SWT.PUSH); - // FO - tlabel = lh.localValue("Emboss&Now!"); - embossNow.setText(tlabel.replace("&", ""));- embossNow.setImage(new Image(null, distPath + sep + "images" + sep + "emboss.png"));
- embossNow.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - int index= wp.getFolder().getSelectionIndex(); - if(index != -1){ - //wp.getList().get(index).fileEmbossNow(); - currentEditor.fileEmbossNow(); - } - } - }); - - /** - * ToolItem embossWithInk = new ToolItem (toolBar, SWT.PUSH); tlabel = - * lh.localValue ("EmbossInkN&ow"); embossWithInk.setText - * (tlabel.replace ("&", "")); embossWithInk.setEnabled(false); - * embossWithInk.addSelectionListener (new SelectionAdapter() { public - * void widgetSelected (SelectionEvent e) { dm.placeholder(); } }); - **/ - - ToolItem daisyPrint = new ToolItem(toolBar, SWT.PUSH); - tlabel = lh.localValue("&Print"); - daisyPrint.setText(tlabel.replace("&", ""));- daisyPrint.setImage(new Image(null, distPath + sep + "images" + sep + "print.png"));
- daisyPrint.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - // dm.daisyPrint(); - } - }); - - final ToolItem viewSwitch = new ToolItem(toolBar, SWT.PUSH); - tlabel = lh.localValue("&Toggle View"); - viewSwitch.setText(tlabel.replace("&", "")); - setViewButton(viewSwitch); - viewSwitch.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - setViewButton(viewSwitch); - } - }); - - FormData bloc = new FormData(); - bloc.left = new FormAttachment(40); - bloc.right = new FormAttachment(50); - bloc.top = new FormAttachment(5); - - toolBar.pack(); - } - - public void setViewButton(final ToolItem ti) { - final String dpStr = distPath; - final String sepStr = sep; - String view = currentEditor.getCurrentEditor(); - if(view == null || view.equals("")){ - currentEditor.setEditingView(TextView.class.getCanonicalName());- ti.setImage(new Image(null, dpStr + sepStr + "images" + sepStr + "view_P.png"));
- } - else if(view.equals(TextView.class.getCanonicalName())){ - currentEditor.setEditingView(BrailleView.class.getCanonicalName());- ti.setImage(new Image(null, dpStr + sepStr + "images" + sepStr + "view_B.png"));
- } - else if(view.equals(BrailleView.class.getCanonicalName())) { - currentEditor.setEditingView(null);- ti.setImage(new Image(null, dpStr + sepStr + "images" + sepStr + "view_PB.png"));
- } - } - - public void setEditor(Manager editor){ - currentEditor = editor; - } - - public void dispose(){ - toolBar.dispose(); - } - - protected String fileOpenDialog(){ - String tempName = null; - - if(!BBIni.debugging()){- String[] filterNames = new String[] { "XML", "XML ZIP", "XHTML", "HTML","HTM", "EPUB", "TEXT", "UTDML working document"}; - String[] filterExtensions = new String[] { "*.xml", "*.zip", "*.xhtml","*.html", "*.htm", "*.epub", "*.txt", "*.utd"}; - BBFileDialog dialog = new BBFileDialog(wordProc.getShell(), SWT.OPEN, filterNames, filterExtensions);
- tempName = dialog.open(); - } - else - tempName = BBIni.getDebugFilePath(); - - return tempName; - } -} ======================================= --- /src/main/org/brailleblaster/BBIni.java Mon Feb 9 17:36:27 2015 UTC +++ /src/main/org/brailleblaster/BBIni.java Mon Feb 23 19:57:20 2015 UTC @@ -228,7 +228,7 @@ // Default Config File. // ///////////////////// - + // Temporary fix, should be removed once log file handle issue is // resolved // Only delete the files if we weren't working on something. @@ -318,10 +318,19 @@ hSubcommands = true; } } + // Access log level settings + String logLevel = props.getProperty("logLevel"); + + //If logLevel does not exist, make it + if (logLevel == null){ + props.setProperty("logLevel", "" + LogLevel.ERROR); + logLevel = "" + LogLevel.ERROR; + } + try { // LibLouisUTDML.loadLibrary(nativeLibraryPath, nativeLibrarySuffix); // LibLouisUTDML.getInstance().setLogLevel(LogLevel.ERROR); - // LibLouis.getInstance().setLogLevel(LogLevel.ERROR); + // LibLouis.getInstance().setLogLevel(Integer.parseInt(logLevel));// org.brailleblaster.louisutdml.LogHandler louisutdmlLogHandler = new org.brailleblaster.louisutdml.LogHandler();
// LibLouis.getInstance().registerLogCallback(louisutdmlLogHandler); // LibLouisUTDML.getInstance().registerLogCallback(louisutdmlLogHandler); =======================================--- /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java Mon Feb 9 18:34:55 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/BrailleView.java Mon Feb 23 19:57:20 2015 UTC
@@ -72,9 +72,7 @@ import org.eclipse.swt.graphics.Rectangle; public class BrailleView extends WPView { - private int currentStart, currentEnd, nextStart; - private int oldCursorPosition = -1; - private int currentChar; + private ViewStateObject stateObj;private ArrayList<BrailleMapElement> pageRanges = new ArrayList<BrailleMapElement>();
private String charAtOffset; @@ -92,6 +90,7 @@public BrailleView(Manager manager, SashForm sash, BBSemanticsTable table) {
super(manager, sash, table); + stateObj = new ViewStateObject(); this.total = 0; this.spaceBeforeText = 0; this.spaceAfterText = 0; @@ -112,14 +111,13 @@ view.addVerifyKeyListener(verifyListener = new VerifyKeyListener(){ @Override public void verifyKey(VerifyEvent e) { - currentChar = e.keyCode; + stateObj.setCurrentChar(e.keyCode);//Handles single case where page is on last line and text is selected to last line and arrow down is pressed which does not move cursor if(manager.inBraillePageRange(view.getCaretOffset()) && e.keyCode == SWT.ARROW_DOWN && view.getLineAtOffset(view.getCaretOffset()) == view.getLineCount() - 1)
- view.setCaretOffset(nextStart); + view.setCaretOffset(stateObj.getNextStart()); - oldCursorPosition = view.getCaretOffset(); - + stateObj.setOldCursorPosition(view.getCaretOffset()); } }); @@ -130,7 +128,7 @@Message message = Message.createGetCurrentMessage(Sender.BRAILLE, view.getCaretOffset());
manager.dispatch(message); setViewData(message); - if(oldCursorPosition == -1 && positionFromStart == 0){ + if(stateObj.getOldCursorPosition() == -1 && positionFromStart == 0){ view.setCaretOffset((Integer)message.getValue("brailleStart")); } sendStatusBarUpdate(view.getLineAtOffset(view.getCaretOffset())); @@ -149,7 +147,7 @@ @Override public void mouseDown(MouseEvent e) { if(!getLock()){- if(view.getCaretOffset() > currentEnd || view.getCaretOffset() < currentStart){ + if(view.getCaretOffset() > stateObj.getCurrentEnd() || view.getCaretOffset() < stateObj.getCurrentStart()){
setCurrent(); } @@ -162,10 +160,10 @@ @Override public void caretMoved(CaretEvent e) { if(!getLock()){- if(currentChar == SWT.ARROW_DOWN || currentChar == SWT.ARROW_LEFT || currentChar == SWT.ARROW_RIGHT || currentChar == SWT.ARROW_UP || currentChar == SWT.PAGE_DOWN || currentChar == SWT.PAGE_UP){
- if(e.caretOffset >= currentEnd || e.caretOffset < currentStart){ - setCurrent(); - currentChar = ' ';+ if(stateObj.getCurrentChar() == SWT.ARROW_DOWN || stateObj.getCurrentChar() == SWT.ARROW_LEFT || stateObj.getCurrentChar() == SWT.ARROW_RIGHT || stateObj.getCurrentChar() == SWT.ARROW_UP || stateObj.getCurrentChar() == SWT.PAGE_DOWN || stateObj.getCurrentChar() == SWT.PAGE_UP){ + if(e.caretOffset >= stateObj.getCurrentEnd() || e.caretOffset < stateObj.getCurrentStart()){
+ setCurrent(); + stateObj.setCurrentChar(' '); } //if(view.getLineAtOffset(view.getCaretOffset()) != currentLine){ sendStatusBarUpdate(view.getLineAtOffset(view.getCaretOffset())); @@ -224,9 +222,9 @@ @Override @SuppressWarnings("unchecked") protected void setViewData(Message message){ - currentStart = (Integer)message.getValue("brailleStart"); - currentEnd = (Integer)message.getValue("brailleEnd"); - nextStart = (Integer)message.getValue("nextBrailleStart"); + stateObj.setCurrentStart((Integer)message.getValue("brailleStart")); + stateObj.setCurrentEnd((Integer)message.getValue("brailleEnd")); + stateObj.setNextStart((Integer)message.getValue("nextBrailleStart")); this.pageRanges.clear();setPageRange((ArrayList<BrailleMapElement>)message.getValue("pageRanges"));
} @@ -711,7 +709,7 @@// handleLineWrap(t.brailleList.getFirst().start, insertionString, margin, style.contains(StylesType.firstLineIndent));
// }- // if(isFirst(t.brailleList.getFirst().n) && style.contains(StylesType.firstLineIndent)) + // if(isFirst(t.brailleList.getFirst().n) && style.contains(StylesType.firstLineIndent)&& insertionString.length() > 0)
// setFirstLineIndent(t.brailleList.getFirst().start, style); view.setCaretOffset(pos); setListenerLock(false); @@ -758,6 +756,13 @@ public void changeIndent(int start, Message message){view.setLineIndent(view.getLineAtOffset(start), 1, (Integer)message.getValue("indent"));
} + + public void changeMargin(int start, int end, Message message){ + int startLine = view.getLineAtOffset(start); + int endLine = view.getLineAtOffset(end); + int lines = (endLine - startLine) + 1;+ view.setLineIndent(startLine, lines, (Integer)message.getValue("margin"));
+ } public void updateCursorPosition(Message message){ setListenerLock(true); @@ -769,18 +774,18 @@ public void setPositionFromStart(){ int count = 0; - positionFromStart = view.getCaretOffset() - currentStart;- if(positionFromStart > 0 && currentStart + positionFromStart <= currentEnd){
- String text = view.getTextRange(currentStart, positionFromStart); + positionFromStart = view.getCaretOffset() - stateObj.getCurrentStart();+ if(positionFromStart > 0 && stateObj.getCurrentStart() + positionFromStart <= stateObj.getCurrentEnd()){ + String text = view.getTextRange(stateObj.getCurrentStart(), positionFromStart);
count = text.length() - text.replaceAll("\n", "").length(); positionFromStart -= count; - positionFromStart -= checkPageRange(currentStart + positionFromStart);+ positionFromStart -= checkPageRange(stateObj.getCurrentStart() + positionFromStart);
cursorOffset = count; }- else if(positionFromStart > 0 && currentStart + positionFromStart > currentEnd){
- String text = view.getTextRange(currentStart, positionFromStart);+ else if(positionFromStart > 0 && stateObj.getCurrentStart() + positionFromStart > stateObj.getCurrentEnd()){ + String text = view.getTextRange(stateObj.getCurrentStart(), positionFromStart);
count = text.length() - text.replaceAll("\n", "").length(); - cursorOffset = (currentStart + positionFromStart) - currentEnd;+ cursorOffset = (stateObj.getCurrentStart() + positionFromStart) - stateObj.getCurrentEnd();
positionFromStart = 99999; } else { @@ -798,24 +803,24 @@ int [] arr = getIndexArray(e); if(arr == null){ if((Integer)message.getValue("lastPosition") == 0) - pos = currentStart; + pos = stateObj.getCurrentStart(); else - pos = currentEnd; + pos = stateObj.getCurrentEnd(); } else { - if((Integer)message.getValue("lastPosition") < 0 && currentStart > 0) - pos = currentStart + (Integer)message.getValue("lastPosition");+ if((Integer)message.getValue("lastPosition") < 0 && stateObj.getCurrentStart() > 0) + pos = stateObj.getCurrentStart() + (Integer)message.getValue("lastPosition");
else if((Integer)message.getValue("lastPosition") == 99999) - pos = currentEnd + offset; + pos = stateObj.getCurrentEnd() + offset; else {- pos = currentStart + findCurrentPosition(arr, (Integer)message.getValue("lastPosition")) + offset; + pos = stateObj.getCurrentStart() + findCurrentPosition(arr, (Integer)message.getValue("lastPosition")) + offset;
pos += checkPageRange(pos); } } view.setCaretOffset(pos); } else { - view.setCaretOffset(currentStart); + view.setCaretOffset(stateObj.getCurrentStart()); } } } @@ -853,7 +858,7 @@ total = 0; spaceBeforeText = 0; spaceAfterText = 0; - oldCursorPosition = -1; + stateObj.setOldCursorPosition(-1); setListenerLock(false); } @@ -1119,10 +1124,10 @@ */ private void removeIndicator(){ int lineNumber; - if(currentStart > view.getCharCount()) + if(stateObj.getCurrentStart() > view.getCharCount()) lineNumber = view.getLineAtOffset(view.getCharCount()); else - lineNumber = view.getLineAtOffset(currentStart); + lineNumber = view.getLineAtOffset(stateObj.getCurrentStart()); for (int i = lineNumber; i < view.getLineCount(); i++) { // Check to find bullet which are in indication array list =======================================--- /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Mon Feb 9 18:34:55 2015 UTC +++ /src/main/org/brailleblaster/perspectives/braille/views/wp/TextView.java Mon Feb 23 19:57:20 2015 UTC
@@ -81,9 +81,9 @@ import org.eclipse.swt.widgets.Listener; public class TextView extends WPView { - private int oldCursorPosition = -1; - private int currentChar;- private int currentStart, currentEnd, previousEnd, nextStart, selectionStart, selectionLength;
+ private ViewStateObject stateObj; + private TextActionValidator validator; + private Selection selection; private int currentChanges = 0; private boolean textChanged, readOnly; private StyleRange range; @@ -109,6 +109,9 @@public TextView (Manager manager, SashForm sash, BBSemanticsTable table) {
super (manager, sash, table); + stateObj = new ViewStateObject(); + selection = new Selection(); + validator = new TextActionValidator(manager, view); this.total = 0; this.spaceBeforeText = 0; this.spaceAfterText = 0; @@ -140,16 +143,19 @@ view.addVerifyKeyListener(verifyKeyListener = new VerifyKeyListener(){ @Override public void verifyKey(VerifyEvent e) { - oldCursorPosition = view.getCaretOffset(); - currentChar = e.keyCode; + // int currentStart = stateObj.getCurrentStart(); + // int currentEnd = stateObj.getCurrentEnd(); + stateObj.setOldCursorPosition(view.getCaretOffset()); + stateObj.setCurrentChar(e.keyCode); - if(selectionLength > 0)- editRecorder.recordLine(selectionStart, selectionStart + selectionLength);
+ if(selection.getSelectionLength() > 0)+ editRecorder.recordLine(selection.getSelectionStart(), selection.getSelectionEnd());
elseeditRecorder.recordLine(view.getLine(view.getLineAtOffset(view.getCaretOffset())), view.getLineAtOffset(view.getCaretOffset()));
if(readOnly){- if((Character.isDigit(e.character) && !validEdit())|| (Character.isLetter(e.character) && !validEdit()) || e.keyCode == SWT.CR) + if((Character.isDigit(e.character) && !validator.validEdit(currentElement, stateObj, selection.getSelectionStart(), selection.getSelectionLength()))|| (Character.isLetter(e.character) + && !validator.validEdit(currentElement, stateObj, selection.getSelectionStart(), selection.getSelectionLength())) || e.keyCode == SWT.CR)
e.doit = false; } @@ -161,22 +167,22 @@ e.doit = false; }else if(e.stateMask == SWT.MOD1 && e.keyCode == 'x' && (currentElement instanceof PageMapElement || currentElement instanceof BrlOnlyMapElement)){
- if(!validCut())+ if(!validator.validCut(currentElement, stateObj, selection.getSelectionStart(), selection.getSelectionLength()))
e.doit = false; }else if(e.stateMask == SWT.MOD1 && e.keyCode == 'v' && (currentElement instanceof PageMapElement || currentElement instanceof BrlOnlyMapElement)){
- if(!validPaste())+ if(!validator.validPaste(currentElement, stateObj, selection.getSelectionStart(), selection.getSelectionLength()))
e.doit = false; } else if(!readOnly && e.character == SWT.CR){ boolean atEnd = false; boolean atStart = false; - if(view.getCaretOffset() == currentEnd){ + if(view.getCaretOffset() == stateObj.getCurrentEnd()){if(stylesTable.isBlockElement(currentElement.parentElement()) || isLast(currentElement.n))
atEnd = true; } - else if(view.getCaretOffset() == currentStart){ + else if(view.getCaretOffset() == stateObj.getCurrentStart()){if(stylesTable.isBlockElement(currentElement.parentElement()) || isFirst(currentElement.n))
atStart = true; } @@ -188,7 +194,7 @@ if(atEnd) { Message m = Message.createInsertNodeMessage(false, false, true,"p"); - insertNewNode(m, currentEnd); + insertNewNode(m, stateObj.getCurrentEnd()); e.doit = false; } else if(atStart){ @@ -198,36 +204,36 @@ } else { Message m;- int origLength = getString(currentStart, view.getCaretOffset() - currentStart).length();
- if(view.getCaretOffset() == currentEnd)+ int origLength = getString(stateObj.getCurrentStart(), view.getCaretOffset() - stateObj.getCurrentStart()).length();
+ if(view.getCaretOffset() == stateObj.getCurrentEnd()) m = Message.createInsertNodeMessage(true, false, true, "p"); - else if(view.getCaretOffset() == currentStart) + else if(view.getCaretOffset() == stateObj.getCurrentStart()) m = Message.createInsertNodeMessage(true, true, false, "p"); else m = Message.createInsertNodeMessage(true, false, false, "p"); m.put("originalLength", origLength); m.put("length", originalEnd - originalStart);- m.put("position", getString(currentStart, view.getCaretOffset() - currentStart).replace("\n", "").length()); + m.put("position", getString(stateObj.getCurrentStart(), view.getCaretOffset() - stateObj.getCurrentStart()).replace("\n", "").length());
int pos = view.getCaretOffset(); manager.dispatch(m); setListenerLock(true); e.doit = false; setCurrent(pos + (Integer)m.getValue("length")); - view.setCaretOffset(currentStart); + view.setCaretOffset(stateObj.getCurrentStart()); setListenerLock(false); } }- if(selectionLength <= 0 && oldCursorPosition == currentStart && oldCursorPosition != previousEnd && e.character == SWT.BS && view.getLineAlignment(view.getLineAtOffset(currentStart)) != SWT.LEFT ){ + if(selection.getSelectionLength() <= 0 && stateObj.getOldCursorPosition() == stateObj.getCurrentStart() && stateObj.getOldCursorPosition() != stateObj.getPreviousEnd() && e.character == SWT.BS && view.getLineAlignment(view.getLineAtOffset(stateObj.getCurrentStart())) != SWT.LEFT ){
Message message; int pos = view.getCaretOffset();- if(view.getLineAlignment(view.getLineAtOffset(currentStart)) == SWT.RIGHT){ - view.setLineAlignment(view.getLineAtOffset(currentStart), 1, SWT.CENTER); + if(view.getLineAlignment(view.getLineAtOffset(stateObj.getCurrentStart())) == SWT.RIGHT){ + view.setLineAlignment(view.getLineAtOffset(stateObj.getCurrentStart()), 1, SWT.CENTER); message = Message.createAdjustAlignmentMessage(Sender.TEXT,SWT.CENTER);
} else {- view.setLineAlignment(view.getLineAtOffset(currentStart), 1, SWT.LEFT); + view.setLineAlignment(view.getLineAtOffset(stateObj.getCurrentStart()), 1, SWT.LEFT);
message = Message.createAdjustAlignmentMessage(Sender.TEXT,SWT.LEFT); } manager.dispatch(message); @@ -235,47 +241,74 @@ setSelection(-1, -1); view.setCaretOffset(pos); }- else if(selectionLength <= 0 && oldCursorPosition == currentStart && oldCursorPosition != previousEnd && e.character == SWT.BS && view.getLineIndent(view.getLineAtOffset(currentStart)) != 0 && currentStart != currentEnd){ - Message message = Message.createAdjustIndentMessage(Sender.TEXT, 0, view.getLineAtOffset(currentStart));
- view.setLineIndent(view.getLineAtOffset(currentStart), 1, 0); - manager.dispatch(message);+ else if(selection.getSelectionLength() <= 0 && stateObj.getOldCursorPosition() == stateObj.getCurrentStart() && stateObj.getOldCursorPosition() != stateObj.getPreviousEnd() && e.character == SWT.BS && view.getLineIndent(view.getLineAtOffset(stateObj.getCurrentStart())) != 0 && stateObj.getCurrentStart() != stateObj.getCurrentEnd()){
+ int pos = view.getCaretOffset(); + Element el = manager.getDocument().getParent(currentElement.n, true); + Styles style = stylesTable.get(stylesTable.getKeyFromAttribute(el));+ if(style.contains(StylesType.firstLineIndent) && Integer.valueOf((String)style.get(StylesType.firstLineIndent)) > 0) { + Message message = Message.createAdjustIndentMessage(Sender.TEXT, 0, view.getLineAtOffset(stateObj.getCurrentStart())); + view.setLineIndent(view.getLineAtOffset(stateObj.getCurrentStart()), 1, 0);
+ manager.dispatch(message); + }+ else if(style.contains(StylesType.firstLineIndent) && Integer.valueOf((String)style.get(StylesType.firstLineIndent)) < 0 && style.contains(StylesType.leftMargin) && Integer.valueOf((String)style.get(StylesType.leftMargin)) > 0){ + int indent = Integer.valueOf((String)style.get(StylesType.firstLineIndent)); + int margin = Integer.valueOf((String)style.get(StylesType.leftMargin)) + indent;
+ + if(margin < 0) + margin = 0; ++ Message message = Message.createAdjustMarginMessager(Sender.TEXT, margin, view.getLineAtOffset(stateObj.getCurrentStart())); + view.setLineIndent(view.getLineAtOffset(stateObj.getCurrentStart()), 1, margin);
+ manager.dispatch(message); ++ Message message2 = Message.createAdjustIndentMessage(Sender.TEXT, 0, view.getLineAtOffset(stateObj.getCurrentStart()));
+ manager.dispatch(message2); + }+ else if(style.contains(StylesType.leftMargin) && Integer.valueOf((String)style.get(StylesType.leftMargin)) > 0){ + Message message = Message.createAdjustMarginMessager(Sender.TEXT, 0, view.getLineAtOffset(stateObj.getCurrentStart())); + view.setLineIndent(view.getLineAtOffset(stateObj.getCurrentStart()), 1, 0);
+ manager.dispatch(message); + } + + view.setCaretOffset(pos); e.doit = false; }- else if(selectionLength <= 0 && oldCursorPosition == currentStart && oldCursorPosition != previousEnd && e.character == SWT.BS && view.getLineIndent(view.getLineAtOffset(currentStart)) == 0 && currentStart != currentEnd){ - Styles style = stylesTable.get(stylesTable.getKeyFromAttribute(currentElement.parentElement())); + else if(selection.getSelectionLength() <= 0 && stateObj.getOldCursorPosition() == stateObj.getCurrentStart() && stateObj.getOldCursorPosition() != stateObj.getPreviousEnd() && e.character == SWT.BS && view.getLineIndent(view.getLineAtOffset(stateObj.getCurrentStart())) == 0 && stateObj.getCurrentStart() != stateObj.getCurrentEnd()){
+ Element el = manager.getDocument().getParent(currentElement.n, true); + Styles style = stylesTable.get(stylesTable.getKeyFromAttribute(el));if(style.contains(StylesType.linesBefore) && Integer.valueOf((String)style.get(StylesType.linesBefore)) > 0){
- int pos = oldCursorPosition - 1; + int pos = stateObj.getOldCursorPosition() - 1; setCurrentElement(currentElement.start);int linesBefore = Integer.valueOf((String)style.get(StylesType.linesBefore)) - 1; manager.dispatch(Message.createAdjustLinesMessage(Sender.TEXT, true, linesBefore));
setCurrent(pos); - view.setCaretOffset(currentStart); + view.setCaretOffset(stateObj.getCurrentStart()); e.doit = false; } TextMapElement t = manager.getPrevious();style = stylesTable.get(stylesTable.getKeyFromAttribute(t.parentElement())); if(style.contains(StylesType.linesAfter) && Integer.valueOf((String)style.get(StylesType.linesAfter)) > 0){
- int pos = oldCursorPosition - 1; + int pos = stateObj.getOldCursorPosition() - 1; setCurrentElement(t.start);int linesAfter = Integer.valueOf((String)style.get(StylesType.linesAfter)) - 1; manager.dispatch(Message.createAdjustLinesMessage(Sender.TEXT, false, linesAfter));
setCurrent(pos); - view.setCaretOffset(currentStart); + view.setCaretOffset(stateObj.getCurrentStart()); e.doit = false; } }- if(selectionLength <= 0 && oldCursorPosition == currentEnd && oldCursorPosition != nextStart && e.character == SWT.DEL && currentStart != currentEnd){ + if(selection.getSelectionLength() <= 0 && stateObj.getOldCursorPosition() == stateObj.getCurrentEnd() && stateObj.getOldCursorPosition() != stateObj.getNextStart() && e.character == SWT.DEL && stateObj.getCurrentStart() != stateObj.getCurrentEnd()){ Styles style = stylesTable.get(stylesTable.getKeyFromAttribute(currentElement.parentElement())); if(style.contains(StylesType.linesAfter) && Integer.valueOf((String)style.get(StylesType.linesAfter)) > 0){
- int pos = oldCursorPosition; + int pos = stateObj.getOldCursorPosition(); setCurrentElement(currentElement.end);int linesAfter = Integer.valueOf((String)style.get(StylesType.linesAfter)) - 1;
style.put(StylesType.linesAfter, String.valueOf(linesAfter));manager.dispatch(Message.createAdjustLinesMessage(Sender.TEXT, false, linesAfter));
setCurrent(pos); - view.setCaretOffset(currentEnd); + view.setCaretOffset(stateObj.getCurrentEnd()); e.doit = false; } @@ -283,7 +316,7 @@ if(t != null){style = stylesTable.get(stylesTable.getKeyFromAttribute(t.parentElement())); if(style.contains(StylesType.linesBefore) && Integer.valueOf((String)style.get(StylesType.linesBefore)) > 0){
- int pos = oldCursorPosition; + int pos = stateObj.getOldCursorPosition(); setCurrentElement(t.start);int linesBefore = Integer.valueOf((String)style.get(StylesType.linesBefore)) - 1;
style.put(StylesType.linesBefore, String.valueOf(linesBefore)); @@ -296,15 +329,15 @@ } //Blocks text from crossing page boundaries in original markup - if(e.keyCode == SWT.BS && !validBackspace())+ if(e.keyCode == SWT.BS && !validator.validBackspace(currentElement, stateObj, selection.getSelectionStart(), selection.getSelectionLength()))
e.doit = false; - else if(e.keyCode == SWT.DEL && !validDelete())+ else if(e.keyCode == SWT.DEL && !validator.validDelete(currentElement, stateObj, selection.getSelectionStart(), selection.getSelectionLength()))
e.doit = false; - if(selectionLength > 0) - saveAlignment(selectionStart); + if(selection.getSelectionLength() > 0) + saveAlignment(selection.getSelectionStart()); else - saveAlignment(currentStart); + saveAlignment(stateObj.getCurrentStart());if(currentElement.isMathML() && (e.keyCode != SWT.BS && e.keyCode != SWT.DEL && e.keyCode != SWT.ARROW_DOWN && e.keyCode != SWT.ARROW_LEFT && e.keyCode != SWT.ARROW_RIGHT && e.keyCode != SWT.ARROW_UP))
e.doit = false; @@ -329,7 +362,7 @@Message message = Message.createGetCurrentMessage(Sender.TEXT, view.getCaretOffset());
manager.dispatch(message); setViewData(message); - if(oldCursorPosition == -1 && positionFromStart == 0) + if(stateObj.getOldCursorPosition() == -1 && positionFromStart == 0) view.setCaretOffset((Integer)message.getValue("start")); sendStatusBarUpdate(view.getLineAtOffset(view.getCaretOffset())); @@ -353,13 +386,15 @@ multiSelected = false; if(!getLock()){- if(currentChar == SWT.ARROW_DOWN || currentChar == SWT.ARROW_LEFT || currentChar == SWT.ARROW_RIGHT || currentChar == SWT.ARROW_UP || currentChar == SWT.PAGE_DOWN || currentChar == SWT.PAGE_UP){ + if(stateObj.getCurrentChar() == SWT.ARROW_DOWN || stateObj.getCurrentChar() == SWT.ARROW_LEFT || stateObj.getCurrentChar() == SWT.ARROW_RIGHT || stateObj.getCurrentChar() == SWT.ARROW_UP || stateObj.getCurrentChar() == SWT.PAGE_DOWN || stateObj.getCurrentChar() == SWT.PAGE_UP){
+ int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd(); if(e.caretOffset >= currentEnd || e.caretOffset < currentStart){ if(textChanged == true && currentChanges != 0) sendUpdate(); setCurrent(view.getCaretOffset()); - currentChar = ' '; + stateObj.setCurrentChar(' '); } sendStatusBarUpdate(view.getLineAtOffset(view.getCaretOffset())); } @@ -373,6 +408,8 @@ view.addMouseListener(mouseListener = new MouseAdapter(){ @Override public void mouseDown(MouseEvent e) { + int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd();if( (view.getCaretOffset() > currentEnd || view.getCaretOffset() < currentStart)){
if(textChanged == true) sendUpdate(); @@ -401,7 +438,7 @@ view.addVerifyListener(verifyListener = new VerifyListener() { @Override public void verifyText(VerifyEvent event) {- if(event.doit != false && event.start != event.end && !getLock() && selectionLength != view.getCharCount()){ + if(event.doit != false && event.start != event.end && !getLock() && selection.getSelectionLength() != view.getCharCount()){
TextMapElement t = manager.getElementInRange(event.start); StyleRange style = null; if(t != null) @@ -409,6 +446,7 @@ if (style != null) { Image image = (Image)style.data; if (image != null && !image.isDisposed()) { + int currentStart = stateObj.getCurrentStart(); saveAlignment(currentStart); image.dispose(); currentChanges--; @@ -418,7 +456,7 @@ if(view.getCaretOffset() != 0 && event.keyCode == SWT.BS) view.setCaretOffset(view.getCaretOffset() - 1); - if(!(nextStart == -1 && previousEnd == -1))+ if(!(stateObj.getNextStart() == -1 && stateObj.getPreviousEnd() == -1))
setCurrent(view.getCaretOffset()); } } @@ -489,6 +527,8 @@ } private void sendUpdate(){ + int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd();Message updateMessage = Message.createUpdateMessage(view.getCaretOffset(), getString(currentStart, currentEnd - currentStart), originalEnd - originalStart);
manager.dispatch(updateMessage); words += (Integer)updateMessage.getValue("diff"); @@ -508,7 +548,7 @@ }private void sendDeleteSpaceMessage(int start, int offset, ExtendedModifyEvent e){
- int length = selectionLength > -1 ? selectionLength : 0;+ int length = selection.getSelectionLength() > -1 ? selection.getSelectionLength() : 0;
int textPos = length == 0 ? 0 : e.replacedText.length() - length;String replacedText = e.replacedText.substring(textPos, textPos + Math.abs(offset));
@@ -521,14 +561,16 @@ sendUpdate(); } setCurrent(view.getCaretOffset()); - currentEnd += offset; + stateObj.adjustEnd(offset); incrementNext(offset); textChanged = true; } - if(isFirst(currentElement.n) && previousEnd == currentStart) + int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd();+ if(isFirst(currentElement.n) && stateObj.getPreviousEnd() == currentStart && (currentStart != currentEnd))
manager.dispatch(Message.createMergeElementMessage(true)); - else if(isLast(currentElement.n) && currentEnd == nextStart)+ else if(isLast(currentElement.n) && currentEnd == stateObj.getNextStart() && (currentStart != currentEnd) )
manager.dispatch(Message.createMergeElementMessage(false)); } @@ -537,16 +579,18 @@ manager.dispatch(adjustmentMessage); if(type.equals("start")){ - currentStart -= position; + stateObj.adjustStart(-position); originalStart -= position; } else { - currentEnd += position; - nextStart += position; + stateObj.adjustEnd(position); + stateObj.adjustNextStart(position); } } private void sendRemoveMathML(TextMapElement t){ + int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd();Message removeMessage = Message.createRemoveNodeMessage(manager.indexOf(t), -(t.end - t.start));
removeMessage.put("offset", currentChanges); manager.dispatch(removeMessage); @@ -558,15 +602,15 @@ @Override protected void setViewData(Message message){ - currentStart = (Integer)message.getValue("start"); - currentEnd = (Integer)message.getValue("end"); - previousEnd = (Integer)message.getValue("previous"); - nextStart = (Integer)message.getValue("next"); + stateObj.setCurrentStart((Integer)message.getValue("start")); + stateObj.setCurrentEnd((Integer)message.getValue("end")); + stateObj.setPreviousEnd((Integer)message.getValue("previous")); + stateObj.setNextStart((Integer)message.getValue("next")); - originalStart = currentStart; - originalEnd = currentEnd; + originalStart = stateObj.getCurrentStart(); + originalEnd = stateObj.getCurrentEnd(); - if(currentStart < view.getCharCount()) + if(stateObj.getCurrentStart() < view.getCharCount()) range = getStyleRange(); currentElement = (TextMapElement)message.getValue("currentElement"); @@ -578,24 +622,26 @@ } private void makeTextChange(int offset){ - currentEnd += offset; + stateObj.adjustEnd(offset); incrementNext(offset); currentChanges += offset; textChanged = true; } private void incrementNext(int offset){ - if(nextStart != -1) - nextStart += offset; + if(stateObj.getNextStart() != -1) + stateObj.adjustNextStart(offset); } private void shiftLeft(int offset){ - currentStart += offset; - currentEnd += offset; - nextStart += offset; + stateObj.adjustStart(offset); + stateObj.adjustEnd(offset); + stateObj.adjustNextStart(offset); } public void setCursor(int offset, Manager cont){ + int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd(); view.setFocus(); view.setCaretOffset(offset); @@ -774,6 +820,8 @@ String reformattedText;// Styles style = stylesTable.makeStylesElement((Element)n.getParent(), n);
// int margin = 0; + int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd(); int pos = view.getCaretOffset(); setListenerLock(true); @@ -815,6 +863,8 @@ } public void refreshStyle(TextMapElement t){ + int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd();Styles style = stylesTable.makeStylesElement((Element)t.parentElement(), t.n);
String text = view.getTextRange(t.start, t.end - t.start); int margin = 0; @@ -1214,35 +1264,35 @@ int changes = e.length; int placeholder; if(e.replacedText.length() > 0){ - if(e.start < currentStart){ + if(e.start < stateObj.getCurrentStart()){ setCurrent(e.start); } - if(e.start + e.replacedText.length() > currentEnd){ + if(e.start + e.replacedText.length() > stateObj.getCurrentEnd()){ view.setCaretOffset(e.start); setCurrent(view.getCaretOffset()); - if(selectionStart < currentStart) - sendAdjustRangeMessage("start", currentStart - selectionStart); - else if(selectionStart > currentEnd) - sendAdjustRangeMessage("end", selectionStart - currentEnd); + if(selection.getSelectionStart() < stateObj.getCurrentStart())+ sendAdjustRangeMessage("start", stateObj.getCurrentStart() - selection.getSelectionStart());
+ else if(selection.getSelectionStart() > stateObj.getCurrentEnd())+ sendAdjustRangeMessage("end", selection.getSelectionStart()- stateObj.getCurrentEnd());
- placeholder = currentStart; + placeholder = stateObj.getCurrentStart(); if(e.length < e.replacedText.length()){ - setSelection(selectionStart + e.length, selectionLength - e.length); - changes = currentEnd - selectionStart;+ setSelection(selection.getSelectionStart() + e.length, selection.getSelectionLength() - e.length);
+ changes = stateObj.getCurrentEnd() - selection.getSelectionStart(); makeTextChange(-changes); - selectionLength -= changes; + selection.adjustSelectionLength(-changes); sendUpdate(); setCurrent(view.getCaretOffset()); - selectionStart = currentEnd; + selection.setSelectionStart(stateObj.getCurrentEnd()); } else { - selectionLength -= currentEnd - e.start; - makeTextChange(changes - (currentEnd - e.start));+ selection.adjustSelectionLength(-(stateObj.getCurrentEnd() - e.start));
+ makeTextChange(changes - (stateObj.getCurrentEnd() - e.start)); sendUpdate(); setCurrent(view.getCaretOffset()); - selectionStart = currentEnd; + selection.setSelectionStart(stateObj.getCurrentEnd()); } deleteSelection(e); @@ -1250,31 +1300,31 @@ view.setCaretOffset(e.start + e.length); } else { - if(selectionStart < currentStart){ - sendAdjustRangeMessage("start", currentStart - selectionStart); + if(selection.getSelectionStart() < stateObj.getCurrentStart()){+ sendAdjustRangeMessage("start", stateObj.getCurrentStart() - selection.getSelectionStart());
changes -= e.replacedText.length(); makeTextChange(changes); sendUpdate(); setCurrent(view.getCaretOffset()); } - else if(e.start + e.replacedText.length() == currentEnd){ + else if(e.start + e.replacedText.length() == stateObj.getCurrentEnd()){ changes -= e.replacedText.length(); makeTextChange(changes); recordEvent(e, true); } else { - changes = e.length - selectionLength; + changes = e.length - selection.getSelectionLength(); makeTextChange(changes); recordEvent(e, true); } } } else { - if(oldCursorPosition > currentEnd) - sendAdjustRangeMessage("end", oldCursorPosition - currentEnd); + if(stateObj.getOldCursorPosition() > stateObj.getCurrentEnd())+ sendAdjustRangeMessage("end", stateObj.getOldCursorPosition() - stateObj.getCurrentEnd());
- if(oldCursorPosition < currentStart) - sendAdjustRangeMessage("start", currentStart - oldCursorPosition); + if(stateObj.getOldCursorPosition() < stateObj.getCurrentStart())+ sendAdjustRangeMessage("start", stateObj.getCurrentStart() - stateObj.getOldCursorPosition());
makeTextChange(changes); recordEvent(e, true); @@ -1285,49 +1335,49 @@ } private void handleTextDeletion(ExtendedModifyEvent e){ - int offset = view.getCaretOffset() - oldCursorPosition; + int offset = view.getCaretOffset() - stateObj.getOldCursorPosition(); setListenerLock(true); if(e.replacedText.length() > 1){ setCurrent(view.getCaretOffset()); deleteSelection(e); } - else if(currentChar == SWT.BS){- if(oldCursorPosition == currentStart && view.getCaretOffset() >= previousEnd)
+ else if(stateObj.getCurrentChar() == SWT.BS){+ if(stateObj.getOldCursorPosition() == stateObj.getCurrentStart() && view.getCaretOffset() >= stateObj.getPreviousEnd())
deleteSpaceAndShift(view.getCaretOffset(), offset, e);- else if(oldCursorPosition == currentStart && view.getCaretOffset() < previousEnd){ + else if(stateObj.getOldCursorPosition() == stateObj.getCurrentStart() && view.getCaretOffset() < stateObj.getPreviousEnd()){
if(textChanged) sendUpdate(); setCurrent(view.getCaretOffset()); makeTextChange(offset); } - else if(oldCursorPosition > currentEnd) + else if(stateObj.getOldCursorPosition() > stateObj.getCurrentEnd()) deleteSpaceAndShift(view.getCaretOffset(), offset, e); else{ makeTextChange(offset); recordEvent(e, false); } } - else if(currentChar == SWT.DEL){ + else if(stateObj.getCurrentChar() == SWT.DEL){ offset = -1;- if(selectionStart + selectionLength != currentEnd && oldCursorPosition == currentEnd && oldCursorPosition < nextStart){ + if(selection.getSelectionEnd() != stateObj.getCurrentEnd() && stateObj.getOldCursorPosition() == stateObj.getCurrentEnd() && stateObj.getOldCursorPosition() < stateObj.getNextStart()){
if(textChanged) sendUpdate(); - nextStart += offset; + stateObj.adjustNextStart(offset); sendDeleteSpaceMessage(view.getCaretOffset(), offset, e); }- else if(oldCursorPosition == currentEnd && view.getCaretOffset() == nextStart){ + else if(stateObj.getOldCursorPosition() == stateObj.getCurrentEnd() && view.getCaretOffset() == stateObj.getNextStart()){
if(textChanged) sendUpdate(); setCurrent(view.getCaretOffset() + 1); makeTextChange(offset); }- else if ((previousEnd == -1 && selectionLength > 0 && selectionStart < currentStart && selectionStart + selectionLength <= currentStart)|| (oldCursorPosition < currentStart && (previousEnd == -1 || oldCursorPosition > previousEnd))) + else if ((stateObj.getPreviousEnd() == -1 && selection.getSelectionLength() > 0 && selection.getSelectionStart() < stateObj.getCurrentStart() && selection.getSelectionEnd() <= stateObj.getCurrentStart())|| (stateObj.getOldCursorPosition() < stateObj.getCurrentStart() && (stateObj.getPreviousEnd() == -1 || stateObj.getOldCursorPosition() > stateObj.getPreviousEnd())))
deleteSpaceAndShift(view.getCaretOffset(), offset, e);- else if( (oldCursorPosition == currentEnd && nextStart == -1)|| (oldCursorPosition > currentEnd && (oldCursorPosition < nextStart || nextStart == -1))) + else if( (stateObj.getOldCursorPosition() == stateObj.getCurrentEnd() && stateObj.getNextStart() == -1)|| (stateObj.getOldCursorPosition() > stateObj.getCurrentEnd() && (stateObj.getOldCursorPosition() < stateObj.getNextStart() || stateObj.getNextStart() == -1)))
deleteSpaceAndShift(view.getCaretOffset(), offset, e); else { makeTextChange(offset); @@ -1336,17 +1386,17 @@ } else { offset = -1;- if((previousEnd == -1 || selectionStart >= previousEnd) && selectionStart + selectionLength <= currentStart)
- deleteSpaceAndShift(selectionStart, offset, e);- else if(selectionStart == currentEnd && (nextStart == -1 || selectionStart + selectionLength <= nextStart))
- deleteSpaceAndShift(selectionStart, offset, e);+ if((stateObj.getPreviousEnd() == -1 || selection.getSelectionStart() >= stateObj.getPreviousEnd()) && selection.getSelectionEnd() <= stateObj.getCurrentStart())
+ deleteSpaceAndShift(selection.getSelectionStart(), offset, e);+ else if(selection.getSelectionStart() == stateObj.getCurrentEnd() && (stateObj.getNextStart() == -1 || selection.getSelectionEnd() <= stateObj.getNextStart()))
+ deleteSpaceAndShift(selection.getSelectionStart(), offset, e); else { makeTextChange(offset); recordEvent(e, false); } }- if(currentStart == currentEnd && (currentStart == previousEnd || currentStart == nextStart)){ + if(stateObj.getCurrentStart() == stateObj.getCurrentEnd() && (stateObj.getCurrentStart() == stateObj.getPreviousEnd() || stateObj.getCurrentStart() == stateObj.getNextStart())){
if(textChanged) sendUpdate(); @@ -1356,96 +1406,96 @@ } private void deleteSelection(ExtendedModifyEvent e){- if(selectionStart >= currentStart && selectionStart + selectionLength <= currentEnd){
- makeTextChange(-selectionLength);+ if(selection.getSelectionStart() >= stateObj.getCurrentStart() && selection.getSelectionEnd() <= stateObj.getCurrentEnd()){
+ makeTextChange(-selection.getSelectionLength()); recordEvent(e, false); }- else if(selectionStart + selectionLength > currentEnd && selectionStart + selectionLength >= nextStart || previousEnd == -1){ + else if(selection.getSelectionEnd() > stateObj.getCurrentEnd() && selection.getSelectionEnd() >= stateObj.getNextStart() || stateObj.getPreviousEnd() == -1){
int changes = 0; - while(selectionLength > 0){- if(manager.getElementInRange(selectionStart) instanceof BrlOnlyMapElement || manager.getElementInRange(selectionStart) instanceof PageMapElement){
- TextMapElement p = manager.getElementInRange(selectionStart); + while(selection.getSelectionLength() > 0){+ if(manager.getElementInRange(selection.getSelectionStart()) instanceof BrlOnlyMapElement || manager.getElementInRange(selection.getSelectionStart()) instanceof PageMapElement){ + TextMapElement p = manager.getElementInRange(selection.getSelectionStart());
handleReadOnlySelection(p, true); // if(selectionLength <= 0) // break; }- else if(manager.inPrintPageRange(selectionStart + 1) || manager.getElementInRange(selectionStart + 1) instanceof BrlOnlyMapElement){
- TextMapElement p = manager.getElementInRange(selectionStart + 1);+ else if(manager.inPrintPageRange(selection.getSelectionStart() + 1) | | manager.getElementInRange(selection.getSelectionStart() + 1) instanceof BrlOnlyMapElement){ + TextMapElement p = manager.getElementInRange(selection.getSelectionStart() + 1);
handleReadOnlySelection(p, false); // if(selectionLength <= 0) // break; } - else if(selectionStart == currentEnd && nextStart == -1){ - changes= (currentEnd + selectionLength) - currentEnd; - sendDeleteSpaceMessage(selectionStart, -changes, e); - selectionLength -= changes;+ else if(selection.getSelectionStart() == stateObj.getCurrentEnd() && stateObj.getNextStart() == -1){ + changes= (stateObj.getCurrentEnd() + selection.getSelectionLength()) - stateObj.getCurrentEnd();
+ sendDeleteSpaceMessage(selection.getSelectionStart(), -changes, e); + selection.adjustSelectionLength(-changes); } - else if(selectionStart > currentStart && selectionStart != currentEnd){ - changes = currentEnd - selectionStart;+ else if(selection.getSelectionStart() > stateObj.getCurrentStart() && selection.getSelectionStart() != stateObj.getCurrentEnd()){
+ changes = stateObj.getCurrentEnd() - selection.getSelectionStart(); makeTextChange(-changes); - selectionLength -= changes; + selection.adjustSelectionLength(-changes); sendUpdate(); setCurrent(view.getCaretOffset()); - selectionStart = currentEnd; + selection.setSelectionStart(stateObj.getCurrentEnd()); } - else if(selectionStart == currentEnd && selectionStart != nextStart){- if(nextStart != -1 && manager.inPrintPageRange((selectionStart + nextStart) / 2)) - changes = manager.getElementInRange((selectionStart + nextStart) / 2).start - selectionStart - 1;
- else if(nextStart != -1) - changes = nextStart - currentEnd;+ else if(selection.getSelectionStart() == stateObj.getCurrentEnd() && selection.getSelectionStart() != stateObj.getNextStart()){ + if(stateObj.getNextStart() != -1 && manager.inPrintPageRange((selection.getSelectionStart() + stateObj.getNextStart()) / 2)) + changes = manager.getElementInRange((selection.getSelectionStart() + stateObj.getNextStart()) / 2).start - selection.getSelectionStart() - 1;
+ else if(stateObj.getNextStart() != -1) + changes = stateObj.getNextStart() - stateObj.getCurrentEnd(); else - changes= (currentEnd + selectionLength) - currentEnd;+ changes= (stateObj.getCurrentEnd() + selection.getSelectionLength()) - stateObj.getCurrentEnd();
- if(selectionLength < changes) - changes = selectionLength; + if(selection.getSelectionLength() < changes) + changes = selection.getSelectionLength(); - sendDeleteSpaceMessage(selectionStart, -changes, e); + sendDeleteSpaceMessage(selection.getSelectionStart(), -changes, e); if(changes != 0) - selectionLength -= changes; + selection.adjustSelectionLength(-changes); else - selectionLength = 0; + selection.setSelectionLength(0); - setCurrent(nextStart); - view.setCaretOffset(currentStart); + setCurrent(stateObj.getNextStart()); + view.setCaretOffset(stateObj.getCurrentStart()); } - else if(selectionStart < currentStart && previousEnd <= -1){ - changes = currentStart - selectionStart; - selectionLength -= changes; - sendDeleteSpaceMessage(selectionStart, -changes, e);+ else if(selection.getSelectionStart() < stateObj.getCurrentStart() && stateObj.getPreviousEnd() <= -1){
+ changes = stateObj.getCurrentStart() - selection.getSelectionStart(); + selection.adjustSelectionLength(-changes); + sendDeleteSpaceMessage(selection.getSelectionStart(), -changes, e); - setCurrent(currentStart); - view.setCaretOffset(currentStart); + setCurrent(stateObj.getCurrentStart()); + view.setCaretOffset(stateObj.getCurrentStart()); } - else if(selectionStart < currentStart){ - changes = currentStart - selectionStart; - selectionLength -= changes; - sendDeleteSpaceMessage(selectionStart, -changes, e); + else if(selection.getSelectionStart() < stateObj.getCurrentStart()){ + changes = stateObj.getCurrentStart() - selection.getSelectionStart(); + selection.adjustSelectionLength(-changes); + sendDeleteSpaceMessage(selection.getSelectionStart(), -changes, e); - setCurrent(currentStart); - view.setCaretOffset(currentStart); + setCurrent(stateObj.getCurrentStart()); + view.setCaretOffset(stateObj.getCurrentStart()); } - else if(selectionStart == currentStart){ - if(currentStart == currentEnd){ - setCurrent(nextStart); - view.setCaretOffset(currentStart); + else if(selection.getSelectionStart() == stateObj.getCurrentStart()){ + if(stateObj.getCurrentStart() == stateObj.getCurrentEnd()){ + setCurrent(stateObj.getNextStart()); + view.setCaretOffset(stateObj.getCurrentStart()); } - if(currentEnd - currentStart < selectionLength){ - changes = currentEnd - currentStart;+ if(stateObj.getCurrentEnd() - stateObj.getCurrentStart() < selection.getSelectionLength()){
+ changes = stateObj.getCurrentEnd() - stateObj.getCurrentStart(); makeTextChange(-changes); - selectionLength -= changes; + selection.adjustSelectionLength(-changes); if(currentElement.isMathML()) sendRemoveMathML(currentElement); else sendUpdate(); - if(nextStart != -1) + if(stateObj.getNextStart() != -1) setCurrent(view.getCaretOffset()); } else { - makeTextChange(-selectionLength); + makeTextChange(-selection.getSelectionLength()); sendUpdate(); - selectionLength = 0; + selection.setSelectionLength(0); } } else { @@ -1456,13 +1506,13 @@ setSelection(-1, -1); if(currentElement instanceof PageMapElement) - view.setCaretOffset(previousEnd); + view.setCaretOffset(stateObj.getPreviousEnd()); } public void adjustCurrentElementValues(int changes){ currentChanges = changes; - currentEnd += changes; - nextStart += changes; + stateObj.adjustEnd(changes); + stateObj.adjustNextStart(changes); if(currentChanges != 0) textChanged = true; @@ -1483,41 +1533,41 @@ setListenerLock(true); String pageText; if(partial){ - pageText = p.getText().substring(selectionStart - p.start);+ pageText = p.getText().substring(selection.getSelectionStart() - p.start);
} else { - if(selectionStart + selectionLength > p.end) + if(selection.getSelectionEnd() > p.end) pageText = "\n" + p.getText(); else- pageText = "\n" + p.getText().substring(0, (selectionStart + selectionLength) - (selectionStart + 1)); + pageText = "\n" + p.getText().substring(0, (selection.getSelectionEnd()) - (selection.getSelectionStart() + 1));
}while(manager.inPrintPageRange(pos + 1) || manager.getElementInRange(pos + 1) instanceof BrlOnlyMapElement){
p = manager.getElementInRange(pos + 1); pos = p.end; - if(selectionStart + selectionLength > p.end) + if(selection.getSelectionEnd() > p.end) pageText += "\n"+ p.getText(); else- pageText += "\n" + p.getText().substring(0, (selectionStart + selectionLength) - p.start); + pageText += "\n" + p.getText().substring(0, (selection.getSelectionEnd()) - p.start);
} - if(selectionStart + selectionLength > p.end) + if(selection.getSelectionEnd() > p.end) pageText += "\n"; - view.setCaretOffset(selectionStart); + view.setCaretOffset(selection.getSelectionStart()); view.insert(pageText); - setSelection(selectionStart + 1, selectionLength - 1);- if(selectionLength - pageText.length() - 1 <= 0 && selectionStart + pageText.length() >= view.getCharCount()) + setSelection(selection.getSelectionStart() + 1, selection.getSelectionLength() - 1); + if(selection.getSelectionLength() - pageText.length() - 1 <= 0 && selection.getSelectionStart() + pageText.length() >= view.getCharCount())
view.replaceTextRange(view.getCharCount() -1, 1, ""); setListenerLock(false); - if(selectionStart + selectionLength > p.end) - selectionLength -= pageText.length() - 1; + if(selection.getSelectionEnd() > p.end) + selection.adjustSelectionLength(-(pageText.length() - 1)); else - selectionLength -= pageText.length(); + selection.adjustSelectionLength(-pageText.length()); - selectionStart = pos + 1; - view.setCaretOffset(selectionStart); + selection.setSelectionStart(pos + 1); + view.setCaretOffset(selection.getSelectionStart());if(manager.inPrintPageRange(view.getCaretOffset()) || manager.getElementInRange(pos + 1) instanceof BrlOnlyMapElement){
int start = manager.getElementInRange(view.getCaretOffset()).start; @@ -1617,17 +1667,17 @@ } public void cut(){ - if(selectionLength > 0)- editRecorder.recordLine(selectionStart, selectionStart + selectionLength);
+ if(selection.getSelectionLength() > 0)+ editRecorder.recordLine(selection.getSelectionStart(), selection.getSelectionEnd());
elseeditRecorder.recordLine(view.getLine(view.getLineAtOffset(view.getCaretOffset())), view.getLineAtOffset(view.getCaretOffset()));
- if(validCut())+ if(validator.validCut(currentElement, stateObj, selection.getSelectionStart(), selection.getSelectionLength()))
view.cut(); } public void paste(){ - if(validPaste())+ if(validator.validPaste(currentElement, stateObj, selection.getSelectionStart(), selection.getSelectionLength()))
view.paste(); } @@ -1655,6 +1705,8 @@ } private void setCursorPosition(Message message){ + int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd(); int offset = (Integer)message.getValue("offset"); if(message.contains("element")){ @@ -1689,6 +1741,8 @@ public void setPositionFromStart(){ int count = 0; + int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd(); positionFromStart = view.getCaretOffset() - currentStart;if(positionFromStart > 0 && currentStart + positionFromStart <= currentEnd){
String text = view.getTextRange(currentStart, positionFromStart); @@ -1709,6 +1763,7 @@ } private StyleRange getStyleRange(){ + int currentStart = stateObj.getCurrentStart(); if(currentStart < view.getCharCount()){ return view.getStyleRangeAtOffset(currentStart); } @@ -1716,13 +1771,15 @@ } private void checkStyleRange(StyleRange range){ + int currentStart = stateObj.getCurrentStart(); + int currentEnd = stateObj.getCurrentEnd(); if(range != null) setFontStyleRange(currentStart, currentEnd - currentStart, range); } private void setSelection(int start, int length){ - selectionStart = start; - selectionLength = length; + selection.setSelectionStart(start); + selection.setSelectionLength(length); } public void highlight(int start, int end){ @@ -1758,7 +1815,8 @@ end = (Integer)m.getValue("end"); int prev = (Integer)m.getValue("prev"); int next = (Integer)m.getValue("next"); - view.setSelection(selectionStart); + if(selection.getSelectionLength() > 0) + view.setSelection(selection.getSelectionStart()); for (Entry<StylesType, Object> entry : style.getEntrySet()) { switch(entry.getKey()){ @@ -1905,6 +1963,7 @@ } public void insertNewNode(int pos,String elementName){ + int currentEnd = stateObj.getCurrentEnd();Message m = Message.createInsertNodeMessage(false, false, true,elementName);
if(pos > currentEnd){ @@ -1965,7 +2024,7 @@ total = 0; spaceBeforeText = 0; spaceAfterText = 0; - oldCursorPosition = -1; + stateObj.setOldCursorPosition(-1); currentChanges = 0; textChanged = false; setListenerLock(false); @@ -2007,75 +2066,6 @@ public boolean isMultiSelected() { return multiSelected; } - - private boolean validCut(){- if(currentElement instanceof PageMapElement || currentElement instanceof BrlOnlyMapElement){ - if(selectionStart == currentStart && selectionLength == (currentEnd - currentStart))
- return false;- else if(selectionStart >= currentStart && selectionStart < currentEnd && selectionLength <= (currentEnd - selectionStart))
- return false;- else if(selectionStart == currentEnd && selectionLength == 1 && selectionStart + selectionLength == nextStart)
- return false; - } - return true; - } - - private boolean validPaste(){- if(currentElement instanceof PageMapElement || currentElement instanceof BrlOnlyMapElement){ - if(selectionStart == currentStart && selectionLength == (currentEnd - currentStart))
- return false;- else if(selectionStart >= currentStart && selectionStart < currentEnd && selectionLength <= (currentEnd - selectionStart))
- return false;- else if(view.getSelectionRanges()[1] == 0 || (selectionStart >= currentStart && selectionStart <= currentEnd ))
- return false; - } - return true; - } - - private boolean validDelete(){- if(currentElement instanceof PageMapElement || currentElement instanceof BrlOnlyMapElement){ - if((selectionStart >= currentStart && selectionStart + selectionLength <= currentEnd) || selectionLength == 0)
- return false; - else if(selectionLength <= 0 && view.getCaretOffset() == currentEnd) - return false;- else if(selectionStart == currentEnd && (selectionStart + selectionLength) == nextStart && selectionLength == 1)
- return false; - }- else if(selectionLength <= 0 && manager.inPrintPageRange(view.getCaretOffset() + 1) || (selectionLength <= 0 && (manager.getElementInRange(view.getCaretOffset() + 1) instanceof BrlOnlyMapElement)))
- return false; - - return true; - } - - private boolean validBackspace(){- if(currentElement instanceof PageMapElement || currentElement instanceof BrlOnlyMapElement){ - if(selectionStart >= currentStart && selectionStart + selectionLength <= currentEnd)
- return false; - else if(selectionLength <= 0) - return false;- else if(selectionStart == currentEnd && (selectionStart + selectionLength) == nextStart && selectionLength == 1)
- return false; - }- else if(selectionLength <= 0 && manager.inPrintPageRange(view.getCaretOffset() - 1) || (selectionLength <= 0 && (manager.getElementInRange(view.getCaretOffset() - 1) instanceof BrlOnlyMapElement)))
- return false; - - return true; - } - - private boolean validEdit(){- if(currentElement instanceof PageMapElement || currentElement instanceof BrlOnlyMapElement){
- if(selectionLength <= 0) - return false;- else if(selectionStart == currentStart && selectionLength == (currentEnd - currentStart))
- return false;- else if(selectionStart >= currentStart && selectionStart < currentEnd && selectionLength <= (currentEnd - selectionStart))
- return false; ***The diff for this file has been truncated for email.***