3 <title>The source code</title>
\r
4 <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
\r
5 <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
\r
7 <body onload="prettyPrint();">
\r
8 <pre class="prettyprint lang-js">
9 Ext.ns('Ext.ux.MultiCombo');
10 <div id="method-Ext.ux.TaskBar.TaskButton-MultiCombo.Checkable"></div>/**
14 Ext.ux.MultiCombo.Checkable = function(cfg) {
17 Ext.ux.MultiCombo.Checkable.prototype = {
18 <div id="cfg-Ext.ux.TaskBar.TaskButton-checkSelector"></div>/**
19 * @cfg {String} checkSelector DomQuery config for locating checkbox
21 checkSelector: 'input[type=checkbox]',
22 <div id="cfg-Ext.ux.TaskBar.TaskButton-itemSelector"></div>/**
23 * @cfg {String} itemSelector The itemSelector used with Combo's internal DataView [x-combo-list]
25 itemSelector : 'x-combo-list',
26 <div id="cfg-Ext.ux.TaskBar.TaskButton-cls"></div>/**
29 cls: 'combo-checkable',
30 <div id="cfg-Ext.ux.TaskBar.TaskButton-selectAllText"></div>/**
31 * @cfg {String} selectAllText The "SELECT ALL" phrase [Select All]
33 selectAllText: 'Select All',
34 <div id="cfg-Ext.ux.TaskBar.TaskButton-clearAllText"></div>/**
35 * @cfg {String} clearAllText the text to display for "clear all" link
37 clearAllText : 'clear all',
39 <div id="cfg-Ext.ux.TaskBar.TaskButton-separatorHtml"></div>/**
40 * @cfg {String} separatorHtml arbitrary html rendered after Checkable controls. Can be used to add an
41 * html separator markup.
45 // private {Boolean} checked
48 init : function(combo) {
52 var cls = combo.itemSelector || this.itemSelector;
55 combo.tpl =['<tpl for=".">','<div class="'+cls+'-item">{'+combo.displayField+'}</div>','</tpl>'] . join('');
58 '<div class="plugin ' + this.cls + '">',
59 '<span class="' + this.cls + '-select-all">',
60 '<input id="'+id+'" type="checkbox" /> <label>'+this.selectAllText+'</label>',
62 ' <span class="'+this.cls+'-clear-all">(<a href="#">' + this.clearAllText + '</a>)</span>',
65 ].join('') + combo.tpl.replace(new RegExp('({'+combo.displayField+'})'), "<input type=\"checkbox\" <tpl if=\"values._checked\">checked</tpl> /> <label>$1</label>");
67 combo.on('initview', function(c, dv) {
68 dv.on('containerclick', this.onContainerClick.createDelegate(this));
69 dv.on('selectionchange', this.onSelectionChange.createDelegate(this));
70 dv.el.on('mouseover', this.onViewOver, this);
72 combo.on('select', this.onSelect.createDelegate(this));
75 onViewOver : function(ev, node){
76 var target = ev.getTarget('.' + this.cls, 5);
78 this.combo.clearHighlight();
79 Ext.fly(target).addClass(this.combo.highlightClass);
81 if(this.inKeyMode){ // prevent key nav and mouse over conflicts
87 onSelect : function(rec, index) {
91 <div id="method-Ext.ux.TaskBar.TaskButton-getCheckbox"></div>/**
95 getCheckbox : function() {
96 return this.combo.view.el.child('.'+this.cls+' '+this.checkSelector, true);
99 <div id="method-Ext.ux.TaskBar.TaskButton-onSelectionChange"></div>/**
100 * onSelectChange Fired by MultiCombo
104 onSelectionChange : function(dv, rs) {
105 this.checked = (rs.length > 0 && rs.length == this.combo.store.getCount()) ? true : false;
106 this.getCheckbox().checked = this.checked;
108 var selector = this.checkSelector;
109 setTimeout(function() {
110 dv.el.select(dv.itemSelector + ' ' + selector).each(function(f) {
111 f.dom.checked = false;
113 dv.el.select('.' + dv.selectedClass + ' ' + selector).each(function(f) {
114 f.dom.checked = true;
119 <div id="method-Ext.ux.TaskBar.TaskButton-selectNext"></div>/**
120 * selectNext Called by MultiCombo. use this to apply hover-class to this row.
121 * @param {Object} sender
123 selectNext: function(sender) {
124 sender.view.el.child('.' + this.cls).addClass(sender.highlightClass);
127 <div id="method-Ext.ux.TaskBar.TaskButton-selectPrev"></div>/**
128 * selectPrev Called by MultiCombo, use this to apply hover class to row.
129 * @param {Object} sender
131 selectPrev : function(sender) {
132 sender.view.el.child('.' + this.cls).addClass(sender.highlightClass);
135 <div id="method-Ext.ux.TaskBar.TaskButton-onEnter"></div>/**
136 * onEnter Called by MultiCombo
137 * @param {Object} sender
139 onEnter : function(sender) {
140 this.setChecked(!this.checked);
143 <div id="method-Ext.ux.TaskBar.TaskButton-onContainerClick"></div>/**
144 * onContainerClick Fired by MultiCombo
148 onContainerClick : function(dv, ev) {
149 var btnClearAll = ev.getTarget('.'+this.cls+'-clear-all');
154 this.setChecked(!this.checked);
160 selectAll : function() {
162 this.combo.store.each(function(r) { value.push(r.data[this.combo.valueField]); },this);
163 this.combo.setValue(value);
164 this.combo.selectByValue(this.combo.getValue());
169 clearAll : function() {
170 this.combo.updateValue([]);
171 this.combo.selectByValue([]);
172 this.combo.view.clearSelections();
174 this.combo.fireEvent('clearall', this.combo);
177 <div id="method-Ext.ux.TaskBar.TaskButton-setChecked"></div>/**
181 setChecked : function(v) {
182 if (v == this.checked) {
186 this.getCheckbox().checked = this.checked;
187 if (this.checked == true) {