Blame view

WebRoot/plugins/websocketInstantMsg/ext4/ux/CheckColumn.js 2.5 KB
ad5081d3   孙向锦   初始化项目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  /**
   * @class Ext.ux.CheckColumn
   * @extends Ext.grid.column.Column
   * <p>A Header subclass which renders a checkbox in each column cell which toggles the truthiness of the associated data field on click.</p>
   * <p><b>Note. As of ExtJS 3.3 this no longer has to be configured as a plugin of the GridPanel.</b></p>
   * <p>Example usage:</p>
   * <pre><code>
  // create the grid
  var grid = Ext.create('Ext.grid.Panel', {
      ...
      columns: [{
             text: 'Foo',
             ...
          },{
             xtype: 'checkcolumn',
             text: 'Indoor?',
             dataIndex: 'indoor',
             width: 55
          }
      ]
      ...
  });
   * </code></pre>
   * In addition to toggling a Boolean value within the record data, this
   * class adds or removes a css class <tt>'x-grid-checked'</tt> on the td
   * based on whether or not it is checked to alter the background image used
   * for a column.
   */
  Ext.define('Ext.ux.CheckColumn', {
      extend: 'Ext.grid.column.Column',
      alias: 'widget.checkcolumn',
      
      constructor: function() {
          this.addEvents(
              /**
               * @event checkchange
               * Fires when the checked state of a row changes
               * @param {Ext.ux.CheckColumn} this
               * @param {Number} rowIndex The row index
               * @param {Boolean} checked True if the box is checked
               */
              'checkchange'
          );
          this.callParent(arguments);
      },
  
      /**
       * @private
       * Process and refire events routed from the GridView's processEvent method.
       */
      processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
          if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) {
              var record = view.panel.store.getAt(recordIndex),
                  dataIndex = this.dataIndex,
                  checked = !record.get(dataIndex);
                  
              record.set(dataIndex, checked);
              this.fireEvent('checkchange', this, recordIndex, checked);
              // cancel selection.
              return false;
          } else {
              return this.callParent(arguments);
          }
      },
  
      // Note: class names are not placed on the prototype bc renderer scope
      // is not in the header.
      renderer : function(value){
          var cssPrefix = Ext.baseCSSPrefix,
              cls = [cssPrefix + 'grid-checkheader'];
  
          if (value) {
              cls.push(cssPrefix + 'grid-checkheader-checked');
          }
          return '<div class="' + cls.join(' ') + '">&#160;</div>';
      }
  });