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){ ...@@ -4305,7 +4305,7 @@ Range.prototype.clone=function(oNewWs){
if(!oNewWs) if(!oNewWs)
oNewWs = this.worksheet; oNewWs = this.worksheet;
return new Range(oNewWs, this.bbox.r1, this.bbox.c1, this.bbox.r2, this.bbox.c2); return new Range(oNewWs, this.bbox.r1, this.bbox.c1, this.bbox.r2, this.bbox.c2);
} };
Range.prototype.getFirst=function(){ Range.prototype.getFirst=function(){
return this.first; return this.first;
} }
......
...@@ -813,6 +813,11 @@ ...@@ -813,6 +813,11 @@
case 40: // down case 40: // down
stop(); // Отключим стандартную обработку браузера нажатия 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; // Движение стрелками (влево-вправо, вверх-вниз) dr = event.ctrlKey ? +1.5 : +1; // Движение стрелками (влево-вправо, вверх-вниз)
break; break;
......
...@@ -254,8 +254,11 @@ ...@@ -254,8 +254,11 @@
"updateSelectionShape": function () {return self._onUpdateSelectionShape.apply(self, arguments);}, "updateSelectionShape": function () {return self._onUpdateSelectionShape.apply(self, arguments);},
// Frozen anchor // Frozen anchor
"moveFrozenAnchorHandle": function () {self._onMoveFrozenAnchorHandle.apply(self, arguments);}, "moveFrozenAnchorHandle": function () {self._onMoveFrozenAnchorHandle.apply(self, arguments);},
"moveFrozenAnchorHandleDone": function () {self._onMoveFrozenAnchorHandleDone.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) { this.model.handlers.add("cleanCellCache", function (wsId, range, canChangeColWidth, bLockDraw) {
...@@ -781,6 +784,18 @@ ...@@ -781,6 +784,18 @@
ws.applyFrozenAnchor(x, y, targetInfo); 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) { WorkbookView.prototype._onAutoFiltersClick = function (idFilter) {
this.getWorksheet().autoFilters.onAutoFilterClick(idFilter); this.getWorksheet().autoFilters.onAutoFilterClick(idFilter);
}; };
......
...@@ -5629,18 +5629,18 @@ ...@@ -5629,18 +5629,18 @@
isSelGraphicObject = this.objectRender.selectedGraphicObjectsExists(); isSelGraphicObject = this.objectRender.selectedGraphicObjectsExists();
if (!isViewerMode && !isSelGraphicObject) { if (!isViewerMode && !isSelGraphicObject) {
// Эпсилон для fillHandle // Эпсилон для fillHandle
var fillHandleEpsilon = this.width_1px; var fillHandleEpsilon = this.width_1px;
if (!this.isChartAreaEditMode && if (!this.isChartAreaEditMode &&
x >= (this.fillHandleL - fillHandleEpsilon) && x <= (this.fillHandleR + fillHandleEpsilon) && x >= (this.fillHandleL - fillHandleEpsilon) && x <= (this.fillHandleR + fillHandleEpsilon) &&
y >= (this.fillHandleT - fillHandleEpsilon) && y <= (this.fillHandleB + fillHandleEpsilon)) { y >= (this.fillHandleT - fillHandleEpsilon) && y <= (this.fillHandleB + fillHandleEpsilon)) {
// Мы на "квадрате" для автозаполнения // Мы на "квадрате" для автозаполнения
return {cursor: kCurFillHandle, target: "fillhandle", col: -1, row: -1}; return {cursor: kCurFillHandle, target: "fillhandle", col: -1, row: -1};
} }
// Навели на выделение // Навели на выделение
var xWithOffset = x + offsetX; var xWithOffset = x + offsetX;
var yWithOffset = y + offsetY; var yWithOffset = y + offsetY;
if (this._isCursorOnSelectionBorder(ar, this.visibleRange, xWithOffset, yWithOffset)) if (this._isCursorOnSelectionBorder(ar, this.visibleRange, xWithOffset, yWithOffset))
return {cursor: kCurMove, target: "moveRange", col: -1, row: -1}; return {cursor: kCurMove, target: "moveRange", col: -1, row: -1};
} }
...@@ -5751,8 +5751,8 @@ ...@@ -5751,8 +5751,8 @@
return cellCursor; return cellCursor;
} }
return oResDefault; return oResDefault;
}; };
WorksheetView.prototype._fixSelectionOfMergedCells = function (fixedRange) { WorksheetView.prototype._fixSelectionOfMergedCells = function (fixedRange) {
var t = this; var t = this;
...@@ -9524,7 +9524,7 @@ ...@@ -9524,7 +9524,7 @@
str = c.getValue2(); str = c.getValue2();
maxW = ct.metrics.width + t.maxDigitWidth; maxW = ct.metrics.width + t.maxDigitWidth;
while (1) { 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 (tm.height <= t.maxRowHeight) {break;}
if (lastHeight === tm.height) { if (lastHeight === tm.height) {
// Ситуация, когда у нас текст не уберется по высоте (http://bugzserver/show_bug.cgi?id=19974) // Ситуация, когда у нас текст не уберется по высоте (http://bugzserver/show_bug.cgi?id=19974)
...@@ -9914,6 +9914,74 @@ ...@@ -9914,6 +9914,74 @@
/*isCoord*/false, /*isSelectMode*/false); /*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 ----- // ----- 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