mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-05 10:49:24 +02:00
git-svn-id: https://only.mawhrin.net/repos/FBReaderJ/trunk@63 6a642e6f-84f6-412e-ac94-c4a38d5a04b0
This commit is contained in:
parent
20a8b14f86
commit
8233c43a0f
14 changed files with 337 additions and 84 deletions
|
@ -1,14 +0,0 @@
|
||||||
package org.zlibrary.view;
|
|
||||||
|
|
||||||
import org.zlibrary.model.entry.ZLTextParagraphEntry;
|
|
||||||
import org.zlibrary.model.entry.ZLTextControlEntry;
|
|
||||||
|
|
||||||
public interface ZLTextControlElement extends ZLTextElement {
|
|
||||||
|
|
||||||
Kind getKind();
|
|
||||||
ZLTextControlEntry getEntry();
|
|
||||||
byte getTextKind();
|
|
||||||
boolean isStart();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
package org.zlibrary.view;
|
|
||||||
|
|
||||||
import org.zlibrary.model.ZLTextParagraph;
|
|
||||||
|
|
||||||
public interface ZLTextElement {
|
|
||||||
|
|
||||||
enum Kind {
|
|
||||||
WORD_ELEMENT,
|
|
||||||
CONTROL_ELEMENT,
|
|
||||||
};
|
|
||||||
|
|
||||||
abstract Kind getKind();
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
package org.zlibrary.view;
|
|
||||||
|
|
||||||
import org.zlibrary.model.ZLTextModel;
|
|
||||||
import org.zlibrary.model.ZLTextParagraph;
|
|
||||||
|
|
||||||
public interface ZLTextParagraphCursor {
|
|
||||||
|
|
||||||
boolean isFirst();
|
|
||||||
boolean isLast();
|
|
||||||
boolean isEndOfSection();
|
|
||||||
|
|
||||||
int getParagraphLength();
|
|
||||||
int index();
|
|
||||||
|
|
||||||
ZLTextParagraphCursor previous();
|
|
||||||
ZLTextParagraphCursor next();
|
|
||||||
|
|
||||||
ZLTextElement getElement(int index);
|
|
||||||
ZLTextParagraph getParagraph();
|
|
||||||
}
|
|
5
src/org/zlibrary/view/ZLTextView.java
Normal file
5
src/org/zlibrary/view/ZLTextView.java
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package org.zlibrary.view;
|
||||||
|
|
||||||
|
public interface ZLTextView {
|
||||||
|
|
||||||
|
}
|
|
@ -1,7 +0,0 @@
|
||||||
package org.zlibrary.view;
|
|
||||||
|
|
||||||
public interface ZLTextWord extends ZLTextElement {
|
|
||||||
|
|
||||||
Kind getKind();
|
|
||||||
short getWidth();
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
package org.zlibrary.view;
|
|
||||||
|
|
||||||
public interface ZLTextWordCursor {
|
|
||||||
|
|
||||||
void setCursor(ZLTextWordCursor cursor);
|
|
||||||
void setCursor(ZLTextParagraphCursor paragraphCursor);
|
|
||||||
|
|
||||||
boolean isNull();
|
|
||||||
boolean equalWordNumber(ZLTextWordCursor cursor);
|
|
||||||
boolean sameElementAs(ZLTextWordCursor cursor);
|
|
||||||
boolean isStartOfParagraph();
|
|
||||||
boolean isEndOfParagraph();
|
|
||||||
int getWordNumber();
|
|
||||||
int getCharNumber();
|
|
||||||
ZLTextElement getElement();
|
|
||||||
ZLTextParagraphCursor getParagraphCursor();
|
|
||||||
|
|
||||||
void nextWord();
|
|
||||||
void previousWord();
|
|
||||||
boolean nextParagraph();
|
|
||||||
boolean previousParagraph();
|
|
||||||
void moveToParagraphStart();
|
|
||||||
void moveToParagraphEnd();
|
|
||||||
void moveToParagraph(int paragraphNumber);
|
|
||||||
void moveTo(int wordNumber, int charNumber);
|
|
||||||
void setCharNumber(int charNumber);
|
|
||||||
|
|
||||||
void rebuild();
|
|
||||||
}
|
|
28
src/org/zlibrary/view/impl/ZLTextControlElement.java
Normal file
28
src/org/zlibrary/view/impl/ZLTextControlElement.java
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
package org.zlibrary.view.impl;
|
||||||
|
|
||||||
|
import org.zlibrary.model.entry.ZLTextParagraphEntry;
|
||||||
|
import org.zlibrary.model.entry.ZLTextControlEntry;
|
||||||
|
|
||||||
|
class ZLTextControlElement extends ZLTextElement {
|
||||||
|
private ZLTextParagraphEntry myEntry;
|
||||||
|
|
||||||
|
private ZLTextControlElement(ZLTextParagraphEntry entry) {
|
||||||
|
myEntry = entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Kind getKind() {
|
||||||
|
return Kind.CONTROL_ELEMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ZLTextControlEntry getEntry() {
|
||||||
|
return (ZLTextControlEntry)myEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte getTextKind() {
|
||||||
|
return getEntry().getKind();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isStart() {
|
||||||
|
return getEntry().isStart();
|
||||||
|
}
|
||||||
|
}
|
13
src/org/zlibrary/view/impl/ZLTextElement.java
Normal file
13
src/org/zlibrary/view/impl/ZLTextElement.java
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
package org.zlibrary.view.impl;
|
||||||
|
|
||||||
|
class ZLTextElement {
|
||||||
|
|
||||||
|
enum Kind {
|
||||||
|
WORD_ELEMENT,
|
||||||
|
CONTROL_ELEMENT,
|
||||||
|
};
|
||||||
|
|
||||||
|
public Kind getKind() {
|
||||||
|
return Kind.WORD_ELEMENT;
|
||||||
|
}
|
||||||
|
}
|
11
src/org/zlibrary/view/impl/ZLTextLineInfo.java
Normal file
11
src/org/zlibrary/view/impl/ZLTextLineInfo.java
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
package org.zlibrary.view.impl;
|
||||||
|
|
||||||
|
class ZLTextLineInfo {
|
||||||
|
ZLTextWordCursor myStart;
|
||||||
|
ZLTextWordCursor myRealStart;
|
||||||
|
ZLTextWordCursor myEnd;
|
||||||
|
boolean myIsVisible;
|
||||||
|
int myLeftIndent;
|
||||||
|
int myWidth;
|
||||||
|
int myHeight;
|
||||||
|
}
|
65
src/org/zlibrary/view/impl/ZLTextParagraphCursor.java
Normal file
65
src/org/zlibrary/view/impl/ZLTextParagraphCursor.java
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
package org.zlibrary.view.impl;
|
||||||
|
|
||||||
|
import org.zlibrary.model.ZLTextModel;
|
||||||
|
import org.zlibrary.model.ZLTextParagraph;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
abstract class ZLTextParagraphCursor {
|
||||||
|
protected ZLTextModel myModel;
|
||||||
|
protected int myIndex;
|
||||||
|
protected List <ZLTextElement> myElements;
|
||||||
|
|
||||||
|
protected ZLTextParagraphCursor(ZLTextModel model, int index) {
|
||||||
|
myModel = model;
|
||||||
|
myIndex = Math.min(index, myModel.getParagraphsNumber() - 1);
|
||||||
|
fill();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ZLTextParagraphCursor getCursor(ZLTextModel model, int index) {
|
||||||
|
ZLTextParagraphCursor result;
|
||||||
|
result = new ZLTextPlainParagraphCursor(model, index);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void fill() {
|
||||||
|
ZLTextParagraph paragraph = myModel.getParagraph(myIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void clear() {
|
||||||
|
myElements.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Something strange here*/
|
||||||
|
|
||||||
|
public boolean isNull() {
|
||||||
|
return myModel == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFirst() {
|
||||||
|
return myIndex == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract boolean isLast();
|
||||||
|
|
||||||
|
public int getParagraphLength() {
|
||||||
|
return myElements.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIndex() {
|
||||||
|
return myIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract public ZLTextParagraphCursor previous();
|
||||||
|
abstract public ZLTextParagraphCursor next();
|
||||||
|
|
||||||
|
public ZLTextElement getElement(int index) {
|
||||||
|
return myElements.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ZLTextParagraph getParagraph() {
|
||||||
|
return myModel.getParagraph(myIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
21
src/org/zlibrary/view/impl/ZLTextPlainParagraphCursor.java
Normal file
21
src/org/zlibrary/view/impl/ZLTextPlainParagraphCursor.java
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package org.zlibrary.view.impl;
|
||||||
|
|
||||||
|
import org.zlibrary.model.ZLTextModel;
|
||||||
|
|
||||||
|
class ZLTextPlainParagraphCursor extends ZLTextParagraphCursor {
|
||||||
|
/*package*/ ZLTextPlainParagraphCursor(ZLTextModel model, int index) {
|
||||||
|
super(model, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLast() {
|
||||||
|
return (myIndex + 1 == myModel.getParagraphsNumber());
|
||||||
|
}
|
||||||
|
|
||||||
|
public ZLTextParagraphCursor previous() {
|
||||||
|
return isFirst() ? null : getCursor(myModel, myIndex - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ZLTextParagraphCursor next() {
|
||||||
|
return isLast() ? null : getCursor(myModel, myIndex + 1);
|
||||||
|
}
|
||||||
|
}
|
7
src/org/zlibrary/view/impl/ZLTextViewImpl.java
Normal file
7
src/org/zlibrary/view/impl/ZLTextViewImpl.java
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
package org.zlibrary.view.impl;
|
||||||
|
|
||||||
|
import org.zlibrary.view.ZLTextView;
|
||||||
|
|
||||||
|
class ZLTextViewImpl /*implements ZLTextView*/ {
|
||||||
|
|
||||||
|
}
|
19
src/org/zlibrary/view/impl/ZLTextWord.java
Normal file
19
src/org/zlibrary/view/impl/ZLTextWord.java
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
package org.zlibrary.view.impl;
|
||||||
|
|
||||||
|
class ZLTextWord extends ZLTextElement {
|
||||||
|
public String myData;
|
||||||
|
public short mySize;
|
||||||
|
public short myLength;
|
||||||
|
public int myParagraphOffset;
|
||||||
|
|
||||||
|
private ZLTextWord(String data, short size, int paragraphOffset) {
|
||||||
|
myData = data;
|
||||||
|
mySize = size;
|
||||||
|
myLength = (short) data.length();
|
||||||
|
myParagraphOffset = paragraphOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Kind getKind() {
|
||||||
|
return Kind.WORD_ELEMENT;
|
||||||
|
}
|
||||||
|
}
|
168
src/org/zlibrary/view/impl/ZLTextWordCursor.java
Normal file
168
src/org/zlibrary/view/impl/ZLTextWordCursor.java
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
package org.zlibrary.view.impl;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
class ZLTextWordCursor {
|
||||||
|
private ZLTextParagraphCursor myParagraphCursor;
|
||||||
|
private int myWordNumber;
|
||||||
|
private int myCharNumber;
|
||||||
|
|
||||||
|
/*Why do we create cursor without paragraph number and then are having all the troubles with cheking whether it is null or not?*/
|
||||||
|
|
||||||
|
public ZLTextWordCursor() {
|
||||||
|
myWordNumber = 0;
|
||||||
|
myCharNumber = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ZLTextWordCursor(ZLTextWordCursor cursor) {
|
||||||
|
myParagraphCursor = cursor.myParagraphCursor;
|
||||||
|
myWordNumber = cursor.myWordNumber;
|
||||||
|
myCharNumber = cursor.myCharNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCursor(ZLTextWordCursor cursor) {
|
||||||
|
myParagraphCursor = cursor.myParagraphCursor;
|
||||||
|
myWordNumber = cursor.myWordNumber;
|
||||||
|
myCharNumber = cursor.myCharNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCursor(ZLTextParagraphCursor paragraphCursor) {
|
||||||
|
myWordNumber = 0;
|
||||||
|
myCharNumber = 0;
|
||||||
|
myParagraphCursor = paragraphCursor;
|
||||||
|
moveToParagraphStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNull() {
|
||||||
|
return myParagraphCursor.isNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equalWordNumber(ZLTextWordCursor cursor) {
|
||||||
|
return myWordNumber == cursor.myWordNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean sameElementAs(ZLTextWordCursor cursor) {
|
||||||
|
return (myWordNumber == cursor.myWordNumber && myParagraphCursor.getIndex() == cursor.myParagraphCursor.getIndex());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isStartOfParagraph() {
|
||||||
|
return (myWordNumber == 0 && myCharNumber == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Why don't we check here whether myCharNumber is in the end of the word or not?*/
|
||||||
|
|
||||||
|
public boolean isEndOfParagraph() {
|
||||||
|
return myWordNumber == myParagraphCursor.getParagraphLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getWordNumber() {
|
||||||
|
return myWordNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCharNumber() {
|
||||||
|
return myCharNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ZLTextElement getElement() {
|
||||||
|
return myParagraphCursor.getElement(myWordNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ZLTextParagraphCursor getParagraphCursor() {
|
||||||
|
return myParagraphCursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void nextWord() {
|
||||||
|
myWordNumber++;
|
||||||
|
myCharNumber = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void previousWord() {
|
||||||
|
myWordNumber--;
|
||||||
|
myCharNumber = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean nextParagraph() {
|
||||||
|
if (!isNull()) {
|
||||||
|
if (!myParagraphCursor.isLast()) {
|
||||||
|
myParagraphCursor = myParagraphCursor.next();
|
||||||
|
moveToParagraphStart();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean previousParagraph() {
|
||||||
|
if (!isNull()) {
|
||||||
|
if (!myParagraphCursor.isFirst()) {
|
||||||
|
myParagraphCursor = myParagraphCursor.previous();
|
||||||
|
moveToParagraphStart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void moveToParagraphStart() {
|
||||||
|
if (!isNull()) {
|
||||||
|
myWordNumber = 0;
|
||||||
|
myCharNumber = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Why are we moving outside of the paragraph?*/
|
||||||
|
|
||||||
|
public void moveToParagraphEnd() {
|
||||||
|
if (!isNull()) {
|
||||||
|
myWordNumber = myParagraphCursor.getParagraphLength();
|
||||||
|
myCharNumber = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Why do we create new object here instead of just changing myParagraphNumber?*/
|
||||||
|
|
||||||
|
public void moveToParagraph(int paragraphNumber) {
|
||||||
|
if (!isNull() && (paragraphNumber != myParagraphCursor.getIndex())) {
|
||||||
|
myParagraphCursor = ZLTextParagraphCursor.getCursor(myParagraphCursor.myModel, paragraphNumber);
|
||||||
|
moveToParagraphStart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void moveTo(int wordNumber, int charNumber) {
|
||||||
|
if (!isNull()) {
|
||||||
|
if (wordNumber == 0 && charNumber == 0) {
|
||||||
|
myWordNumber = 0;
|
||||||
|
myCharNumber = 0;
|
||||||
|
} else {
|
||||||
|
wordNumber = Math.max(0, wordNumber);
|
||||||
|
int size = myParagraphCursor.getParagraphLength();
|
||||||
|
if (wordNumber > size) {
|
||||||
|
myWordNumber = size;
|
||||||
|
myCharNumber = 0;
|
||||||
|
} else {
|
||||||
|
myWordNumber = wordNumber;
|
||||||
|
setCharNumber(charNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCharNumber(int charNumber) {
|
||||||
|
charNumber = Math.max(0, charNumber);
|
||||||
|
myCharNumber = 0;
|
||||||
|
if (charNumber > 0) {
|
||||||
|
ZLTextElement element = myParagraphCursor.getElement(myWordNumber);
|
||||||
|
if (element.getKind() == ZLTextElement.Kind.WORD_ELEMENT) {
|
||||||
|
if (charNumber <= ((ZLTextWord)element).myLength) {
|
||||||
|
myCharNumber = charNumber;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rebuild() {
|
||||||
|
if (!isNull()) {
|
||||||
|
myParagraphCursor.clear();
|
||||||
|
myParagraphCursor.fill();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue