Commit 52f2a31a authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Добавил горячую клавишу Alt+Arrow Down (показать список возможных значений).

Добавил функции для получения диапазона (сверху и снизу от ячейки)
Добавил функцию для получения списка значений для ячейки снизу и сверху от нее.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@55324 954022d7-b5bf-4e40-9824-e11837661b57
parent 1940da7b
......@@ -4305,7 +4305,7 @@ Range.prototype.clone=function(oNewWs){
if(!oNewWs)
oNewWs = this.worksheet;
return new Range(oNewWs, this.bbox.r1, this.bbox.c1, this.bbox.r2, this.bbox.c2);
}
};
Range.prototype.getFirst=function(){
return this.first;
}
......
......@@ -813,6 +813,11 @@
case 40: // down
stop(); // Отключим стандартную обработку браузера нажатия down
// Обработка Alt + down
if (!isViewerMode && !t.isCellEditMode && !t.isSelectionDialogMode && event.altKey) {
t.handlers.trigger("showAutoComplete");
return t.__retval;
}
dr = event.ctrlKey ? +1.5 : +1; // Движение стрелками (влево-вправо, вверх-вниз)
break;
......
......@@ -254,8 +254,11 @@
"updateSelectionShape": function () {return self._onUpdateSelectionShape.apply(self, arguments);},
// Frozen anchor
"moveFrozenAnchorHandle": function () {self._onMoveFrozenAnchorHandle.apply(self, arguments);},
"moveFrozenAnchorHandleDone": function () {self._onMoveFrozenAnchorHandleDone.apply(self, arguments);}
"moveFrozenAnchorHandle": function () {self._onMoveFrozenAnchorHandle.apply(self, arguments);},
"moveFrozenAnchorHandleDone": function () {self._onMoveFrozenAnchorHandleDone.apply(self, arguments);},
// AutoComplete
"showAutoComplete": function () {self._onShowAutoComplete.apply(self, arguments);}
});
this.model.handlers.add("cleanCellCache", function (wsId, range, canChangeColWidth, bLockDraw) {
......@@ -781,6 +784,18 @@
ws.applyFrozenAnchor(x, y, targetInfo);
};
WorkbookView.prototype._onShowAutoComplete = function () {
var ws = this.getWorksheet();
var arrValues = [], objValues = {};
var range = ws.findCellAutoComplete(ws.activeRange.startCol, ws.activeRange.startRow, 1);
ws.getColValues(range, ws.activeRange.startCol, arrValues, objValues);
range = ws.findCellAutoComplete(ws.activeRange.startCol, ws.activeRange.startRow, -1);
ws.getColValues(range, ws.activeRange.startCol, arrValues, objValues);
arrValues.sort();
console.log(arrValues);
};
WorkbookView.prototype._onAutoFiltersClick = function (idFilter) {
this.getWorksheet().autoFilters.onAutoFilterClick(idFilter);
};
......
......@@ -5629,18 +5629,18 @@
isSelGraphicObject = this.objectRender.selectedGraphicObjectsExists();
if (!isViewerMode && !isSelGraphicObject) {
// Эпсилон для fillHandle
var fillHandleEpsilon = this.width_1px;
// Эпсилон для fillHandle
var fillHandleEpsilon = this.width_1px;
if (!this.isChartAreaEditMode &&
x >= (this.fillHandleL - fillHandleEpsilon) && x <= (this.fillHandleR + fillHandleEpsilon) &&
y >= (this.fillHandleT - fillHandleEpsilon) && y <= (this.fillHandleB + fillHandleEpsilon)) {
// Мы на "квадрате" для автозаполнения
x >= (this.fillHandleL - fillHandleEpsilon) && x <= (this.fillHandleR + fillHandleEpsilon) &&
y >= (this.fillHandleT - fillHandleEpsilon) && y <= (this.fillHandleB + fillHandleEpsilon)) {
// Мы на "квадрате" для автозаполнения
return {cursor: kCurFillHandle, target: "fillhandle", col: -1, row: -1};
}
}
// Навели на выделение
var xWithOffset = x + offsetX;
var yWithOffset = y + offsetY;
var xWithOffset = x + offsetX;
var yWithOffset = y + offsetY;
if (this._isCursorOnSelectionBorder(ar, this.visibleRange, xWithOffset, yWithOffset))
return {cursor: kCurMove, target: "moveRange", col: -1, row: -1};
}
......@@ -5751,8 +5751,8 @@
return cellCursor;
}
return oResDefault;
};
return oResDefault;
};
WorksheetView.prototype._fixSelectionOfMergedCells = function (fixedRange) {
var t = this;
......@@ -9524,7 +9524,7 @@
str = c.getValue2();
maxW = ct.metrics.width + t.maxDigitWidth;
while (1) {
tm = t._roundTextMetrics( t.stringRender.measureString(str, fl, maxW) );
tm = t._roundTextMetrics(t.stringRender.measureString(str, fl, maxW));
if (tm.height <= t.maxRowHeight) {break;}
if (lastHeight === tm.height) {
// Ситуация, когда у нас текст не уберется по высоте (http://bugzserver/show_bug.cgi?id=19974)
......@@ -9914,6 +9914,74 @@
/*isCoord*/false, /*isSelectMode*/false);
};
/**
* Ищет дополнение для ячейки (снизу или сверху)
* @param col
* @param row
* @param step
* @returns {asc_Range}
*/
WorksheetView.prototype.findCellAutoComplete = function (col, row, step) {
row += step;
var cell, end = 0 < step ? this.model.getRowsCount() - 1: 0, isEnd = true,
colsCount = this.model.getColsCount(), range = new asc_Range(col, row, col, row);
for (; row * step <= end; row += step, isEnd = true) {
for (col = range.c1; col <= range.c2; ++col) {
cell = this.model._getCellNoEmpty(row, col);
if (cell && false === cell.isEmptyText()) {
isEnd = false;
break;
}
}
// Идем влево по колонкам
for (col = range.c1 - 1; col >= 0; --col) {
cell = this.model._getCellNoEmpty(row, col);
if (null === cell || cell.isEmptyText())
break;
isEnd = false;
}
range.c1 = col + 1;
// Идем вправо по колонкам
for (col = range.c2 + 1; col < colsCount; ++col) {
cell = this.model._getCellNoEmpty(row, col);
if (null === cell || cell.isEmptyText())
break;
isEnd = false;
}
range.c2 = col - 1;
if (isEnd)
break;
}
if (0 < step)
range.r2 = row - 1;
else
range.r1 = row + 1;
return range.r1 <= range.r2 ? range : null;
};
/**
* Формирует уникальный массив
* @param range
* @param col
* @param arrValues
* @param objValues
*/
WorksheetView.prototype.getColValues = function (range, col, arrValues, objValues) {
if (null === range)
return;
var row, cell, value;
for (row = range.r1; row <= range.r2; ++row) {
cell = this.model._getCellNoEmpty(row, col);
if (cell) {
value = cell.getValue();
if (!objValues.hasOwnProperty(value)) {
arrValues.push(value);
objValues[value] = 1;
}
}
}
};
// ----- Cell Editor -----
......
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