add: };  if (isNotValid(r._data)) { this.debug("Not a valid row: " + r); return; 
context: proto._onclick = function(e){  // HANDLE CURRENT CONTEXT MENU  // -----------------------------------------------------  if (this.getContextMenu()) {    this.getContextMenu().setVisible(false);  };  // FIND MATCHING ENTRY ROW  // -----------------------------------------------------  var r = e.getDomTarget();  var m = this.getElement();  while(r != m && (r.nodeType != 1 || r.tagName != "TR")) {    if (r.tagName == "TH") {      return;    };    r = r.parentNode;  };  // PREPARE  // -----------------------------------------------------  var rowPosition = r._data.pos;  var oldSelection = this.getSelection();  var newSelection = {};  // keep current selection  if (e.getCtrlKey()){    for (var i in oldSelection) {      newSelection[i] = oldSelection[i];    };  };  // HANDLE SHIFT KEY  // -----------------------------------------------------  if (e.getShiftKey())  {    if (this._lastSelect == null) {      return;    };    if (rowPosition < this._lastSelect) {      var istart = rowPosition, istop = this._lastSelect;    } else {      var istart = this._lastSelect, istop = rowPosition;    };    for (var i=istart; i<=istop; i++) {      newSelection[i] = true;    };  }  // HANDLE DEFAULT FLOW  // -----------------------------------------------------  else  {    if (e.getCtrlKey() && newSelection[rowPosition]) {      delete newSelection[rowPosition];    }    else    {      newSelection[rowPosition] = true;      this._lastSelect = rowPosition;    };  };  // SET NEW SELECTION  // -----------------------------------------------------  this.setSelection(newSelection, oldSelection);};
meta: 1005	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/1005/c38c7f49bdb65b660049c3026db0001850b8f485/QxListView.js/clean/qooxdoo/source/script/widgets/QxListView.js