Commit ae42b7ec authored by Ilya Kirillov's avatar Ilya Kirillov

Рефакторинг функций Cursor_MoveLeft, Cursor_MoveRight. Для этих функций...

Рефакторинг функций Cursor_MoveLeft, Cursor_MoveRight. Для этих функций реализован базовый функционал в сносках.
parent 88cccdf2
......@@ -5392,88 +5392,135 @@ CDocument.prototype.Cursor_MoveLeft = function(AddToSelect, Word)
{
this.private_UpdateTargetForCollaboration();
if ("undefined" === typeof(Word) || null === Word)
if (undefined === Word || null === Word)
Word = false;
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
var RetValue = this.HdrFtr.Cursor_MoveLeft(AddToSelect, Word);
this.Controller.Cursor_MoveLeft(AddToSelect, Word);
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
this.private_UpdateCursorXY(true, true);
};
CDocument.prototype.Cursor_MoveRight = function(AddToSelect, Word, FromPaste)
{
this.private_UpdateTargetForCollaboration();
if (undefined === Word || null === Word)
Word = false;
this.Controller.Cursor_MoveRight(AddToSelect, Word, FromPaste);
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
this.private_UpdateCursorXY(true, true);
};
CDocument.prototype.Cursor_MoveUp = function(AddToSelect)
{
this.private_UpdateTargetForCollaboration();
if (docpostype_HdrFtr === this.CurPos.Type && docpostype_DrawingObjects === this.HdrFtr.CurHdrFtr.Content.CurPos.Type)
{
var RetValue = this.HdrFtr.Cursor_MoveUp(AddToSelect);
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
return RetValue;
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
var RetValue = this.DrawingObjects.cursorMoveLeft(AddToSelect, Word);
var RetValue = this.DrawingObjects.cursorMoveUp(AddToSelect);
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
this.private_UpdateCursorXY(true, true);
return RetValue;
}
else //if ( docpostype_Content === this.CurPos.Type )
{
if (this.CurPos.ContentPos < 0)
return false;
this.Remove_NumberingSelection();
if (true === this.Selection.Use)
{
if (true === AddToSelect)
{
// Добавляем к селекту
if (false === this.Content[this.Selection.EndPos].Cursor_MoveLeft(1, true, Word))
{
// Нужно перейти в конец предыдущего элемента
if (0 != this.Selection.EndPos)
if (true === this.Is_SelectionUse() && true !== AddToSelect)
this.Cursor_MoveLeft(false, false);
var bStopSelection = false;
if (true !== this.Is_SelectionUse() && true === AddToSelect)
{
this.Selection.EndPos--;
this.CurPos.ContentPos = this.Selection.EndPos;
bStopSelection = true;
this.private_StartSelectionFromCurPos();
}
var Item = this.Content[this.Selection.EndPos];
this.private_UpdateCursorXY(false, true);
var Result = this.private_MoveCursorUp(this.CurPos.RealX, this.CurPos.RealY, AddToSelect);
if (type_Paragraph == Item.GetType())
if (true === AddToSelect && true !== Result)
this.Cursor_MoveToStartPos(true);
if (bStopSelection)
this.private_StopSelection();
};
CDocument.prototype.Cursor_MoveDown = function(AddToSelect)
{
this.private_UpdateTargetForCollaboration();
if (docpostype_HdrFtr === this.CurPos.Type && docpostype_DrawingObjects === this.HdrFtr.CurHdrFtr.Content.CurPos.Type)
{
Item.Cursor_MoveToEndPos(true, true);
Item.Cursor_MoveLeft(1, true, Word);
var RetValue = this.HdrFtr.Cursor_MoveDown(AddToSelect);
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
return RetValue;
}
else if (type_Table == Item.GetType())
{
if (false === Item.Is_SelectionUse())
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
var LastRow = Item.Content[Item.Content.length - 1];
var RetValue = this.DrawingObjects.cursorMoveDown(AddToSelect);
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
return RetValue;
}
// Нам нужно выделить последний ряд таблицы
Item.Selection.Use = true;
Item.Selection.Type = table_Selection_Cell;
Item.Selection.StartPos.Pos = {
Row : LastRow.Index,
Cell : LastRow.Get_CellsCount() - 1
};
Item.Selection.EndPos.Pos = {Row : LastRow.Index, Cell : 0};
Item.CurCell = LastRow.Get_Cell(0);
Item.Selection.Data = [];
if (true === this.Is_SelectionUse() && true !== AddToSelect)
this.Cursor_MoveRight(false, false);
for (var CellIndex = 0; CellIndex < LastRow.Get_CellsCount(); CellIndex++)
var bStopSelection = false;
if (true !== this.Is_SelectionUse() && true === AddToSelect)
{
Item.Selection.Data.push({Cell : CellIndex, Row : LastRow.Index});
}
}
else
Item.Cursor_MoveLeft(1, true, Word);
bStopSelection = true;
this.private_StartSelectionFromCurPos();
}
this.private_UpdateCursorXY(false, true);
var Result = this.private_MoveCursorDown(this.CurPos.RealX, this.CurPos.RealY, AddToSelect);
if (true === AddToSelect && true !== Result)
this.Cursor_MoveToEndPos(true);
if (bStopSelection)
this.private_StopSelection();
};
CDocument.prototype.Cursor_MoveEndOfLine = function(AddToSelect)
{
this.private_UpdateTargetForCollaboration();
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
var RetValue = this.HdrFtr.Cursor_MoveEndOfLine(AddToSelect);
this.Document_UpdateInterfaceState();
this.private_UpdateCursorXY(true, true);
return RetValue;
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
var RetValue = this.DrawingObjects.cursorMoveEndOfLine(AddToSelect);
this.Document_UpdateInterfaceState();
this.private_UpdateCursorXY(true, true);
return RetValue;
}
else //if ( docpostype_Content === this.CurPos.Type )
{
if (this.CurPos.ContentPos < 0)
return false;
// Проверяем не обнулился ли селект в последнем элементе. Такое могло быть, если была
// заселекчена одна буква в последнем параграфе, а мы убрали селект последним действием.
if (this.Selection.EndPos != this.Selection.StartPos && false === this.Content[this.Selection.EndPos].Is_SelectionUse())
this.Remove_NumberingSelection();
if (true === this.Selection.Use)
{
// Такая ситуация возможна только при прямом селекте (сверху вниз), поэтому вычитаем
this.Selection.EndPos--;
this.CurPos.ContentPos = this.Selection.EndPos;
}
if (true === AddToSelect)
{
var Item = this.Content[this.Selection.EndPos];
Item.Cursor_MoveEndOfLine(AddToSelect);
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Is_SelectionUse())
......@@ -5484,13 +5531,11 @@ CDocument.prototype.Cursor_MoveLeft = function(AddToSelect, Word)
}
else
{
// Нам нужно переместить курсор в левый край селекта, и отменить весь селект
var Start = this.Selection.StartPos;
if (Start > this.Selection.EndPos)
Start = this.Selection.EndPos;
var Pos = ( this.Selection.EndPos >= this.Selection.StartPos ? this.Selection.EndPos : this.Selection.StartPos );
this.CurPos.ContentPos = Pos;
this.CurPos.ContentPos = Start;
this.Content[this.CurPos.ContentPos].Cursor_MoveLeft(1, false, Word);
var Item = this.Content[Pos];
Item.Cursor_MoveEndOfLine(AddToSelect);
this.Selection_Remove();
}
......@@ -5503,47 +5548,8 @@ CDocument.prototype.Cursor_MoveLeft = function(AddToSelect, Word)
this.Selection.StartPos = this.CurPos.ContentPos;
this.Selection.EndPos = this.CurPos.ContentPos;
if (false === this.Content[this.CurPos.ContentPos].Cursor_MoveLeft(1, true, Word))
{
// Нужно перейти в конец предыдущего элемент
if (0 != this.CurPos.ContentPos)
{
this.CurPos.ContentPos--;
var Item = this.Content[this.CurPos.ContentPos];
this.Selection.EndPos = this.CurPos.ContentPos;
if (type_Paragraph == Item.GetType())
{
Item.Cursor_MoveToEndPos(false, true);
Item.Cursor_MoveLeft(1, true, Word);
}
else if (type_Table == Item.GetType())
{
if (false === Item.Is_SelectionUse())
{
var LastRow = Item.Content[Item.Content.length - 1];
// Нам нужно выделить последний ряд таблицы
Item.Selection.Use = true;
Item.Selection.Type = table_Selection_Cell;
Item.Selection.StartPos.Pos = {
Row : LastRow.Index,
Cell : LastRow.Get_CellsCount() - 1
};
Item.Selection.EndPos.Pos = {Row : LastRow.Index, Cell : 0};
Item.CurCell = LastRow.Get_Cell(0);
Item.Selection.Data = [];
for (var CellIndex = 0; CellIndex < LastRow.Get_CellsCount(); CellIndex++)
{
Item.Selection.Data.push({Cell : CellIndex, Row : LastRow.Index});
}
}
else
Item.Cursor_MoveLeft(1, true, Word);
}
}
}
Item.Cursor_MoveEndOfLine(AddToSelect);
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Is_SelectionUse())
......@@ -5554,44 +5560,31 @@ CDocument.prototype.Cursor_MoveLeft = function(AddToSelect, Word)
}
else
{
if (false === this.Content[this.CurPos.ContentPos].Cursor_MoveLeft(1, false, Word))
{
// Нужно перейти в конец предыдущего элемент
if (0 != this.CurPos.ContentPos)
{
this.CurPos.ContentPos--;
this.Content[this.CurPos.ContentPos].Cursor_MoveToEndPos();
}
}
var Item = this.Content[this.CurPos.ContentPos];
Item.Cursor_MoveEndOfLine(AddToSelect);
}
}
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
this.private_UpdateCursorXY(true, true);
}
};
CDocument.prototype.Cursor_MoveRight = function(AddToSelect, Word, FromPaste)
CDocument.prototype.Cursor_MoveStartOfLine = function(AddToSelect)
{
this.private_UpdateTargetForCollaboration();
if ("undefined" === typeof(Word) || null === Word)
Word = false;
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
var RetValue = this.HdrFtr.Cursor_MoveRight(AddToSelect, Word);
var RetValue = this.HdrFtr.Cursor_MoveStartOfLine(AddToSelect);
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
this.private_UpdateCursorXY(true, true);
return RetValue;
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
var RetValue = this.DrawingObjects.cursorMoveRight(AddToSelect, Word);
var RetValue = this.DrawingObjects.cursorMoveStartOfLine(AddToSelect);
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
this.private_UpdateCursorXY(true, true);
return RetValue;
}
......@@ -5605,65 +5598,40 @@ CDocument.prototype.Cursor_MoveRight = function(AddToSelect, Word,
{
if (true === AddToSelect)
{
// Добавляем к селекту
if (false === this.Content[this.Selection.EndPos].Cursor_MoveRight(1, true, Word))
{
// Нужно перейти в начало следующего элемента
if (this.Content.length - 1 != this.Selection.EndPos)
{
this.Selection.EndPos++;
this.CurPos.ContentPos = this.Selection.EndPos;
var Item = this.Content[this.Selection.EndPos];
if (type_Paragraph === Item.GetType())
{
if (false === Item.Is_SelectionUse())
Item.Cursor_MoveStartOfLine(AddToSelect);
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Selection.Use)
{
var StartPos = Item.Internal_GetStartPos();
Item.CurPos.ContentPos = StartPos;
Item.Selection.Use = true;
Item.Selection.StartPos = StartPos;
Item.Selection.EndPos = StartPos;
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
}
Item.Cursor_MoveRight(1, true, Word);
}
else if (type_Table === Item.GetType())
{
if (false === Item.Is_SelectionUse())
else
{
var FirstRow = Item.Content[0];
var Pos = ( this.Selection.StartPos <= this.Selection.EndPos ? this.Selection.StartPos : this.Selection.EndPos );
this.CurPos.ContentPos = Pos;
// Нам нужно выделить первый ряд таблицы
Item.Selection.Use = true;
Item.Selection.Type = table_Selection_Cell;
Item.Selection.StartPos.Pos = {Row : 0, Cell : 0};
Item.Selection.EndPos.Pos = {Row : 0, Cell : FirstRow.Get_CellsCount() - 1};
Item.CurCell = FirstRow.Get_Cell(FirstRow.Get_CellsCount() - 1);
Item.Selection.Data = [];
var Item = this.Content[Pos];
Item.Cursor_MoveStartOfLine(AddToSelect);
for (var CellIndex = 0; CellIndex < FirstRow.Get_CellsCount(); CellIndex++)
{
Item.Selection.Data.push({Cell : CellIndex, Row : 0});
this.Selection_Remove();
}
}
else
Item.Cursor_MoveRight(1, true, Word);
}
}
}
// Проверяем не обнулился ли селект в последнем параграфе. Такое могло быть, если была
// заселекчена одна буква в последнем параграфе, а мы убрали селект последним действием.
if (this.Selection.EndPos != this.Selection.StartPos && false === this.Content[this.Selection.EndPos].Is_SelectionUse())
{
// Такая ситуация возможна только при обратном селекте (снизу вверх), поэтому вычитаем
this.Selection.EndPos++;
this.CurPos.ContentPos = this.Selection.EndPos;
}
if (true === AddToSelect)
{
this.Selection.Use = true;
this.Selection.StartPos = this.CurPos.ContentPos;
this.Selection.EndPos = this.CurPos.ContentPos;
var Item = this.Content[this.CurPos.ContentPos];
Item.Cursor_MoveStartOfLine(AddToSelect);
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Is_SelectionUse())
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Selection.Use)
{
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
......@@ -5671,31 +5639,47 @@ CDocument.prototype.Cursor_MoveRight = function(AddToSelect, Word,
}
else
{
// Нам нужно переместить курсор в правый край селекта, и отменить весь селект
var End = this.Selection.EndPos;
if (End < this.Selection.StartPos)
End = this.Selection.StartPos;
var Item = this.Content[this.CurPos.ContentPos];
Item.Cursor_MoveStartOfLine(AddToSelect);
}
}
this.CurPos.ContentPos = End;
this.Document_UpdateInterfaceState();
this.private_UpdateCursorXY(true, true);
}
};
CDocument.prototype.Cursor_MoveAt = function(X, Y, AddToSelect)
{
this.private_UpdateTargetForCollaboration();
if (true === FromPaste && type_Table === this.Content[this.CurPos.ContentPos].Get_Type() && true === this.Content[this.CurPos.ContentPos].Selection_IsToEnd() && this.Content.length - 1 !== this.CurPos.ContentPos)
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
this.CurPos.ContentPos = End + 1;
this.Content[this.CurPos.ContentPos].Cursor_MoveToStartPos(false);
return this.HdrFtr.Cursor_MoveAt(X, Y, this.CurPage, AddToSelect);
}
else
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
if (false === this.Content[this.CurPos.ContentPos].Cursor_MoveRight(1, false, Word, FromPaste))
return this.DrawingObjects.cursorMoveAt(X, Y, AddToSelect);
}
else //if ( docpostype_Content === this.CurPos.Type )
{
if (this.Content.length - 1 === this.CurPos.ContentPos)
this.Remove_NumberingSelection();
if (true === this.Selection.Use)
{
var Item = this.Content[this.CurPos.ContentPos];
Item.Cursor_MoveToEndPos(false);
}
}
if (true === AddToSelect)
{
this.Selection_SetEnd(X, Y, true);
}
else
{
this.Selection_Remove();
var ContentPos = this.Internal_GetContentPosByXY(X, Y);
this.CurPos.ContentPos = ContentPos;
var ElementPageIndex = this.private_GetElementPageIndexByXY(ContentPos, X, Y, this.CurPage);
this.Content[ContentPos].Cursor_MoveAt(X, Y, false, false, ElementPageIndex);
this.Document_UpdateInterfaceState();
}
}
else
......@@ -5704,539 +5688,364 @@ CDocument.prototype.Cursor_MoveRight = function(AddToSelect, Word,
{
this.Selection.Use = true;
this.Selection.StartPos = this.CurPos.ContentPos;
this.Selection.EndPos = this.CurPos.ContentPos;
this.Content[this.CurPos.ContentPos].Selection.Use = true;
this.Content[this.CurPos.ContentPos].Selection.StartPos = this.Content[this.CurPos.ContentPos].CurPos.ContentPos;
if (false === this.Content[this.CurPos.ContentPos].Cursor_MoveRight(1, true, Word))
{
// Нужно перейти в конец предыдущего элемента
if (this.Content.length - 1 != this.CurPos.ContentPos)
this.Selection_SetEnd(X, Y, true);
}
else
{
this.CurPos.ContentPos++;
var Item = this.Content[this.CurPos.ContentPos];
this.Selection.EndPos = this.CurPos.ContentPos;
var ContentPos = this.Internal_GetContentPosByXY(X, Y);
this.CurPos.ContentPos = ContentPos;
var ElementPageIndex = this.private_GetElementPageIndexByXY(ContentPos, X, Y, this.CurPage);
this.Content[ContentPos].Cursor_MoveAt(X, Y, false, false, ElementPageIndex);
if (type_Paragraph === Item.GetType())
{
if (false === Item.Is_SelectionUse())
{
var StartPos = Item.Internal_GetStartPos();
Item.CurPos.ContentPos = StartPos;
Item.Selection.Use = true;
Item.Selection.StartPos = StartPos;
Item.Selection.EndPos = StartPos;
this.Document_UpdateInterfaceState();
}
}
}
};
CDocument.prototype.Cursor_MoveToCell = function(bNext)
{
this.private_UpdateTargetForCollaboration();
Item.Cursor_MoveRight(1, true, Word);
if (docpostype_HdrFtr === this.CurPos.Type)
{
this.HdrFtr.Cursor_MoveToCell(bNext);
}
else if (type_Table === Item.GetType())
else if (docpostype_DrawingObjects == this.CurPos.Type)
{
if (false === Item.Is_SelectionUse())
this.DrawingObjects.cursorMoveToCell(bNext);
}
else //if ( docpostype_Content == this.CurPos.Type )
{
var FirstRow = Item.Content[0];
// Нам нужно выделить первый ряд таблицы
Item.Selection.Use = true;
Item.Selection.Type = table_Selection_Cell;
Item.Selection.StartPos.Pos = {Row : 0, Cell : 0};
Item.Selection.EndPos.Pos = {Row : 0, Cell : FirstRow.Get_CellsCount() - 1};
Item.CurCell = FirstRow.Get_Cell(FirstRow.Get_CellsCount() - 1);
Item.Selection.Data = [];
for (var CellIndex = 0; CellIndex < FirstRow.Get_CellsCount(); CellIndex++)
if (true === this.Selection.Use)
{
Item.Selection.Data.push({Cell : CellIndex, Row : 0});
}
if (this.Selection.StartPos === this.Selection.EndPos && type_Table === this.Content[this.Selection.StartPos].GetType())
this.Content[this.Selection.StartPos].Cursor_MoveToCell(bNext);
}
else
Item.Cursor_MoveRight(1, true, Word);
}
{
if (type_Table === this.Content[this.CurPos.ContentPos].GetType())
this.Content[this.CurPos.ContentPos].Cursor_MoveToCell(bNext);
}
}
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Is_SelectionUse())
};
CDocument.prototype.Set_ParagraphAlign = function(Align)
{
var SelectedInfo = this.Get_SelectedElementsInfo();
var Math = SelectedInfo.Get_Math();
if (null !== Math && true !== Math.Is_Inline())
{
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
}
Math.Set_Align(Align);
}
else
{
if (false === this.Content[this.CurPos.ContentPos].Cursor_MoveRight(1, false, Word))
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
// Нужно перейти в начало следующего элемента
if (this.Content.length - 1 != this.CurPos.ContentPos)
this.HdrFtr.Set_ParagraphAlign(Align);
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
this.CurPos.ContentPos++;
this.Content[this.CurPos.ContentPos].Cursor_MoveToStartPos();
if (true != this.DrawingObjects.isSelectedText())
{
var ParaDrawing = this.DrawingObjects.getMajorParaDrawing();
if (null != ParaDrawing)
{
var Paragraph = ParaDrawing.Parent;
Paragraph.Set_Align(Align);
}
}
else
{
this.DrawingObjects.setParagraphAlign(Align);
}
}
else //if ( docpostype_Content === this.CurPos.Type )
{
if (this.CurPos.ContentPos < 0)
return false;
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
this.private_UpdateCursorXY(true, true);
if (true === this.Selection.Use)
{
var StartPos = this.Selection.StartPos;
var EndPos = this.Selection.EndPos;
if (EndPos < StartPos)
{
var Temp = StartPos;
StartPos = EndPos;
EndPos = Temp;
}
};
CDocument.prototype.Cursor_MoveUp = function(AddToSelect)
{
this.private_UpdateTargetForCollaboration();
if (docpostype_HdrFtr === this.CurPos.Type && docpostype_DrawingObjects === this.HdrFtr.CurHdrFtr.Content.CurPos.Type)
for (var Index = StartPos; Index <= EndPos; Index++)
{
var RetValue = this.HdrFtr.Cursor_MoveUp(AddToSelect);
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
return RetValue;
var Item = this.Content[Index];
if (type_Paragraph == Item.GetType())
Item.Set_Align(Align, true);
else if (type_Table == Item.GetType())
{
Item.TurnOff_RecalcEvent();
Item.Set_ParagraphAlign(Align);
Item.TurnOn_RecalcEvent();
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
}
}
else
{
var RetValue = this.DrawingObjects.cursorMoveUp(AddToSelect);
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
return RetValue;
var Item = this.Content[this.CurPos.ContentPos];
if (type_Paragraph == Item.GetType())
{
Item.Set_Align(Align, true);
}
if (true === this.Is_SelectionUse() && true !== AddToSelect)
this.Cursor_MoveLeft(false, false);
var bStopSelection = false;
if (true !== this.Is_SelectionUse() && true === AddToSelect)
else if (type_Table == Item.GetType())
{
bStopSelection = true;
this.private_StartSelectionFromCurPos();
Item.Set_ParagraphAlign(Align);
}
}
this.private_UpdateCursorXY(false, true);
var Result = this.private_MoveCursorUp(this.CurPos.RealX, this.CurPos.RealY, AddToSelect);
}
}
if (true === AddToSelect && true !== Result)
this.Cursor_MoveToStartPos(true);
this.Recalculate();
if (bStopSelection)
this.private_StopSelection();
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
};
CDocument.prototype.Cursor_MoveDown = function(AddToSelect)
CDocument.prototype.Set_ParagraphSpacing = function(Spacing)
{
this.private_UpdateTargetForCollaboration();
if (docpostype_HdrFtr === this.CurPos.Type && docpostype_DrawingObjects === this.HdrFtr.CurHdrFtr.Content.CurPos.Type)
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
var RetValue = this.HdrFtr.Cursor_MoveDown(AddToSelect);
this.Document_UpdateInterfaceState();
var bRetValue = this.HdrFtr.Set_ParagraphSpacing(Spacing);
this.Document_UpdateSelectionState();
return RetValue;
this.Document_UpdateInterfaceState();
return bRetValue;
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
var RetValue = this.DrawingObjects.cursorMoveDown(AddToSelect);
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
return RetValue;
}
if (true === this.Is_SelectionUse() && true !== AddToSelect)
this.Cursor_MoveRight(false, false);
var bStopSelection = false;
if (true !== this.Is_SelectionUse() && true === AddToSelect)
if (true != this.DrawingObjects.isSelectedText())
{
bStopSelection = true;
this.private_StartSelectionFromCurPos();
}
this.private_UpdateCursorXY(false, true);
var Result = this.private_MoveCursorDown(this.CurPos.RealX, this.CurPos.RealY, AddToSelect);
if (true === AddToSelect && true !== Result)
this.Cursor_MoveToEndPos(true);
if (bStopSelection)
this.private_StopSelection();
};
CDocument.prototype.Cursor_MoveEndOfLine = function(AddToSelect)
{
this.private_UpdateTargetForCollaboration();
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
var ParaDrawing = this.DrawingObjects.getMajorParaDrawing();
if (null != ParaDrawing)
{
var RetValue = this.HdrFtr.Cursor_MoveEndOfLine(AddToSelect);
this.Document_UpdateInterfaceState();
this.private_UpdateCursorXY(true, true);
return RetValue;
var Paragraph = ParaDrawing.Parent;
Paragraph.Set_Spacing(Spacing, false);
this.Recalculate();
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
}
else
{
var RetValue = this.DrawingObjects.cursorMoveEndOfLine(AddToSelect);
this.DrawingObjects.setParagraphSpacing(Spacing);
}
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.private_UpdateCursorXY(true, true);
return RetValue;
}
else //if ( docpostype_Content === this.CurPos.Type )
{
if (this.CurPos.ContentPos < 0)
return false;
this.Remove_NumberingSelection();
if (true === this.Selection.Use)
{
if (true === AddToSelect)
var StartPos = this.Selection.StartPos;
var EndPos = this.Selection.EndPos;
if (EndPos < StartPos)
{
var Item = this.Content[this.Selection.EndPos];
Item.Cursor_MoveEndOfLine(AddToSelect);
var Temp = StartPos;
StartPos = EndPos;
EndPos = Temp;
}
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Is_SelectionUse())
for (var Index = StartPos; Index <= EndPos; Index++)
{
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
var Item = this.Content[Index];
if (type_Paragraph == Item.GetType())
Item.Set_Spacing(Spacing, false);
else if (type_Table == Item.GetType())
{
Item.TurnOff_RecalcEvent();
Item.Set_ParagraphSpacing(Spacing);
Item.TurnOn_RecalcEvent();
}
}
else
{
var Pos = ( this.Selection.EndPos >= this.Selection.StartPos ? this.Selection.EndPos : this.Selection.StartPos );
this.CurPos.ContentPos = Pos;
// Нам нужно пересчитать все изменения, начиная с первого элемента,
// попавшего в селект.
this.ContentLastChangePos = StartPos - 1;
var Item = this.Content[Pos];
Item.Cursor_MoveEndOfLine(AddToSelect);
this.Recalculate();
this.Selection_Remove();
}
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return;
}
else
{
if (true === AddToSelect)
{
this.Selection.Use = true;
this.Selection.StartPos = this.CurPos.ContentPos;
this.Selection.EndPos = this.CurPos.ContentPos;
var Item = this.Content[this.CurPos.ContentPos];
Item.Cursor_MoveEndOfLine(AddToSelect);
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Is_SelectionUse())
if (type_Paragraph == Item.GetType())
{
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
}
Item.Set_Spacing(Spacing, false);
// Нам нужно пересчитать все изменения, начиная с предыдущего элемента
this.ContentLastChangePos = this.CurPos.ContentPos - 1;
this.Recalculate();
}
else
else if (type_Table == Item.GetType())
{
var Item = this.Content[this.CurPos.ContentPos];
Item.Cursor_MoveEndOfLine(AddToSelect);
}
Item.Set_ParagraphSpacing(Spacing);
}
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.private_UpdateCursorXY(true, true);
}
};
CDocument.prototype.Cursor_MoveStartOfLine = function(AddToSelect)
CDocument.prototype.Set_ParagraphTabs = function(Tabs)
{
this.private_UpdateTargetForCollaboration();
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
var RetValue = this.HdrFtr.Cursor_MoveStartOfLine(AddToSelect);
var bRetValue = this.HdrFtr.Set_ParagraphTabs(Tabs);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.private_UpdateCursorXY(true, true);
return RetValue;
editor.Update_ParaTab(Default_Tab_Stop, Tabs);
return bRetValue;
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
var RetValue = this.DrawingObjects.cursorMoveStartOfLine(AddToSelect);
var bRetValue = this.DrawingObjects.setParagraphTabs(Tabs);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.private_UpdateCursorXY(true, true);
return RetValue;
editor.Update_ParaTab(Default_Tab_Stop, Tabs);
return bRetValue;
}
else //if ( docpostype_Content === this.CurPos.Type )
{
if (this.CurPos.ContentPos < 0)
return false;
this.Remove_NumberingSelection();
if (true === this.Selection.Use)
{
if (true === AddToSelect)
var StartPos = this.Selection.StartPos;
var EndPos = this.Selection.EndPos;
if (EndPos < StartPos)
{
var Item = this.Content[this.Selection.EndPos];
Item.Cursor_MoveStartOfLine(AddToSelect);
var Temp = StartPos;
StartPos = EndPos;
EndPos = Temp;
}
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Selection.Use)
for (var Index = StartPos; Index <= EndPos; Index++)
{
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
var Item = this.Content[Index];
if (type_Paragraph == Item.GetType())
Item.Set_Tabs(Tabs);
else if (type_Table == Item.GetType())
{
Item.TurnOff_RecalcEvent();
Item.Set_ParagraphTabs(Tabs);
Item.TurnOn_RecalcEvent();
}
}
else
{
var Pos = ( this.Selection.StartPos <= this.Selection.EndPos ? this.Selection.StartPos : this.Selection.EndPos );
this.CurPos.ContentPos = Pos;
var Item = this.Content[Pos];
Item.Cursor_MoveStartOfLine(AddToSelect);
// Нам нужно пересчитать все изменения, начиная с первого элемента,
// попавшего в селект.
this.ContentLastChangePos = StartPos;
this.Selection_Remove();
}
this.Recalculate();
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
editor.Update_ParaTab(Default_Tab_Stop, Tabs);
return;
}
else
{
if (true === AddToSelect)
{
this.Selection.Use = true;
this.Selection.StartPos = this.CurPos.ContentPos;
this.Selection.EndPos = this.CurPos.ContentPos;
var Item = this.Content[this.CurPos.ContentPos];
Item.Cursor_MoveStartOfLine(AddToSelect);
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Selection.Use)
if (type_Paragraph == Item.GetType())
{
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
}
Item.Set_Tabs(Tabs);
// Нам нужно пересчитать все изменения, начиная с текущего элемента
this.ContentLastChangePos = this.CurPos.ContentPos;
this.Recalculate(true);
editor.Update_ParaTab(Default_Tab_Stop, Tabs);
}
else
else if (type_Table == Item.GetType())
{
var Item = this.Content[this.CurPos.ContentPos];
Item.Cursor_MoveStartOfLine(AddToSelect);
}
Item.Set_ParagraphTabs(Tabs);
editor.Update_ParaTab(Default_Tab_Stop, Tabs);
}
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.private_UpdateCursorXY(true, true);
}
};
CDocument.prototype.Cursor_MoveAt = function(X, Y, AddToSelect)
CDocument.prototype.Set_ParagraphIndent = function(Ind)
{
this.private_UpdateTargetForCollaboration();
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
return this.HdrFtr.Cursor_MoveAt(X, Y, this.CurPage, AddToSelect);
var bRetValue = this.HdrFtr.Set_ParagraphIndent(Ind);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return bRetValue;
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
return this.DrawingObjects.cursorMoveAt(X, Y, AddToSelect);
var bRetValue = this.DrawingObjects.setParagraphIndent(Ind);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return bRetValue;
}
else //if ( docpostype_Content === this.CurPos.Type )
{
this.Remove_NumberingSelection();
if (this.CurPos.ContentPos < 0)
return false;
if (true === this.Selection.Use)
{
if (true === AddToSelect)
var StartPos = this.Selection.StartPos;
var EndPos = this.Selection.EndPos;
if (EndPos < StartPos)
{
this.Selection_SetEnd(X, Y, true);
var Temp = StartPos;
StartPos = EndPos;
EndPos = Temp;
}
else
{
this.Selection_Remove();
var ContentPos = this.Internal_GetContentPosByXY(X, Y);
this.CurPos.ContentPos = ContentPos;
var ElementPageIndex = this.private_GetElementPageIndexByXY(ContentPos, X, Y, this.CurPage);
this.Content[ContentPos].Cursor_MoveAt(X, Y, false, false, ElementPageIndex);
this.Document_UpdateInterfaceState();
}
}
else
for (var Index = StartPos; Index <= EndPos; Index++)
{
if (true === AddToSelect)
var Item = this.Content[Index];
if (type_Paragraph == Item.GetType())
{
this.Selection.Use = true;
this.Selection.StartPos = this.CurPos.ContentPos;
this.Content[this.CurPos.ContentPos].Selection.Use = true;
this.Content[this.CurPos.ContentPos].Selection.StartPos = this.Content[this.CurPos.ContentPos].CurPos.ContentPos;
this.Selection_SetEnd(X, Y, true);
}
else
{
var ContentPos = this.Internal_GetContentPosByXY(X, Y);
this.CurPos.ContentPos = ContentPos;
var ElementPageIndex = this.private_GetElementPageIndexByXY(ContentPos, X, Y, this.CurPage);
this.Content[ContentPos].Cursor_MoveAt(X, Y, false, false, ElementPageIndex);
this.Document_UpdateInterfaceState();
}
}
}
};
CDocument.prototype.Cursor_MoveToCell = function(bNext)
{
this.private_UpdateTargetForCollaboration();
if (docpostype_HdrFtr === this.CurPos.Type)
{
this.HdrFtr.Cursor_MoveToCell(bNext);
}
else if (docpostype_DrawingObjects == this.CurPos.Type)
{
this.DrawingObjects.cursorMoveToCell(bNext);
}
else //if ( docpostype_Content == this.CurPos.Type )
{
if (true === this.Selection.Use)
{
if (this.Selection.StartPos === this.Selection.EndPos && type_Table === this.Content[this.Selection.StartPos].GetType())
this.Content[this.Selection.StartPos].Cursor_MoveToCell(bNext);
}
else
{
if (type_Table === this.Content[this.CurPos.ContentPos].GetType())
this.Content[this.CurPos.ContentPos].Cursor_MoveToCell(bNext);
}
}
};
CDocument.prototype.Set_ParagraphAlign = function(Align)
{
var SelectedInfo = this.Get_SelectedElementsInfo();
var Math = SelectedInfo.Get_Math();
if (null !== Math && true !== Math.Is_Inline())
var NumPr = null;
if ("number" == typeof(Ind.ChangeLevel) && 0 != Ind.ChangeLevel && undefined != ( NumPr = Item.Numbering_Get() ))
{
Math.Set_Align(Align);
}
if (Ind.ChangeLevel > 0)
Item.Numbering_Add(NumPr.NumId, Math.min(8, NumPr.Lvl + 1));
else
{
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
this.HdrFtr.Set_ParagraphAlign(Align);
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
if (true != this.DrawingObjects.isSelectedText())
{
var ParaDrawing = this.DrawingObjects.getMajorParaDrawing();
if (null != ParaDrawing)
{
var Paragraph = ParaDrawing.Parent;
Paragraph.Set_Align(Align);
}
Item.Numbering_Add(NumPr.NumId, Math.max(0, NumPr.Lvl - 1));
}
else
{
this.DrawingObjects.setParagraphAlign(Align);
}
Item.Set_Ind(Ind, false);
}
else //if ( docpostype_Content === this.CurPos.Type )
{
if (this.CurPos.ContentPos < 0)
return false;
if (true === this.Selection.Use)
{
var StartPos = this.Selection.StartPos;
var EndPos = this.Selection.EndPos;
if (EndPos < StartPos)
{
var Temp = StartPos;
StartPos = EndPos;
EndPos = Temp;
}
for (var Index = StartPos; Index <= EndPos; Index++)
{
var Item = this.Content[Index];
if (type_Paragraph == Item.GetType())
Item.Set_Align(Align, true);
else if (type_Table == Item.GetType())
{
Item.TurnOff_RecalcEvent();
Item.Set_ParagraphAlign(Align);
Item.Set_ParagraphIndent(Ind);
Item.TurnOn_RecalcEvent();
}
}
}
else
{
var Item = this.Content[this.CurPos.ContentPos];
if (type_Paragraph == Item.GetType())
{
Item.Set_Align(Align, true);
}
else if (type_Table == Item.GetType())
{
Item.Set_ParagraphAlign(Align);
}
}
}
}
this.Recalculate();
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
};
CDocument.prototype.Set_ParagraphSpacing = function(Spacing)
{
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
var bRetValue = this.HdrFtr.Set_ParagraphSpacing(Spacing);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return bRetValue;
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
if (true != this.DrawingObjects.isSelectedText())
{
var ParaDrawing = this.DrawingObjects.getMajorParaDrawing();
if (null != ParaDrawing)
{
var Paragraph = ParaDrawing.Parent;
Paragraph.Set_Spacing(Spacing, false);
this.Recalculate();
}
}
else
{
this.DrawingObjects.setParagraphSpacing(Spacing);
}
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
}
else //if ( docpostype_Content === this.CurPos.Type )
{
if (this.CurPos.ContentPos < 0)
return false;
if (true === this.Selection.Use)
{
var StartPos = this.Selection.StartPos;
var EndPos = this.Selection.EndPos;
if (EndPos < StartPos)
{
var Temp = StartPos;
StartPos = EndPos;
EndPos = Temp;
}
for (var Index = StartPos; Index <= EndPos; Index++)
{
var Item = this.Content[Index];
if (type_Paragraph == Item.GetType())
Item.Set_Spacing(Spacing, false);
else if (type_Table == Item.GetType())
{
Item.TurnOff_RecalcEvent();
Item.Set_ParagraphSpacing(Spacing);
Item.TurnOn_RecalcEvent();
}
}
// Нам нужно пересчитать все изменения, начиная с первого элемента,
// попавшего в селект.
this.ContentLastChangePos = StartPos - 1;
this.ContentLastChangePos = StartPos;
this.Recalculate();
......@@ -6249,48 +6058,65 @@ CDocument.prototype.Set_ParagraphSpacing = function(Spacing)
var Item = this.Content[this.CurPos.ContentPos];
if (type_Paragraph == Item.GetType())
{
Item.Set_Spacing(Spacing, false);
var NumPr = null;
if ("number" == typeof(Ind.ChangeLevel) && 0 != Ind.ChangeLevel && undefined != ( NumPr = Item.Numbering_Get() ))
{
if (Ind.ChangeLevel > 0)
Item.Numbering_Add(NumPr.NumId, Math.min(8, NumPr.Lvl + 1));
else
Item.Numbering_Add(NumPr.NumId, Math.max(0, NumPr.Lvl - 1));
}
else
{
Item.Set_Ind(Ind, false);
}
// Нам нужно пересчитать все изменения, начиная с предыдущего элемента
this.ContentLastChangePos = this.CurPos.ContentPos - 1;
// Нам нужно пересчитать все изменения, начиная с текущего элемента
this.ContentLastChangePos = this.CurPos.ContentPos;
this.Recalculate();
}
else if (type_Table == Item.GetType())
{
Item.Set_ParagraphSpacing(Spacing);
Item.Set_ParagraphIndent(Ind);
}
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
}
};
CDocument.prototype.Set_ParagraphTabs = function(Tabs)
CDocument.prototype.Set_ParagraphNumbering = function(NumInfo)
{
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
var bRetValue = this.HdrFtr.Set_ParagraphTabs(Tabs);
var bRetValue = this.HdrFtr.Set_ParagraphNumbering(NumInfo);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
editor.Update_ParaTab(Default_Tab_Stop, Tabs);
return bRetValue;
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
var bRetValue = this.DrawingObjects.setParagraphTabs(Tabs);
var bRetValue = this.DrawingObjects.setParagraphNumbering(NumInfo);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
editor.Update_ParaTab(Default_Tab_Stop, Tabs);
return bRetValue;
}
else //if ( docpostype_Content === this.CurPos.Type )
else
{
if (this.CurPos.ContentPos < 0)
return false;
if (true === this.Selection.Use)
if (true === this.Selection.Use && selectionflag_Numbering !== this.Selection.Flag)
{
if (this.Selection.StartPos === this.Selection.EndPos && type_Table === this.Content[this.Selection.StartPos].GetType())
{
this.Content[this.Selection.StartPos].Set_ParagraphNumbering(NumInfo);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return true;
}
var StartPos = this.Selection.StartPos;
var EndPos = this.Selection.EndPos;
if (EndPos < StartPos)
......@@ -6300,213 +6126,22 @@ CDocument.prototype.Set_ParagraphTabs = function(Tabs)
EndPos = Temp;
}
if (NumInfo.SubType < 0)
{
// Убираем список из всех параграфов попавших в селект
for (var Index = StartPos; Index <= EndPos; Index++)
{
var Item = this.Content[Index];
if (type_Paragraph == Item.GetType())
Item.Set_Tabs(Tabs);
else if (type_Table == Item.GetType())
if (type_Paragraph == this.Content[Index].GetType())
this.Content[Index].Numbering_Remove();
else if (type_Table == this.Content[Index].GetType())
{
Item.TurnOff_RecalcEvent();
Item.Set_ParagraphTabs(Tabs);
Item.TurnOn_RecalcEvent();
this.Content[Index].TurnOff_RecalcEvent();
this.Content[Index].Set_ParagraphNumbering(NumInfo);
this.Content[Index].TurnOn_RecalcEvent();
}
}
// Нам нужно пересчитать все изменения, начиная с первого элемента,
// попавшего в селект.
this.ContentLastChangePos = StartPos;
this.Recalculate();
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
editor.Update_ParaTab(Default_Tab_Stop, Tabs);
return;
}
var Item = this.Content[this.CurPos.ContentPos];
if (type_Paragraph == Item.GetType())
{
Item.Set_Tabs(Tabs);
// Нам нужно пересчитать все изменения, начиная с текущего элемента
this.ContentLastChangePos = this.CurPos.ContentPos;
this.Recalculate(true);
editor.Update_ParaTab(Default_Tab_Stop, Tabs);
}
else if (type_Table == Item.GetType())
{
Item.Set_ParagraphTabs(Tabs);
editor.Update_ParaTab(Default_Tab_Stop, Tabs);
}
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
}
};
CDocument.prototype.Set_ParagraphIndent = function(Ind)
{
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
var bRetValue = this.HdrFtr.Set_ParagraphIndent(Ind);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return bRetValue;
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
var bRetValue = this.DrawingObjects.setParagraphIndent(Ind);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return bRetValue;
}
else //if ( docpostype_Content === this.CurPos.Type )
{
if (this.CurPos.ContentPos < 0)
return false;
if (true === this.Selection.Use)
{
var StartPos = this.Selection.StartPos;
var EndPos = this.Selection.EndPos;
if (EndPos < StartPos)
{
var Temp = StartPos;
StartPos = EndPos;
EndPos = Temp;
}
for (var Index = StartPos; Index <= EndPos; Index++)
{
var Item = this.Content[Index];
if (type_Paragraph == Item.GetType())
{
var NumPr = null;
if ("number" == typeof(Ind.ChangeLevel) && 0 != Ind.ChangeLevel && undefined != ( NumPr = Item.Numbering_Get() ))
{
if (Ind.ChangeLevel > 0)
Item.Numbering_Add(NumPr.NumId, Math.min(8, NumPr.Lvl + 1));
else
Item.Numbering_Add(NumPr.NumId, Math.max(0, NumPr.Lvl - 1));
}
else
{
Item.Set_Ind(Ind, false);
}
}
else if (type_Table == Item.GetType())
{
Item.TurnOff_RecalcEvent();
Item.Set_ParagraphIndent(Ind);
Item.TurnOn_RecalcEvent();
}
}
// Нам нужно пересчитать все изменения, начиная с первого элемента,
// попавшего в селект.
this.ContentLastChangePos = StartPos;
this.Recalculate();
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return;
}
var Item = this.Content[this.CurPos.ContentPos];
if (type_Paragraph == Item.GetType())
{
var NumPr = null;
if ("number" == typeof(Ind.ChangeLevel) && 0 != Ind.ChangeLevel && undefined != ( NumPr = Item.Numbering_Get() ))
{
if (Ind.ChangeLevel > 0)
Item.Numbering_Add(NumPr.NumId, Math.min(8, NumPr.Lvl + 1));
else
Item.Numbering_Add(NumPr.NumId, Math.max(0, NumPr.Lvl - 1));
}
else
{
Item.Set_Ind(Ind, false);
}
// Нам нужно пересчитать все изменения, начиная с текущего элемента
this.ContentLastChangePos = this.CurPos.ContentPos;
this.Recalculate();
}
else if (type_Table == Item.GetType())
{
Item.Set_ParagraphIndent(Ind);
}
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
}
};
CDocument.prototype.Set_ParagraphNumbering = function(NumInfo)
{
// Работаем с колонтитулом
if (docpostype_HdrFtr === this.CurPos.Type)
{
var bRetValue = this.HdrFtr.Set_ParagraphNumbering(NumInfo);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return bRetValue;
}
else if (docpostype_DrawingObjects === this.CurPos.Type)
{
var bRetValue = this.DrawingObjects.setParagraphNumbering(NumInfo);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return bRetValue;
}
else
{
if (this.CurPos.ContentPos < 0)
return false;
if (true === this.Selection.Use && selectionflag_Numbering !== this.Selection.Flag)
{
if (this.Selection.StartPos === this.Selection.EndPos && type_Table === this.Content[this.Selection.StartPos].GetType())
{
this.Content[this.Selection.StartPos].Set_ParagraphNumbering(NumInfo);
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
return true;
}
var StartPos = this.Selection.StartPos;
var EndPos = this.Selection.EndPos;
if (EndPos < StartPos)
{
var Temp = StartPos;
StartPos = EndPos;
EndPos = Temp;
}
if (NumInfo.SubType < 0)
{
// Убираем список из всех параграфов попавших в селект
for (var Index = StartPos; Index <= EndPos; Index++)
{
if (type_Paragraph == this.Content[Index].GetType())
this.Content[Index].Numbering_Remove();
else if (type_Table == this.Content[Index].GetType())
{
this.Content[Index].TurnOff_RecalcEvent();
this.Content[Index].Set_ParagraphNumbering(NumInfo);
this.Content[Index].TurnOn_RecalcEvent();
}
}
}
else
else
{
switch (NumInfo.Type)
{
......@@ -17006,6 +16641,339 @@ CDocument.prototype.controller_RecalculateCurPos = function()
this.Content[nPos].RecalculateCurPos();
}
};
CDocument.prototype.controller_CursorMoveLeft = function(AddToSelect, Word)
{
if (this.CurPos.ContentPos < 0)
return false;
this.Remove_NumberingSelection();
if (true === this.Selection.Use)
{
if (true === AddToSelect)
{
// Добавляем к селекту
if (false === this.Content[this.Selection.EndPos].Cursor_MoveLeft(1, true, Word))
{
// Нужно перейти в конец предыдущего элемента
if (0 != this.Selection.EndPos)
{
this.Selection.EndPos--;
this.CurPos.ContentPos = this.Selection.EndPos;
var Item = this.Content[this.Selection.EndPos];
if (type_Paragraph == Item.GetType())
{
Item.Cursor_MoveToEndPos(true, true);
Item.Cursor_MoveLeft(1, true, Word);
}
else if (type_Table == Item.GetType())
{
if (false === Item.Is_SelectionUse())
{
var LastRow = Item.Content[Item.Content.length - 1];
// Нам нужно выделить последний ряд таблицы
Item.Selection.Use = true;
Item.Selection.Type = table_Selection_Cell;
Item.Selection.StartPos.Pos = {
Row : LastRow.Index,
Cell : LastRow.Get_CellsCount() - 1
};
Item.Selection.EndPos.Pos = {Row : LastRow.Index, Cell : 0};
Item.CurCell = LastRow.Get_Cell(0);
Item.Selection.Data = [];
for (var CellIndex = 0; CellIndex < LastRow.Get_CellsCount(); CellIndex++)
{
Item.Selection.Data.push({Cell : CellIndex, Row : LastRow.Index});
}
}
else
Item.Cursor_MoveLeft(1, true, Word);
}
}
}
// Проверяем не обнулился ли селект в последнем элементе. Такое могло быть, если была
// заселекчена одна буква в последнем параграфе, а мы убрали селект последним действием.
if (this.Selection.EndPos != this.Selection.StartPos && false === this.Content[this.Selection.EndPos].Is_SelectionUse())
{
// Такая ситуация возможна только при прямом селекте (сверху вниз), поэтому вычитаем
this.Selection.EndPos--;
this.CurPos.ContentPos = this.Selection.EndPos;
}
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Is_SelectionUse())
{
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
}
}
else
{
// Нам нужно переместить курсор в левый край селекта, и отменить весь селект
var Start = this.Selection.StartPos;
if (Start > this.Selection.EndPos)
Start = this.Selection.EndPos;
this.CurPos.ContentPos = Start;
this.Content[this.CurPos.ContentPos].Cursor_MoveLeft(1, false, Word);
this.Selection_Remove();
}
}
else
{
if (true === AddToSelect)
{
this.Selection.Use = true;
this.Selection.StartPos = this.CurPos.ContentPos;
this.Selection.EndPos = this.CurPos.ContentPos;
if (false === this.Content[this.CurPos.ContentPos].Cursor_MoveLeft(1, true, Word))
{
// Нужно перейти в конец предыдущего элемент
if (0 != this.CurPos.ContentPos)
{
this.CurPos.ContentPos--;
var Item = this.Content[this.CurPos.ContentPos];
this.Selection.EndPos = this.CurPos.ContentPos;
if (type_Paragraph == Item.GetType())
{
Item.Cursor_MoveToEndPos(false, true);
Item.Cursor_MoveLeft(1, true, Word);
}
else if (type_Table == Item.GetType())
{
if (false === Item.Is_SelectionUse())
{
var LastRow = Item.Content[Item.Content.length - 1];
// Нам нужно выделить последний ряд таблицы
Item.Selection.Use = true;
Item.Selection.Type = table_Selection_Cell;
Item.Selection.StartPos.Pos = {
Row : LastRow.Index,
Cell : LastRow.Get_CellsCount() - 1
};
Item.Selection.EndPos.Pos = {Row : LastRow.Index, Cell : 0};
Item.CurCell = LastRow.Get_Cell(0);
Item.Selection.Data = [];
for (var CellIndex = 0; CellIndex < LastRow.Get_CellsCount(); CellIndex++)
{
Item.Selection.Data.push({Cell : CellIndex, Row : LastRow.Index});
}
}
else
Item.Cursor_MoveLeft(1, true, Word);
}
}
}
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Is_SelectionUse())
{
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
}
}
else
{
if (false === this.Content[this.CurPos.ContentPos].Cursor_MoveLeft(1, false, Word))
{
// Нужно перейти в конец предыдущего элемент
if (0 != this.CurPos.ContentPos)
{
this.CurPos.ContentPos--;
this.Content[this.CurPos.ContentPos].Cursor_MoveToEndPos();
}
}
}
}
};
CDocument.prototype.controller_CursorMoveRight = function(AddToSelect, Word, FromPaste)
{
if (this.CurPos.ContentPos < 0)
return false;
this.Remove_NumberingSelection();
if (true === this.Selection.Use)
{
if (true === AddToSelect)
{
// Добавляем к селекту
if (false === this.Content[this.Selection.EndPos].Cursor_MoveRight(1, true, Word))
{
// Нужно перейти в начало следующего элемента
if (this.Content.length - 1 != this.Selection.EndPos)
{
this.Selection.EndPos++;
this.CurPos.ContentPos = this.Selection.EndPos;
var Item = this.Content[this.Selection.EndPos];
if (type_Paragraph === Item.GetType())
{
if (false === Item.Is_SelectionUse())
{
var StartPos = Item.Internal_GetStartPos();
Item.CurPos.ContentPos = StartPos;
Item.Selection.Use = true;
Item.Selection.StartPos = StartPos;
Item.Selection.EndPos = StartPos;
}
Item.Cursor_MoveRight(1, true, Word);
}
else if (type_Table === Item.GetType())
{
if (false === Item.Is_SelectionUse())
{
var FirstRow = Item.Content[0];
// Нам нужно выделить первый ряд таблицы
Item.Selection.Use = true;
Item.Selection.Type = table_Selection_Cell;
Item.Selection.StartPos.Pos = {Row : 0, Cell : 0};
Item.Selection.EndPos.Pos = {Row : 0, Cell : FirstRow.Get_CellsCount() - 1};
Item.CurCell = FirstRow.Get_Cell(FirstRow.Get_CellsCount() - 1);
Item.Selection.Data = [];
for (var CellIndex = 0; CellIndex < FirstRow.Get_CellsCount(); CellIndex++)
{
Item.Selection.Data.push({Cell : CellIndex, Row : 0});
}
}
else
Item.Cursor_MoveRight(1, true, Word);
}
}
}
// Проверяем не обнулился ли селект в последнем параграфе. Такое могло быть, если была
// заселекчена одна буква в последнем параграфе, а мы убрали селект последним действием.
if (this.Selection.EndPos != this.Selection.StartPos && false === this.Content[this.Selection.EndPos].Is_SelectionUse())
{
// Такая ситуация возможна только при обратном селекте (снизу вверх), поэтому вычитаем
this.Selection.EndPos++;
this.CurPos.ContentPos = this.Selection.EndPos;
}
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Is_SelectionUse())
{
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
}
}
else
{
// Нам нужно переместить курсор в правый край селекта, и отменить весь селект
var End = this.Selection.EndPos;
if (End < this.Selection.StartPos)
End = this.Selection.StartPos;
this.CurPos.ContentPos = End;
if (true === FromPaste && type_Table === this.Content[this.CurPos.ContentPos].Get_Type() && true === this.Content[this.CurPos.ContentPos].Selection_IsToEnd() && this.Content.length - 1 !== this.CurPos.ContentPos)
{
this.CurPos.ContentPos = End + 1;
this.Content[this.CurPos.ContentPos].Cursor_MoveToStartPos(false);
}
else
{
if (false === this.Content[this.CurPos.ContentPos].Cursor_MoveRight(1, false, Word, FromPaste))
{
if (this.Content.length - 1 === this.CurPos.ContentPos)
{
var Item = this.Content[this.CurPos.ContentPos];
Item.Cursor_MoveToEndPos(false);
}
}
}
this.Selection_Remove();
}
}
else
{
if (true === AddToSelect)
{
this.Selection.Use = true;
this.Selection.StartPos = this.CurPos.ContentPos;
this.Selection.EndPos = this.CurPos.ContentPos;
if (false === this.Content[this.CurPos.ContentPos].Cursor_MoveRight(1, true, Word))
{
// Нужно перейти в конец предыдущего элемента
if (this.Content.length - 1 != this.CurPos.ContentPos)
{
this.CurPos.ContentPos++;
var Item = this.Content[this.CurPos.ContentPos];
this.Selection.EndPos = this.CurPos.ContentPos;
if (type_Paragraph === Item.GetType())
{
if (false === Item.Is_SelectionUse())
{
var StartPos = Item.Internal_GetStartPos();
Item.CurPos.ContentPos = StartPos;
Item.Selection.Use = true;
Item.Selection.StartPos = StartPos;
Item.Selection.EndPos = StartPos;
}
Item.Cursor_MoveRight(1, true, Word);
}
else if (type_Table === Item.GetType())
{
if (false === Item.Is_SelectionUse())
{
var FirstRow = Item.Content[0];
// Нам нужно выделить первый ряд таблицы
Item.Selection.Use = true;
Item.Selection.Type = table_Selection_Cell;
Item.Selection.StartPos.Pos = {Row : 0, Cell : 0};
Item.Selection.EndPos.Pos = {Row : 0, Cell : FirstRow.Get_CellsCount() - 1};
Item.CurCell = FirstRow.Get_Cell(FirstRow.Get_CellsCount() - 1);
Item.Selection.Data = [];
for (var CellIndex = 0; CellIndex < FirstRow.Get_CellsCount(); CellIndex++)
{
Item.Selection.Data.push({Cell : CellIndex, Row : 0});
}
}
else
Item.Cursor_MoveRight(1, true, Word);
}
}
}
// Проверяем не обнулился ли селект (т.е. ничего не заселекчено)
if (this.Selection.StartPos == this.Selection.EndPos && false === this.Content[this.Selection.StartPos].Is_SelectionUse())
{
this.Selection.Use = false;
this.CurPos.ContentPos = this.Selection.EndPos;
}
}
else
{
if (false === this.Content[this.CurPos.ContentPos].Cursor_MoveRight(1, false, Word))
{
// Нужно перейти в начало следующего элемента
if (this.Content.length - 1 != this.CurPos.ContentPos)
{
this.CurPos.ContentPos++;
this.Content[this.CurPos.ContentPos].Cursor_MoveToStartPos();
}
}
}
}
};
//----------------------------------------------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------------------------------------------
......
......@@ -173,4 +173,18 @@ CDocumentControllerBase.prototype.Get_ParentTextTransform = function()
* Пересчитываем текущую позицию.
*/
CDocumentControllerBase.prototype.RecalculateCurPos = function(){};
/**
* Смещаем курсор влево
* @param {boolean} AddToSelect Добавлять ли к селекту смещение
* @param {boolean} Word Осуществлять ли переход по целому слову
* @returns {boolean} Получилось ли перемещение, или мы достигли предела.
*/
CDocumentControllerBase.prototype.Cursor_MoveLeft = function(AddToSelect, Word){return false;};
/**
* Смещаем курсор вправо
* @param {boolean} AddToSelect Добавлять ли к селекту смещение
* @param {boolean} Word Осуществлять ли переход по целому слову
* @param {boolean} FromPaste Пришла ли данная комнда после "вставки"
* @returns {boolean} Получилось ли перемещение, или мы достигли предела.
*/
CDocumentControllerBase.prototype.Cursor_MoveRight = function(AddToSelect, Word, FromPaste){return false;};
......@@ -8,6 +8,7 @@
/**
* Специальный класс-обработчик команд в автофигурах
* @param {CDocument} LogicDocument - Ссылка на главный документ.
* @param {CDrawingsObjects} DrawingsObjects - ССылка на объект, работающий с автофигурами
* @constructor
* @extends {CDocumentControllerBase}
*/
......@@ -23,5 +24,13 @@ CDrawingsController.prototype.RecalculateCurPos = function()
{
this.DrawingObjects.recalculateCurPos();
};
CDrawingsController.prototype.Cursor_MoveLeft = function(AddToSelect, Word)
{
return this.DrawingObjects.cursorMoveLeft(AddToSelect, Word);
};
CDrawingsController.prototype.Cursor_MoveRight = function(AddToSelect, Word, FromPaste)
{
return this.DrawingObjects.cursorMoveRight(AddToSelect, Word, FromPaste);
};
......@@ -27,7 +27,8 @@ function CFootnotesController(LogicDocument)
this.Selection = {
Use : false,
Footnotes : []
Footnotes : [],
Direction : 0
};
this.CurFootnote = null;
......@@ -238,6 +239,40 @@ CFootnotesController.prototype.RecalculateCurPos = function()
if (null !== this.CurFootnote)
this.CurFootnote.RecalculateCurPos();
};
CFootnotesController.prototype.Cursor_MoveLeft = function(AddToSelect, Word)
{
var bRetValue = false;
// TODO: Доделать селект и курсор
if (true === this.Selection.Use)
{
}
else
{
if (null !== this.CurFootnote)
bRetValue = this.CurFootnote.Cursor_MoveLeft(AddToSelect, Word);
}
return bRetValue;
};
CFootnotesController.prototype.Cursor_MoveRight = function(AddToSelect, Word, FromPaste)
{
var bRetValue = false;
// TODO: Доделать селект и курсор
if (true === this.Selection.Use)
{
}
else
{
if (null !== this.CurFootnote)
bRetValue = this.CurFootnote.Cursor_MoveRight(AddToSelect, Word, FromPaste);
}
return bRetValue;
};
function CFootEndnotePage()
{
......
......@@ -27,3 +27,11 @@ CHdrFtrController.prototype.RecalculateCurPos = function()
{
this.HdrFtr.RecalculateCurPos();
};
CHdrFtrController.prototype.Cursor_MoveLeft = function(AddToSelect, Word)
{
return this.HdrFtr.Cursor_MoveLeft(AddToSelect, Word);
};
CHdrFtrController.prototype.Cursor_MoveRight = function(AddToSelect, Word, FromPaste)
{
return this.HdrFtr.Cursor_MoveRight(AddToSelect, Word, FromPaste);
};
\ No newline at end of file
......@@ -21,5 +21,13 @@ CLogicDocumentController.prototype.RecalculateCurPos = function()
{
this.LogicDocument.controller_RecalculateCurPos();
};
CLogicDocumentController.prototype.Cursor_MoveLeft = function(AddToSelect, Word)
{
return this.LogicDocument.controller_CursorMoveLeft(AddToSelect, Word);
};
CLogicDocumentController.prototype.Cursor_MoveRight = function(AddToSelect, Word, FromPaste)
{
return this.LogicDocument.controller_CursorMoveRight(AddToSelect, Word, FromPaste);
};
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