// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package com.amalto.workbench.widgets.celleditor;
import org.eclipse.jface.viewers.DialogCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
public abstract class EditableDialogCellEditor extends DialogCellEditor {
protected Text txtEdit;
protected EditableDialogCellEditor(Composite parent) {
super(parent);
}
@Override
protected Control createContents(Composite cell) {
txtEdit = new Text(cell, SWT.NONE);
txtEdit.setFont(cell.getFont());
txtEdit.setBackground(cell.getBackground());
txtEdit.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.keyCode == 13) {
doChange();
}
}
});
cell.getParent().addFocusListener(getFocusListener());
return txtEdit;
}
private FocusListener getFocusListener() {
return new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
doChange();
}
};
}
protected void doChange() {
if (validate()) {
markDirty();
doSetValue(txtEdit.getText().trim());
fireApplyEditorValue();
} else {
restoreValue();
}
}
protected void restoreValue() {
// do nothing
}
protected boolean validate() {
return true;
}
@Override
protected void doSetFocus() {
if (txtEdit != null) {
txtEdit.selectAll();
txtEdit.setFocus();
}
}
@Override
protected void updateContents(Object value) {
if (txtEdit == null) {
return;
}
activate();
String text = "";//$NON-NLS-1$
if (value != null) {
text = value.toString();
}
txtEdit.setText(text);
}
}