GridTableViewer previous tab traversal? [message #599779] |
Wed, 16 June 2010 22:47 |
Lars Butler Messages: 6 Registered: July 2009 |
Junior Member |
|
|
Hello,
I've been doing a bunch of research on the web and have spent the better part of a day trying to figure this out. Can anyone help?
I have a GridTableViewer in my application. I have a requirement which states that the user shall be able to tab and shift+tab to navigate between cells (like Excel).
Tab works by default, but I cannot get shift+tab to work. I've tried a lot different things, including adding a KeyListener to the GridTableViewer's Grid and sending a call to grid.traverse(SWT.TRAVERSE_*) on keyPressed. I've tried passing in tab traverse and arrow traverse, but neither have any significant effect.
My GridTableViewer in my application exists in a Composite with two buttons. When I shift+tab in my application, the focus moves to the previous component: a button. Is there any way to work around this to get the functionality I'm looking for?
I've stripped everything down to an example View that demonstrates the issue. Tabbing works, but shift+tabbing does not.
Any help is appreciated.
Thanks!
Lars
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.nebula.jface.gridviewer.GridTableViewer;
import org.eclipse.nebula.widgets.grid.GridColumn;
public class View extends ViewPart {
public static final String ID = "GridTableViewerTest.view";
private GridTableViewer gridViewer;
public void createPartControl(Composite parent) {
gridViewer = new GridTableViewer(
parent, SWT.V_SCROLL | SWT.H_SCROLL);
gridViewer.setLabelProvider(new ColumnLabelProvider());
gridViewer.setContentProvider(new TableContentProvider());
gridViewer.getGrid().setCellSelectionEnabled(true);
gridViewer.getGrid().setLinesVisible(true);
gridViewer.getGrid().setHeaderVisible(true);
GridColumn column1 = new GridColumn(gridViewer.getGrid(), SWT.NONE);
column1.setWidth(100);
column1.setText("Column 1");
GridColumn column2 = new GridColumn(gridViewer.getGrid(), SWT.NONE);
column2.setWidth(100);
column2.setText("Column 2");
GridColumn column3 = new GridColumn(gridViewer.getGrid(), SWT.NONE);
column3.setWidth(100);
column3.setText("Column 3");
gridViewer.setInput(this.getViewSite());
}
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
gridViewer.getControl().setFocus();
}
}
class ColumnLabelProvider extends LabelProvider implements
ITableLabelProvider {
@Override
public String getColumnText(Object element, int columnIndex) {
return "foo";
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
// TODO Auto-generated method stub
return null;
}
}
class TableContentProvider implements IStructuredContentProvider {
private List<TableRow> tableRows;
public TableContentProvider() {
tableRows = new ArrayList<TableRow>();
for (int row=1; row<=10; row++) {
TableRow tableRow = new TableRow();
tableRows.add(tableRow);
}
}
@Override
public Object[] getElements(Object inputElement) {
// TODO Auto-generated method stub
return tableRows.toArray();
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public void inputChanged(Viewer viewer,
Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
}
class TableRow {
public TableRow() {}
}
|
|
|
|
Re: GridTableViewer previous tab traversal? [message #599914 is a reply to message #599779] |
Thu, 08 July 2010 19:58 |
Lars Butler Messages: 6 Registered: July 2009 |
Junior Member |
|
|
Arne/Tom,
Thanks for the responses. I've tried your suggestions, but neither of them seem to have an effect. (I've tried each of them individually and together... no difference.) Shift+tab still does not traverse to the previous cell.
Code is below; am I doing something wrong?
package gridtableviewertest;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrate gy;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.nebula.jface.gridviewer.GridTableViewer;
import org.eclipse.nebula.jface.gridviewer.GridViewerEditor;
import org.eclipse.nebula.widgets.grid.GridColumn;
public class View extends ViewPart {
public static final String ID = "GridTableViewerTest.view";
private GridTableViewer gridViewer;
public void createPartControl(Composite parent) {
gridViewer = new GridTableViewer(
parent, SWT.V_SCROLL | SWT.H_SCROLL);
ColumnViewerEditorActivationStrategy actSupport
= new ColumnViewerEditorActivationStrategy(gridViewer);
/**
* Additions
*/
GridViewerEditor.create(gridViewer, actSupport,
ColumnViewerEditor.TABBING_HORIZONTAL |
ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
| ColumnViewerEditor.TABBING_VERTICAL);
gridViewer.getGrid().addTraverseListener(new TraverseListener() {
public void keyTraversed(TraverseEvent e) {
switch (e.detail) {
case SWT.TRAVERSE_TAB_NEXT:
case SWT.TRAVERSE_TAB_PREVIOUS:
e.doit = false;
}
}
});
/**
* End Additions
*/
gridViewer.setLabelProvider(new ColumnLabelProvider());
gridViewer.setContentProvider(new TableContentProvider());
gridViewer.getGrid().setCellSelectionEnabled(true);
gridViewer.getGrid().setLinesVisible(true);
gridViewer.getGrid().setHeaderVisible(true);
GridColumn column1 = new GridColumn(gridViewer.getGrid(), SWT.NONE);
column1.setWidth(100);
column1.setText("Column 1");
GridColumn column2 = new GridColumn(gridViewer.getGrid(), SWT.NONE);
column2.setWidth(100);
column2.setText("Column 2");
GridColumn column3 = new GridColumn(gridViewer.getGrid(), SWT.NONE);
column3.setWidth(100);
column3.setText("Column 3");
gridViewer.setInput(this.getViewSite());
}
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
gridViewer.getControl().setFocus();
}
}
class ColumnLabelProvider extends LabelProvider implements
ITableLabelProvider {
@Override
public String getColumnText(Object element, int columnIndex) {
return "foo";
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
// TODO Auto-generated method stub
return null;
}
}
class TableContentProvider implements IStructuredContentProvider {
private List<TableRow> tableRows;
public TableContentProvider() {
tableRows = new ArrayList<TableRow>();
for (int row=1; row<=10; row++) {
TableRow tableRow = new TableRow();
tableRows.add(tableRow);
}
}
@Override
public Object[] getElements(Object inputElement) {
// TODO Auto-generated method stub
return tableRows.toArray();
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public void inputChanged(Viewer viewer,
Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
}
class TableRow {
public TableRow() {}
}
Thanks,
Lars
|
|
|
Powered by
FUDForum. Page generated in 0.04049 seconds