Roo/form/ComboCheck.js
[roojs1] / Roo / form / ComboCheck.js
1 /*
2  * RooJS Library 1.1.1
3  * Copyright(c) 2008-2011  Alan Knowles
4  *
5  * License - LGPL
6  */
7  
8
9 /**
10  * @class Roo.form.ComboCheck
11  * @extends Roo.form.ComboBox
12  * A combobox for multiple select items.
13  * @constructor
14  * Create a new ComboCheck
15  * @param {Object} config Configuration options
16  */
17 Roo.form.ComboCheck = function(config){
18     Roo.form.ComboCheck.superclass.constructor.call(this, config);
19     // should verify some data...
20     // like
21     // hiddenName = required..
22     // displayField = required
23     // valudField == required
24     var req= [ 'hiddenName', 'displayField', 'valueField' ];
25     var _t = this;
26     Roo.each(req, function(e) {
27         if ((typeof(_t[e]) == 'undefined' ) || !_t[e].length) {
28             throw "Roo.form.ComboCheck : missing value for: " + e;
29         }
30     })
31     
32    
33 };
34
35 Roo.extend(Roo.form.ComboCheck, Roo.form.ComboBox, {
36      
37      
38     editable : false,
39      
40     selectedClass: 'x-menu-item-checked', 
41     
42     // private
43     onRender : function(ct, position){
44         var _t = this;
45         
46         
47         
48         if(!this.tpl){
49             var cls = 'x-combo-list';
50
51             
52             this.tpl =  new Roo.Template({
53                 html :  '<div class="'+cls+'-item x-menu-check-item">' +
54                    '<img class="x-menu-item-icon" style="margin: 0px;" src="' + Roo.BLANK_IMAGE_URL + '">' + 
55                    '<span>{' + this.displayField + '}</span>' +
56                     '</div>' 
57                 
58             });
59         }
60  
61         
62         Roo.form.ComboCheck.superclass.onRender.call(this, ct, position);
63         this.view.singleSelect = false;
64         this.view.multiSelect = true;
65         this.view.toggleSelect = true;
66         this.pageTb.add(new Roo.Toolbar.Fill(), {
67             
68             text: 'Done',
69             handler: function()
70             {
71                 _t.collapse();
72             }
73         });
74     },
75     
76     onViewOver : function(e, t){
77         // do nothing...
78         return;
79         
80     },
81     
82     onViewClick : function(doFocus,index){
83         return;
84         
85     },
86     select: function () {
87         Roo.log("SELECT CALLED");
88     },
89     /*
90     onLoad: function() {
91         if(!this.hasFocus){
92             return;
93         }
94         if(!this.store.getCount()){
95             this.onEmptyResults();
96             return;
97         }
98         this.expand();
99         this.restrictHeight();
100         // 
101         
102         if(!this.selectByValue(this.value, true)){
103             this.select(0, true);
104         }
105      
106         
107         
108     },
109     */
110     selectByValue : function(xv, scrollIntoView){
111         var ar = this.getValueArray();
112         var sels = [];
113         
114         Roo.each(ar, function(v) {
115             if(v === undefined || v === null){
116                 return;
117             }
118             var r = this.findRecord(this.valueField, v);
119             if(r){
120                 sels.push(this.store.indexOf(r))
121                 
122             }
123         },this);
124         
125         return false;
126     },
127     
128     
129     
130     onSelect : function(record, index){
131         Roo.log("onselect Called");
132        // this is only called by the clear button now..
133        this.view.clearSelections();
134     },
135     getValueArray : function()
136     {
137         var ar = [] ;
138         try {
139             var ar = Roo.decode(this.value);
140             return  ar instanceof Array ? ar : []; //?? valid?
141             
142         } catch(e) {
143             Roo.log(e + "\nRoo.form.ComboCheck:getValueArray  invalid data:" + this.getValue());
144             return [];
145         }
146          
147     },
148     
149     
150     collapse : function(){
151         Roo.form.ComboCheck.superclass.collapse.call(this);
152         var sl = this.view.getSelectedIndexes();
153         var st = this.store;
154         var nv = [];
155         var tv = [];
156         var r;
157         Roo.each(sl, function(i) {
158             r = st.getAt(i);
159             nv.push(r.get(this.valueField));
160         },this);
161         this.setValue(Roo.encode(nv))
162         
163     },
164     
165     setValue : function(v){
166         // Roo.log(v);
167         this.value = v;
168         
169         var vals = this.getValueArray();
170         var tv = [];
171         Roo.each(vals, function(k) {
172             var r = this.findRecord(this.valueField, k);
173             if(r){
174                 tv.push(r.data[this.displayField]);
175             }else if(this.valueNotFoundText !== undefined){
176                 tv.push( this.valueNotFoundText );
177             }
178         },this);
179        // Roo.log(tv);
180         
181         Roo.form.ComboBox.superclass.setValue.call(this, tv.join(', '));
182         this.hiddenField.value = v;
183         this.value = v;
184     }
185     
186 });