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

http://bugzserver/show_bug.cgi?id=27519 - Потеря формата и кнопок автофильтра...

http://bugzserver/show_bug.cgi?id=27519 - Потеря формата и кнопок автофильтра форматированной таблицы при копировании через зажатый Ctrl

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@60451 954022d7-b5bf-4e40-9824-e11837661b57
parent 6bf584f0
...@@ -6822,7 +6822,7 @@ var gUndoInsDelCellsFlag = true; ...@@ -6822,7 +6822,7 @@ var gUndoInsDelCellsFlag = true;
} }
}, },
_moveAutoFilters: function(arnTo, arnFrom, data) _moveAutoFilters: function(arnTo, arnFrom, data, copyRange)
{ {
//проверяем покрывает ли диапазон хотя бы один автофильтр //проверяем покрывает ли диапазон хотя бы один автофильтр
var ws = this.worksheet; var ws = this.worksheet;
...@@ -6840,106 +6840,113 @@ var gUndoInsDelCellsFlag = true; ...@@ -6840,106 +6840,113 @@ var gUndoInsDelCellsFlag = true;
var addRedo = false; var addRedo = false;
var findFilters = this._searchFiltersInRange(arnFrom , aWs); if(copyRange)
if(findFilters)
{ {
var diffCol = arnTo.c1 - arnFrom.c1; this._cloneCtrlAutoFilters(arnTo, arnFrom);
var diffRow = arnTo.r1 - arnFrom.r1; }
var ref; else
var range; {
var newRange; var findFilters = this._searchFiltersInRange(arnFrom , aWs);
var oCurFilter; if(findFilters)
//у найденных фильтров меняем Ref + скрытые строчки открываем {
for(var i = 0; i < findFilters.length; i++) var diffCol = arnTo.c1 - arnFrom.c1;
{ var diffRow = arnTo.r1 - arnFrom.r1;
if(!oCurFilter) var ref;
oCurFilter = []; var range;
oCurFilter[i] = findFilters[i].clone(aWs); var newRange;
ref = findFilters[i].Ref; var oCurFilter;
range = ref; //у найденных фильтров меняем Ref + скрытые строчки открываем
newRange = Asc.Range(range.c1 + diffCol, range.r1 + diffRow, range.c2 + diffCol, range.r2 + diffRow); for(var i = 0; i < findFilters.length; i++)
findFilters[i].Ref = newRange; {
if(findFilters[i].AutoFilter) if(!oCurFilter)
findFilters[i].AutoFilter.Ref = newRange; oCurFilter = [];
oCurFilter[i] = findFilters[i].clone(aWs);
if((findFilters[i].AutoFilter && findFilters[i].AutoFilter.FilterColumns && findFilters[i].AutoFilter.FilterColumns.length) || (findFilters[i].FilterColumns && findFilters[i].FilterColumns.length)) ref = findFilters[i].Ref;
{ range = ref;
aWs.setRowHidden(false, ref.r1, ref.r2); newRange = Asc.Range(range.c1 + diffCol, range.r1 + diffRow, range.c2 + diffCol, range.r2 + diffRow);
isUpdate = true; findFilters[i].Ref = newRange;
} if(findFilters[i].AutoFilter)
findFilters[i].AutoFilter.Ref = newRange;
if(!data && findFilters[i].AutoFilter && findFilters[i].AutoFilter.FilterColumns)
findFilters[i].AutoFilter.FilterColumns = null;
else if(!data && findFilters[i] && findFilters[i].FilterColumns)
findFilters[i].FilterColumns = null;
else if(data && data[i] && data[i].AutoFilter && data[i].AutoFilter.FilterColumns)
findFilters[i].AutoFilter.FilterColumns = data[i].AutoFilter.FilterColumns;
else if(data && data[i] && data[i].FilterColumns)
findFilters[i].FilterColumns = data[i].FilterColumns;
//при перемещении меняем массив кнопок if((findFilters[i].AutoFilter && findFilters[i].AutoFilter.FilterColumns && findFilters[i].AutoFilter.FilterColumns.length) || (findFilters[i].FilterColumns && findFilters[i].FilterColumns.length))
var changeButtonArray = [];
var k = 0;
if(this.allButtonAF)
{
var buttons = this.allButtonAF;
for(var n = 0; n < buttons.length; n++)
{ {
var id; aWs.setRowHidden(false, ref.r1, ref.r2);
var idNext; isUpdate = true;
if(buttons[n].inFilter.isEqual(ref) && findFilters[i] && findFilters[i].result && findFilters[i].result.length) }
if(!data && findFilters[i].AutoFilter && findFilters[i].AutoFilter.FilterColumns)
findFilters[i].AutoFilter.FilterColumns = null;
else if(!data && findFilters[i] && findFilters[i].FilterColumns)
findFilters[i].FilterColumns = null;
else if(data && data[i] && data[i].AutoFilter && data[i].AutoFilter.FilterColumns)
findFilters[i].AutoFilter.FilterColumns = data[i].AutoFilter.FilterColumns;
else if(data && data[i] && data[i].FilterColumns)
findFilters[i].FilterColumns = data[i].FilterColumns;
//при перемещении меняем массив кнопок
var changeButtonArray = [];
var k = 0;
if(this.allButtonAF)
{
var buttons = this.allButtonAF;
for(var n = 0; n < buttons.length; n++)
{ {
for(var b = 0; b < findFilters[i].result.length; b++) var id;
var idNext;
if(buttons[n].inFilter.isEqual(ref) && findFilters[i] && findFilters[i].result && findFilters[i].result.length)
{ {
if(buttons[n].id == findFilters[i].result[b].id) for(var b = 0; b < findFilters[i].result.length; b++)
{ {
id = this._shiftId(buttons[n].id, diffCol, diffRow); if(buttons[n].id == findFilters[i].result[b].id)
idNext = this._shiftId(buttons[n].idNext, diffCol, diffRow); {
break; id = this._shiftId(buttons[n].id, diffCol, diffRow);
idNext = this._shiftId(buttons[n].idNext, diffCol, diffRow);
break;
}
} }
changeButtonArray[n] = {inFilter: newRange, id: id ? id : this._shiftId(buttons[n].id, diffCol, diffRow), idNext: idNext ? idNext : this._shiftId(buttons[n].idNext, diffCol, diffRow)};
k++;
if(findFilters[i].result.length == k)
break;
} }
changeButtonArray[n] = {inFilter: newRange, id: id ? id : this._shiftId(buttons[n].id, diffCol, diffRow), idNext: idNext ? idNext : this._shiftId(buttons[n].idNext, diffCol, diffRow)};
k++;
if(findFilters[i].result.length == k)
break;
} }
} }
}
//изменяем result у фильтра
//изменяем result у фильтра for(var b = 0; b < findFilters[i].result.length; b++)
for(var b = 0; b < findFilters[i].result.length; b++)
{
id = this._shiftId(findFilters[i].result[b].id, diffCol, diffRow);
idNext = this._shiftId(findFilters[i].result[b].idNext, diffCol, diffRow);
findFilters[i].result[b].id = id;
findFilters[i].result[b].idNext = idNext;
}
//при изменении кнопок, чтобы не было наложений, создаём массив changeButtonArray и изменяем сразу все нужные кнопки
for(var b in changeButtonArray)
{
if(buttons && buttons[b])
{ {
buttons[b].inFilter = changeButtonArray[b].inFilter; id = this._shiftId(findFilters[i].result[b].id, diffCol, diffRow);
buttons[b].id = changeButtonArray[b].id; idNext = this._shiftId(findFilters[i].result[b].idNext, diffCol, diffRow);
buttons[b].idNext = changeButtonArray[b].idNext; findFilters[i].result[b].id = id;
findFilters[i].result[b].idNext = idNext;
} }
//при изменении кнопок, чтобы не было наложений, создаём массив changeButtonArray и изменяем сразу все нужные кнопки
for(var b in changeButtonArray)
{
if(buttons && buttons[b])
{
buttons[b].inFilter = changeButtonArray[b].inFilter;
buttons[b].id = changeButtonArray[b].id;
buttons[b].idNext = changeButtonArray[b].idNext;
}
}
if(oCurFilter[i].TableStyleInfo && oCurFilter[i] && findFilters[i])
{
this._cleanStyleTable(aWs, oCurFilter[i].Ref);
this._setColorStyleTable(findFilters[i].Ref, findFilters[i]);
}
if(!addRedo && !data)
{
this._addHistoryObj(oCurFilter, historyitem_AutoFilter_Move, {worksheet: ws, arnTo: arnTo, arnFrom: arnFrom, activeCells: ws.activeRange});
addRedo = true;
}
else if(!data && addRedo)
this._addHistoryObj(oCurFilter, historyitem_AutoFilter_Move);
} }
if(oCurFilter[i].TableStyleInfo && oCurFilter[i] && findFilters[i])
{
this._cleanStyleTable(aWs, oCurFilter[i].Ref);
this._setColorStyleTable(findFilters[i].Ref, findFilters[i]);
}
if(!addRedo && !data)
{
this._addHistoryObj(oCurFilter, historyitem_AutoFilter_Move, {worksheet: ws, arnTo: arnTo, arnFrom: arnFrom, activeCells: ws.activeRange});
addRedo = true;
}
else if(!data && addRedo)
this._addHistoryObj(oCurFilter, historyitem_AutoFilter_Move);
} }
} }
...@@ -6958,6 +6965,33 @@ var gUndoInsDelCellsFlag = true; ...@@ -6958,6 +6965,33 @@ var gUndoInsDelCellsFlag = true;
}, },
_cloneCtrlAutoFilters: function(arnTo, arnFrom)
{
var ws = this.worksheet;
var aWs = this._getCurrentWS();
var findFilters = this._searchFiltersInRange(arnFrom , aWs);
if(findFilters && findFilters.length)
{
var diffCol = arnTo.c1 - arnFrom.c1;
var diffRow = arnTo.r1 - arnFrom.r1;
var newRange, ref, bWithoutFilter;
for(var i = 0; i < findFilters.length; i++)
{
if(findFilters[i].TableStyleInfo)
{
ref = findFilters[i].Ref;
newRange = Asc.Range(ref.c1 + diffCol, ref.r1 + diffRow, ref.c2 + diffCol, ref.r2 + diffRow);
bWithoutFilter = findFilters[i].AutoFilter === null ? true : false;
if(!ref.intersection(newRange) && !this._intersectionRangeWithTableParts(newRange, aWs, arnFrom))
this.addAutoFilter(findFilters[i].TableStyleInfo.Name, newRange, null, null, true, bWithoutFilter);
}
}
}
},
//ShowButton(в случае объединенных ячеек в автофильтрах) //ShowButton(в случае объединенных ячеек в автофильтрах)
_isShowButton: function(autoFilter, colId) _isShowButton: function(autoFilter, colId)
{ {
......
...@@ -7816,14 +7816,15 @@ ...@@ -7816,14 +7816,15 @@
History.SetSelection(arnFrom.clone()); History.SetSelection(arnFrom.clone());
History.SetSelectionRedo(arnTo.clone()); History.SetSelectionRedo(arnTo.clone());
History.StartTransaction(); History.StartTransaction();
t.autoFilters._preMoveAutoFilters(arnFrom, arnTo); if(!copyRange)
t.autoFilters._preMoveAutoFilters(arnFrom, arnTo);
t.model._moveRange(arnFrom, arnTo, copyRange); t.model._moveRange(arnFrom, arnTo, copyRange);
t.cellCommentator.moveRangeComments(arnFrom, arnTo); t.cellCommentator.moveRangeComments(arnFrom, arnTo);
t.objectRender.moveRangeDrawingObject(arnFrom, arnTo); t.objectRender.moveRangeDrawingObject(arnFrom, arnTo);
t.autoFilters._moveAutoFilters(arnTo, arnFrom); t.autoFilters._moveAutoFilters(arnTo, arnFrom, null, copyRange);
// Вызываем функцию пересчета для заголовков форматированной таблицы // Вызываем функцию пересчета для заголовков форматированной таблицы
t.autoFilters._renameTableColumn(arnFrom); t.autoFilters._renameTableColumn(arnFrom);
t.autoFilters._renameTableColumn(arnTo); t.autoFilters._renameTableColumn(arnTo);
...@@ -8168,7 +8169,7 @@ ...@@ -8168,7 +8169,7 @@
if(!aFilters[aF].AutoFilter) if(!aFilters[aF].AutoFilter)
bWithoutFilter = true; bWithoutFilter = true;
t.autoFilters.addAutoFilter(aFilters[aF].TableStyleInfo.Name, range.bbox, null, null, true, bWithoutFilter); t.autoFilters.addAutoFilter(aFilters[aF].TableStyleInfo.Name, range.bbox, null, null, true, bWithoutFilter, true);
} }
} }
...@@ -8179,7 +8180,7 @@ ...@@ -8179,7 +8180,7 @@
t._prepareCellTextMetricsCache(arn); t._prepareCellTextMetricsCache(arn);
} }
History.EndTransaction(); //History.EndTransaction();
var oSelection = History.GetSelection(); var oSelection = History.GetSelection();
if(null != oSelection) if(null != oSelection)
{ {
......
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