From f9d44e8f74eed6c349c33e7c0661ff1cb841b59a Mon Sep 17 00:00:00 2001 From: griffon Date: Mon, 12 Nov 2007 20:59:13 +0000 Subject: [PATCH] Sample application showing a word from the model git-svn-id: https://only.mawhrin.net/repos/FBReaderJ/trunk@115 6a642e6f-84f6-412e-ac94-c4a38d5a04b0 --- .../sampleview/SampleApplication.java | 7 ++++- src/org/zlibrary/sampleview/SampleView.java | 30 +++++++++++++++++-- .../text/view/impl/ZLTextControlElement.java | 8 ++--- .../text/view/impl/ZLTextElement.java | 7 +++-- .../text/view/impl/ZLTextParagraphCursor.java | 16 ++++++---- .../view/impl/ZLTextPlainParagraphCursor.java | 2 +- .../zlibrary/text/view/impl/ZLTextWord.java | 8 +++-- .../text/view/impl/ZLTextWordCursor.java | 2 +- 8 files changed, 59 insertions(+), 21 deletions(-) diff --git a/src/org/zlibrary/sampleview/SampleApplication.java b/src/org/zlibrary/sampleview/SampleApplication.java index 2b0a32edb..94e441576 100644 --- a/src/org/zlibrary/sampleview/SampleApplication.java +++ b/src/org/zlibrary/sampleview/SampleApplication.java @@ -1,10 +1,15 @@ package org.zlibrary.sampleview; -import org.zlibrary.core.application.ZLApplication; +import org.zlibrary.core.application.*; + public class SampleApplication extends ZLApplication { public SampleApplication() { super("Sample"); setView(new SampleView(this, getContext())); } + + public ZLKeyBindings keyBindings() { + return null; + } } diff --git a/src/org/zlibrary/sampleview/SampleView.java b/src/org/zlibrary/sampleview/SampleView.java index fb124c1e4..1a536558b 100644 --- a/src/org/zlibrary/sampleview/SampleView.java +++ b/src/org/zlibrary/sampleview/SampleView.java @@ -3,6 +3,12 @@ package org.zlibrary.sampleview; import org.zlibrary.core.view.ZLView; import org.zlibrary.core.view.ZLPaintContext; +import org.zlibrary.text.model.*; +import org.zlibrary.text.model.impl.ZLModelFactory; +import org.zlibrary.text.model.entry.*; + +import org.zlibrary.text.view.impl.*; + class SampleView extends ZLView { SampleView(SampleApplication application, ZLPaintContext context) { super(application, context); @@ -10,12 +16,30 @@ class SampleView extends ZLView { public void paint() { ZLPaintContext context = getContext(); - context.drawLine(0, 0, context.getWidth() - 1, context.getHeight() - 1); - context.fillRectangle(context.getWidth() / 2, context.getHeight() / 2, context.getWidth() - 2, context.getHeight() - 2); + ZLModelFactory modelFactory = new ZLModelFactory(); + ZLTextModel model = modelFactory.createPlainModel(); + ZLTextParagraph paragraph = modelFactory.createParagraph(); + ZLTextEntry entry; + entry = modelFactory.createTextEntry("griffon"); + paragraph.addEntry(entry); + model.addParagraphInternal(paragraph); + int paragraphs = model.getParagraphsNumber(); + for (int i = 0; i < paragraphs; i++) { + ZLTextParagraphCursor cursor = ZLTextParagraphCursor.getCursor(model, i); + for (int j = 0; j < cursor.getParagraphLength(); j++) { + ZLTextElement element = cursor.getElement(j); + if (element instanceof ZLTextWord) { + String text = ((ZLTextWord) element).myData; + final int w = context.stringWidth(text); + context.drawString((context.getWidth() - w) / 2, context.stringHeight(), text); + } + } + } - String text = "Hello, World!"; +/* String text = "42"; final int w = context.stringWidth(text); context.drawString((context.getWidth() - w) / 2, context.stringHeight(), text); +*/ } public String caption() { diff --git a/src/org/zlibrary/text/view/impl/ZLTextControlElement.java b/src/org/zlibrary/text/view/impl/ZLTextControlElement.java index 6ff60f62f..754cf1d6a 100644 --- a/src/org/zlibrary/text/view/impl/ZLTextControlElement.java +++ b/src/org/zlibrary/text/view/impl/ZLTextControlElement.java @@ -10,17 +10,17 @@ class ZLTextControlElement extends ZLTextElement { myEntry = entry; } - public Kind getKind() { +/* public Kind getKind() { return Kind.CONTROL_ELEMENT; - } + }*/ public ZLTextControlEntry getEntry() { return (ZLTextControlEntry)myEntry; } - public byte getTextKind() { +/* public byte getTextKind() { return getEntry().getKind(); - } + }*/ public boolean isStart() { return getEntry().isStart(); diff --git a/src/org/zlibrary/text/view/impl/ZLTextElement.java b/src/org/zlibrary/text/view/impl/ZLTextElement.java index abb3f0e30..ee0a61195 100644 --- a/src/org/zlibrary/text/view/impl/ZLTextElement.java +++ b/src/org/zlibrary/text/view/impl/ZLTextElement.java @@ -1,13 +1,14 @@ package org.zlibrary.text.view.impl; -class ZLTextElement { +public class ZLTextElement { - enum Kind { +/* enum Kind { WORD_ELEMENT, CONTROL_ELEMENT, + HSPACE_ELEMENT; }; public Kind getKind() { return Kind.WORD_ELEMENT; - } + }*/ } diff --git a/src/org/zlibrary/text/view/impl/ZLTextParagraphCursor.java b/src/org/zlibrary/text/view/impl/ZLTextParagraphCursor.java index 094d4e38f..f7c039853 100644 --- a/src/org/zlibrary/text/view/impl/ZLTextParagraphCursor.java +++ b/src/org/zlibrary/text/view/impl/ZLTextParagraphCursor.java @@ -7,7 +7,7 @@ import org.zlibrary.text.model.entry.ZLTextEntry; import java.util.*; -abstract class ZLTextParagraphCursor { +public abstract class ZLTextParagraphCursor { private static abstract class Processor { protected ZLTextParagraph myParagraph; @@ -51,12 +51,12 @@ abstract class ZLTextParagraphCursor { if (dataLength != 0) { String data = textEntry.getData(); char ch; - int firstNonSpace = 0; + int firstNonSpace = -1; boolean spaceInserted = false; for (int charPos = 0; charPos < data.length(); charPos++) { char current = data.charAt(charPos); if (current == ' ') { - if (firstNonSpace != 0) { + if (firstNonSpace != -1) { addWord(data.substring(firstNonSpace, charPos), myOffset + (firstNonSpace - data.length()), charPos - firstNonSpace); myElements.add(new ZLTextHSpaceElement()); @@ -66,11 +66,11 @@ abstract class ZLTextParagraphCursor { myElements.add(new ZLTextHSpaceElement()); spaceInserted = true; } - } else if (firstNonSpace == 0) { + } else if (firstNonSpace == -1) { firstNonSpace = charPos; } } - if (firstNonSpace != 0) { + if (firstNonSpace != -1) { addWord(data.substring(firstNonSpace, data.length()), myOffset + (firstNonSpace - data.length()), data.length() - firstNonSpace); } @@ -86,6 +86,7 @@ abstract class ZLTextParagraphCursor { protected ZLTextParagraphCursor(ZLTextModel model, int index) { myModel = model; myIndex = Math.min(index, myModel.getParagraphsNumber() - 1); + myElements = new ArrayList (); fill(); } @@ -95,8 +96,13 @@ abstract class ZLTextParagraphCursor { return result; } + /*Is it ok to create new instance of Processor here?*/ + protected void fill() { ZLTextParagraph paragraph = myModel.getParagraph(myIndex); + if (paragraph.getKind() == ZLTextParagraph.Kind.TEXT_PARAGRAPH) { + (new StandardProcessor(paragraph, myIndex, myElements)).fill(); + } } protected void clear() { diff --git a/src/org/zlibrary/text/view/impl/ZLTextPlainParagraphCursor.java b/src/org/zlibrary/text/view/impl/ZLTextPlainParagraphCursor.java index fb767bc61..a477270f7 100644 --- a/src/org/zlibrary/text/view/impl/ZLTextPlainParagraphCursor.java +++ b/src/org/zlibrary/text/view/impl/ZLTextPlainParagraphCursor.java @@ -2,7 +2,7 @@ package org.zlibrary.text.view.impl; import org.zlibrary.text.model.ZLTextModel; -class ZLTextPlainParagraphCursor extends ZLTextParagraphCursor { +public class ZLTextPlainParagraphCursor extends ZLTextParagraphCursor { /*package*/ ZLTextPlainParagraphCursor(ZLTextModel model, int index) { super(model, index); } diff --git a/src/org/zlibrary/text/view/impl/ZLTextWord.java b/src/org/zlibrary/text/view/impl/ZLTextWord.java index 93c9b670f..c2a58598c 100644 --- a/src/org/zlibrary/text/view/impl/ZLTextWord.java +++ b/src/org/zlibrary/text/view/impl/ZLTextWord.java @@ -1,6 +1,8 @@ package org.zlibrary.text.view.impl; -/*package*/ class ZLTextWord extends ZLTextElement { +/*Should we use this special comment for package local things?*/ + +public class ZLTextWord extends ZLTextElement { public String myData; public short mySize; public short myLength; @@ -15,7 +17,7 @@ package org.zlibrary.text.view.impl; myParagraphOffset = paragraphOffset; } - public Kind getKind() { +/* public Kind getKind() { return Kind.WORD_ELEMENT; - } + }*/ } diff --git a/src/org/zlibrary/text/view/impl/ZLTextWordCursor.java b/src/org/zlibrary/text/view/impl/ZLTextWordCursor.java index 8ce717efe..bfd2efd10 100644 --- a/src/org/zlibrary/text/view/impl/ZLTextWordCursor.java +++ b/src/org/zlibrary/text/view/impl/ZLTextWordCursor.java @@ -151,7 +151,7 @@ class ZLTextWordCursor { myCharNumber = 0; if (charNumber > 0) { ZLTextElement element = myParagraphCursor.getElement(myWordNumber); - if (element.getKind() == ZLTextElement.Kind.WORD_ELEMENT) { + if (element instanceof ZLTextWord) { if (charNumber <= ((ZLTextWord)element).myLength) { myCharNumber = charNumber; }