[SSE] Add/remove rules

This commit is contained in:
Julia Radzhabova 2021-01-28 18:21:07 +03:00
parent 2daa2b013c
commit 30ebb561e6
2 changed files with 96 additions and 39 deletions

View file

@ -1487,7 +1487,7 @@ define([
langId: value, langId: value,
handler: function (result, settings) { handler: function (result, settings) {
if (me && me.api && result=='ok') { if (me && me.api && result=='ok') {
me.api.asc_setCF(settings); me.api.asc_setCF(settings.rules, settings.deleted);
} }
} }
})).show(); })).show();

View file

@ -109,8 +109,9 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa
this.props = options.props; this.props = options.props;
this.langId = options.langId; this.langId = options.langId;
this.rules = []; this.rules = [];
this.rulesStores = {};
this.rulesStore = new Common.UI.DataViewStore(); this.rulesDeleted = [];
this.listSettings = {length: 0, min: 0, max: 0};
Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options); Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options);
}, },
@ -191,22 +192,22 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa
_setDefaults: function (props) { _setDefaults: function (props) {
this.rulesList.on('item:add', _.bind(this.addControls, this)); this.rulesList.on('item:add', _.bind(this.addControls, this));
this.rulesList.on('item:change', _.bind(this.addControls, this)); this.rulesList.on('item:change', _.bind(this.addControls, this));
this.currentSheet = this.api.asc_getActiveWorksheetIndex();
this.refreshScopeList(); this.refreshScopeList();
this.refreshRuleList(this.cmbScope.getSelectedRecord()); this.refreshRuleList(this.cmbScope.getSelectedRecord());
}, },
refreshScopeList: function() { refreshScopeList: function() {
var wc = this.api.asc_getWorksheetsCount(), i = -1, var wc = this.api.asc_getWorksheetsCount(), i = -1;
currentSheet = this.api.asc_getActiveWorksheetIndex();
var items = [ var items = [
{ value: Asc.c_oAscSelectionForCFType.selection, displayValue: this.textSelection }, { value: Asc.c_oAscSelectionForCFType.selection, displayValue: this.textSelection, sheetIndex: -1 },
{ value: Asc.c_oAscSelectionForCFType.worksheet, displayValue: this.textThisSheet, sheetIndex: currentSheet }, { value: Asc.c_oAscSelectionForCFType.worksheet, displayValue: this.textThisSheet, sheetIndex: -1 },
{ value: Asc.c_oAscSelectionForCFType.table, displayValue: this.textThisTable }, { value: Asc.c_oAscSelectionForCFType.table, displayValue: this.textThisTable, sheetIndex: -1 },
{ value: Asc.c_oAscSelectionForCFType.pivot, displayValue: this.textThisPivot } { value: Asc.c_oAscSelectionForCFType.pivot, displayValue: this.textThisPivot, sheetIndex: -1 }
]; ];
if (wc>1) { if (wc>1) {
while (++i < wc) { while (++i < wc) {
if (!this.api.asc_isWorksheetHidden(i) && i!==currentSheet) { if (!this.api.asc_isWorksheetHidden(i) && i!==this.currentSheet) {
items.push({ items.push({
displayValue:this.api.asc_getWorksheetName(i), displayValue:this.api.asc_getWorksheetName(i),
value: Asc.c_oAscSelectionForCFType.worksheet, value: Asc.c_oAscSelectionForCFType.worksheet,
@ -222,7 +223,13 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa
refreshRuleList: function(scope) { refreshRuleList: function(scope) {
this.rules = []; this.rules = [];
var obj = this.api.asc_getCF(scope.value, (scope.value==Asc.c_oAscSelectionForCFType.worksheet) ? scope.sheetIndex : undefined); var sheetIndex = (scope.sheetIndex>-1) ? scope.sheetIndex : this.currentSheet;
var ruleStore = this.rulesStores[sheetIndex];
if (!ruleStore) {
ruleStore = new Common.UI.DataViewStore();
this.rulesStores[sheetIndex] = ruleStore;
var obj = this.api.asc_getCF(Asc.c_oAscSelectionForCFType.worksheet, sheetIndex);
var rules = obj[0]; var rules = obj[0];
this.currentRange = obj[1]; this.currentRange = obj[1];
var arr = []; var arr = [];
@ -232,19 +239,31 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa
name = this.getRuleName(rule), name = this.getRuleName(rule),
location = rule.asc_getLocation(); location = rule.asc_getLocation();
arr.push({ arr.push({
ruleIndex: i, ruleIndex: i, // connect store and list with controls. is not changed
ruleId: rule.asc_getId(), ruleId: rule.asc_getId(),
name: name, name: name,
tip: name, tip: name,
range: location[1], range: location[1],
activeSheet: location[0], activeSheet: location[0],
priority: rule.asc_getPriority(), // priority of the rule, is changed when move or when new rule is added
ruleChanged: false, // true if was edited in FormatRulesEditDlg or was created, need to send this rule to sdk if true
props: rule props: rule
}); });
} }
} }
this.rulesList.store.reset(arr); ruleStore.reset(arr);
(this.rulesList.store.length>0) && this.rulesList.selectByIndex(0); }
if (sheetIndex == this.currentSheet) {
ruleStore.each(function(item){
var hidden = scope.value!==Asc.c_oAscSelectionForCFType.worksheet && !item.get('props').asc_checkScope(scope.value);
item.set('cls', hidden ? 'hidden' : undefined);
});
}
this.rulesList.setStore(ruleStore);
this.rulesList.onResetItems();
this.rulesList.deselectAll();
this.updateRulesCount();
(this.listSettings.length>0) && this.rulesList.selectByIndex(this.listSettings.min);
this.updateButtons(); this.updateButtons();
}, },
@ -503,6 +522,7 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa
if (isEdit) { if (isEdit) {
rec.set('name', name); rec.set('name', name);
rec.set('tip', name); rec.set('tip', name);
rec.set('ruleChanged', true);
rec.set('props', settings); rec.set('props', settings);
previewRec = rec; previewRec = rec;
} else { } else {
@ -515,8 +535,13 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa
tip: name, tip: name,
range: me.currentRange, range: me.currentRange,
activeSheet: true, activeSheet: true,
ruleChanged: true,
props: settings props: settings
}, {at: index}); }, {at: index});
me.updateRulesCount();
me.rulesList.selectRecord(previewRec);
me.updateButtons();
// need to update priorities
} }
} }
} }
@ -533,11 +558,14 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa
var store = this.rulesList.store, var store = this.rulesList.store,
rec = this.rulesList.getSelectedRec(); rec = this.rulesList.getSelectedRec();
if (rec) { if (rec) {
var id = rec.get('ruleId');
(id!==undefined) && this.rulesDeleted.push(id);
var index = rec.get('ruleIndex'); var index = rec.get('ruleIndex');
this.rules[index] = undefined; this.rules[index] = undefined;
index = store.indexOf(rec); index = store.indexOf(rec);
store.remove(rec); store.remove(rec);
(store.length>0) && this.rulesList.selectByIndex(index<store.length ? index : store.length-1); this.updateRulesCount();
(this.listSettings.length>0) && this.rulesList.selectByIndex(index<=this.listSettings.max ? index : this.listSettings.max);
this.rulesList.scrollToRecord(this.rulesList.getSelectedRec()); this.rulesList.scrollToRecord(this.rulesList.getSelectedRec());
} }
this.updateButtons(); this.updateButtons();
@ -550,6 +578,7 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa
if (rec) { if (rec) {
var index = store.indexOf(rec); var index = store.indexOf(rec);
store.add(store.remove(rec), {at: up ? Math.max(0, index-1) : Math.min(length-1, index+1)}); store.add(store.remove(rec), {at: up ? Math.max(0, index-1) : Math.min(length-1, index+1)});
// need to update priorities
this.rulesList.selectRecord(rec); this.rulesList.selectRecord(rec);
this.rulesList.scrollToRecord(rec); this.rulesList.scrollToRecord(rec);
} }
@ -562,8 +591,8 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa
updateButtons: function() { updateButtons: function() {
this.btnNew.setDisabled(this.rulesList.store.length>63); this.btnNew.setDisabled(this.rulesList.store.length>63);
this.btnDelete.setDisabled(this.rulesList.store.length<1); this.btnDelete.setDisabled(this.listSettings.length<1);
this.btnEdit.setDisabled(this.rulesList.store.length<1); this.btnEdit.setDisabled(this.listSettings.length<1);
this.updateMoveButtons(); this.updateMoveButtons();
this.rulesList.scroller && this.rulesList.scroller.update(); this.rulesList.scroller && this.rulesList.scroller.update();
}, },
@ -571,12 +600,40 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa
updateMoveButtons: function() { updateMoveButtons: function() {
var rec = this.rulesList.getSelectedRec(), var rec = this.rulesList.getSelectedRec(),
index = rec ? this.rulesList.store.indexOf(rec) : -1; index = rec ? this.rulesList.store.indexOf(rec) : -1;
this.btnUp.setDisabled(index<1); this.btnUp.setDisabled(index<=this.listSettings.min);
this.btnDown.setDisabled(index<0 || index==this.rulesList.store.length-1); this.btnDown.setDisabled(index<0 || index==this.listSettings.max);
},
updateRulesCount: function() {
var store = this.rulesList.store;
if (this.cmbScope.getValue() == Asc.c_oAscSelectionForCFType.worksheet) {
this.listSettings = {length: store.length, min: 0, max: store.length-1};
} else {
this.listSettings = {length: 0, min: -1, max: 0};
for (var i=0; i<store.length; i++) {
if (store.at(i).get('cls')!=='hidden') {
this.listSettings.length++;
this.listSettings.max = i;
(this.listSettings.min<0) && (this.listSettings.min=i);
}
}
}
}, },
getSettings: function() { getSettings: function() {
return this.sort; var sheets = [];
for (var sheet in this.rulesStores) {
if (this.rulesStores.hasOwnProperty(sheet)) {
var store = this.rulesStores[sheet];
var arr = [];
store && store.each(function(item) {
if (item.get('ruleChanged'))
arr.push(item.get('props'));
});
(arr.length>0) && (sheets[sheet] = arr);
}
}
return {rules: sheets, deleted: this.rulesDeleted};
}, },
onKeyDown: function (lisvView, record, e) { onKeyDown: function (lisvView, record, e) {