Commit 50197070 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Ошибка в _isCellEqual в поиске

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@55528 954022d7-b5bf-4e40-9824-e11837661b57
parent 8b05cd4b
......@@ -1252,7 +1252,7 @@
this.scanForward = true; // поиск вперед/назад
this.isMatchCase = false; // учитывать регистр
this.isWholeCell = false; // ячейка целиком
this.scanOnOnlySheet = true; // искать только на листе/в книге
this.scanOnOnlySheet = false; // искать только на листе/в книге
this.lookIn = c_oAscFindLookIn.Formulas; // искать в формулах/значениях/примечаниях
this.replaceWith = ""; // текст, на который заменяем (если у нас замена)
......@@ -1283,6 +1283,12 @@
result.countReplace = this.countReplace;
return result;
};
asc_CFindOptions.prototype.isEqual = function (obj) {
return null != obj && this.findWhat === obj.findWhat && this.scanByRows === obj.scanByRows &&
this.scanForward === obj.scanForward && this.isMatchCase === obj.isMatchCase &&
this.isWholeCell === obj.isWholeCell && this.scanOnOnlySheet === obj.scanOnOnlySheet &&
this.lookIn === obj.lookIn;
};
/*
* Export
......
......@@ -101,6 +101,9 @@
this.lastFormulaPos = -1; // Последняя позиция формулы
this.lastFormulaName = ""; // Последний кусок формулы
this.lastFindOptions = null; // Последний поиск (параметры)
this.lastFindResults = {}; // Результаты поиска (для поиска по всей книге, чтобы перейти на другой лист)
this._lockDraw = false;
// Фонт, который выставлен в DrawingContext, он должен быть один на все DrawingContext-ы
......@@ -624,6 +627,9 @@
this._onSelectionMathInfoChanged(ws.getSelectionMathInfo());
}
// Нужно очистить поиск
this._cleanFindResults();
var ct = ws.getCursorTypeFromXY(x, y, this.controller.settings.isViewerMode);
if ("hyperlink" === ct.target) {
......@@ -1178,6 +1184,9 @@
if(this.Api.isMobileVersion)
this.MobileTouchManager.Resize();
// Zoom теперь на каждом листе одинаковый, не отправляем смену
// Нужно очистить поиск
this._cleanFindResults();
return this;
};
......@@ -1606,6 +1615,11 @@
this.getWorksheet().setSelectionDialogMode(isSelectionDialogMode, selectRange);
};
WorkbookView.prototype._cleanFindResults = function () {
this.lastFindOptions = null;
this.lastFindResults = {};
};
// Поиск текста в листе
WorkbookView.prototype.findCellText = function (options) {
var ws = this.getWorksheet();
......@@ -1613,7 +1627,57 @@
if (ws.getCellEditMode())
this._onStopCellEditing();
var result = ws.findCellText(options);
return result ? ws._setActiveCell(result.c1, result.r1) : null;
if (result) {
if (false === options.scanOnOnlySheet) {
// Поиск по всей книге
var key = result.c1 + "-" + result.r1;
if (options.isEqual(this.lastFindOptions)) {
if (this.lastFindResults[key]) {
// Мы уже находили данную ячейку, попробуем на другом листе
var i, active = this.model.getActive(), start = 0, end = this.model.getWorksheetCount();
var inc = options.scanForward ? +1 : -1;
var tmpWs, tmpResult = null;
for (i = active + inc; i < end && i >= start; i += inc) {
tmpWs = this.getWorksheet(i);
tmpResult = tmpWs.findCellText(options);
if (tmpResult)
break;
}
if (!tmpResult) {
// Мы дошли до конца или начала (в зависимости от направления, теперь пойдем до активного)
if (options.scanForward) {
i = 0; end = active;
} else {
i = end - 1;
start = active + 1;
}
inc *= -1;
for (; i < end && i >= start; i += inc) {
tmpWs = this.getWorksheet(i);
tmpResult = tmpWs.findCellText(options);
if (tmpResult)
break;
}
}
if (tmpResult) {
ws = tmpWs;
result = tmpResult;
this.showWorksheet(i);
key = result.c1 + "-" + result.r1;
}
this.lastFindResults = {};
}
}
this.lastFindOptions = options.clone();
this.lastFindResults[key] = true;
} else
this._cleanFindResults();
return ws._setActiveCell(result.c1, result.r1);
} else
this._cleanFindResults();
return null;
};
// Замена текста в листе
......
......@@ -9670,7 +9670,7 @@
var cell, cellText;
// Не пользуемся RegExp, чтобы не возиться со спец.символами
var mc = this.model.getMergedByCell(r, c);
cell = mc ? this._getVisibleCell(mc.r1, mc.c1) : this._getVisibleCell(r, c);
cell = mc ? this._getVisibleCell(mc.c1, mc.r1) : this._getVisibleCell(c, r);
cellText = (options.lookIn === c_oAscFindLookIn.Formulas) ? cell.getValueForEdit() : cell.getValue();
if (true !== options.isMatchCase)
cellText = cellText.toLowerCase();
......
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