Commit 8477f079 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Добавил замену во всей книге

Поправил поиск во всей книге, если на листе не нашлось значение

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@55541 954022d7-b5bf-4e40-9824-e11837661b57
parent 2606e183
......@@ -1263,6 +1263,9 @@
this.indexInArray = 0;
this.countFind = 0;
this.countReplace = 0;
this.countFindAll = 0;
this.countReplaceAll = 0;
this.sheetIndex = -1;
}
asc_CFindOptions.prototype.clone = function () {
var result = new asc_CFindOptions();
......@@ -1281,6 +1284,9 @@
result.indexInArray = this.indexInArray;
result.countFind = this.countFind;
result.countReplace = this.countReplace;
result.countFindAll = this.countFindAll;
result.countReplaceAll = this.countReplaceAll;
result.sheetIndex = this.sheetIndex;
return result;
};
asc_CFindOptions.prototype.isEqual = function (obj) {
......@@ -1289,6 +1295,10 @@
this.isWholeCell === obj.isWholeCell && this.scanOnOnlySheet === obj.scanOnOnlySheet &&
this.lookIn === obj.lookIn;
};
asc_CFindOptions.prototype.updateFindAll = function () {
this.countFindAll += this.countFind;
this.countReplaceAll += this.countReplace;
};
/*
* Export
......
......@@ -103,6 +103,7 @@
this.lastFindOptions = null; // Последний поиск (параметры)
this.lastFindResults = {}; // Результаты поиска (для поиска по всей книге, чтобы перейти на другой лист)
this.fReplaceCallback = null; // Callback для замены текста
this._lockDraw = false;
......@@ -464,6 +465,8 @@
this.formulasList = getFormulasInfo();
this.fReplaceCallback = function () {self._replaceCellTextCallback.apply(self, arguments);};
if (this.Api.isMobileVersion){
this.MobileTouchManager = new CMobileTouchManager();
this.MobileTouchManager.Init(this);
......@@ -1627,56 +1630,59 @@
if (ws.getCellEditMode())
this._onStopCellEditing();
var result = ws.findCellText(options);
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) {
if (false === options.scanOnOnlySheet) {
// Поиск по всей книге
var key = result ? (result.c1 + "-" + result.r1) : null;
if (null === key || options.isEqual(this.lastFindOptions)) {
if (null === key || 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) {
// Мы дошли до конца или начала (в зависимости от направления, теперь пойдем до активного)
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 = {};
if (tmpResult) {
ws = tmpWs;
result = tmpResult;
this.showWorksheet(i);
// Посылаем эвент о смене активного листа
this.handlers.trigger ("asc_onActiveSheetChanged", i);
key = result.c1 + "-" + result.r1;
}
this.lastFindResults = {};
}
}
if (null !== key) {
this.lastFindOptions = options.clone();
this.lastFindResults[key] = true;
} else
this._cleanFindResults();
}
}
if (result)
return ws._setActiveCell(result.c1, result.r1);
} else
this._cleanFindResults();
this._cleanFindResults();
return null;
};
......@@ -1686,7 +1692,41 @@
// Останавливаем ввод данных в редакторе ввода
if (ws.getCellEditMode())
this._onStopCellEditing();
ws.replaceCellText(options);
History.Create_NewPoint();
History.StartTransaction();
if (options.isReplaceAll) {
// На ReplaceAll ставим медленную операцию
this.handlers.trigger("asc_onStartAction", c_oAscAsyncActionType.BlockInteraction,
c_oAscAsyncAction.SlowOperation);
}
ws.replaceCellText(options, false, this.fReplaceCallback);
};
WorkbookView.prototype._replaceCellTextCallback = function (options) {
options.updateFindAll();
if (!options.scanOnOnlySheet && options.isReplaceAll) {
// Замена на всей книге
var i = ++options.sheetIndex;
if (this.model.getActive() === i)
i = ++options.sheetIndex;
if (i < this.model.getWorksheetCount()) {
var ws = this.getWorksheet(i);
ws.replaceCellText(options, true, this.fReplaceCallback);
return;
}
}
this.handlers.trigger("asc_onRenameCellTextEnd", options.countFindAll, options.countReplaceAll);
History.EndTransaction();
if (options.isReplaceAll) {
// Заканчиваем медленную операцию
this.handlers.trigger("asc_onEndAction", c_oAscAsyncActionType.BlockInteraction,
c_oAscAsyncAction.SlowOperation);
}
};
// Поиск ячейки по ссылке
......
......@@ -9768,19 +9768,20 @@
return null;
};
WorksheetView.prototype.replaceCellText = function (options) {
WorksheetView.prototype.replaceCellText = function (options, lockDraw, callback) {
// Очищаем результаты
options.countFind = 0;
options.countReplace = 0;
var t = this;
var ar = this.activeRange.clone();
var aReplaceCells = [];
if (options.isReplaceAll) {
// На ReplaceAll ставим медленную операцию
t.handlers.trigger("slowOperation", true);
var aReplaceCellsIndex = {};
var optionsFind = options.clone();
optionsFind.activeRange = ar;
options.activeRange = ar;
var findResult, index;
while (true) {
findResult = t.findCellText(optionsFind);
findResult = t.findCellText(options);
if (null === findResult)
break;
index = findResult.c1 + '-' + findResult.r1;
......@@ -9794,22 +9795,19 @@
} else {
// Попробуем сначала найти
var isEqual = this._isCellEqual(ar.startCol, ar.startRow, options);
if (false !== isEqual) {
t.handlers.trigger("onRenameCellTextEnd", 0, 0);
return;
}
if (null === isEqual)
return callback(options);
aReplaceCells.push(isEqual);
}
if (0 > aReplaceCells.length) {
t.handlers.trigger("onRenameCellTextEnd", 0, 0);
return;
}
this._replaceCellsText(aReplaceCells, options);
if (0 > aReplaceCells.length)
return callback(options);
return this._replaceCellsText(aReplaceCells, options, lockDraw, callback);
};
WorksheetView.prototype._replaceCellsText = function (aReplaceCells, options) {
WorksheetView.prototype._replaceCellsText = function (aReplaceCells, options, lockDraw, callback) {
var findFlags = "g"; // Заменяем все вхождения
if (true !== options.isMatchCase)
findFlags += "i"; // Не чувствителен к регистру
......@@ -9825,27 +9823,17 @@
.replace( /(~\*)/g, "\\*" ).replace( /(~\?)/g, "\\?" );
valueForSearching = new RegExp(valueForSearching, findFlags);
History.Create_NewPoint();
History.StartTransaction();
options.indexInArray = 0;
options.countFind = aReplaceCells.length;
options.countReplace = 0;
this._replaceCellText(aReplaceCells, valueForSearching, options);
this._replaceCellText(aReplaceCells, valueForSearching, options, lockDraw, callback);
};
WorksheetView.prototype._replaceCellText = function (aReplaceCells, valueForSearching, options) {
WorksheetView.prototype._replaceCellText = function (aReplaceCells, valueForSearching, options,
lockDraw, callback) {
var t = this;
if (options.indexInArray >= aReplaceCells.length) {
History.EndTransaction();
if (options.isReplaceAll) {
// Завершаем медленную операцию
t.handlers.trigger("slowOperation", false);
}
t.handlers.trigger("onRenameCellTextEnd", options.countFind, options.countReplace);
return;
}
if (options.indexInArray >= aReplaceCells.length)
return callback(options);
var onReplaceCallback = function (isSuccess) {
var cell = aReplaceCells[options.indexInArray];
......@@ -9869,15 +9857,18 @@
newValue = [];
newValue[0] = new Fragment({text: cellValue, format: v[0].format.clone()});
// ToDo для неактивных листов не делать отрисовку
t._saveCellValueAfterEdit(oCellEdit, c, newValue, /*flags*/undefined, /*skipNLCheck*/false,
/*isNotHistory*/true);
/*isNotHistory*/true, lockDraw);
}
}
window.setTimeout(function () {t._replaceCellText(aReplaceCells, valueForSearching, options)}, 1);
window.setTimeout(function () {
t._replaceCellText(aReplaceCells, valueForSearching, options, lockDraw, callback);
}, 1);
};
this._isLockedCells (aReplaceCells[options.indexInArray], /*subType*/null, onReplaceCallback);
return this._isLockedCells (aReplaceCells[options.indexInArray], /*subType*/null, onReplaceCallback);
};
WorksheetView.prototype.findCell = function (reference) {
......@@ -10056,7 +10047,8 @@
return mergedRange ? mergedRange : asc_Range(col, row, col, row);
};
WorksheetView.prototype._saveCellValueAfterEdit = function (oCellEdit, c, val, flags, skipNLCheck, isNotHistory) {
WorksheetView.prototype._saveCellValueAfterEdit = function (oCellEdit, c, val, flags, skipNLCheck,
isNotHistory, lockDraw) {
var t = this;
var oldMode = t.isFormulaEditMode;
t.isFormulaEditMode = false;
......@@ -10100,7 +10092,7 @@
c.setWrap(true);
// Для формулы обновление будет в коде рассчета формулы
t._updateCellsRange(oCellEdit, /*canChangeColWidth*/c_oAscCanChangeColWidth.numbers);
t._updateCellsRange(oCellEdit, /*canChangeColWidth*/c_oAscCanChangeColWidth.numbers, lockDraw);
}
if (!isNotHistory) {
......@@ -10280,7 +10272,8 @@
autoCompleteLC: arrAutoCompleteLC,
saveValueCallback: function (val, flags, skipNLCheck) {
var oCellEdit = isMerged ? new asc_Range(mc.c1, mc.r1, mc.c1, mc.r1) : new asc_Range(col, row, col, row);
return t._saveCellValueAfterEdit(oCellEdit, c, val, flags, skipNLCheck, /*isNotHistory*/false);
return t._saveCellValueAfterEdit(oCellEdit, c, val, flags,
skipNLCheck, /*isNotHistory*/false, /*lockDraw*/false);
}
});
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