package com.isencia.passerelle.workbench.model.editor.ui.descriptor; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; /** * */ public abstract class DoubleClickModifier implements ICellModifier { protected boolean enabled; protected DoubleClickModifier(final ColumnViewer viewer) { viewer.getControl().addListener(SWT.MouseDown, new Listener() { public void handleEvent(Event event) { setEnabled(false); } }); viewer.getControl().addListener(SWT.MouseDoubleClick, new Listener() { public void handleEvent(Event event) { IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); if (selection.toList().size() != 1) { return; } final ViewerCell cell = viewer.getCell(new Point(event.x, event.y)); setEnabled(true); viewer.editElement(selection.getFirstElement(),cell!=null?cell.getColumnIndex():0); } }); } /** * The editor can be disabled, useful for double click table editing * @param enabled */ public void setEnabled(boolean enabled) { this.enabled = enabled; } public boolean canModify(Object element, String property) { return enabled; } }