Author: piotr.buda
Date: 2008-11-17 06:24:50 -0500 (Mon, 17 Nov 2008)
New Revision: 11187
Modified:
trunk/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableSelection.js
Log:
onselectionchange fix
Modified:
trunk/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableSelection.js
===================================================================
---
trunk/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableSelection.js 2008-11-17
11:23:41 UTC (rev 11186)
+++
trunk/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableSelection.js 2008-11-17
11:24:50 UTC (rev 11187)
@@ -118,6 +118,18 @@
isSelected: function(id) {
return s.isSelectedId(id);
+ },
+
+ equals: function(state) {
+ var equal = s.size() == state.size();
+ if(equal) {
+ s.each(function(id) {
+ if(equal) {
+ equal = state.isSelected(id);
+ }
+ });
+ }
+ return equal;
}
};
},
@@ -167,7 +179,18 @@
var ret = "";
ranges.each( function(r) { ret += r.inspect(); } );
return ret;
- }
+ },
+
+ /**
+ Compares states and returns true if they are different
+ */
+ isChanged: function(state1, state2) {
+ return !state1.equals(state2);
+ },
+
+ isInRange: function(range, selection) {
+ return selection >= range[0] && selection <= range[1];
+ }
});
@@ -555,13 +578,24 @@
this.selectionChanged(event);
},
+ /**
+ Changes the saved state of the selection and fires
+ the onselectionchange event if selection is changed.
+ The function that is passed as onselectionchange event
+ accepts an event parameter that contains both old and new selections
+ */
selectionChanged: function(event) {
- $(this.inputElement).value = this.selection.inspectRanges() + this.activeRow +
";" + (this.selectionFlag ? this.selectionFlag : "") ;
+ $(this.inputElement).value = this.selection.inspectRanges()
+ + this.activeRow + ";"
+ + (this.selectionFlag ? this.selectionFlag :
"");
var state = this.selection.getState();
event.oldSelection = this.oldState;
- event.newSelection = state;
- if(this.onselectionchange) this.onselectionchange(event);
- this.oldState = state;
+ event.newSelection = state; //save the new state for processing
+ if(this.onselectionchange //event is defined
+ && this.selection.isChanged(this.oldState, state)) { //selection
actualy changed
+ this.onselectionchange(event);
+ }
+ this.oldState = state; //remember current state
},
setShiftRow: function(event) {
Show replies by date