Commit 2b998666 authored by Alexander.Trofimov's avatar Alexander.Trofimov

right click in multiselect

parent 300b3014
...@@ -269,7 +269,8 @@ ...@@ -269,7 +269,8 @@
}; };
Range.prototype.containsRange = function (range) { Range.prototype.containsRange = function (range) {
return this.contains(range.c1, range.r1) && this.contains(range.c2, range.r2); var allRange = this.getAllRange();
return allRange.contains(range.c1, range.r1) && allRange.contains(range.c2, range.r2);
}; };
Range.prototype.containsFirstLineRange = function (range) { Range.prototype.containsFirstLineRange = function (range) {
...@@ -585,6 +586,11 @@ ...@@ -585,6 +586,11 @@
SelectionRange.prototype.contains2 = function (cell) { SelectionRange.prototype.contains2 = function (cell) {
return this.contains(cell.col, cell.row); return this.contains(cell.col, cell.row);
}; };
SelectionRange.prototype.containsRange = function (range) {
return this.ranges.some(function (item) {
return item.containsRange(range);
});
};
SelectionRange.prototype.clone = function () { SelectionRange.prototype.clone = function () {
var res = new SelectionRange(); var res = new SelectionRange();
res.ranges = this.ranges.map(function (range) { res.ranges = this.ranges.map(function (range) {
......
...@@ -7367,74 +7367,43 @@ ...@@ -7367,74 +7367,43 @@
// Смена селекта по нажатию правой кнопки мыши // Смена селекта по нажатию правой кнопки мыши
WorksheetView.prototype.changeSelectionStartPointRightClick = function (x, y) { WorksheetView.prototype.changeSelectionStartPointRightClick = function (x, y) {
var ar = this.model.selectionRange.getLast();
var isChangeSelectionShape = this._checkSelectionShape(); var isChangeSelectionShape = this._checkSelectionShape();
this.model.workbook.handlers.trigger("asc_onHideComment"); this.model.workbook.handlers.trigger("asc_onHideComment");
// Получаем координаты левого верхнего угла выделения
var xL = this.getCellLeft(ar.c1, /*pt*/1);
var yL = this.getCellTop(ar.r1, /*pt*/1);
// Получаем координаты правого нижнего угла выделения
var xR = this.getCellLeft(ar.c2, /*pt*/1) + this.cols[ar.c2].width;
var yR = this.getCellTop(ar.r2, /*pt*/1) + this.rows[ar.r2].height;
// Пересчитываем координаты
var _x = x * asc_getcvt(0/*px*/, 1/*pt*/, this._getPPIX()); var _x = x * asc_getcvt(0/*px*/, 1/*pt*/, this._getPPIX());
var _y = y * asc_getcvt(0/*px*/, 1/*pt*/, this._getPPIY()); var _y = y * asc_getcvt(0/*px*/, 1/*pt*/, this._getPPIY());
var isInSelection = false; var val, c1, c2, r1, r2;
var offsetX = this.cols[this.visibleRange.c1].left - val = this._findColUnderCursor(_x, true);
this.cellsLeft, offsetY = this.rows[this.visibleRange.r1].top - this.cellsTop; if (val) {
var offsetFrozen = this.getFrozenPaneOffset(); c1 = c2 = val.col;
offsetX -= offsetFrozen.offsetX; } else {
offsetY -= offsetFrozen.offsetY; c1 = 0;
c2 = gc_nMaxCol0;
// Проверяем попали ли мы в выделение }
if ((_x < this.cellsLeft || _y < this.cellsTop) && c_oAscSelectionType.RangeMax === ar.type) { val = this._findRowUnderCursor(_y, true);
// Выделено все if (val) {
isInSelection = true; r1 = r2 = val.row;
} else if (_x > this.cellsLeft && _y > this.cellsTop) { } else {
// Пересчитываем X и Y относительно видимой области r1 = 0;
_x += offsetX; r2 = gc_nMaxRow0;
_y += offsetY;
if (xL <= _x && _x <= xR && yL <= _y && _y <= yR) {
// Попали в выделение ячеек
isInSelection = true;
}
} else if (_x <= this.cellsLeft && _y >= this.cellsTop && c_oAscSelectionType.RangeRow === ar.type) {
// Выделены строки
// Пересчитываем Y относительно видимой области
_y += offsetY;
if (yL <= _y && _y <= yR) {
// Попали в выделение ячеек
isInSelection = true;
}
} else if (_y <= this.cellsTop && _x >= this.cellsLeft && c_oAscSelectionType.RangeCol === ar.type) {
// Выделены столбцы
// Пересчитываем X относительно видимой области
_x += offsetX;
if (xL <= _x && _x <= xR) {
// Попали в выделение ячеек
isInSelection = true;
}
} }
if (!isInSelection) { if (isChangeSelectionShape) {
// Не попали в выделение (меняем первую точку) // Попали в выделение, но были в объекте
this.cleanSelection(); this.cleanSelection();
this._moveActiveCellToXY(x, y);
this._drawSelection(); this._drawSelection();
this._updateSelectionNameAndInfo(); this._updateSelectionNameAndInfo();
return false; } else if (!this.model.selectionRange.containsRange(new asc_Range(c1, r1, c2, r2))) {
} else if (isChangeSelectionShape) { // Не попали в выделение (меняем первую точку)
// Попали в выделение, но были в объекте
this.cleanSelection(); this.cleanSelection();
this.model.selectionRange.clean();
this._moveActiveCellToXY(x, y);
this._drawSelection(); this._drawSelection();
this._updateSelectionNameAndInfo(); this._updateSelectionNameAndInfo();
return false;
} }
return true; return true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment