Mercurial > projects > dwt-linux
comparison dwt/dnd/DropTargetEffect.d @ 240:ce446666f5a2
Update to SWT 3.4M7
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 12 May 2008 19:13:01 +0200 |
parents | 0f12f6bb9739 |
children | c0d810de7093 |
comparison
equal
deleted
inserted
replaced
239:06a1f6829310 | 240:ce446666f5a2 |
---|---|
15 | 15 |
16 import dwt.DWT; | 16 import dwt.DWT; |
17 import dwt.graphics.Point; | 17 import dwt.graphics.Point; |
18 import dwt.graphics.Rectangle; | 18 import dwt.graphics.Rectangle; |
19 import dwt.widgets.Control; | 19 import dwt.widgets.Control; |
20 import dwt.widgets.Item; | |
21 import dwt.widgets.Table; | 20 import dwt.widgets.Table; |
21 import dwt.widgets.TableItem; | |
22 import dwt.widgets.Tree; | 22 import dwt.widgets.Tree; |
23 import dwt.widgets.TreeItem; | 23 import dwt.widgets.TreeItem; |
24 import dwt.widgets.Widget; | 24 import dwt.widgets.Widget; |
25 import dwt.dnd.DropTargetAdapter; | 25 import dwt.dnd.DropTargetAdapter; |
26 | 26 |
105 } | 105 } |
106 | 106 |
107 Widget getItem(Table table, int x, int y) { | 107 Widget getItem(Table table, int x, int y) { |
108 Point coordinates = new Point(x, y); | 108 Point coordinates = new Point(x, y); |
109 coordinates = table.toControl(coordinates); | 109 coordinates = table.toControl(coordinates); |
110 Item item = table.getItem(coordinates); | 110 TableItem item = table.getItem(coordinates); |
111 if (item is null) { | 111 if (item !is null) return item; |
112 Rectangle area = table.getClientArea(); | 112 Rectangle area = table.getClientArea(); |
113 if (area.contains(coordinates)) { | 113 int tableBottom = area.y + area.height; |
114 // Scan across the width of the table. | 114 int itemCount = table.getItemCount(); |
115 for (int x1 = area.x; x1 < area.x + area.width; x1++) { | 115 for (int i=table.getTopIndex(); i<itemCount; i++) { |
116 Point pt = new Point(x1, coordinates.y); | 116 item = table.getItem(i); |
117 item = table.getItem(pt); | 117 Rectangle rect = item.getBounds(); |
118 if (item !is null) { | 118 rect.x = area.x; |
119 break; | 119 rect.width = area.width; |
120 } | 120 if (rect.contains(coordinates)) return item; |
121 } | 121 if (rect.y > tableBottom) break; |
122 } | |
123 } | 122 } |
124 return item; | 123 return null; |
125 } | 124 } |
126 | 125 |
127 Widget getItem(Tree tree, int x, int y) { | 126 Widget getItem(Tree tree, int x, int y) { |
128 Point coordinates = new Point(x, y); | 127 Point point = new Point(x, y); |
129 coordinates = tree.toControl(coordinates); | 128 point = tree.toControl(point); |
130 Item item = tree.getItem(coordinates); | 129 TreeItem item = tree.getItem(point); |
131 if (item is null) { | 130 if (item is null) { |
132 Rectangle area = tree.getClientArea(); | 131 Rectangle area = tree.getClientArea(); |
133 if (area.contains(coordinates)) { | 132 if (area.contains(point)) { |
134 // Scan across the width of the tree. | 133 int treeBottom = area.y + area.height; |
135 for (int x1 = area.x; x1 < area.x + area.width; x1++) { | 134 item = tree.getTopItem(); |
136 Point pt = new Point(x1, coordinates.y); | 135 while (item !is null) { |
137 item = tree.getItem(pt); | 136 Rectangle rect = item.getBounds(); |
138 if (item !is null) { | 137 int itemBottom = rect.y + rect.height; |
139 break; | 138 if (rect.y <= point.y && point.y < itemBottom) return item; |
140 } | 139 if (itemBottom > treeBottom) break; |
140 item = nextItem(tree, item); | |
141 } | 141 } |
142 return null; | |
142 } | 143 } |
143 } | 144 } |
144 return item; | 145 return item; |
145 } | 146 } |
146 | 147 |
147 TreeItem nextItem(Tree tree, TreeItem item) { | 148 TreeItem nextItem(Tree tree, TreeItem item) { |
148 if (item is null) return null; | 149 if (item is null) return null; |
149 if (item.getExpanded()) return item.getItem(0); | 150 if (item.getExpanded() && item.getItemCount() > 0) return item.getItem(0); |
150 TreeItem childItem = item; | 151 TreeItem childItem = item; |
151 TreeItem parentItem = childItem.getParentItem(); | 152 TreeItem parentItem = childItem.getParentItem(); |
152 int index = parentItem is null ? tree.indexOf(childItem) : parentItem.indexOf(childItem); | 153 int index = parentItem is null ? tree.indexOf(childItem) : parentItem.indexOf(childItem); |
153 int count = parentItem is null ? tree.getItemCount() : parentItem.getItemCount(); | 154 int count = parentItem is null ? tree.getItemCount() : parentItem.getItemCount(); |
154 while (true) { | 155 while (true) { |