private void createContextMenu(MouseEvent me) throws TermInstantiationException { System.out.println("Right button click"); Display display = context.getCanvas().getDisplay(); Menu menu = new Menu(context.getCanvas().getShell(), SWT.POP_UP); try { Variable varAction = new Variable("Action"); Iterator<Map<Variable, Object>> results = PrologProxy.instance() .getSolutions(Compound.createCompound("cpi#contextMenuEntry", descriptor, varAction)); int count = 0; while (results.hasNext()) { Map<Variable, Object> result = (Map<Variable, Object>) results.next(); Compound action = (Compound) result.get(varAction); TermInstantiator.instance().instantiate(action, menu, context); if (count++ > MAX_MENU_ENTRIES) { MenuItem errItem = new MenuItem(menu, SWT.NONE); errItem.setText("<too many results>"); break; } } } catch (PrologException e1) { e1.printStackTrace(); } Point absLocation = me.getLocation().getCopy(); translateToAbsolute(absLocation); org.eclipse.swt.graphics.Point point = display.map( context.getCanvas(), null, new org.eclipse.swt.graphics.Point(absLocation.x, absLocation.y)); menu.setLocation(point); menu.setVisible(true); while (!menu.isDisposed() && menu.isVisible()) { if (!display.readAndDispatch()) display.sleep(); } }
public Control getCanvas() { return context.getCanvas(); }