Hello,
I have a problem creating a handler for a context action - or I have a problem understanding them
First I created an example for a normal TableViewer wich works fine (extract):
public void createPartControl(Composite parent)
{
// TableViewer //
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
// create columns
createColumns(parent, viewer);
// make lines and header visible
final Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
viewer.setContentProvider(new ArrayContentProvider());
// set the content for the viewer
viewer.setInput(DlyConnector.INSTANCE.getChanges());
getSite().setSelectionProvider(viewer);
// Menu //
MenuManager menuManager = new MenuManager();
Menu menu = menuManager.createContextMenu(viewer.getTable());
// set the menu on the SWT widget
viewer.getTable().setMenu(menu);
// register the menu with the framework
getSite().registerContextMenu(menuManager, viewer);
}
In the handler I try to get the selection:
public Object execute(ExecutionEvent event) throws ExecutionException
{
System.out.print("Part " +
HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getActivePart().getTitle() + ": ");
ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
.getActivePage().getSelection();
System.out.println(selection == null?"null":"not null");
// loop over items
int i = 0;
if (selection != null & selection instanceof IStructuredSelection)
{
IStructuredSelection strucSelection = (IStructuredSelection) selection;
for (Iterator<Object> iterator = strucSelection.iterator(); iterator
.hasNext();)
{
Object element = iterator.next();
System.out.println(element.toString());
i++;
}
}
}
Variable i now return the correct number of selected items.
I tried to extend the code to get child rows in the table, so I used the TreeViewer:
public void createPartControl(Composite parent)
{
// ... Grid and other components ...
// TableTree //
// full row and multi selection with scrollbars if needed
Tree tree = new Tree(parent, SWT.BORDER | SWT.H_SCROLL
| SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.MULTI);
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
createColumns(parent, tree);
viewer = new TreeViewer(tree);
viewer.setContentProvider(new ChangeContentProvider());
viewer.setLabelProvider(new TableLabelProvider());
// provide changes from database
viewer.setInput(DlyConnector.INSTANCE.getChangesWithObjects());
viewer.collapseAll();
// define layout for the viewer
GridData gridData = new GridData();
...
viewer.getControl().setLayoutData(gridData);
// Menu //
MenuManager menuManager = new MenuManager();
Menu menu = menuManager.createContextMenu(viewer.getControl());
// set the menu on the SWT widget
viewer.getControl().setMenu(menu);
// register the menu with the framework
getSite().registerContextMenu(menuManager, viewer);
}
The handler now return always a "null" selection:
The output returns the correct name of the view, but no selection: "null", i is zero.
Do I have to create a menu handler or do I have to create the menu itself using another way for TreeViewers?
Why is the selection null?
Any help would be nice
Kind regards
Andreas