mirror of
https://github.com/pocoproject/poco.git
synced 2025-06-03 05:22:03 +02:00
125 lines
3.7 KiB
JavaScript
125 lines
3.7 KiB
JavaScript
|
|
Ext.grid.AppinfTable = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
/**
|
|
* @cfg {Boolean} autoEdit
|
|
* enables autoEdit Mode
|
|
*/
|
|
autoEdit: true,
|
|
|
|
charThatStartedEdit: null,
|
|
|
|
origEditValue: null,
|
|
|
|
// private
|
|
initComponent : function(){
|
|
//make sure we have cell selection!
|
|
this.selModel = new Ext.grid.CellSelectionModel();
|
|
Ext.grid.AppinfTable.superclass.initComponent.call(this);
|
|
},
|
|
|
|
// private
|
|
initEvents : function(){
|
|
Ext.grid.AppinfTable.superclass.initEvents.call(this);
|
|
this.on("keydown", this.onKeyDownEvent, this);
|
|
},
|
|
|
|
//private
|
|
onKeyDownEvent: function(e){
|
|
var code = e.getKey();
|
|
if (code != undefined && code != e.LEFT && code != e.RIGHT && code != e.UP && code != e.DOWN && code != e.ESC && code != e.ENTER
|
|
&& code != e.TAB && code != e.SHIFT && code != e.PAGEUP && code != e.PAGEDOWN && code != e.HOME && code != e.F5 &&
|
|
code != e.END && code != e.DELETE && code != e.CONTROL && code != e.BACKSPACE){
|
|
this.charThatStartedEdit = code;
|
|
var sc = this.selModel.getSelectedCell();
|
|
var col = sc[1];
|
|
var row = sc[0];
|
|
this.startEditing(row, col);
|
|
}
|
|
else
|
|
this.charThatStartedEdit = null;
|
|
}
|
|
});
|
|
|
|
Ext.reg('appinfgrid', Ext.grid.AppinfTable);
|
|
|
|
Ext.override(Ext.grid.AppinfTable, {
|
|
startEditing : function(row, col){
|
|
this.stopEditing();
|
|
if(this.colModel.isCellEditable(col, row)){
|
|
this.view.ensureVisible(row, col, true);
|
|
var r = this.store.getAt(row);
|
|
var field = this.colModel.getDataIndex(col);
|
|
var e = {
|
|
grid: this,
|
|
record: r,
|
|
field: field,
|
|
value: r.data[field],
|
|
row: row,
|
|
column: col,
|
|
cancel:false
|
|
};
|
|
if(this.fireEvent("beforeedit", e) !== false && !e.cancel){
|
|
this.editing = true;
|
|
var ed = this.colModel.getCellEditor(col, row);
|
|
if(!ed.rendered){
|
|
var edView = this.view.getEditorParent(ed);
|
|
ed.render(edView);
|
|
}
|
|
var edfield = ed.field;
|
|
ed.row = row;
|
|
ed.col = col;
|
|
ed.record = r;
|
|
ed.field = edfield;
|
|
ed.on("complete", this.onEditComplete, this, {single: true});
|
|
ed.on("specialkey", this.selModel.onEditorKey, this.selModel);
|
|
this.activeEditor = ed;
|
|
var v = this.preEditValue(r, field);
|
|
this.origEditValue = v;
|
|
if (v == e.value)
|
|
{
|
|
if (this.autoEdit && this.charThatStartedEdit)
|
|
{
|
|
e.value = String.fromCharCode(this.charThatStartedEdit);
|
|
ed.field.selectOnFocus = false;
|
|
}
|
|
else
|
|
ed.field.selectOnFocus = true;
|
|
}
|
|
else
|
|
ed.field.selectOnFocus = false;
|
|
this.charThatStartedEdit = null;
|
|
(function(){
|
|
ed.startEdit(this.view.getCell(row, col), e.value);
|
|
ed.field.preFocus();
|
|
}).defer(50, this);
|
|
}
|
|
}
|
|
},
|
|
onEditComplete : function(ed, value, startValue){
|
|
this.editing = false;
|
|
this.activeEditor = null;
|
|
ed.un("specialkey", this.selModel.onEditorKey, this.selModel);
|
|
var r = ed.record;
|
|
var field = this.colModel.getDataIndex(ed.col);
|
|
value = this.postEditValue(value, startValue, r, field);
|
|
if(String(value) !== String(this.origEditValue)){
|
|
var e = {
|
|
grid: this,
|
|
record: r,
|
|
field: field,
|
|
originalValue: this.origEditValue,
|
|
value: value,
|
|
row: ed.row,
|
|
column: ed.col,
|
|
cancel:false
|
|
};
|
|
if(this.fireEvent("validateedit", e) !== false && !e.cancel){
|
|
r.set(field, e.value);
|
|
delete e.cancel;
|
|
this.fireEvent("afteredit", e);
|
|
}
|
|
}
|
|
this.view.focusCell(ed.row, ed.col);
|
|
}
|
|
});
|
|
|