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;