whole_func_string: function(){
          var me = this;
  
          me.source = me.source || {};
          me.addCls(me.gridCls);
          me.plugins = me.plugins || [];
  
          // Enable cell editing. Inject a custom startEdit which always edits column 1 regardless of which column was clicked.
          me.plugins.push(new Ext.grid.plugin.CellEditing({
              clicksToEdit: me.clicksToEdit,
  
              // Inject a startEdit which always edits the value column
              startEdit: function(record, column) {
                  // Maintainer: Do not change this 'this' to 'me'! It is the CellEditing object's own scope.
                  return this.self.prototype.startEdit.call(this, record, me.headerCt.child('#' + me.valueField));
              }
          }));
  
          me.selModel = {
              selType: 'cellmodel',
              onCellSelect: function(position) {
                  if (position.column != 1) {
                      position.column = 1;
                  }
                  return this.self.prototype.onCellSelect.call(this, position);
              }
          };
          
          me.sourceConfig = Ext.apply({}, me.sourceConfig);  
  
          // Create a property.Store from the source object unless configured with a store
          if (!me.store) {
              me.propStore = me.store = new Ext.grid.property.Store(me, me.source);
          }
          me.configure(me.sourceConfig);
  
          if (me.sortableColumns) {
              me.store.sort('name', 'ASC');
          }
          me.columns = new Ext.grid.property.HeaderContainer(me, me.store);
  
          me.addEvents(
              /**
               * @event beforepropertychange
               * Fires before a property value changes.  Handlers can return false to cancel the property change
               * (this will internally call {@link Ext.data.Model#reject} on the property's record).
               * @param {Object} source The source data object for the grid (corresponds to the same object passed in
               * as the {@link #source} config property).
               * @param {String} recordId The record's id in the data store
               * @param {Object} value The current edited property value
               * @param {Object} oldValue The original property value prior to editing
               */
              'beforepropertychange',
              /**
               * @event propertychange
               * Fires after a property value has changed.
               * @param {Object} source The source data object for the grid (corresponds to the same object passed in
               * as the {@link #source} config property).
               * @param {String} recordId The record's id in the data store
               * @param {Object} value The current edited property value
               * @param {Object} oldValue The original property value prior to editing
               */
              'propertychange'
          );
          me.callParent();
  
          // Inject a custom implementation of walkCells which only goes up or down
          me.getView().walkCells = this.walkCells;
  
          // Set up our default editor set for the 4 atomic data types
          me.editors = {
              'date'    : new Ext.grid.CellEditor({ field: new Ext.form.field.Date({selectOnFocus: true})}),
              'string'  : new Ext.grid.CellEditor({ field: new Ext.form.field.Text({selectOnFocus: true})}),
              'number'  : new Ext.grid.CellEditor({ field: new Ext.form.field.Number({selectOnFocus: true})}),
              'boolean' : new Ext.grid.CellEditor({ field: new Ext.form.field.ComboBox({
                  editable: false,
                  store: [[ true, me.headerCt.trueText ], [false, me.headerCt.falseText ]]
              })})
          };
  
          // Track changes to the data so we can fire our events.
          me.store.on('update', me.onUpdate, me);
      }
func_code_string: function(){
          var me = this;
  
          me.source = me.source || {};
          me.addCls(me.gridCls);
          me.plugins = me.plugins || [];
  
          // Enable cell editing. Inject a custom startEdit which always edits column 1 regardless of which column was clicked.
          me.plugins.push(new Ext.grid.plugin.CellEditing({
              clicksToEdit: me.clicksToEdit,
  
              // Inject a startEdit which always edits the value column
              startEdit: function(record, column) {
                  // Maintainer: Do not change this 'this' to 'me'! It is the CellEditing object's own scope.
                  return this.self.prototype.startEdit.call(this, record, me.headerCt.child('#' + me.valueField));
              }
          }));
  
          me.selModel = {
              selType: 'cellmodel',
              onCellSelect: function(position) {
                  if (position.column != 1) {
                      position.column = 1;
                  }
                  return this.self.prototype.onCellSelect.call(this, position);
              }
          };
          
          me.sourceConfig = Ext.apply({}, me.sourceConfig);  
  
          // Create a property.Store from the source object unless configured with a store
          if (!me.store) {
              me.propStore = me.store = new Ext.grid.property.Store(me, me.source);
          }
          me.configure(me.sourceConfig);
  
          if (me.sortableColumns) {
              me.store.sort('name', 'ASC');
          }
          me.columns = new Ext.grid.property.HeaderContainer(me, me.store);
  
          me.addEvents(
              /**
               * @event beforepropertychange
               * Fires before a property value changes.  Handlers can return false to cancel the property change
               * (this will internally call {@link Ext.data.Model#reject} on the property's record).
               * @param {Object} source The source data object for the grid (corresponds to the same object passed in
               * as the {@link #source} config property).
               * @param {String} recordId The record's id in the data store
               * @param {Object} value The current edited property value
               * @param {Object} oldValue The original property value prior to editing
               */
              'beforepropertychange',
              /**
               * @event propertychange
               * Fires after a property value has changed.
               * @param {Object} source The source data object for the grid (corresponds to the same object passed in
               * as the {@link #source} config property).
               * @param {String} recordId The record's id in the data store
               * @param {Object} value The current edited property value
               * @param {Object} oldValue The original property value prior to editing
               */
              'propertychange'
          );
          me.callParent();
  
          // Inject a custom implementation of walkCells which only goes up or down
          me.getView().walkCells = this.walkCells;
  
          // Set up our default editor set for the 4 atomic data types
          me.editors = {
              'date'    : new Ext.grid.CellEditor({ field: new Ext.form.field.Date({selectOnFocus: true})}),
              'string'  : new Ext.grid.CellEditor({ field: new Ext.form.field.Text({selectOnFocus: true})}),
              'number'  : new Ext.grid.CellEditor({ field: new Ext.form.field.Number({selectOnFocus: true})}),
              'boolean' : new Ext.grid.CellEditor({ field: new Ext.form.field.ComboBox({
                  editable: false,
                  store: [[ true, me.headerCt.trueText ], [false, me.headerCt.falseText ]]
              })})
          };
  
          // Track changes to the data so we can fire our events.
          me.store.on('update', me.onUpdate, me);
      }
func_documentation_string: private