Merge pull request #2013 from ONLYOFFICE/feature/multiselect-for-DataView
Multiselect for data view
This commit is contained in:
commit
fcba6435a9
|
@ -393,18 +393,36 @@ define([
|
||||||
|
|
||||||
if (suspendEvents)
|
if (suspendEvents)
|
||||||
this.suspendEvents();
|
this.suspendEvents();
|
||||||
|
this.extremeSeletedRec = record;
|
||||||
if (!this.multiSelect) {
|
if (!this.multiSelect || ( !this.pressedShift && !this.pressedCtrl) || !this.currentSelectedRec || (this.pressedShift && this.currentSelectedRec == record)) {
|
||||||
_.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.currentSelectedRec = record;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (record)
|
if (record) {
|
||||||
record.set({selected: !record.get('selected')});
|
if(this.pressedCtrl) {
|
||||||
|
record.set({selected: !record.get('selected')});
|
||||||
|
this.currentSelectedRec = record;
|
||||||
|
}
|
||||||
|
else if(this.pressedShift){
|
||||||
|
var me =this;
|
||||||
|
var inRange=false;
|
||||||
|
_.each(me.store.models, function(rec){
|
||||||
|
if(me.currentSelectedRec == rec || record == rec){
|
||||||
|
inRange = !inRange;
|
||||||
|
rec.set({selected: true});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rec.set({selected: (inRange)});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (suspendEvents)
|
if (suspendEvents)
|
||||||
|
@ -708,13 +726,22 @@ 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(this.multiSelect) {
|
||||||
|
if (data.keyCode == Common.UI.Keys.CTRL) {
|
||||||
|
this.pressedCtrl = true;
|
||||||
|
} else if (data.keyCode == Common.UI.Keys.SHIFT) {
|
||||||
|
this.pressedShift = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_.indexOf(this.moveKeys, data.keyCode)>-1 || data.keyCode==Common.UI.Keys.RETURN) {
|
||||||
data.preventDefault();
|
data.preventDefault();
|
||||||
data.stopPropagation();
|
data.stopPropagation();
|
||||||
var rec = this.getSelectedRec();
|
var rec =(this.multiSelect) ? this.extremeSeletedRec : 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;
|
||||||
|
@ -724,6 +751,7 @@ define([
|
||||||
if (this.parentMenu)
|
if (this.parentMenu)
|
||||||
this.parentMenu.hide();
|
this.parentMenu.hide();
|
||||||
} else {
|
} else {
|
||||||
|
this.pressedCtrl=false;
|
||||||
var idx = _.indexOf(this.store.models, rec);
|
var idx = _.indexOf(this.store.models, rec);
|
||||||
if (idx<0) {
|
if (idx<0) {
|
||||||
if (data.keyCode==Common.UI.Keys.LEFT) {
|
if (data.keyCode==Common.UI.Keys.LEFT) {
|
||||||
|
@ -804,12 +832,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));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -819,7 +855,11 @@ define([
|
||||||
this.scrollToRecord(this.lastSelectedRec);
|
this.scrollToRecord(this.lastSelectedRec);
|
||||||
this.lastSelectedRec = null;
|
this.lastSelectedRec = null;
|
||||||
} else {
|
} else {
|
||||||
this.scrollToRecord(this.getSelectedRec());
|
var selectedRec = this.getSelectedRec();
|
||||||
|
if (!this.multiSelect)
|
||||||
|
this.scrollToRecord(selectedRec);
|
||||||
|
else if(selectedRec && selectedRec.length > 0)
|
||||||
|
this.scrollToRecord(selectedRec[selectedRec.length - 1]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,7 @@ define([ 'text!spreadsheeteditor/main/app/template/WatchDialog.template',
|
||||||
|
|
||||||
this.watchList = new Common.UI.ListView({
|
this.watchList = new Common.UI.ListView({
|
||||||
el: $('#watch-dialog-list', this.$window),
|
el: $('#watch-dialog-list', this.$window),
|
||||||
|
multiSelect: true,
|
||||||
store: new Common.UI.DataViewStore(),
|
store: new Common.UI.DataViewStore(),
|
||||||
simpleAddMode: true,
|
simpleAddMode: true,
|
||||||
itemTemplate: _.template([
|
itemTemplate: _.template([
|
||||||
|
@ -191,7 +192,8 @@ define([ 'text!spreadsheeteditor/main/app/template/WatchDialog.template',
|
||||||
if (this._deletedIndex!==undefined) {
|
if (this._deletedIndex!==undefined) {
|
||||||
var store = this.watchList.store;
|
var store = this.watchList.store;
|
||||||
(store.length>0) && this.watchList.selectByIndex(this._deletedIndex<store.length ? this._deletedIndex : store.length-1);
|
(store.length>0) && this.watchList.selectByIndex(this._deletedIndex<store.length ? this._deletedIndex : store.length-1);
|
||||||
this.watchList.scrollToRecord(this.watchList.getSelectedRec());
|
var selectedRec = this.watchList.getSelectedRec();
|
||||||
|
(selectedRec && selectedRec.length > 0) && this.watchList.scrollToRecord(selectedRec[0]);
|
||||||
this._fromKeyDown && this.watchList.focus();
|
this._fromKeyDown && this.watchList.focus();
|
||||||
this._fromKeyDown = false;
|
this._fromKeyDown = false;
|
||||||
this._deletedIndex=undefined;
|
this._deletedIndex=undefined;
|
||||||
|
@ -228,10 +230,15 @@ define([ 'text!spreadsheeteditor/main/app/template/WatchDialog.template',
|
||||||
},
|
},
|
||||||
|
|
||||||
onDeleteWatch: function() {
|
onDeleteWatch: function() {
|
||||||
|
var me = this;
|
||||||
var rec = this.watchList.getSelectedRec();
|
var rec = this.watchList.getSelectedRec();
|
||||||
if (rec) {
|
if (rec) {
|
||||||
this._deletedIndex = this.watchList.store.indexOf(rec);
|
var props=[];
|
||||||
this.api.asc_deleteCellWatches([rec.get('props')]);
|
_.each(rec, function (r, i) {
|
||||||
|
me._deletedIndex = me.watchList.store.indexOf(r)-props.length;
|
||||||
|
props[i] =r.get('props');
|
||||||
|
});
|
||||||
|
this.api.asc_deleteCellWatches(props);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -254,7 +261,8 @@ define([ 'text!spreadsheeteditor/main/app/template/WatchDialog.template',
|
||||||
},
|
},
|
||||||
|
|
||||||
updateButtons: function() {
|
updateButtons: function() {
|
||||||
this.btnDelete.setDisabled(this.watchList.store.length<1 || !this.watchList.getSelectedRec());
|
var rec = this.watchList.getSelectedRec();
|
||||||
|
this.btnDelete.setDisabled(!(rec && rec.length>0));
|
||||||
this.watchList.scroller && this.watchList.scroller.update({alwaysVisibleY: true});
|
this.watchList.scroller && this.watchList.scroller.update({alwaysVisibleY: true});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue