+ _set_checkbox: function(record, checked) {
+ /* Default: checked = true */
+ if (checked === undefined) checked = true;
+
+ var id;
+ /* The function accepts both records and their key */
+ switch (manifold.get_type(record)) {
+ case TYPE_VALUE:
+ id = record;
+ break;
+ case TYPE_RECORD:
+ /* XXX Test the key before ? */
+ id = record[this.key];
+ break;
+ default:
+ throw "Not implemented";
+ break;
+ }
+
+
+ if (id === undefined) {
+ messages.warning("querytable._set_checkbox record has no id to figure which line to tick");
+ return;
+ }
+ var index = this.slick_dataview.getIdxById(id);
+ var selectedRows=this.slick_grid.getSelectedRows();
+ if (checked) // add index in current list
+ selectedRows=selectedRows.concat(index);
+ else // remove index from current list
+ selectedRows=selectedRows.filter(function(idx) {return idx!=index;});
+ this.slick_grid.setSelectedRows(selectedRows);
+ },
+
+// initializing checkboxes
+// have tried 2 approaches, but none seems to work as we need it
+// issue summarized in here
+// http://stackoverflow.com/questions/20425193/slickgrid-selection-changed-callback-how-to-tell-between-manual-and-programmat
+ // arm the click callback on checkboxes
+ _init_checkboxes_manual : function () {
+ // xxx looks like checkboxes can only be the last column??
+ var checkbox_col = this.slick_grid.getColumns().length-1; // -1 +1 =0
+ console.log ("checkbox_col="+checkbox_col);
+ var self=this;
+ console.log ("HERE 1 with "+this.slick_dataview.getLength()+" sons");
+ for (var index=0; index < this.slick_dataview.getLength(); index++) {
+ // retrieve key (i.e. hrn) for this line
+ var key=this.slick_dataview.getItem(index)[this.key];
+ // locate cell <div> for the checkbox
+ var div=this.slick_grid.getCellNode(index,checkbox_col);
+ if (index <=30) console.log("HERE2 div",div," index="+index+" col="+checkbox_col);
+ // arm callback on single son of <div> that is the <input>
+ $(div).children("input").each(function () {
+ if (index<=30) console.log("HERE 3, index="+index+" key="+key);
+ $(this).click(function() {self._checkbox_clicked(self,this,key);});
+ });
+ }
+ },
+
+ // onSelectedRowsChanged will fire even when
+ _init_checkboxes : function () {
+ console.log("_init_checkboxes");
+ var grid=this.slick_grid;
+ this.slick_grid.onSelectedRowsChanged.subscribe(function(){
+ row_ids = grid.getSelectedRows();
+ console.log(row_ids);
+ });
+ },
+
+ // the callback for when user clicks
+ _checkbox_clicked: function(querytable,input,key) {
+ // XXX this.value = key of object to be added... what about multiple keys ?
+ if (debug) messages.debug("querytable click handler checked=" + input.checked + " key=" + key);
+ manifold.raise_event(querytable.options.query_uuid, input.checked?SET_ADD:SET_REMOVED, key);
+ //return false; // prevent checkbox to be checked, waiting response from manifold plugin api
+
+ },
+
+ // xxx from this and down, probably needs further tweaks for slickgrid
+