Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Thienel2016-03-20 08:49:44 +0000
committerFlorian Thienel2016-03-20 08:49:44 +0000
commit49a0bebe108bc78914bb3ab2ebcd1f0bb2a7e5a7 (patch)
tree1f80c98a49dc4ccd0295da354eaabdaf6beddd4c /org.eclipse.vex.core
parent9e641050360c192f0f6c7c08120be348639d6612 (diff)
downloadorg.eclipse.mylyn.docs.vex-49a0bebe108bc78914bb3ab2ebcd1f0bb2a7e5a7.tar.gz
org.eclipse.mylyn.docs.vex-49a0bebe108bc78914bb3ab2ebcd1f0bb2a7e5a7.tar.xz
org.eclipse.mylyn.docs.vex-49a0bebe108bc78914bb3ab2ebcd1f0bb2a7e5a7.zip
introduce explicit representation of a list in the box model
The List box represents the root of the list. It will take care of the calculations and layout related to the bullets for the list items. Signed-off-by: Florian Thienel <florian@thienel.org>
Diffstat (limited to 'org.eclipse.vex.core')
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BaseBoxVisitor.java5
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BaseBoxVisitorWithResult.java5
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BoxFactory.java8
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/DepthFirstBoxTraversal.java5
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/IBoxVisitor.java2
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/IBoxVisitorWithResult.java2
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/List.java143
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/ParentTraversal.java5
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java22
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBoxFactory.java9
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DOMVisualization.java7
11 files changed, 205 insertions, 8 deletions
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BaseBoxVisitor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BaseBoxVisitor.java
index 9359baf1..8c264098 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BaseBoxVisitor.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BaseBoxVisitor.java
@@ -41,6 +41,11 @@ public class BaseBoxVisitor implements IBoxVisitor {
}
@Override
+ public void visit(final List box) {
+ // ignore
+ }
+
+ @Override
public void visit(final ListItem box) {
// ignore
}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BaseBoxVisitorWithResult.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BaseBoxVisitorWithResult.java
index fce06594..7138f3d5 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BaseBoxVisitorWithResult.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BaseBoxVisitorWithResult.java
@@ -51,6 +51,11 @@ public class BaseBoxVisitorWithResult<T> implements IBoxVisitorWithResult<T> {
}
@Override
+ public T visit(final List box) {
+ return defaultValue;
+ }
+
+ @Override
public T visit(final ListItem box) {
return defaultValue;
}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BoxFactory.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BoxFactory.java
index 5f7b1fe6..5a656dd6 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BoxFactory.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BoxFactory.java
@@ -16,6 +16,7 @@ import org.eclipse.vex.core.internal.boxes.NodeTag.Kind;
import org.eclipse.vex.core.internal.core.Color;
import org.eclipse.vex.core.internal.core.FontSpec;
import org.eclipse.vex.core.internal.core.TextAlign;
+import org.eclipse.vex.core.internal.css.BulletStyle;
import org.eclipse.vex.core.provisional.dom.ContentRange;
import org.eclipse.vex.core.provisional.dom.IContent;
import org.eclipse.vex.core.provisional.dom.INode;
@@ -127,6 +128,13 @@ public class BoxFactory {
return horizontalBar;
}
+ public static List list(final IStructuralBox component, final BulletStyle bulletStyle) {
+ final List list = new List();
+ list.setBulletStyle(bulletStyle);
+ list.setComponent(component);
+ return list;
+ }
+
public static ListItem listItem(final int bulletWidth, final IStructuralBox bullet, final IStructuralBox component) {
final ListItem listItem = new ListItem();
listItem.setBulletWidth(bulletWidth);
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/DepthFirstBoxTraversal.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/DepthFirstBoxTraversal.java
index b92795cc..6fcea6b4 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/DepthFirstBoxTraversal.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/DepthFirstBoxTraversal.java
@@ -40,6 +40,11 @@ public abstract class DepthFirstBoxTraversal<T> extends BaseBoxVisitorWithResult
}
@Override
+ public T visit(final List box) {
+ return box.getComponent().accept(this);
+ }
+
+ @Override
public T visit(final ListItem box) {
return box.getComponent().accept(this);
}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/IBoxVisitor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/IBoxVisitor.java
index a7353b1a..e1dad210 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/IBoxVisitor.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/IBoxVisitor.java
@@ -25,6 +25,8 @@ public interface IBoxVisitor {
void visit(HorizontalBar box);
+ void visit(List box);
+
void visit(ListItem box);
void visit(Paragraph box);
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/IBoxVisitorWithResult.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/IBoxVisitorWithResult.java
index c18b35f1..676926ee 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/IBoxVisitorWithResult.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/IBoxVisitorWithResult.java
@@ -25,6 +25,8 @@ public interface IBoxVisitorWithResult<T> {
T visit(HorizontalBar box);
+ T visit(List box);
+
T visit(ListItem box);
T visit(Paragraph box);
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/List.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/List.java
new file mode 100644
index 00000000..0208d4f8
--- /dev/null
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/List.java
@@ -0,0 +1,143 @@
+package org.eclipse.vex.core.internal.boxes;
+
+import org.eclipse.vex.core.internal.core.Graphics;
+import org.eclipse.vex.core.internal.core.Rectangle;
+import org.eclipse.vex.core.internal.css.BulletStyle;
+
+public class List extends BaseBox implements IStructuralBox, IDecoratorBox<IStructuralBox> {
+
+ private IBox parent;
+ private int top;
+ private int left;
+ private int width;
+ private int height;
+
+ private BulletStyle bulletStyle;
+
+ private IStructuralBox component;
+
+ @Override
+ public void setParent(final IBox parent) {
+ this.parent = parent;
+ }
+
+ @Override
+ public IBox getParent() {
+ return parent;
+ }
+
+ @Override
+ public int getAbsoluteTop() {
+ if (parent == null) {
+ return top;
+ }
+ return parent.getAbsoluteTop() + top;
+ }
+
+ @Override
+ public int getAbsoluteLeft() {
+ if (parent == null) {
+ return left;
+ }
+ return parent.getAbsoluteLeft() + left;
+ }
+
+ public int getTop() {
+ return top;
+ }
+
+ public int getLeft() {
+ return left;
+ }
+
+ public void setPosition(final int top, final int left) {
+ this.top = top;
+ this.left = left;
+ }
+
+ @Override
+ public int getWidth() {
+ return width;
+ }
+
+ public void setWidth(final int width) {
+ this.width = Math.max(0, width);
+ }
+
+ @Override
+ public int getHeight() {
+ return height;
+ }
+
+ @Override
+ public Rectangle getBounds() {
+ return new Rectangle(left, top, width, height);
+ }
+
+ @Override
+ public void accept(final IBoxVisitor visitor) {
+ visitor.visit(this);
+ }
+
+ @Override
+ public <T> T accept(final IBoxVisitorWithResult<T> visitor) {
+ return visitor.visit(this);
+ }
+
+ public void setBulletStyle(final BulletStyle bulletStyle) {
+ this.bulletStyle = bulletStyle;
+ }
+
+ public BulletStyle getBulletStyle() {
+ return bulletStyle;
+ }
+
+ @Override
+ public void setComponent(final IStructuralBox component) {
+ this.component = component;
+ component.setParent(this);
+ }
+
+ @Override
+ public IStructuralBox getComponent() {
+ return component;
+ }
+
+ @Override
+ public void layout(final Graphics graphics) {
+ if (component == null) {
+ return;
+ }
+ component.setPosition(0, 0);
+ component.setWidth(width);
+ component.layout(graphics);
+ height = component.getHeight();
+ }
+
+ @Override
+ public boolean reconcileLayout(final Graphics graphics) {
+ final int oldHeight = height;
+ height = component.getHeight();
+ return oldHeight != height;
+ }
+
+ @Override
+ public void paint(final Graphics graphics) {
+ ChildBoxPainter.paint(component, graphics);
+ }
+
+ @Override
+ public void setVisualDecorator(final IVisualDecorator<IStructuralBox> visualDecorator) {
+ // ignore, will be removed anyway
+ }
+
+ @Override
+ public void resetVisualDecorator() {
+ // ignore, will be removed anyway
+ }
+
+ @Override
+ public void applyVisualDecorator() {
+ // ignore, will be removed anyway
+ }
+}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/ParentTraversal.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/ParentTraversal.java
index 61d103af..92ed0404 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/ParentTraversal.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/ParentTraversal.java
@@ -51,6 +51,11 @@ public class ParentTraversal<T> implements IBoxVisitorWithResult<T> {
}
@Override
+ public T visit(final List box) {
+ return box.getParent().accept(this);
+ }
+
+ @Override
public T visit(final ListItem box) {
return box.getParent().accept(this);
}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java
index 59973501..c129f274 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java
@@ -23,6 +23,7 @@ import static org.eclipse.vex.core.internal.visualization.CssBoxFactory.endOffse
import static org.eclipse.vex.core.internal.visualization.CssBoxFactory.endTag;
import static org.eclipse.vex.core.internal.visualization.CssBoxFactory.frame;
import static org.eclipse.vex.core.internal.visualization.CssBoxFactory.image;
+import static org.eclipse.vex.core.internal.visualization.CssBoxFactory.list;
import static org.eclipse.vex.core.internal.visualization.CssBoxFactory.nodeTag;
import static org.eclipse.vex.core.internal.visualization.CssBoxFactory.paragraph;
import static org.eclipse.vex.core.internal.visualization.CssBoxFactory.square;
@@ -222,7 +223,7 @@ public class CssBasedBoxModelBuilder implements IBoxModelBuilder {
*/
private IStructuralBox visualizeAsList(final IElement element, final Styles styles, final Collection<VisualizeResult> childrenResults) {
- return visualizeAsBlock(element, styles, childrenResults);
+ return list(visualizeAsBlock(element, styles, childrenResults), styles);
}
/*
@@ -230,17 +231,12 @@ public class CssBasedBoxModelBuilder implements IBoxModelBuilder {
*/
private IStructuralBox visualizeAsListItem(final IElement element, final Styles styles, final Collection<VisualizeResult> childrenResults) {
- final BulletStyle bulletStyle = new BulletStyle(BulletStyle.Type.SQUARE, BulletStyle.Position.INSIDE, null, '\0');
+ final BulletStyle bulletStyle = BulletStyle.fromStyles(styles);
final int bulletWidth = 20;
final int itemIndex = 0;
final int itemCount = 1;
- final IInlineBox bullet;
- if (bulletStyle.type.isTextual()) {
- bullet = staticText(bulletStyle.getBulletAsText(itemIndex, itemCount), styles);
- } else {
- bullet = square(styles);
- }
+ final IInlineBox bullet = visualizeBullet(styles, bulletStyle, itemIndex, itemCount);
final IStructuralBox content = visualizeStructuralElementContent(element, styles, childrenResults);
switch (bulletStyle.position) {
@@ -256,6 +252,16 @@ public class CssBasedBoxModelBuilder implements IBoxModelBuilder {
}
}
+ private static IInlineBox visualizeBullet(final Styles styles, final BulletStyle bulletStyle, final int itemIndex, final int itemCount) {
+ final IInlineBox bullet;
+ if (bulletStyle.type.isTextual()) {
+ bullet = staticText(bulletStyle.getBulletAsText(itemIndex, itemCount), styles);
+ } else {
+ bullet = square(styles);
+ }
+ return bullet;
+ }
+
private static IVisualDecorator<IStructuralBox> insertBulletIntoContent(final IInlineBox bullet) {
return new IVisualDecorator<IStructuralBox>() {
@Override
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBoxFactory.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBoxFactory.java
index 834a6a70..74785b71 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBoxFactory.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBoxFactory.java
@@ -19,6 +19,7 @@ import org.eclipse.vex.core.internal.boxes.IStructuralBox;
import org.eclipse.vex.core.internal.boxes.Image;
import org.eclipse.vex.core.internal.boxes.InlineFrame;
import org.eclipse.vex.core.internal.boxes.LineWrappingRule;
+import org.eclipse.vex.core.internal.boxes.List;
import org.eclipse.vex.core.internal.boxes.Margin;
import org.eclipse.vex.core.internal.boxes.NodeEndOffsetPlaceholder;
import org.eclipse.vex.core.internal.boxes.NodeTag;
@@ -31,6 +32,7 @@ import org.eclipse.vex.core.internal.boxes.TextContent;
import org.eclipse.vex.core.internal.core.FontSpec;
import org.eclipse.vex.core.internal.core.LineStyle;
import org.eclipse.vex.core.internal.core.TextAlign;
+import org.eclipse.vex.core.internal.css.BulletStyle;
import org.eclipse.vex.core.internal.css.CSS;
import org.eclipse.vex.core.internal.css.Styles;
import org.eclipse.vex.core.provisional.dom.ContentRange;
@@ -59,6 +61,13 @@ public class CssBoxFactory {
return frame;
}
+ public static List list(final IStructuralBox component, final Styles styles) {
+ final List list = new List();
+ list.setBulletStyle(BulletStyle.fromStyles(styles));
+ list.setComponent(component);
+ return list;
+ }
+
public static Paragraph paragraph(final Styles styles, final IInlineBox... children) {
final Paragraph paragraph = new Paragraph();
for (final IInlineBox child : children) {
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DOMVisualization.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DOMVisualization.java
index a87e1738..abd304ea 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DOMVisualization.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DOMVisualization.java
@@ -21,6 +21,7 @@ import org.eclipse.vex.core.internal.boxes.IContentBox;
import org.eclipse.vex.core.internal.boxes.InlineContainer;
import org.eclipse.vex.core.internal.boxes.InlineFrame;
import org.eclipse.vex.core.internal.boxes.InlineNodeReference;
+import org.eclipse.vex.core.internal.boxes.List;
import org.eclipse.vex.core.internal.boxes.ListItem;
import org.eclipse.vex.core.internal.boxes.NodeEndOffsetPlaceholder;
import org.eclipse.vex.core.internal.boxes.Paragraph;
@@ -135,6 +136,12 @@ public class DOMVisualization {
}
@Override
+ public void visit(final List box) {
+ box.setComponent(boxModelBuilder.visualizeStructure(node));
+ box.applyVisualDecorator();
+ }
+
+ @Override
public void visit(final Paragraph box) {
box.replaceChildren(modifiedBoxes, boxModelBuilder.visualizeInline(node));
box.applyVisualDecorator();

Back to the top