Commit b8faa097 authored by Igor.Zotov's avatar Igor.Zotov Committed by Alexander.Trofimov

http://bugzserver/show_bug.cgi?id=29974 - [CoEdit][Undo] Не происходит отмены...

http://bugzserver/show_bug.cgi?id=29974 -  [CoEdit][Undo] Не происходит отмены вставки форматированной таблицы при ее копировании через зажатый Ctrl

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@64336 954022d7-b5bf-4e40-9824-e11837661b57
parent 3859c861
...@@ -1667,7 +1667,7 @@ var maxIndividualValues = 10000; ...@@ -1667,7 +1667,7 @@ var maxIndividualValues = 10000;
} }
}, },
_moveAutoFilters: function(arnTo, arnFrom, data, copyRange) _moveAutoFilters: function(arnTo, arnFrom, data, copyRange, offLock)
{ {
//проверяем покрывает ли диапазон хотя бы один автофильтр //проверяем покрывает ли диапазон хотя бы один автофильтр
var ws = this.worksheet; var ws = this.worksheet;
...@@ -1687,11 +1687,11 @@ var maxIndividualValues = 10000; ...@@ -1687,11 +1687,11 @@ var maxIndividualValues = 10000;
if(copyRange) if(copyRange)
{ {
this._cloneCtrlAutoFilters(arnTo, arnFrom); this._cloneCtrlAutoFilters(arnTo, arnFrom, offLock);
} }
else else
{ {
var findFilters = this._searchFiltersInRange(arnFrom , aWs); var findFilters = this._searchFiltersInRange(arnFrom);
if(findFilters) if(findFilters)
{ {
var diffCol = arnTo.c1 - arnFrom.c1; var diffCol = arnTo.c1 - arnFrom.c1;
...@@ -4163,7 +4163,7 @@ var maxIndividualValues = 10000; ...@@ -4163,7 +4163,7 @@ var maxIndividualValues = 10000;
if(!copyRange) if(!copyRange)
{ {
var findFilters = this._searchFiltersInRange(arnFrom , aWs); var findFilters = this._searchFiltersInRange(arnFrom);
if(findFilters) if(findFilters)
{ {
for(var i = 0; i < findFilters.length; i++) for(var i = 0; i < findFilters.length; i++)
...@@ -4191,7 +4191,7 @@ var maxIndividualValues = 10000; ...@@ -4191,7 +4191,7 @@ var maxIndividualValues = 10000;
} }
//TODO пока будем всегда чистить фильтры, которые будут в месте вставки. Позже сделать аналогично MS либо пересмотреть все возможные ситуации. //TODO пока будем всегда чистить фильтры, которые будут в месте вставки. Позже сделать аналогично MS либо пересмотреть все возможные ситуации.
var findFiltersTo = this._searchFiltersInRange(arnTo , aWs); var findFiltersTo = this._searchFiltersInRange(arnTo);
if(arnTo && findFiltersTo) if(arnTo && findFiltersTo)
{ {
for(var i = 0; i < findFiltersTo.length; i++) for(var i = 0; i < findFiltersTo.length; i++)
...@@ -4226,35 +4226,33 @@ var maxIndividualValues = 10000; ...@@ -4226,35 +4226,33 @@ var maxIndividualValues = 10000;
} }
}, },
_searchFiltersInRange: function(range, aWs)//find filters in this range _searchFiltersInRange: function(range, bFindOnlyTableParts)//find filters in this range
{ {
var result = []; var result = [];
var rangeFilter; var aWs = this._getCurrentWS();
//var range = this._getAscRange(range); range = Asc.Range(range.c1, range.r1, range.c2, range.r2);
if(aWs.AutoFilter)
if(aWs.AutoFilter && !bFindOnlyTableParts)
{ {
rangeFilter = aWs.AutoFilter.Ref; if(range.containsRange(aWs.AutoFilter.Ref))
if(range.c1 <= rangeFilter.c1 && range.r1 <= rangeFilter.r1 && range.c2 >= rangeFilter.c2 && range.r2 >= rangeFilter.r2)
{
result[result.length] = aWs.AutoFilter; result[result.length] = aWs.AutoFilter;
}
} }
if(aWs.TableParts) if(aWs.TableParts)
{ {
for(var k = 0; k < aWs.TableParts.length; k++) for(var i = 0; i < aWs.TableParts.length; i++)
{ {
if(aWs.TableParts[k]) if(aWs.TableParts[i])
{ {
rangeFilter = aWs.TableParts[k].Ref; if(range.containsRange(aWs.TableParts[i].Ref))
if(range.c1 <= rangeFilter.c1 && range.r1 <= rangeFilter.r1 && range.c2 >= rangeFilter.c2 && range.r2 >= rangeFilter.r2) result[result.length] = aWs.TableParts[i];
{
result[result.length] = aWs.TableParts[k];
}
} }
} }
} }
if(!result.length) if(!result.length)
result = false; result = false;
return result; return result;
}, },
...@@ -4304,10 +4302,10 @@ var maxIndividualValues = 10000; ...@@ -4304,10 +4302,10 @@ var maxIndividualValues = 10000;
return result; return result;
}, },
_cloneCtrlAutoFilters: function(arnTo, arnFrom) _cloneCtrlAutoFilters: function(arnTo, arnFrom, offLock)
{ {
var aWs = this._getCurrentWS(); var aWs = this._getCurrentWS();
var findFilters = this._searchFiltersInRange(arnFrom , aWs); var findFilters = this._searchFiltersInRange(arnFrom);
if(findFilters && findFilters.length) if(findFilters && findFilters.length)
{ {
...@@ -4324,7 +4322,7 @@ var maxIndividualValues = 10000; ...@@ -4324,7 +4322,7 @@ var maxIndividualValues = 10000;
bWithoutFilter = findFilters[i].AutoFilter === null; bWithoutFilter = findFilters[i].AutoFilter === null;
if(!ref.intersection(newRange) && !this._intersectionRangeWithTableParts(newRange, aWs, arnFrom)) if(!ref.intersection(newRange) && !this._intersectionRangeWithTableParts(newRange, aWs, arnFrom))
this.addAutoFilter(findFilters[i].TableStyleInfo.Name, newRange); this.addAutoFilter(findFilters[i].TableStyleInfo.Name, newRange, null, offLock);
} }
} }
} }
......
...@@ -7920,48 +7920,62 @@ ...@@ -7920,48 +7920,62 @@
WorksheetView.prototype.moveRangeHandle = function (arnFrom, arnTo, copyRange){ WorksheetView.prototype.moveRangeHandle = function (arnFrom, arnTo, copyRange){
var t = this; var t = this;
var onApplyMoveRangeHandleCallback = function (isSuccess) { var onApplyMoveRangeHandleCallback = function (isSuccess) {
if (false === isSuccess || false === t.autoFilters.isCheckMoveRange(arnFrom)) { if (false === isSuccess) {
t._cleanSelectionMoveRange(); t._cleanSelectionMoveRange();
return; return;
} }
// Очищаем выделение
t.cleanSelection();
//ToDo t.cleanDepCells();
History.Create_NewPoint();
History.SetSelection(arnFrom.clone());
History.SetSelectionRedo(arnTo.clone());
History.StartTransaction();
t.autoFilters._preMoveAutoFilters(arnFrom, arnTo, copyRange);
t.model._moveRange(arnFrom, arnTo, copyRange); var onApplyMoveAutoFiltersCallback = function(isSuccess)
t.cellCommentator.moveRangeComments(arnFrom, arnTo); {
t.objectRender.moveRangeDrawingObject(arnFrom, arnTo); if (false === isSuccess)
return;
// Очищаем выделение
t.cleanSelection();
t.autoFilters._moveAutoFilters(arnTo, arnFrom, null, copyRange); //ToDo t.cleanDepCells();
// Вызываем функцию пересчета для заголовков форматированной таблицы History.Create_NewPoint();
t.autoFilters.renameTableColumn(arnFrom); History.SetSelection(arnFrom.clone());
t.autoFilters.renameTableColumn(arnTo); History.SetSelectionRedo(arnTo.clone());
t.autoFilters.reDrawFilter(arnFrom); History.StartTransaction();
t.autoFilters._preMoveAutoFilters(arnFrom, arnTo, copyRange);
t.model._moveRange(arnFrom, arnTo, copyRange);
t.cellCommentator.moveRangeComments(arnFrom, arnTo);
t.objectRender.moveRangeDrawingObject(arnFrom, arnTo);
t.autoFilters._moveAutoFilters(arnTo, arnFrom, null, copyRange, true);
// Вызываем функцию пересчета для заголовков форматированной таблицы
t.autoFilters.renameTableColumn(arnFrom);
t.autoFilters.renameTableColumn(arnTo);
t.autoFilters.reDrawFilter(arnFrom);
History.EndTransaction(); History.EndTransaction();
t._updateCellsRange(arnTo, false, true); t._updateCellsRange(arnTo, false, true);
t.activeRange = arnTo.clone(true); t.activeRange = arnTo.clone(true);
// Сбрасываем параметры // Сбрасываем параметры
t.activeMoveRange = null; t.activeMoveRange = null;
t.startCellMoveRange = null; t.startCellMoveRange = null;
t._updateCellsRange(arnFrom, false, true); t._updateCellsRange(arnFrom, false, true);
// Тут будет отрисовка select-а // Тут будет отрисовка select-а
t._recalculateAfterUpdate([arnFrom, arnTo]); t._recalculateAfterUpdate([arnFrom, arnTo]);
// Вызовем на всякий случай, т.к. мы можем уже обновиться из-за формул ToDo возможно стоит убрать это в дальнейшем (но нужна переработка формул) - http://bugzserver/show_bug.cgi?id=24505
t._updateSelectionNameAndInfo();
};
this._isLockedCells([arnFrom, arnTo], null, onApplyMoveRangeHandleCallback); // Вызовем на всякий случай, т.к. мы можем уже обновиться из-за формул ToDo возможно стоит убрать это в дальнейшем (но нужна переработка формул) - http://bugzserver/show_bug.cgi?id=24505
t._updateSelectionNameAndInfo();
}
if(t.autoFilters._searchFiltersInRange(arnFrom))
t._isLockedAll(onApplyMoveAutoFiltersCallback);
else
onApplyMoveAutoFiltersCallback();
};
if(t.autoFilters.isCheckMoveRange(arnFrom))
this._isLockedCells([arnFrom, arnTo], null, onApplyMoveRangeHandleCallback);
else
this._cleanSelectionMoveRange();
}; };
WorksheetView.prototype.emptySelection = function (options) { WorksheetView.prototype.emptySelection = function (options) {
......
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