Lines 15-20
Link Here
|
15 |
|
15 |
|
16 |
import org.eclipse.core.runtime.Assert; |
16 |
import org.eclipse.core.runtime.Assert; |
17 |
import org.eclipse.swt.SWT; |
17 |
import org.eclipse.swt.SWT; |
|
|
18 |
import org.eclipse.swt.accessibility.ACC; |
19 |
import org.eclipse.swt.accessibility.AccessibleAdapter; |
20 |
import org.eclipse.swt.accessibility.AccessibleEvent; |
18 |
import org.eclipse.swt.events.DisposeEvent; |
21 |
import org.eclipse.swt.events.DisposeEvent; |
19 |
import org.eclipse.swt.events.DisposeListener; |
22 |
import org.eclipse.swt.events.DisposeListener; |
20 |
import org.eclipse.swt.graphics.Point; |
23 |
import org.eclipse.swt.graphics.Point; |
Lines 25-33
Link Here
|
25 |
* This class is responsible to provide cell management base features for the |
28 |
* This class is responsible to provide cell management base features for the |
26 |
* SWT-Controls {@link org.eclipse.swt.widgets.Table} and |
29 |
* SWT-Controls {@link org.eclipse.swt.widgets.Table} and |
27 |
* {@link org.eclipse.swt.widgets.Tree}. |
30 |
* {@link org.eclipse.swt.widgets.Tree}. |
28 |
* |
31 |
* |
29 |
* @since 3.3 |
32 |
* @since 3.3 |
30 |
* |
33 |
* |
31 |
*/ |
34 |
*/ |
32 |
abstract class SWTFocusCellManager { |
35 |
abstract class SWTFocusCellManager { |
33 |
|
36 |
|
Lines 102-109
Link Here
|
102 |
} |
105 |
} |
103 |
|
106 |
|
104 |
private void handleSelection(Event event) { |
107 |
private void handleSelection(Event event) { |
105 |
if ((event.detail & SWT.CHECK) == 0 && focusCell != null && focusCell.getItem() != event.item |
108 |
if ((event.detail & SWT.CHECK) == 0 && focusCell != null |
106 |
&& event.item != null && ! event.item.isDisposed() ) { |
109 |
&& focusCell.getItem() != event.item && event.item != null |
|
|
110 |
&& !event.item.isDisposed()) { |
107 |
ViewerRow row = viewer.getViewerRowFromItem(event.item); |
111 |
ViewerRow row = viewer.getViewerRowFromItem(event.item); |
108 |
Assert |
112 |
Assert |
109 |
.isNotNull(row, |
113 |
.isNotNull(row, |
Lines 118-124
Link Here
|
118 |
/** |
122 |
/** |
119 |
* Handles the {@link SWT#FocusIn} event. |
123 |
* Handles the {@link SWT#FocusIn} event. |
120 |
* |
124 |
* |
121 |
* @param event the event |
125 |
* @param event |
|
|
126 |
* the event |
122 |
*/ |
127 |
*/ |
123 |
private void handleFocusIn(Event event) { |
128 |
private void handleFocusIn(Event event) { |
124 |
if (focusCell == null) { |
129 |
if (focusCell == null) { |
Lines 128-134
Link Here
|
128 |
|
133 |
|
129 |
abstract ViewerCell getInitialFocusCell(); |
134 |
abstract ViewerCell getInitialFocusCell(); |
130 |
|
135 |
|
131 |
private void hookListener(ColumnViewer viewer) { |
136 |
private void hookListener(final ColumnViewer viewer) { |
132 |
Listener listener = new Listener() { |
137 |
Listener listener = new Listener() { |
133 |
|
138 |
|
134 |
public void handleEvent(Event event) { |
139 |
public void handleEvent(Event event) { |
Lines 155-172
Link Here
|
155 |
viewer.addSelectionChangedListener(new ISelectionChangedListener() { |
160 |
viewer.addSelectionChangedListener(new ISelectionChangedListener() { |
156 |
|
161 |
|
157 |
public void selectionChanged(SelectionChangedEvent event) { |
162 |
public void selectionChanged(SelectionChangedEvent event) { |
158 |
if( event.selection.isEmpty() ) { |
163 |
if (event.selection.isEmpty()) { |
159 |
setFocusCell(null); |
164 |
setFocusCell(null); |
160 |
} |
165 |
} |
161 |
} |
166 |
} |
162 |
|
167 |
|
163 |
}); |
168 |
}); |
164 |
viewer.getControl().addListener(SWT.FocusIn, listener); |
169 |
viewer.getControl().addListener(SWT.FocusIn, listener); |
|
|
170 |
viewer.getControl().getAccessible().addAccessibleListener( |
171 |
new AccessibleAdapter() { |
172 |
public void getName(AccessibleEvent event) { |
173 |
ViewerCell cell = getFocusCell(); |
174 |
if (cell == null) |
175 |
return; |
176 |
|
177 |
ViewerRow row = cell.getViewerRow(); |
178 |
if (row == null) |
179 |
return; |
180 |
|
181 |
Object element = row.getItem().getData(); |
182 |
ViewerColumn viewPart = viewer.getViewerColumn(cell |
183 |
.getColumnIndex()); |
184 |
|
185 |
if (viewPart == null) |
186 |
return; |
187 |
|
188 |
ColumnLabelProvider labelProvider = (ColumnLabelProvider) viewPart |
189 |
.getLabelProvider(); |
190 |
|
191 |
if (labelProvider == null) |
192 |
return; |
193 |
|
194 |
event.result = labelProvider.getText(element); |
195 |
} |
196 |
}); |
197 |
|
165 |
} |
198 |
} |
166 |
|
199 |
|
167 |
/** |
200 |
/** |
168 |
* @return the cell with the focus |
201 |
* @return the cell with the focus |
169 |
* |
202 |
* |
170 |
*/ |
203 |
*/ |
171 |
public ViewerCell getFocusCell() { |
204 |
public ViewerCell getFocusCell() { |
172 |
return focusCell; |
205 |
return focusCell; |
Lines 175-195
Link Here
|
175 |
void setFocusCell(ViewerCell focusCell) { |
208 |
void setFocusCell(ViewerCell focusCell) { |
176 |
ViewerCell oldCell = this.focusCell; |
209 |
ViewerCell oldCell = this.focusCell; |
177 |
|
210 |
|
178 |
if( this.focusCell != null && ! this.focusCell.getItem().isDisposed() ) { |
211 |
if (this.focusCell != null && !this.focusCell.getItem().isDisposed()) { |
179 |
this.focusCell.getItem().removeDisposeListener(itemDeletionListener); |
212 |
this.focusCell.getItem() |
|
|
213 |
.removeDisposeListener(itemDeletionListener); |
180 |
} |
214 |
} |
181 |
|
215 |
|
182 |
this.focusCell = focusCell; |
216 |
this.focusCell = focusCell; |
183 |
|
217 |
|
184 |
if( this.focusCell != null && ! this.focusCell.getItem().isDisposed() ) { |
218 |
if (this.focusCell != null && !this.focusCell.getItem().isDisposed()) { |
185 |
this.focusCell.getItem().addDisposeListener(itemDeletionListener); |
219 |
this.focusCell.getItem().addDisposeListener(itemDeletionListener); |
186 |
} |
220 |
} |
187 |
|
221 |
|
188 |
if( focusCell != null ) { |
222 |
if (focusCell != null) { |
189 |
focusCell.scrollIntoView(); |
223 |
focusCell.scrollIntoView(); |
190 |
} |
224 |
} |
|
|
225 |
|
226 |
this.cellHighlighter.focusCellChanged(focusCell, oldCell); |
191 |
|
227 |
|
192 |
this.cellHighlighter.focusCellChanged(focusCell,oldCell); |
228 |
getViewer().getControl().getAccessible().setFocus(ACC.CHILDID_SELF); |
193 |
} |
229 |
} |
194 |
|
230 |
|
195 |
ColumnViewer getViewer() { |
231 |
ColumnViewer getViewer() { |