package com.github.fabrizioiannetti.largefileeditor; import java.util.ArrayList; import org.eclipse.swt.custom.StyledTextContent; import org.eclipse.swt.custom.TextChangeListener; import com.github.fabrizioiannetti.largefileeditor.FileTextModel.LineOffsets; public class FileTextContent implements StyledTextContent { private FileTextModel model; private ArrayList<TextChangeListener> listeners = new ArrayList<TextChangeListener>(); private String delimiter = System.getProperty("line.separator"); public FileTextContent(FileTextModel model) { super(); this.model = model; if (model.getLength() > Integer.MAX_VALUE) throw new IllegalArgumentException("file too long (styled text needs to fit offests in an int):" + model.getLength()); } @Override public void addTextChangeListener(TextChangeListener listener) { if (!listeners.contains(listener)) listeners.add(listener); } @Override public int getCharCount() { long length = model.getLength(); return (int) length; } @Override public String getLine(int lineIndex) { return model.getLine(lineIndex); } @Override public int getLineAtOffset(int offset) { return model.getLineIndex(offset); } @Override public int getLineCount() { return model.getLineCount(); } @Override public String getLineDelimiter() { // TODO Auto-generated method stub return delimiter; } @Override public int getOffsetAtLine(int lineIndex) { LineOffsets offsets = new LineOffsets(); model.getOffsetsForLine(lineIndex, offsets); return (int) offsets.start; } @Override public String getTextRange(int start, int length) { return model.getText(start, length); } @Override public void removeTextChangeListener(TextChangeListener listener) { listeners.remove(listener); } @Override public void replaceTextRange(int start, int replaceLength, String text) { // TODO unsupported (the model is read-only) System.out.println("FileTextContent.replaceTextRange(start=" + start + ", replaceLength =" + replaceLength + ")"); } @Override public void setText(String text) { // TODO unsupported (the model is read-only) System.out.println("FileTextContent.setText()"); } }