/**
* Sencha GXT 3.0.0b - Sencha for GWT
* Copyright(c) 2007-2012, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.desktopapp.client.filemanager;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.Event;
import com.sencha.gxt.desktopapp.client.persistence.FileModel;
import com.sencha.gxt.widget.core.client.form.TextField;
import com.sencha.gxt.widget.core.client.grid.Grid;
import com.sencha.gxt.widget.core.client.grid.Grid.GridCell;
import com.sencha.gxt.widget.core.client.grid.editing.GridInlineEditing;
/**
* Works around a minor issue with GridInlineEditing in which any update
* operation that does not change the value is reported as a cancel.
*/
public class FileManagerGridInlineEditing extends GridInlineEditing<FileModel> {
private boolean isEnter;
FileManagerGridInlineEditing(Grid<FileModel> editableGrid) {
super(editableGrid);
}
public boolean isEnter() {
return isEnter;
}
@Override
public void startEditing(GridCell cell) {
isEnter = false;
super.startEditing(cell);
}
/**
* The original work around used onEnter to set the flag. However this no
* longer works because onEnter is invoked after onCancel has been invoked.
*/
@Override
protected void onEnter(NativeEvent evt) {
isEnter = true;
super.onEnter(evt);
}
public TextField getTextField() {
FileManagerGridInlineEditingTextField textField = new FileManagerGridInlineEditingTextField();
textField.setSelectOnFocus(true);
return textField;
}
/**
* The new improved work around uses a special TextField override to set the
* flag. When the underlying issue is resolved, this TextField can be replaced
* with a plain old TextField.
*/
public class FileManagerGridInlineEditingTextField extends TextField {
@Override
public void onBrowserEvent(Event event) {
if ("keydown".equals(event.getType()) && event.getKeyCode() == KeyCodes.KEY_ENTER) {
isEnter = true;
}
super.onBrowserEvent(event);
}
}
}