summaryrefslogtreecommitdiff
path: root/ooxml/source/framework/OOXMLViewer/src/org/apache/openoffice/ooxml/viewer/tokenview/Line.java
diff options
context:
space:
mode:
Diffstat (limited to 'ooxml/source/framework/OOXMLViewer/src/org/apache/openoffice/ooxml/viewer/tokenview/Line.java')
-rwxr-xr-xooxml/source/framework/OOXMLViewer/src/org/apache/openoffice/ooxml/viewer/tokenview/Line.java239
1 files changed, 239 insertions, 0 deletions
diff --git a/ooxml/source/framework/OOXMLViewer/src/org/apache/openoffice/ooxml/viewer/tokenview/Line.java b/ooxml/source/framework/OOXMLViewer/src/org/apache/openoffice/ooxml/viewer/tokenview/Line.java
new file mode 100755
index 000000000000..c39e24bf6ed3
--- /dev/null
+++ b/ooxml/source/framework/OOXMLViewer/src/org/apache/openoffice/ooxml/viewer/tokenview/Line.java
@@ -0,0 +1,239 @@
+/**************************************************************
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*
+*************************************************************/
+
+package org.apache.openoffice.ooxml.viewer.tokenview;
+
+import java.awt.Graphics2D;
+import java.util.Iterator;
+import java.util.Vector;
+
+public class Line<TokenType>
+
+ implements Iterable<Run<TokenType>>
+{
+ Line ()
+ {
+ maRuns = new Vector<Run<TokenType>>();
+ mnWidth = -1;
+ mnHeight = -1;
+ mnY = -1;
+ mnStartOffset = -1;
+ mnEndOffset = -1;
+ }
+
+
+
+
+ public void AddRun (final Run<TokenType> aRun)
+ {
+ maRuns.add(aRun);
+ mnWidth += aRun.GetWidth();
+ if (aRun.GetHeight() > mnHeight)
+ mnHeight = aRun.GetHeight();
+ aRun.SetLine(this);
+
+ if (aRun.GetStreamOffset() >= 0)
+ {
+ if (mnStartOffset < 0)
+ mnStartOffset = aRun.GetStreamOffset();
+
+ if (mnEndOffset < aRun.GetStreamEndOffset())
+ mnEndOffset = aRun.GetStreamEndOffset();
+ }
+ }
+
+
+
+
+ public void Format (
+ final Graphics2D aG2,
+ final int nY)
+ {
+ mnY = nY;
+
+ mnWidth = 0;
+ mnHeight = 0;
+ for (final Run<TokenType> aRun : maRuns)
+ {
+ aRun.Format(aG2);
+ mnWidth += aRun.GetWidth();
+ if (mnHeight < aRun.GetHeight())
+ mnHeight = aRun.GetHeight();
+ }
+ }
+
+
+
+
+ public int GetWidth ()
+ {
+ return mnWidth;
+ }
+
+
+
+
+ public int GetHeight ()
+ {
+ return mnHeight;
+ }
+
+
+
+
+ public int GetTop ()
+ {
+ return mnY;
+ }
+
+
+
+
+ public int GetBottom ()
+ {
+ return mnY + mnHeight;
+ }
+
+
+
+
+ public boolean Overlaps (
+ final double nTop,
+ final double nBottom)
+ {
+ return mnY<=nBottom && mnY+mnHeight>nTop;
+ }
+
+
+
+
+ public boolean Contains (final int nY)
+ {
+ return nY>=mnY && nY<mnY+mnHeight;
+ }
+
+
+
+
+ @Override
+ public Iterator<Run<TokenType>> iterator()
+ {
+ return maRuns.iterator();
+ }
+
+
+
+
+ public Run<TokenType> GetRunForX (final int nX)
+ {
+ int nRunX = 0;
+ for (final Run<TokenType> aRun : maRuns)
+ {
+ final int nRunWidth = aRun.GetWidth();
+ final int nRight = nRunX + nRunWidth;
+ if (nX>=nRunX && nX<nRight)
+ return aRun;
+ nRunX = nRight;
+ }
+ return null;
+ }
+
+
+
+
+ public Run<TokenType> GetRunForOffset (int nOffset)
+ {
+ for (int nIndex=0; nIndex<maRuns.size(); ++nIndex)
+ {
+ final Run<TokenType> aRun = maRuns.get(nIndex);
+ final int nRunOffset = aRun.GetStreamOffset();
+ if (nRunOffset >= 0)
+ if (nRunOffset<=nOffset && nOffset<=aRun.GetStreamEndOffset())
+ return aRun;
+ }
+ return null;
+ }
+
+
+
+
+ public Iterable<Run<TokenType>> GetRunsForOffsets (
+ final int nStartOffset,
+ final int nEndOffset)
+ {
+ final Vector<Run<TokenType>> aRuns = new Vector<>();
+
+ for (final Run<TokenType> aRun : maRuns)
+ {
+ if (aRun.GetStreamOffset() >= nEndOffset)
+ break;
+ else if (aRun.GetStreamEndOffset()<nStartOffset)
+ continue;
+ else
+ aRuns.add(aRun);
+ }
+
+ return aRuns;
+ }
+
+
+
+
+ public int GetStartOffset()
+ {
+ return mnStartOffset;
+ }
+
+
+
+
+ public int GetEndOffset ()
+ {
+ return mnEndOffset;
+ }
+
+
+
+
+ public boolean ContainsOffset (final int nOffset)
+ {
+ return mnStartOffset<=nOffset && nOffset<mnEndOffset;
+ }
+
+
+
+
+ @Override
+ public String toString ()
+ {
+ return String.format("line of %d runs: %s", maRuns.size(), maRuns.toString());
+ }
+
+
+
+
+ private final Vector<Run<TokenType>> maRuns;
+ private int mnY;
+ private int mnWidth;
+ private int mnHeight;
+ private int mnStartOffset;
+ private int mnEndOffset;
+}