fix multiselect

This commit is contained in:
OVSharova 2022-10-03 02:49:31 +03:00
parent b4950b3681
commit caeae837e0

View file

@ -394,17 +394,47 @@ define([
if (suspendEvents) if (suspendEvents)
this.suspendEvents(); this.suspendEvents();
if (!this.multiSelect) { if (!this.multiSelect || ( !this.pressedShift && !this.pressedCtrl)) {
_.each(this.store.where({selected: true}), function(rec){ _.each(this.store.where({selected: true}), function(rec){
rec.set({selected: false}); rec.set({selected: false});
}); });
if (record) { if (record) {
record.set({selected: true}); record.set({selected: true});
this.lastSelectedRec = record;
} }
} else { } else {
if (record) if (record) {
record.set({selected: !record.get('selected')}); if(this.pressedCtrl) {
record.set({selected: !record.get('selected')});
this.lastSelectedRec = record;
}
else if(this.pressedShift){
var me =this;
var inRange=false, rec;
_.each(me.store.models, function(rec){
if(me.lastSelectedRec == rec || record == rec){
inRange = !inRange;
rec.set({selected: true});
}
else {
rec.set({selected: (inRange)});
}
});
/*for( var i =0; i < this.store.length; i++)
{
rec=this.store.models[i];
if(this.lastSelectedRec == rec || record == rec){
inRange = !inRange;
rec.set({selected: true});
}
else {
rec.set({selected: (inRange)});
}
}*/
}
}
} }
if (suspendEvents) if (suspendEvents)
@ -590,7 +620,7 @@ define([
this.setDisabled(this.disabled); this.setDisabled(this.disabled);
this.attachKeyEvents(); this.attachKeyEvents();
this.lastSelectedRec = null; //this.lastSelectedRec = null;
this._layoutParams = undefined; this._layoutParams = undefined;
}, },
@ -648,7 +678,7 @@ define([
} }
} }
} }
this.lastSelectedRec = null; //this.lastSelectedRec = null;
var tip = view.$el.data('bs.tooltip'); var tip = view.$el.data('bs.tooltip');
if (tip) (tip.tip()).remove(); if (tip) (tip.tip()).remove();
@ -666,7 +696,7 @@ define([
window._event = e; // for FireFox only window._event = e; // for FireFox only
if (this.showLast) this.selectRecord(record); if (this.showLast) this.selectRecord(record);
this.lastSelectedRec = null; //this.lastSelectedRec = null;
if (!this.isSuspendEvents) { if (!this.isSuspendEvents) {
this.trigger('item:dblclick', this, view, record, e); this.trigger('item:dblclick', this, view, record, e);
@ -708,14 +738,14 @@ define([
onKeyDown: function (e, data) { onKeyDown: function (e, data) {
if ( this.disabled ) return; if ( this.disabled ) return;
if (data===undefined) data = e; if (data===undefined) data = e;
if (_.indexOf(this.moveKeys, data.keyCode)>-1 || data.keyCode==Common.UI.Keys.RETURN) { if (_.indexOf(this.moveKeys, data.keyCode)>-1 || data.keyCode==Common.UI.Keys.RETURN || data.keyCode==Common.UI.Keys.CTRL ||data.keyCode==Common.UI.Keys.SHIFT) {
data.preventDefault(); data.preventDefault();
data.stopPropagation(); data.stopPropagation();
var rec = this.getSelectedRec(); var rec = this.getSelectedRec();
if (this.lastSelectedRec===null) /*if (this.lastSelectedRec === null)
this.lastSelectedRec = rec; this.lastSelectedRec = rec;*/
if (data.keyCode==Common.UI.Keys.RETURN) { if (data.keyCode == Common.UI.Keys.RETURN) {
this.lastSelectedRec = null; //this.lastSelectedRec = null;
if (this.selectedBeforeHideRec) // only for ComboDataView menuPicker if (this.selectedBeforeHideRec) // only for ComboDataView menuPicker
rec = this.selectedBeforeHideRec; rec = this.selectedBeforeHideRec;
this.trigger('item:click', this, this, rec, e); this.trigger('item:click', this, this, rec, e);
@ -723,6 +753,14 @@ define([
this.trigger('entervalue', this, rec, e); this.trigger('entervalue', this, rec, e);
if (this.parentMenu) if (this.parentMenu)
this.parentMenu.hide(); this.parentMenu.hide();
}
else if(this.multiSelect) {
if (data.keyCode==Common.UI.Keys.CTRL){
this.pressedCtrl = true;
}
else if(data.keyCode==Common.UI.Keys.SHIFT){
this.pressedShift = true;
}
} else { } else {
var idx = _.indexOf(this.store.models, rec); var idx = _.indexOf(this.store.models, rec);
if (idx<0) { if (idx<0) {
@ -804,12 +842,20 @@ define([
} }
}, },
onKeyUp: function(e){
if(e.keyCode == Common.UI.Keys.SHIFT)
this.pressedShift = false;
if(e.keyCode == Common.UI.Keys.CTRL)
this.pressedCtrl = false;
},
attachKeyEvents: function() { attachKeyEvents: function() {
if (this.enableKeyEvents && this.handleSelect) { if (this.enableKeyEvents && this.handleSelect) {
var el = $(this.el).find('.inner').addBack().filter('.inner'); var el = $(this.el).find('.inner').addBack().filter('.inner');
el.addClass('canfocused'); el.addClass('canfocused');
el.attr('tabindex', this.tabindex.toString()); el.attr('tabindex', this.tabindex.toString());
el.on((this.parentMenu && this.useBSKeydown) ? 'dataview:keydown' : 'keydown', _.bind(this.onKeyDown, this)); el.on((this.parentMenu && this.useBSKeydown) ? 'dataview:keydown' : 'keydown', _.bind(this.onKeyDown, this));
el.on((this.parentMenu && this.useBSKeydown) ? 'dataview:keyup' : 'keyup', _.bind(this.onKeyUp, this));
} }
}, },
@ -817,7 +863,7 @@ define([
if ( this.lastSelectedRec) { if ( this.lastSelectedRec) {
this.selectRecord(this.lastSelectedRec, true); this.selectRecord(this.lastSelectedRec, true);
this.scrollToRecord(this.lastSelectedRec); this.scrollToRecord(this.lastSelectedRec);
this.lastSelectedRec = null; //this.lastSelectedRec = null;
} else { } else {
this.scrollToRecord(this.getSelectedRec()); this.scrollToRecord(this.getSelectedRec());
} }