fTableViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { List selected= getSelectedTableEntries(); if (selected.size() != 1) return; NLSSubstitution substitution= (NLSSubstitution) selected.iterator().next(); if (substitution.getState() == NLSSubstitution.EXTERNALIZED) {  } } });
	private void createTableViewer(Composite composite) {		createTableComposite(composite);		/*		 * Feature of CellEditors - double click is ignored.		 * The workaround is to register my own listener and force the desired 		 * behavior.		 */		fTableViewer= new TableViewer(fTable) {			protected void hookControl(Control control) {				super.hookControl(control);				((Table) control).addMouseListener(new MouseAdapter() {					public void mouseDoubleClick(MouseEvent e) {						if (getTable().getSelection().length == 0)							return;						TableItem item= getTable().getSelection()[0];						if (item.getBounds(STATE_PROP).contains(e.x, e.y)) {							List widgetSel= getSelectionFromWidget();							if (widgetSel == null || widgetSel.size() != 1)								return;							NLSSubstitution substitution= (NLSSubstitution) widgetSel.get(0);							Integer value= (Integer) getCellModifier().getValue(substitution, PROPERTIES[STATE_PROP]);							int newValue= MultiStateCellEditor.getNextValue(NLSSubstitution.STATE_COUNT, value.intValue());							getCellModifier().modify(item, PROPERTIES[STATE_PROP], new Integer(newValue));						}					}				});			}		};		fTableViewer.setUseHashlookup(true);		final CellEditor[] editors= createCellEditors();		fTableViewer.setCellEditors(editors);		fTableViewer.setColumnProperties(PROPERTIES);		fTableViewer.setCellModifier(new CellModifier());		fTableViewer.setContentProvider(new IStructuredContentProvider() {			public Object[] getElements(Object inputElement) {				return fSubstitutions;			}			public void dispose() {			}			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {			}		});		fTableViewer.addFilter(new ViewerFilter() {			public boolean select(Viewer viewer, Object parentElement, Object element) {				if (!fFilterCheckBox.getSelection()) {					return true;				}				NLSSubstitution curr= (NLSSubstitution) element;				return (curr.getInitialState() == NLSSubstitution.INTERNALIZED) || (curr.getInitialState() == NLSSubstitution.EXTERNALIZED && curr.getInitialValue() == null);			}		});				fTableViewer.setLabelProvider(new NLSSubstitutionLabelProvider());		fTableViewer.setInput(new Object());		fTableViewer.addDoubleClickListener(new IDoubleClickListener() {			public void doubleClick(DoubleClickEvent event) {				List selected= getSelectedTableEntries();				if (selected.size() != 1)					return;				NLSSubstitution substitution= (NLSSubstitution) selected.iterator().next();				if (substitution.getState() == NLSSubstitution.EXTERNALIZED) {					//openEditButton(event.getSelection());				}			}		});		fTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {			public void selectionChanged(SelectionChangedEvent event) {				ExternalizeWizardPage.this.selectionChanged(event);			}		});	}