Skip to content

Commit

Permalink
Feature/bug 42972 (#2858)
Browse files Browse the repository at this point in the history
* [se] Fix bug 42972
  • Loading branch information
GoshaZotov authored Jul 4, 2022
1 parent ab1ec83 commit f3519cc
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 2 deletions.
36 changes: 36 additions & 0 deletions cell/model/autofilters.js
Original file line number Diff line number Diff line change
Expand Up @@ -5796,6 +5796,42 @@
return res;
},

_isContainEmptyCell: function (ar) {
var range = this.worksheet.getRange3(Math.max(0, ar.r1), Math.max(0, ar.c1), ar.r2, ar.c2);
var res = false;
range._foreach2(function (cell) {
if (!cell || cell.isNullText()) {
res = true;
return true;
}
});
return res;
},

_getFirstNotEmptyCell: function (ar) {
var range = this.worksheet.getRange3(Math.max(0, ar.r1), Math.max(0, ar.c1), ar.r2, ar.c2);
var res = null;
range._foreachNoEmpty(function (cell) {
if (!cell.isNullText()) {
res = cell;
return true;
}
});
return res;
},

_getFirstEmptyCellByRow: function (startRow, startCol, endCol) {
var range = this.worksheet.getRange3(startRow, startCol, this.worksheet.cellsByColRowsCount - 1, endCol);
var res = {nRow: this.worksheet.cellsByColRowsCount, nCol: startCol};
range._foreach2(function (cell, row, col) {
if (!cell || cell.isNullText()) {
res = {nRow: row, nCol: col};
return true;
}
});
return res;
},

_setStyleTables: function (range) {
var worksheet = this.worksheet;
if (worksheet.TableParts && worksheet.TableParts.length > 0) {
Expand Down
1 change: 0 additions & 1 deletion cell/view/EventsController.js
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,6 @@

if(this.targetInfo && (this.targetInfo.target === c_oTargetType.MoveResizeRange ||
this.targetInfo.target === c_oTargetType.MoveRange ||
this.targetInfo.target === c_oTargetType.FillHandle ||
this.targetInfo.target === c_oTargetType.FilterObject ||
this.targetInfo.target === c_oTargetType.TableSelectionChange))
return true;
Expand Down
5 changes: 4 additions & 1 deletion cell/view/WorkbookView.js
Original file line number Diff line number Diff line change
Expand Up @@ -1755,7 +1755,10 @@
var ws = this.getWorksheet();
var ct = ws.getCursorTypeFromXY(x, y);

if (ct.target === c_oTargetType.ColumnResize || ct.target === c_oTargetType.RowResize) {
if (ct.target === c_oTargetType.FillHandle) {
ws.applyFillHandleDoubleClick();
asc_applyFunction(callback);
} else if (ct.target === c_oTargetType.ColumnResize || ct.target === c_oTargetType.RowResize) {
if (ct.target === c_oTargetType.ColumnResize) {
ws.autoFitColumnsWidth(ct.col);
} else {
Expand Down
56 changes: 56 additions & 0 deletions cell/view/WorksheetView.js
Original file line number Diff line number Diff line change
Expand Up @@ -11082,6 +11082,62 @@
}
};

WorksheetView.prototype.applyFillHandleDoubleClick = function () {

//1. если есть внизу расширяемых значений данные - диапазон расширяем строго по данным столбцам вниз до тех пор
//пока хотя бы одная ячейка не станет пустой в строке ниже
//2. если внизу только пустые строки - дёргае expandRange и идём до ближайшей непустой
var range;

var activeRange = this.model.selectionRange && this.model.selectionRange.getLast();
if (activeRange) {
if (activeRange.r2 === gc_nMaxRow0) {
return;
}
if (activeRange.r2 + 1 >= this.model.cellsByColRowsCount - 1) {
return;
}
//проверям следующую строку после активной
//если есть хотя бы одна пустая ячейка, то автозаполнение не применяем
var nextRowRange = new Asc.Range(activeRange.c1, activeRange.r2 + 1, activeRange.c2, activeRange.r2 + 1);
if (this.model.autoFilters._isContainEmptyCell(nextRowRange)) {

//если все пустые, то идём до ближайшей не пустой, в привном случае не применяем а/з
if (this.model.autoFilters._isEmptyRange(nextRowRange)) {
var expandRange = this.model.autoFilters.expandRange(activeRange);
if (expandRange.r2 > activeRange.r2) {
//диапазон, на который расширились
var newExpandRange = new Asc.Range(activeRange.c1, activeRange.r2 + 1, activeRange.c2, expandRange.r2);
var firstNotEmptyCell = this.model.autoFilters._getFirstNotEmptyCell(newExpandRange);
if (firstNotEmptyCell) {
if (firstNotEmptyCell.nRow > activeRange.r2) {
//берём диапазон до ближайшей пустой
range = new Asc.Range(activeRange.c1, activeRange.r1, activeRange.c2, firstNotEmptyCell.nRow - 1);
}
} else {
//берём весь расширенный диапазон
range = new Asc.Range(activeRange.c1, activeRange.r1, activeRange.c2, expandRange.r2);
}
}
}
} else {
//если все непустые, то идём до ближайшей строки, где есть хотя бы одна пустая
var firstEmptyCell = this.model.autoFilters._getFirstEmptyCellByRow(activeRange.r2, activeRange.c1, activeRange.c2);
if (firstEmptyCell && firstEmptyCell.nRow > activeRange.r1) {
range = new Asc.Range(activeRange.c1, activeRange.r1, activeRange.c2, firstEmptyCell.nRow - 1);
}
}


if (range) {
this.fillHandleDirection = 1;
//this.fillHandleArea = ;
this.activeFillHandle = range;
this.applyFillHandle();
}
}
};

/* Функция для работы перемещения диапазона (selection). (x, y) - координаты точки мыши на области
* ToDo нужно переделать, чтобы moveRange появлялся только после сдвига от текущей ячейки
*/
Expand Down

0 comments on commit f3519cc

Please sign in to comment.