Commit e44af7b3 authored by Anna.Pavlova's avatar Anna.Pavlova Committed by Alexander.Trofimov

изменения для новой версии для Math

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@55058 954022d7-b5bf-4e40-9824-e11837661b57
parent c931112e
......@@ -11,7 +11,8 @@ function ParaMath()
this.Jc = undefined;
this.Math = new CMathComposition();
this.Math.Parent = this;
this.Content = this.Math.Root.content; // Root.content
this.State = new CParaRunState(); // Положение курсора и селекта для данного run
this.Paragraph = null;
this.StartLine = 0;
......@@ -201,10 +202,10 @@ ParaMath.prototype =
Get_CurrentParaPos : function()
{
var CurPos = this.State.ContentPos;
//var CurPos = this.State.ContentPos;
if ( CurPos >= 0 && CurPos < this.Content.length )
return this.Content[CurPos].Get_CurrentParaPos();
/*if ( CurPos >= 0 && CurPos < this.Content.length )
return this.Content[CurPos].Get_CurrentParaPos();*/
return new CParaPos( this.StartRange, this.StartLine, 0, 0 );
},
......@@ -293,7 +294,7 @@ ParaMath.prototype =
var TextPr = new CTextPr();
TextPr.Init_Default();
this.Math.RecalculateComposition(g_oTextMeasurer, TextPr);
var Size = this.Math.getSize();
var Size = this.Math.Size;
this.Width = Size.Width;
this.Height = Size.Height;
......@@ -371,7 +372,7 @@ ParaMath.prototype =
{
// Слово не убирается в отрезке. Переносим слово в следующий отрезок
PRS.MoveToLBP = true;
PRS.NewRange = true;
PRS.NewRange = true; // перенос на новую строку
}
else
{
......@@ -380,7 +381,7 @@ ParaMath.prototype =
// Слово не убирается в отрезке, но, поскольку, слово 1 на строке и отрезок тоже 1,
// делим слово в данном месте
PRS.NewRange = true;
PRS.NewRange = true; // перенос на новую строку
}
}
else
......@@ -403,7 +404,7 @@ ParaMath.prototype =
if ( true !== PRS.NewRange )
{
RangeEndPos = 1;
RangeEndPos = this.Content.length; // RangeEndPos = 1; to RangeEndPos = this.Content.length;
// Удаляем лишние строки, оставшиеся после предыдущего пересчета в самом конце
if ( this.Lines.length > this.LinesLength )
......@@ -421,6 +422,10 @@ ParaMath.prototype =
{
this.Range.StartPos = RangeStartPos;
this.Range.EndPos = RangeEndPos;
/*this.Lines[0].RangesLength = 1;
this.Lines[0].Ranges.length = this.Content.length - 1;*/
this.Lines[0].RangesLength = 1;
if ( this.Lines[0].Ranges.length > 1 )
......@@ -582,7 +587,7 @@ ParaMath.prototype =
return this.Math.UpdateCursor();
}
return { X : X };
return {X : X };
},
Refresh_RecalcData : function(Data)
......@@ -668,7 +673,8 @@ ParaMath.prototype =
Cursor_Is_Start : function()
{
// TODO: ParaMath.Cursor_Is_Start
return true;
return this.Math.Cursor_Is_Start();
},
Cursor_Is_NeededCorrectPos : function()
......@@ -679,33 +685,121 @@ ParaMath.prototype =
Cursor_Is_End : function()
{
// TODO: ParaMath.Cursor_Is_End
return true;
return this.Math.Cursor_Is_End();
},
Cursor_MoveToStartPos : function()
{
// TODO: ParaMath.Cursor_MoveToStartPos
this.Math.Cursor_MoveToStartPos();
},
Cursor_MoveToEndPos : function(SelectFromEnd)
{
// TODO: ParaMath.Cursor_MoveToEndPos
this.Math.Cursor_MoveToEndPos();
},
Get_ParaContentPosByXY : function(SearchPos, Depth, _CurLine, _CurRange, StepEnd)
{
// TODO: ParaMath.Get_ParaContentPosByXY
return false;
var Result = false;
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange ); // если находимся в нулевой строке (для текущей позиции), то CurRange мб ненулевой
var Range = this.Lines[CurLine].Ranges[CurRange];
var StartPos = Range.StartPos; // 0
var EndPos = Range.EndPos; // this.content.length
// TODO: реализовать поиск по Y (для случая, когда формула занимает больше одной строки)
// Проверяем, попали ли мы в формулу
var Dx = this.Math.Size.WidthVisible;
var D = SearchPos.X - SearchPos.CurX;
//var Diff = Math.abs(D) < Math.abs(D - Dx) ? Math.abs(D) : Math.abs(D - Dx);
var Diff = SearchPos.X - SearchPos.CurX;
if(Math.abs(Diff) < SearchPos.DiffX + 0.001 )
{
SearchPos.DiffX = Math.abs(Diff);
this.Math.Selection_SetStart(SearchPos.X, SearchPos.Y);
this.Math.Selection_SetEnd(SearchPos.X, SearchPos.Y);
this.Math.Root.get_ParaContentPos(false, SearchPos.Pos);
Result = true;
if ( Diff >= - 0.001 && Diff <= Dx + 0.001 )
{
SearchPos.InText = true;
}
}
SearchPos.CurX += Dx;
/*for(var CurPos = StartPos; CurPos < EndPos; CurPos++)
{
var Dx = this.Content[CurPos].value.size.width;
// Проверяем, попали ли мы в данный элемент
var Diff = SearchPos.X - SearchPos.CurX;
if ( Math.abs( Diff ) < SearchPos.DiffX + 0.001 )
{
SearchPos.DiffX = Math.abs( Diff );
SearchPos.Pos.Update( CurPos, Depth );
//this.Math.Root.get_ParaContentPos(false, SearchPos.Pos);
Result = true;
if ( Diff >= - 0.001 && Diff <= Dx + 0.001 )
{
SearchPos.InText = true;
}
}
SearchPos.CurX += Dx;
}*/
/*var Diff = SearchPos.X - SearchPos.CurX;
if ( Math.abs( Diff ) < SearchPos.DiffX + 0.001 )
{
SearchPos.DiffX = Math.abs( Diff );
SearchPos.Pos.Update( StartPos, Depth );
Result = true;
if ( Diff >= - 0.001 && Diff <= this.Math.size.WidthVisible + 0.001 )
{
SearchPos.InText = true;
}
}
SearchPos.CurX += this.Math.size.WidthVisible;*/
return Result;
},
Get_ParaContentPos : function(bSelection, bStart, ContentPos)
Get_ParaContentPos : function(bSelection, bStart, ContentPos) // получение позиции контентов
{
// TODO: ParaMath.Get_ParaContentPos
this.Math.Root.get_ParaContentPos(bStart, ContentPos);
},
Set_ParaContentPos : function(ContentPos, Depth)
Set_ParaContentPos : function(ContentPos, Depth) // выставить позицию в конетенте
{
// TODO: ParaMath.Set_ParaContentPos
var Pos = ContentPos.Get(Depth);
this.State.ContentPos = Pos;
this.Math.Root.set_ParaContentPos(ContentPos, Depth);
},
Get_PosByElement : function(Class, ContentPos, Depth, UseRange, Range, Line)
......
......@@ -10,8 +10,10 @@ function CMathBase()
this.size = null;
this.argSize = 0;
this.CurPos_X = 0;
this.CurPos_Y = 0;
//this.CurPos_X = 0;
//this.CurPos_Y = 0;
this.selectPos =
{
startX: 0,
......@@ -1174,5 +1176,27 @@ CMathBase.prototype =
}
return gaps;
},
/// Position for Paragraph
get_ParaContentPos: function(bStart, ContentPos)
{
ContentPos.Add(this.CurPos_X);
ContentPos.Add(this.CurPos_Y);
this.elements[this.CurPos_X][this.CurPos_Y].get_ParaContentPos(bStart, ContentPos);
},
set_ParaContentPos: function(ContentPos, Depth)
{
this.CurPos_X = ContentPos.Get(Depth);
this.CurPos_Y = ContentPos.Get(Depth + 1);
Depth += 2;
this.elements[this.CurPos_X][this.CurPos_Y].set_ParaContentPos(ContentPos, Depth);
}
//////////////////////////
}
......@@ -365,7 +365,10 @@ function CMathContent()
this.bRoot = false;
this.content = new Array(); // array of mathElem
//this.length = 0;
this.CurPos = 0;
this.pos = {x:0, y:0}; // относительная позиция
this.Composition = null; // ссылка на общую формулу
......@@ -572,7 +575,7 @@ CMathContent.prototype =
return [item];
},
addMComponent: function(ind)
_addMComponent: function(ind)
{
//var l_gap = 0, r_gap = 0;
var mathElem = null; //положение этого элемента будет this.CurPos + 1
......@@ -693,8 +696,11 @@ CMathContent.prototype =
if(obj.typeObj == MATH_COMP)
obj.setArgSize(this.argSize);
//this.length = this.content.length;
},
addToContent: function(obj, shift) // for "edit"
addToContent: function(obj, shift) // for "edit", letters
{
var elem = new mathElem(obj);
......@@ -4660,6 +4666,32 @@ CMathContent.prototype =
this.setLogicalPosition(0);
}
},
cursor_Is_Start: function()
{
var result = false;
if( !this.IsEmpty() )
{
if(this.CurPos == 0)
result = true;
else if(this.CurPos == 1 && this.content[1].value.typeObj === MATH_RUN_PRP)
result = true;
}
return result;
},
cursor_Is_End: function()
{
var result = false;
if(!this.IsEmpty())
{
if(this.CurPos == this.content.length - 1)
result = true;
}
return result;
},
//////////////////////////////////////
// не вызываем из mouseDown эту ф-ию, тк иначе не установим селект для внутреннего объекта (setStart_Selection)
......@@ -5389,7 +5421,7 @@ CMathContent.prototype =
this.content[i].widthToEl = this.content[i-1].widthToEl + this.content[i].value.size.width + this.content[i].gaps.left + this.content[i].gaps.right;
}
},
update_Cursor: function()
old_update_Cursor: function()
{
//var sizeCursor = this.getRunPrp(this.CurPos).FontSize*g_dKoef_pt_to_mm;
......@@ -5411,6 +5443,22 @@ CMathContent.prototype =
editor.WordControl.m_oLogicDocument.DrawingDocument.UpdateTarget( position.x, position.y, 0 );
editor.WordControl.m_oDrawingDocument.UpdateTargetFromPaint = false;
},
update_Cursor: function()
{
var runPrp = this.getRunPrp(this.CurPos);
var oWPrp = runPrp.getMergedWPrp();
this.applyArgSize(oWPrp);
var absPos = this.Composition.absPos;
var sizeCursor = oWPrp.FontSize*g_dKoef_pt_to_mm;
var X = this.pos.x + absPos.x + this.content[this.CurPos].widthToEl,
Y = this.pos.y + absPos.y + this.size.ascent - sizeCursor*0.8;
return {X: X, Y: Y, Height: sizeCursor};
},
old_coordWOGaps: function( msCoord )
{
......@@ -7093,6 +7141,40 @@ CMathContent.prototype =
return flag;
},
/// Position for Paragraph
get_ParaContentPos: function(bStart, ContentPos)
{
var bSelect = this.selectUse();
if(bSelect)
{
var pos = bStart ? this.RealSelect.startPos : this.RealSelect.endPos;
ContentPos.Add(pos);
}
else
{
ContentPos.Add(this.CurPos);
if(this.content[this.CurPos].value.typeObj == MATH_COMP)
this.content[this.CurPos].value.get_ParaContentPos(bStart, ContentPos);
}
},
set_ParaContentPos: function(ContentPos, Depth)
{
this.CurPos = ContentPos.Get(Depth);
Depth++;
if(this.content[this.CurPos].value.typeObj == MATH_COMP)
this.content[this.CurPos].value.set_ParaContentPos(ContentPos, Depth);
},
//////////////////////////
//////////////// Test function for test_math //////////////////
mouseUp: function()
......@@ -7224,7 +7306,6 @@ CMathContent.prototype =
}
/////////////////////////////////////////////////////////////////
//// test function for me ////
/*RecalculateReverse: function(oMeasure)
......@@ -7264,6 +7345,15 @@ function CMathComposition()
wrapRight: false
};
this.Size =
{
Width: 0,
WidthVisible: 0,
Height: 0,
Ascent: 0,
Descent: 0
};
this.CurrentContent = null;
this.SelectContent = null;
......@@ -7858,6 +7948,16 @@ CMathComposition.prototype =
{
this.Root.Resize(oMeasure);
this.Root.setPosition({x: 0, y: 0});
this.Size =
{
Width: this.Root.size.width,
WidthVisible: this.Root.size.width,
Height: this.Root.size.height,
Ascent: this.Root.size.ascent,
Descent: this.Root.size.height - this.Root.size.ascent
};
},
test_for_edit: function()
{
......@@ -8017,7 +8117,15 @@ CMathComposition.prototype =
this.Root.cursor_MoveToEndPos();
this.CurrentContent = this.SelectContent = this.Root;
},
getSize: function()
Cursor_Is_Start: function()
{
return this.Root.cursor_Is_Start();
},
Cursor_Is_End: function()
{
return this.Root.cursor_Is_End();
},
old_getSize: function()
{
/*return this.Root.size;*/
......@@ -8112,7 +8220,7 @@ CMathComposition.prototype =
},
UpdateCursor: function()
{
this.SelectContent.update_Cursor();
return this.SelectContent.update_Cursor();
},
Refresh_RecalcData2: function()
{
......
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