Commit 7ed5a85c authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander.Trofimov

Специально для десктопной версии сделаны дополнительные проверки для...

Специально для десктопной версии сделаны дополнительные проверки для срабатывания быстрого пересчета (но временно отключено объединение набора текста в одну точку в истории, это ТОЛЬКО в десктопной версии).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@58311 954022d7-b5bf-4e40-9824-e11837661b57
parent c1d2a11e
......@@ -355,6 +355,11 @@ CHistory.prototype =
Check_UninonLastPoints : function()
{
// Не объединяем точки в истории, когда отключается пересчет.
// TODO: Неправильно изменяется RecalcIndex
if (true === this.Document.TurnOffRecalc)
return;
// Не объединяем точки истории, если на предыдущей точке произошло сохранение
if ( this.Points.length < 2 )
return;
......@@ -477,28 +482,43 @@ CHistory.prototype =
Is_SimpleChanges : function()
{
if (this.Index - this.RecIndex !== 1)
return [];
if ( this.Index >= 0 && this.Points[this.Index].Items.length > 0 )
var Count, Items;
if (this.Index - this.RecIndex !== 1 && this.RecIndex >= -1)
{
Items = [];
Count = 0;
for (var PointIndex = this.RecIndex + 1; PointIndex <= this.Index; PointIndex++)
{
Items = Items.concat(this.Points[PointIndex].Items);
Count += this.Points[PointIndex].Items.length;
}
}
else if (this.Index >= 0)
{
// Считываем изменения, начиная с последней точки, и смотрим что надо пересчитать.
var Point = this.Points[this.Index];
var Class = Point.Items[0].Class;
var Count = Point.Items.length;
Count = Point.Items.length;
Items = Point.Items;
}
else
return [];
if (Items.length > 0)
{
var Class = Items[0].Class;
// Смотрим, чтобы класс, в котором произошли все изменения был один и тот же
for ( var Index = 1; Index < Count; Index++ )
for (var Index = 1; Index < Count; Index++)
{
var Item = Point.Items[Index];
var Item = Items[Index];
if ( Class !== Item.Class )
if (Class !== Item.Class)
return [];
}
if ( Class instanceof ParaRun && Class.Is_SimpleChanges(Point.Items) )
return Point.Items;
if (Class instanceof ParaRun && Class.Is_SimpleChanges(Items))
return Items;
}
return [];
......
......@@ -832,26 +832,50 @@ ParaRun.prototype.Is_SimpleChanges = function(Changes)
if ( para_Math_Run === this.Type )
return false;
if ( Changes.length !== 1 || undefined === Changes[0].Data.Items || Changes[0].Data.Items.length !== 1 )
return false;
var ParaPos = null;
var Type = Changes[0].Data.Type;
var Item = Changes[0].Data.Items[0];
var Count = Changes.length;
for (var Index = 0; Index < Count; Index++)
{
var Data = Changes[Index].Data;
if ( undefined === Item )
return false;
if (undefined === Data.Items || 1 !== Data.Items.length)
return false;
// Добавление/удаление картинок может изменить размер строки. Добавление/удаление переноса строки/страницы/колонки
// нельзя обсчитывать функцией Recalculate_Fast.
// TODO: Но на самом деле стоило бы сделать нормальную проверку на высоту строки в функции Recalculate_Fast
var ItemType = Item.Type;
if ( para_Drawing === ItemType || para_NewLine === ItemType )
return false;
var Type = Data.Type;
var Item = Data.Items[0];
if ( historyitem_ParaRun_AddItem === Type || historyitem_ParaRun_RemoveItem === Type )
return true;
if (undefined === Item)
return false;
return false;
if (historyitem_ParaRun_AddItem !== Type && historyitem_ParaRun_RemoveItem !== Type)
return false;
// Добавление/удаление картинок может изменить размер строки. Добавление/удаление переноса строки/страницы/колонки
// нельзя обсчитывать функцией Recalculate_Fast.
// TODO: Но на самом деле стоило бы сделать нормальную проверку на высоту строки в функции Recalculate_Fast
var ItemType = Item.Type;
if (para_Drawing === ItemType || para_NewLine === ItemType)
return false;
// Проверяем, что все изменения произошли в одном и том же отрезке
var CurParaPos = this.Get_SimpleChanges_ParaPos([Changes[Index]]);
if (null === CurParaPos)
return false;
if (null === ParaPos)
ParaPos = CurParaPos;
else if (ParaPos.Line !== CurParaPos.Line || ParaPos.Range !== CurParaPos.Range)
return false;
}
if (Changes.length > 1)
{
// Все изменения одинаковые здесь, достаточно оставить одно
Changes.length = 1;
}
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