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() ...@@ -11,7 +11,8 @@ function ParaMath()
this.Jc = undefined; this.Jc = undefined;
this.Math = new CMathComposition(); this.Math = new CMathComposition();
this.Math.Parent = this; this.Math.Parent = this;
this.Content = this.Math.Root.content; // Root.content
this.State = new CParaRunState(); // Положение курсора и селекта для данного run
this.Paragraph = null; this.Paragraph = null;
this.StartLine = 0; this.StartLine = 0;
...@@ -201,10 +202,10 @@ ParaMath.prototype = ...@@ -201,10 +202,10 @@ ParaMath.prototype =
Get_CurrentParaPos : function() Get_CurrentParaPos : function()
{ {
var CurPos = this.State.ContentPos; //var CurPos = this.State.ContentPos;
if ( CurPos >= 0 && CurPos < this.Content.length ) /*if ( CurPos >= 0 && CurPos < this.Content.length )
return this.Content[CurPos].Get_CurrentParaPos(); return this.Content[CurPos].Get_CurrentParaPos();*/
return new CParaPos( this.StartRange, this.StartLine, 0, 0 ); return new CParaPos( this.StartRange, this.StartLine, 0, 0 );
}, },
...@@ -293,7 +294,7 @@ ParaMath.prototype = ...@@ -293,7 +294,7 @@ ParaMath.prototype =
var TextPr = new CTextPr(); var TextPr = new CTextPr();
TextPr.Init_Default(); TextPr.Init_Default();
this.Math.RecalculateComposition(g_oTextMeasurer, TextPr); this.Math.RecalculateComposition(g_oTextMeasurer, TextPr);
var Size = this.Math.getSize(); var Size = this.Math.Size;
this.Width = Size.Width; this.Width = Size.Width;
this.Height = Size.Height; this.Height = Size.Height;
...@@ -371,7 +372,7 @@ ParaMath.prototype = ...@@ -371,7 +372,7 @@ ParaMath.prototype =
{ {
// Слово не убирается в отрезке. Переносим слово в следующий отрезок // Слово не убирается в отрезке. Переносим слово в следующий отрезок
PRS.MoveToLBP = true; PRS.MoveToLBP = true;
PRS.NewRange = true; PRS.NewRange = true; // перенос на новую строку
} }
else else
{ {
...@@ -380,7 +381,7 @@ ParaMath.prototype = ...@@ -380,7 +381,7 @@ ParaMath.prototype =
// Слово не убирается в отрезке, но, поскольку, слово 1 на строке и отрезок тоже 1, // Слово не убирается в отрезке, но, поскольку, слово 1 на строке и отрезок тоже 1,
// делим слово в данном месте // делим слово в данном месте
PRS.NewRange = true; PRS.NewRange = true; // перенос на новую строку
} }
} }
else else
...@@ -403,7 +404,7 @@ ParaMath.prototype = ...@@ -403,7 +404,7 @@ ParaMath.prototype =
if ( true !== PRS.NewRange ) if ( true !== PRS.NewRange )
{ {
RangeEndPos = 1; RangeEndPos = this.Content.length; // RangeEndPos = 1; to RangeEndPos = this.Content.length;
// Удаляем лишние строки, оставшиеся после предыдущего пересчета в самом конце // Удаляем лишние строки, оставшиеся после предыдущего пересчета в самом конце
if ( this.Lines.length > this.LinesLength ) if ( this.Lines.length > this.LinesLength )
...@@ -421,6 +422,10 @@ ParaMath.prototype = ...@@ -421,6 +422,10 @@ ParaMath.prototype =
{ {
this.Range.StartPos = RangeStartPos; this.Range.StartPos = RangeStartPos;
this.Range.EndPos = RangeEndPos; this.Range.EndPos = RangeEndPos;
/*this.Lines[0].RangesLength = 1;
this.Lines[0].Ranges.length = this.Content.length - 1;*/
this.Lines[0].RangesLength = 1; this.Lines[0].RangesLength = 1;
if ( this.Lines[0].Ranges.length > 1 ) if ( this.Lines[0].Ranges.length > 1 )
...@@ -582,7 +587,7 @@ ParaMath.prototype = ...@@ -582,7 +587,7 @@ ParaMath.prototype =
return this.Math.UpdateCursor(); return this.Math.UpdateCursor();
} }
return { X : X }; return {X : X };
}, },
Refresh_RecalcData : function(Data) Refresh_RecalcData : function(Data)
...@@ -668,7 +673,8 @@ ParaMath.prototype = ...@@ -668,7 +673,8 @@ ParaMath.prototype =
Cursor_Is_Start : function() Cursor_Is_Start : function()
{ {
// TODO: ParaMath.Cursor_Is_Start // TODO: ParaMath.Cursor_Is_Start
return true;
return this.Math.Cursor_Is_Start();
}, },
Cursor_Is_NeededCorrectPos : function() Cursor_Is_NeededCorrectPos : function()
...@@ -679,33 +685,121 @@ ParaMath.prototype = ...@@ -679,33 +685,121 @@ ParaMath.prototype =
Cursor_Is_End : function() Cursor_Is_End : function()
{ {
// TODO: ParaMath.Cursor_Is_End // TODO: ParaMath.Cursor_Is_End
return true;
return this.Math.Cursor_Is_End();
}, },
Cursor_MoveToStartPos : function() Cursor_MoveToStartPos : function()
{ {
// TODO: ParaMath.Cursor_MoveToStartPos // TODO: ParaMath.Cursor_MoveToStartPos
this.Math.Cursor_MoveToStartPos();
}, },
Cursor_MoveToEndPos : function(SelectFromEnd) Cursor_MoveToEndPos : function(SelectFromEnd)
{ {
// TODO: ParaMath.Cursor_MoveToEndPos // TODO: ParaMath.Cursor_MoveToEndPos
this.Math.Cursor_MoveToEndPos();
}, },
Get_ParaContentPosByXY : function(SearchPos, Depth, _CurLine, _CurRange, StepEnd) Get_ParaContentPosByXY : function(SearchPos, Depth, _CurLine, _CurRange, StepEnd)
{ {
// TODO: ParaMath.Get_ParaContentPosByXY // 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 // 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 // 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) Get_PosByElement : function(Class, ContentPos, Depth, UseRange, Range, Line)
......
...@@ -10,8 +10,10 @@ function CMathBase() ...@@ -10,8 +10,10 @@ function CMathBase()
this.size = null; this.size = null;
this.argSize = 0; this.argSize = 0;
this.CurPos_X = 0; //this.CurPos_X = 0;
this.CurPos_Y = 0; //this.CurPos_Y = 0;
this.selectPos = this.selectPos =
{ {
startX: 0, startX: 0,
...@@ -1174,5 +1176,27 @@ CMathBase.prototype = ...@@ -1174,5 +1176,27 @@ CMathBase.prototype =
} }
return gaps; 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() ...@@ -365,7 +365,10 @@ function CMathContent()
this.bRoot = false; this.bRoot = false;
this.content = new Array(); // array of mathElem this.content = new Array(); // array of mathElem
//this.length = 0;
this.CurPos = 0; this.CurPos = 0;
this.pos = {x:0, y:0}; // относительная позиция this.pos = {x:0, y:0}; // относительная позиция
this.Composition = null; // ссылка на общую формулу this.Composition = null; // ссылка на общую формулу
...@@ -572,7 +575,7 @@ CMathContent.prototype = ...@@ -572,7 +575,7 @@ CMathContent.prototype =
return [item]; return [item];
}, },
addMComponent: function(ind) _addMComponent: function(ind)
{ {
//var l_gap = 0, r_gap = 0; //var l_gap = 0, r_gap = 0;
var mathElem = null; //положение этого элемента будет this.CurPos + 1 var mathElem = null; //положение этого элемента будет this.CurPos + 1
...@@ -693,8 +696,11 @@ CMathContent.prototype = ...@@ -693,8 +696,11 @@ CMathContent.prototype =
if(obj.typeObj == MATH_COMP) if(obj.typeObj == MATH_COMP)
obj.setArgSize(this.argSize); 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); var elem = new mathElem(obj);
...@@ -4660,6 +4666,32 @@ CMathContent.prototype = ...@@ -4660,6 +4666,32 @@ CMathContent.prototype =
this.setLogicalPosition(0); 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) // не вызываем из mouseDown эту ф-ию, тк иначе не установим селект для внутреннего объекта (setStart_Selection)
...@@ -5389,7 +5421,7 @@ CMathContent.prototype = ...@@ -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; 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; //var sizeCursor = this.getRunPrp(this.CurPos).FontSize*g_dKoef_pt_to_mm;
...@@ -5411,6 +5443,22 @@ CMathContent.prototype = ...@@ -5411,6 +5443,22 @@ CMathContent.prototype =
editor.WordControl.m_oLogicDocument.DrawingDocument.UpdateTarget( position.x, position.y, 0 ); editor.WordControl.m_oLogicDocument.DrawingDocument.UpdateTarget( position.x, position.y, 0 );
editor.WordControl.m_oDrawingDocument.UpdateTargetFromPaint = false; 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 ) old_coordWOGaps: function( msCoord )
{ {
...@@ -7093,6 +7141,40 @@ CMathContent.prototype = ...@@ -7093,6 +7141,40 @@ CMathContent.prototype =
return flag; 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 ////////////////// //////////////// Test function for test_math //////////////////
mouseUp: function() mouseUp: function()
...@@ -7224,7 +7306,6 @@ CMathContent.prototype = ...@@ -7224,7 +7306,6 @@ CMathContent.prototype =
} }
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
//// test function for me //// //// test function for me ////
/*RecalculateReverse: function(oMeasure) /*RecalculateReverse: function(oMeasure)
...@@ -7264,6 +7345,15 @@ function CMathComposition() ...@@ -7264,6 +7345,15 @@ function CMathComposition()
wrapRight: false wrapRight: false
}; };
this.Size =
{
Width: 0,
WidthVisible: 0,
Height: 0,
Ascent: 0,
Descent: 0
};
this.CurrentContent = null; this.CurrentContent = null;
this.SelectContent = null; this.SelectContent = null;
...@@ -7858,6 +7948,16 @@ CMathComposition.prototype = ...@@ -7858,6 +7948,16 @@ CMathComposition.prototype =
{ {
this.Root.Resize(oMeasure); this.Root.Resize(oMeasure);
this.Root.setPosition({x: 0, y: 0}); 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() test_for_edit: function()
{ {
...@@ -8017,7 +8117,15 @@ CMathComposition.prototype = ...@@ -8017,7 +8117,15 @@ CMathComposition.prototype =
this.Root.cursor_MoveToEndPos(); this.Root.cursor_MoveToEndPos();
this.CurrentContent = this.SelectContent = this.Root; 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;*/ /*return this.Root.size;*/
...@@ -8112,7 +8220,7 @@ CMathComposition.prototype = ...@@ -8112,7 +8220,7 @@ CMathComposition.prototype =
}, },
UpdateCursor: function() UpdateCursor: function()
{ {
this.SelectContent.update_Cursor(); return this.SelectContent.update_Cursor();
}, },
Refresh_RecalcData2: function() 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