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) {