Mercurial > projects > dwt-addons
comparison dwtx/ui/internal/forms/widgets/AggregateHyperlinkSegment.d @ 76:e193036d82c9
Fix continue porting
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 24 May 2008 06:18:55 +0200 |
parents | 5d489b9f966c |
children | 04b47443bb01 |
comparison
equal
deleted
inserted
replaced
75:5d489b9f966c | 76:e193036d82c9 |
---|---|
10 * Port to the D programming language: | 10 * Port to the D programming language: |
11 * Frank Benoit <benoit@tionex.de> | 11 * Frank Benoit <benoit@tionex.de> |
12 *******************************************************************************/ | 12 *******************************************************************************/ |
13 module dwtx.ui.internal.forms.widgets.AggregateHyperlinkSegment; | 13 module dwtx.ui.internal.forms.widgets.AggregateHyperlinkSegment; |
14 | 14 |
15 import java.util.Hashtable; | 15 import dwtx.ui.internal.forms.widgets.ParagraphSegment; |
16 import java.util.Vector; | 16 import dwtx.ui.internal.forms.widgets.IHyperlinkSegment; |
17 import dwtx.ui.internal.forms.widgets.TextHyperlinkSegment; | |
18 import dwtx.ui.internal.forms.widgets.ImageHyperlinkSegment; | |
19 import dwtx.ui.internal.forms.widgets.Locator; | |
20 import dwtx.ui.internal.forms.widgets.SelectionData; | |
17 | 21 |
18 import dwt.graphics.Color; | 22 import dwt.graphics.Color; |
19 import dwt.graphics.GC; | 23 import dwt.graphics.GC; |
20 import dwt.graphics.Rectangle; | 24 import dwt.graphics.Rectangle; |
25 | |
26 import dwt.dwthelper.utils; | |
27 import tango.util.collection.ArraySeq; | |
21 | 28 |
22 /** | 29 /** |
23 * This segment contains a collection of images and links that all belong to one | 30 * This segment contains a collection of images and links that all belong to one |
24 * logical hyperlink. | 31 * logical hyperlink. |
25 */ | 32 */ |
26 public class AggregateHyperlinkSegment extends ParagraphSegment implements | 33 public class AggregateHyperlinkSegment : ParagraphSegment, |
27 IHyperlinkSegment { | 34 IHyperlinkSegment { |
28 private String href; | 35 private String href; |
29 | 36 |
30 private Vector segments = new Vector(); | 37 private ArraySeq!(Object) segments; |
31 | 38 |
32 public AggregateHyperlinkSegment() { | 39 public this() { |
40 segments = new ArraySeq!(Object); | |
33 } | 41 } |
34 | 42 |
35 public void add(TextHyperlinkSegment segment) { | 43 public void add(TextHyperlinkSegment segment) { |
36 segments.add(segment); | 44 segments.append(segment); |
37 } | 45 } |
38 | 46 |
39 public void add(ImageHyperlinkSegment segment) { | 47 public void add(ImageHyperlinkSegment segment) { |
40 segments.add(segment); | 48 segments.append(segment); |
41 } | 49 } |
42 | 50 |
43 /* | 51 /* |
44 * (non-Javadoc) | 52 * (non-Javadoc) |
45 * | 53 * |
46 * @see dwtx.ui.internal.forms.widgets.ParagraphSegment#advanceLocator(dwt.graphics.GC, | 54 * @see dwtx.ui.internal.forms.widgets.ParagraphSegment#advanceLocator(dwt.graphics.GC, |
47 * int, dwtx.ui.internal.forms.widgets.Locator, | 55 * int, dwtx.ui.internal.forms.widgets.Locator, |
48 * java.util.Hashtable, bool) | 56 * java.util.Hashtable, bool) |
49 */ | 57 */ |
50 public bool advanceLocator(GC gc, int wHint, Locator loc, | 58 public bool advanceLocator(GC gc, int wHint, Locator loc, |
51 Hashtable objectTable, bool computeHeightOnly) { | 59 Hashtable objectTable, bool computeHeightOnly) { |
52 bool newLine = false; | 60 bool newLine = false; |
53 for (int i = 0; i < segments.size(); i++) { | 61 for (int i = 0; i < segments.size(); i++) { |
54 ParagraphSegment segment = (ParagraphSegment) segments.get(i); | 62 ParagraphSegment segment = cast(ParagraphSegment) segments.get(i); |
55 if (segment.advanceLocator(gc, wHint, loc, objectTable, | 63 if (segment.advanceLocator(gc, wHint, loc, objectTable, |
56 computeHeightOnly)) | 64 computeHeightOnly)) |
57 newLine = true; | 65 newLine = true; |
58 } | 66 } |
59 return newLine; | 67 return newLine; |
74 this.href = href; | 82 this.href = href; |
75 } | 83 } |
76 | 84 |
77 /* | 85 /* |
78 * (non-Javadoc) | 86 * (non-Javadoc) |
79 * | 87 * |
80 * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#repaint(dwt.graphics.GC, | 88 * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#repaint(dwt.graphics.GC, |
81 * bool) | 89 * bool) |
82 */ | 90 */ |
83 public void paint(GC gc, bool hover, Hashtable resourceTable, | 91 public void paint(GC gc, bool hover, Hashtable resourceTable, |
84 bool selected, SelectionData selData, Rectangle repaintRegion) { | 92 bool selected, SelectionData selData, Rectangle repaintRegion) { |
85 for (int i = 0; i < segments.size(); i++) { | 93 for (int i = 0; i < segments.size(); i++) { |
86 ParagraphSegment segment = (ParagraphSegment) segments.get(i); | 94 ParagraphSegment segment = cast(ParagraphSegment) segments.get(i); |
87 segment.paint(gc, hover, resourceTable, selected, selData, | 95 segment.paint(gc, hover, resourceTable, selected, selData, |
88 repaintRegion); | 96 repaintRegion); |
89 } | 97 } |
90 } | 98 } |
91 | 99 |
92 public String getText() { | 100 public String getText() { |
93 StringBuffer buf = new StringBuffer(); | 101 StringBuffer buf = new StringBuffer(); |
94 for (int i = 0; i < segments.size(); i++) { | 102 for (int i = 0; i < segments.size(); i++) { |
95 IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i); | 103 IHyperlinkSegment segment = cast(IHyperlinkSegment) segments.get(i); |
96 buf.append(segment.getText()); | 104 buf.append(segment.getText()); |
97 } | 105 } |
98 return buf.toString(); | 106 return buf.toString(); |
99 } | 107 } |
100 | 108 |
101 /* | 109 /* |
102 * (non-Javadoc) | 110 * (non-Javadoc) |
103 * | 111 * |
104 * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#paintFocus(dwt.graphics.GC, | 112 * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#paintFocus(dwt.graphics.GC, |
105 * dwt.graphics.Color, dwt.graphics.Color, | 113 * dwt.graphics.Color, dwt.graphics.Color, |
106 * bool) | 114 * bool) |
107 */ | 115 */ |
108 public void paintFocus(GC gc, Color bg, Color fg, bool selected, | 116 public void paintFocus(GC gc, Color bg, Color fg, bool selected, |
109 Rectangle repaintRegion) { | 117 Rectangle repaintRegion) { |
110 for (int i = 0; i < segments.size(); i++) { | 118 for (int i = 0; i < segments.size(); i++) { |
111 IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i); | 119 IHyperlinkSegment segment = cast(IHyperlinkSegment) segments.get(i); |
112 segment.paintFocus(gc, bg, fg, selected, repaintRegion); | 120 segment.paintFocus(gc, bg, fg, selected, repaintRegion); |
113 } | 121 } |
114 } | 122 } |
115 | 123 |
116 /* | 124 /* |
117 * (non-Javadoc) | 125 * (non-Javadoc) |
118 * | 126 * |
119 * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#getBounds() | 127 * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#getBounds() |
120 */ | 128 */ |
121 public Rectangle getBounds() { | 129 public Rectangle getBounds() { |
122 Rectangle bounds = new Rectangle(Integer.MAX_VALUE, Integer.MAX_VALUE, | 130 Rectangle bounds = new Rectangle(Integer.MAX_VALUE, Integer.MAX_VALUE, |
123 0, 0); | 131 0, 0); |
124 // TODO this is wrong | 132 // TODO this is wrong |
125 for (int i = 0; i < segments.size(); i++) { | 133 for (int i = 0; i < segments.size(); i++) { |
126 IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i); | 134 IHyperlinkSegment segment = cast(IHyperlinkSegment) segments.get(i); |
127 Rectangle sbounds = segment.getBounds(); | 135 Rectangle sbounds = segment.getBounds(); |
128 bounds.x = Math.min(bounds.x, sbounds.x); | 136 bounds.x = Math.min(bounds.x, sbounds.x); |
129 bounds.y = Math.min(bounds.y, sbounds.y); | 137 bounds.y = Math.min(bounds.y, sbounds.y); |
130 bounds.width = Math.max(bounds.width, sbounds.width); | 138 bounds.width = Math.max(bounds.width, sbounds.width); |
131 bounds.height = Math.max(bounds.height, sbounds.height); | 139 bounds.height = Math.max(bounds.height, sbounds.height); |
133 return bounds; | 141 return bounds; |
134 } | 142 } |
135 | 143 |
136 public bool contains(int x, int y) { | 144 public bool contains(int x, int y) { |
137 for (int i = 0; i < segments.size(); i++) { | 145 for (int i = 0; i < segments.size(); i++) { |
138 IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i); | 146 IHyperlinkSegment segment = cast(IHyperlinkSegment) segments.get(i); |
139 if (segment.contains(x, y)) | 147 if (segment.contains(x, y)) |
140 return true; | 148 return true; |
141 } | 149 } |
142 return false; | 150 return false; |
143 } | 151 } |
144 | 152 |
145 public bool intersects(Rectangle rect) { | 153 public bool intersects(Rectangle rect) { |
146 for (int i = 0; i < segments.size(); i++) { | 154 for (int i = 0; i < segments.size(); i++) { |
147 IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i); | 155 IHyperlinkSegment segment = cast(IHyperlinkSegment) segments.get(i); |
148 if (segment.intersects(rect)) | 156 if (segment.intersects(rect)) |
149 return true; | 157 return true; |
150 } | 158 } |
151 return false; | 159 return false; |
152 } | 160 } |
153 | 161 |
154 /* | 162 /* |
155 * (non-Javadoc) | 163 * (non-Javadoc) |
156 * | 164 * |
157 * @see dwtx.ui.internal.forms.widgets.ParagraphSegment#layout(dwt.graphics.GC, | 165 * @see dwtx.ui.internal.forms.widgets.ParagraphSegment#layout(dwt.graphics.GC, |
158 * int, dwtx.ui.internal.forms.widgets.Locator, | 166 * int, dwtx.ui.internal.forms.widgets.Locator, |
159 * java.util.Hashtable, bool, | 167 * java.util.Hashtable, bool, |
160 * dwtx.ui.internal.forms.widgets.SelectionData) | 168 * dwtx.ui.internal.forms.widgets.SelectionData) |
161 */ | 169 */ |
162 public void layout(GC gc, int width, Locator locator, | 170 public void layout(GC gc, int width, Locator locator, |
163 Hashtable resourceTable, bool selected) { | 171 Hashtable resourceTable, bool selected) { |
164 for (int i = 0; i < segments.size(); i++) { | 172 for (int i = 0; i < segments.size(); i++) { |
165 ParagraphSegment segment = (ParagraphSegment) segments.get(i); | 173 ParagraphSegment segment = cast(ParagraphSegment) segments.get(i); |
166 segment.layout(gc, width, locator, resourceTable, selected); | 174 segment.layout(gc, width, locator, resourceTable, selected); |
167 } | 175 } |
168 } | 176 } |
169 | 177 |
170 /* | 178 /* |
171 * (non-Javadoc) | 179 * (non-Javadoc) |
172 * | 180 * |
173 * @see dwtx.ui.internal.forms.widgets.ParagraphSegment#computeSelection(dwt.graphics.GC, | 181 * @see dwtx.ui.internal.forms.widgets.ParagraphSegment#computeSelection(dwt.graphics.GC, |
174 * java.util.Hashtable, bool, | 182 * java.util.Hashtable, bool, |
175 * dwtx.ui.internal.forms.widgets.SelectionData) | 183 * dwtx.ui.internal.forms.widgets.SelectionData) |
176 */ | 184 */ |
177 public void computeSelection(GC gc, Hashtable resourceTable, | 185 public void computeSelection(GC gc, Hashtable resourceTable, |
178 SelectionData selData) { | 186 SelectionData selData) { |
179 for (int i = 0; i < segments.size(); i++) { | 187 for (int i = 0; i < segments.size(); i++) { |
180 ParagraphSegment segment = (ParagraphSegment) segments.get(i); | 188 ParagraphSegment segment = cast(ParagraphSegment) segments.get(i); |
181 segment.computeSelection(gc, resourceTable, selData); | 189 segment.computeSelection(gc, resourceTable, selData); |
182 } | 190 } |
183 } | 191 } |
184 | 192 |
185 public void clearCache(String fontId) { | 193 public void clearCache(String fontId) { |
186 for (int i = 0; i < segments.size(); i++) { | 194 for (int i = 0; i < segments.size(); i++) { |
187 ParagraphSegment segment = (ParagraphSegment) segments.get(i); | 195 ParagraphSegment segment = cast(ParagraphSegment) segments.get(i); |
188 segment.clearCache(fontId); | 196 segment.clearCache(fontId); |
189 } | 197 } |
190 } | 198 } |
191 | 199 |
192 public String getTooltipText() { | 200 public String getTooltipText() { |
193 if (segments.size() > 0) | 201 if (segments.size() > 0) |
194 return ((ParagraphSegment) segments.get(0)).getTooltipText(); | 202 return (cast(ParagraphSegment) segments.get(0)).getTooltipText(); |
195 return super.getTooltipText(); | 203 return super.getTooltipText(); |
196 } | 204 } |
197 | 205 |
198 public bool isFocusSelectable(Hashtable resourceTable) { | 206 public bool isFocusSelectable(Hashtable resourceTable) { |
199 return true; | 207 return true; |