Skip to content

Commit 33c5c38

Browse files
Integrate style-less segment into demo package
1 parent daa671c commit 33c5c38

File tree

9 files changed

+88
-130
lines changed

9 files changed

+88
-130
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
package org.fxmisc.richtext.demo.hyperlink;
22

3-
public class Hyperlink<S> {
3+
public class Hyperlink {
44

55
private final String originalDisplayedText;
66
private final String displayedText;
7-
private final S style;
87
private final String link;
98

10-
Hyperlink(String originalDisplayedText, String displayedText, S style, String link) {
9+
Hyperlink(String originalDisplayedText, String displayedText, String link) {
1110
this.originalDisplayedText = originalDisplayedText;
1211
this.displayedText = displayedText;
13-
this.style = style;
1412
this.link = link;
1513
}
1614

@@ -22,7 +20,7 @@ public boolean isReal() {
2220
return length() > 0;
2321
}
2422

25-
public boolean shareSameAncestor(Hyperlink<S> other) {
23+
public boolean shareSameAncestor(Hyperlink other) {
2624
return link.equals(other.link) && originalDisplayedText.equals(other.originalDisplayedText);
2725
}
2826

@@ -44,32 +42,24 @@ public String getLink() {
4442
return link;
4543
}
4644

47-
public Hyperlink<S> subSequence(int start, int end) {
48-
return new Hyperlink<>(originalDisplayedText, displayedText.substring(start, end), style, link);
45+
public Hyperlink subSequence(int start, int end) {
46+
return new Hyperlink(originalDisplayedText, displayedText.substring(start, end), link);
4947
}
5048

51-
public Hyperlink<S> subSequence(int start) {
52-
return new Hyperlink<>(originalDisplayedText, displayedText.substring(start), style, link);
49+
public Hyperlink subSequence(int start) {
50+
return new Hyperlink(originalDisplayedText, displayedText.substring(start), link);
5351
}
5452

55-
public S getStyle() {
56-
return style;
57-
}
58-
59-
public Hyperlink<S> setStyle(S style) {
60-
return new Hyperlink<>(originalDisplayedText, displayedText, style, link);
61-
}
62-
63-
public Hyperlink<S> mapDisplayedText(String text) {
64-
return new Hyperlink<>(originalDisplayedText, text, style, link);
53+
public Hyperlink mapDisplayedText(String text) {
54+
return new Hyperlink(originalDisplayedText, text, link);
6555
}
6656

6757
@Override
6858
public String toString() {
6959
return isEmpty()
70-
? String.format("EmptyHyperlink[original=%s style=%s link=%s]", originalDisplayedText, style, link)
71-
: String.format("RealHyperlink[original=%s displayedText=%s, style=%s, link=%s]",
72-
originalDisplayedText, displayedText, style, link);
60+
? String.format("EmptyHyperlink[original=%s link=%s]", originalDisplayedText, link)
61+
: String.format("RealHyperlink[original=%s displayedText=%s, link=%s]",
62+
originalDisplayedText, displayedText, link);
7363
}
7464

7565
}

richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/hyperlink/HyperlinkDemo.java

-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package org.fxmisc.richtext.demo.hyperlink;
22

33
import com.sun.deploy.uitoolkit.impl.fx.HostServicesFactory;
4-
import com.sun.javafx.application.HostServicesDelegate;
54
import javafx.application.Application;
6-
import javafx.application.HostServices;
75
import javafx.scene.Scene;
86
import javafx.stage.Stage;
97
import org.fxmisc.flowless.VirtualizedScrollPane;

richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/hyperlink/HyperlinkOps.java

+13-23
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,42 @@
11
package org.fxmisc.richtext.demo.hyperlink;
22

3-
import org.fxmisc.richtext.model.SegmentOps;
3+
import org.fxmisc.richtext.model.SegmentOpsBase;
44

55
import java.util.Optional;
66

7-
public class HyperlinkOps<S> implements SegmentOps<Hyperlink<S>, S> {
7+
public class HyperlinkOps<S> extends SegmentOpsBase<Hyperlink, S> {
8+
9+
public HyperlinkOps() {
10+
super(new Hyperlink("", "", ""));
11+
}
812

913
@Override
10-
public int length(Hyperlink<S> hyperlink) {
14+
public int length(Hyperlink hyperlink) {
1115
return hyperlink.length();
1216
}
1317

1418
@Override
15-
public char charAt(Hyperlink<S> hyperlink, int index) {
19+
public char realCharAt(Hyperlink hyperlink, int index) {
1620
return hyperlink.charAt(index);
1721
}
1822

1923
@Override
20-
public String getText(Hyperlink<S> hyperlink) {
24+
public String realGetText(Hyperlink hyperlink) {
2125
return hyperlink.getDisplayedText();
2226
}
2327

2428
@Override
25-
public Hyperlink<S> subSequence(Hyperlink<S> hyperlink, int start, int end) {
29+
public Hyperlink realSubSequence(Hyperlink hyperlink, int start, int end) {
2630
return hyperlink.subSequence(start, end);
2731
}
2832

2933
@Override
30-
public Hyperlink<S> subSequence(Hyperlink<S> hyperlink, int start) {
34+
public Hyperlink realSubSequence(Hyperlink hyperlink, int start) {
3135
return hyperlink.subSequence(start);
3236
}
3337

3438
@Override
35-
public S getStyle(Hyperlink<S> hyperlink) {
36-
return hyperlink.getStyle();
37-
}
38-
39-
@Override
40-
public Hyperlink<S> setStyle(Hyperlink<S> hyperlink, S style) {
41-
return hyperlink.setStyle(style);
42-
}
43-
44-
@Override
45-
public Optional<Hyperlink<S>> join(Hyperlink<S> currentSeg, Hyperlink<S> nextSeg) {
39+
public Optional<Hyperlink> joinSeg(Hyperlink currentSeg, Hyperlink nextSeg) {
4640
if (currentSeg.isEmpty()) {
4741
if (nextSeg.isEmpty()) {
4842
return Optional.empty();
@@ -58,7 +52,7 @@ public Optional<Hyperlink<S>> join(Hyperlink<S> currentSeg, Hyperlink<S> nextSeg
5852
}
5953
}
6054

61-
private Optional<Hyperlink<S>> concatHyperlinks(Hyperlink<S> leftSeg, Hyperlink<S> rightSeg) {
55+
private Optional<Hyperlink> concatHyperlinks(Hyperlink leftSeg, Hyperlink rightSeg) {
6256
if (!leftSeg.shareSameAncestor(rightSeg)) {
6357
return Optional.empty();
6458
}
@@ -90,8 +84,4 @@ private Optional<Hyperlink<S>> concatHyperlinks(Hyperlink<S> leftSeg, Hyperlink<
9084
}
9185
}
9286

93-
@Override
94-
public Hyperlink<S> createEmpty() {
95-
return new Hyperlink<>("", "", null, "");
96-
}
9787
}

richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/hyperlink/TextHyperlinkArea.java

+11-9
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,31 @@
44
import org.fxmisc.richtext.GenericStyledArea;
55
import org.fxmisc.richtext.TextExt;
66
import org.fxmisc.richtext.model.ReadOnlyStyledDocument;
7-
import org.fxmisc.richtext.model.StyledText;
7+
import org.fxmisc.richtext.model.SegmentOps;
88
import org.fxmisc.richtext.model.TextOps;
99
import org.reactfx.util.Either;
1010

11+
import java.util.Optional;
1112
import java.util.function.Consumer;
1213

13-
public class TextHyperlinkArea extends GenericStyledArea<Void, Either<StyledText<TextStyle>, Hyperlink<TextStyle>>, TextStyle> {
14+
public class TextHyperlinkArea extends GenericStyledArea<Void, Either<String, Hyperlink>, TextStyle> {
1415

15-
private static final TextOps<StyledText<TextStyle>, TextStyle> STYLED_TEXT_OPS = StyledText.textOps();
16+
private static final TextOps<String, TextStyle> STYLED_TEXT_OPS = SegmentOps.styledTextOps();
1617
private static final HyperlinkOps<TextStyle> HYPERLINK_OPS = new HyperlinkOps<>();
17-
private static final TextOps<Either<StyledText<TextStyle>, Hyperlink<TextStyle>>, TextStyle> EITHER_OPS = STYLED_TEXT_OPS._or(HYPERLINK_OPS);
18+
19+
private static final TextOps<Either<String, Hyperlink>, TextStyle> EITHER_OPS = STYLED_TEXT_OPS._or(HYPERLINK_OPS, (s1, s2) -> Optional.empty());
1820

1921
public TextHyperlinkArea(Consumer<String> showLink) {
2022
super(
2123
null,
2224
(t, p) -> {},
2325
TextStyle.EMPTY,
2426
EITHER_OPS,
25-
e -> e.unify(
26-
styledText ->
27+
e -> e.getSegment().unify(
28+
text ->
2729
createStyledTextNode(t -> {
28-
t.setText(styledText.getText());
29-
t.setStyle(styledText.getStyle().toCss());
30+
t.setText(text);
31+
t.setStyle(e.getStyle().toCss());
3032
}),
3133
hyperlink ->
3234
createStyledTextNode(t -> {
@@ -49,7 +51,7 @@ public void appendWithLink(String displayedText, String link) {
4951

5052
public void replaceWithLink(int start, int end, String displayedText, String link) {
5153
replace(start, end, ReadOnlyStyledDocument.fromSegment(
52-
Either.right(new Hyperlink<>(displayedText, displayedText, TextStyle.EMPTY, link)),
54+
Either.right(new Hyperlink(displayedText, displayedText, link)),
5355
null,
5456
TextStyle.EMPTY,
5557
EITHER_OPS

richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/richtext/EmptyLinkedImage.java

+3-8
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22

33
import javafx.scene.Node;
44

5-
public class EmptyLinkedImage<S> implements LinkedImage<S> {
5+
public class EmptyLinkedImage implements LinkedImage {
66

77
@Override
8-
public LinkedImage<S> setStyle(S style) {
9-
return this;
10-
}
11-
12-
@Override
13-
public S getStyle() {
14-
return null;
8+
public boolean isReal() {
9+
return false;
1510
}
1611

1712
@Override

richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/richtext/LinkedImage.java

+19-21
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,39 @@
77
import java.io.DataOutputStream;
88
import java.io.IOException;
99

10-
public interface LinkedImage<S> {
11-
static <S> Codec<LinkedImage<S>> codec(Codec<S> styleCodec) {
12-
return new Codec<LinkedImage<S>>() {
13-
10+
public interface LinkedImage {
11+
static <S> Codec<LinkedImage> codec() {
12+
return new Codec<LinkedImage>() {
1413
@Override
1514
public String getName() {
16-
return "LinkedImage<" + styleCodec.getName() + ">";
15+
return "LinkedImage";
1716
}
1817

1918
@Override
20-
public void encode(DataOutputStream os, LinkedImage<S> i) throws IOException {
21-
// don't encode EmptyLinkedImage objects
22-
if (i.getStyle() != null) {
23-
// external path rep should use forward slashes only
24-
String externalPath = i.getImagePath().replace("\\", "/");
19+
public void encode(DataOutputStream os, LinkedImage linkedImage) throws IOException {
20+
if (linkedImage.isReal()) {
21+
os.writeBoolean(true);
22+
String externalPath = linkedImage.getImagePath().replace("\\", "/");
2523
Codec.STRING_CODEC.encode(os, externalPath);
26-
styleCodec.encode(os, i.getStyle());
24+
} else {
25+
os.writeBoolean(false);
2726
}
2827
}
2928

3029
@Override
31-
public RealLinkedImage<S> decode(DataInputStream is) throws IOException {
32-
// Sanitize path - make sure that forward slashes only are used
33-
String imagePath = Codec.STRING_CODEC.decode(is);
34-
imagePath = imagePath.replace("\\", "/");
35-
S style = styleCodec.decode(is);
36-
return new RealLinkedImage<>(imagePath, style);
30+
public LinkedImage decode(DataInputStream is) throws IOException {
31+
if (is.readBoolean()) {
32+
String imagePath = Codec.STRING_CODEC.decode(is);
33+
imagePath = imagePath.replace("\\", "/");
34+
return new RealLinkedImage(imagePath);
35+
} else {
36+
return new EmptyLinkedImage();
37+
}
3738
}
38-
3939
};
4040
}
4141

42-
LinkedImage<S> setStyle(S style);
43-
44-
S getStyle();
42+
boolean isReal();
4543

4644
/**
4745
* @return The path of the image to render.

richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/richtext/LinkedImageOps.java

+5-9
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@
22

33
import org.fxmisc.richtext.model.NodeSegmentOpsBase;
44

5-
public class LinkedImageOps<S> extends NodeSegmentOpsBase<LinkedImage<S>, S> {
65

7-
public LinkedImageOps() {
8-
super(new EmptyLinkedImage<>());
9-
}
6+
public class LinkedImageOps<S> extends NodeSegmentOpsBase<LinkedImage, S> {
107

11-
@Override
12-
public S realGetStyle(LinkedImage<S> linkedImage) {
13-
return linkedImage.getStyle();
8+
public LinkedImageOps() {
9+
super(new EmptyLinkedImage());
1410
}
1511

1612
@Override
17-
public LinkedImage<S> realSetStyle(LinkedImage<S> linkedImage, S style) {
18-
return linkedImage.setStyle(style);
13+
public int length(LinkedImage linkedImage) {
14+
return linkedImage.isReal() ? 1 : 0;
1915
}
2016

2117
}

richtextfx-demos/src/main/java/org/fxmisc/richtext/demo/richtext/RealLinkedImage.java

+4-14
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,16 @@
1212
* When rendered in the rich text editor, the image is loaded from the
1313
* specified file.
1414
*/
15-
public class RealLinkedImage<S> implements LinkedImage<S> {
15+
public class RealLinkedImage implements LinkedImage {
1616

1717
private final String imagePath;
18-
private final S style;
1918

2019
/**
2120
* Creates a new linked image object.
2221
*
2322
* @param imagePath The path to the image file.
24-
* @param style The text style to apply to the corresponding segment.
2523
*/
26-
public RealLinkedImage(String imagePath, S style) {
24+
public RealLinkedImage(String imagePath) {
2725

2826
// if the image is below the current working directory,
2927
// then store as relative path name.
@@ -33,26 +31,18 @@ public RealLinkedImage(String imagePath, S style) {
3331
}
3432

3533
this.imagePath = imagePath;
36-
this.style = style;
3734
}
3835

3936
@Override
40-
public RealLinkedImage<S> setStyle(S style) {
41-
return new RealLinkedImage<>(imagePath, style);
37+
public boolean isReal() {
38+
return true;
4239
}
4340

44-
4541
@Override
4642
public String getImagePath() {
4743
return imagePath;
4844
}
4945

50-
@Override
51-
public S getStyle() {
52-
return style;
53-
}
54-
55-
5646
@Override
5747
public String toString() {
5848
return String.format("RealLinkedImage[path=%s]", imagePath);

0 commit comments

Comments
 (0)