--- /dev/null
+/**
+ * @class Ext.ux.DataView.LabelEditor
+ * @extends Ext.Editor
+ */
+Ext.define('Ext.ux.DataView.LabelEditor', {
+
+ extend: 'Ext.Editor',
+
+ alignment: 'tl-tl',
+
+ completeOnEnter: true,
+
+ cancelOnEsc: true,
+
+ shim: false,
+
+ autoSize: {
+ width: 'boundEl',
+ height: 'field'
+ },
+
+ labelSelector: 'x-editable',
+
+ requires: [
+ 'Ext.form.field.Text'
+ ],
+
+ constructor: function(config) {
+ config.field = config.field || Ext.create('Ext.form.field.Text', {
+ allowBlank: false,
+ selectOnFocus:true
+ });
+ this.callParent([config]);
+ },
+
+ init: function(view) {
+ this.view = view;
+ this.mon(view, 'render', this.bindEvents, this);
+ this.on('complete', this.onSave, this);
+ },
+
+ // initialize events
+ bindEvents: function() {
+ this.mon(this.view.getEl(), {
+ click: {
+ fn: this.onClick,
+ scope: this
+ }
+ });
+ },
+
+ // on mousedown show editor
+ onClick: function(e, target) {
+ var me = this,
+ item, record;
+
+ if (Ext.fly(target).hasCls(me.labelSelector) && !me.editing && !e.ctrlKey && !e.shiftKey) {
+ e.stopEvent();
+ item = me.view.findItemByChild(target);
+ record = me.view.store.getAt(me.view.indexOf(item));
+ me.startEdit(target, record.data[me.dataIndex]);
+ me.activeRecord = record;
+ } else if (me.editing) {
+ me.field.blur();
+ e.preventDefault();
+ }
+ },
+
+ // update record
+ onSave: function(ed, value) {
+ this.activeRecord.set(this.dataIndex, value);
+ }
+});
+