Commit 8bed382f authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander.Trofimov

В новом варианте параграфе через класс CRun реализована работа с мышью....

В новом варианте параграфе через класс CRun реализована работа с мышью. Исправлен баг (в новой версии), с двойным нажатием левой кнопки мыши, когда должно было выделяться слово.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@53838 954022d7-b5bf-4e40-9824-e11837661b57
parent 662dbb05
......@@ -7895,12 +7895,19 @@ CDocument.prototype =
Start = this.Selection.EndPos;
}
if ( true !== Debug_ParaRunMode )
{
// Чтобы не было эффекта, когда ничего не поселекчено, а при удалении соединяются параграфы
if ( Direction > 0 && type_Paragraph === this.Content[Start].GetType() && true === this.Content[Start].Selection_IsEmpty() && this.Content[Start].Selection.StartPos == this.Content[Start].Content.length - 1 )
{
this.Content[Start].Selection.StartPos = this.Content[Start].Internal_GetEndPos();
this.Content[Start].Selection.EndPos = this.Content[Start].Content.length - 1;
}
}
else
{
// TODO: Разрулить пустой селект
}
for ( var Index = Start; Index <= End; Index++ )
{
......@@ -7913,12 +7920,19 @@ CDocument.prototype =
case Start:
if ( type_Paragraph === ItemType )
{
if ( true !== Debug_ParaRunMode )
{
if ( Direction > 0 )
Item.Selection.EndPos = Item.Content.length - 1;
else
Item.Selection.StartPos = Item.Content.length - 1;
}
else
{
Item.Selection_SetBegEnd( ( Direction > 0 ? false : true ), false );
}
}
else //if ( type_Table === ItemType )
{
var Row = Item.Content.length - 1;
......@@ -7938,12 +7952,20 @@ CDocument.prototype =
case End:
if ( type_Paragraph === ItemType )
{
if ( true !== Debug_ParaRunMode )
{
if ( Direction > 0 )
Item.Selection.StartPos = Item.Internal_GetStartPos();
else
Item.Selection.EndPos = Item.Internal_GetStartPos();
}
else
{
Item.Selection_SetBegEnd( ( Direction > 0 ? true : false ), true );
}
}
else //if ( type_Table === ItemType )
{
var Pos = { Row: 0, Cell : 0 };
......@@ -7961,6 +7983,8 @@ CDocument.prototype =
default:
if ( type_Paragraph === ItemType )
{
if ( true !== Debug_ParaRunMode )
{
if ( Direction > 0 )
{
......@@ -7973,6 +7997,11 @@ CDocument.prototype =
Item.Selection.Set_StartPos(Item.Content.length - 1, -1);
}
}
else
{
Item.Select_All( Direction );
}
}
else //if ( type_Table === ItemType )
{
var Row = Item.Content.length - 1;
......
......@@ -8351,7 +8351,7 @@ Paragraph.prototype =
}
},
Get_ParaContentPosByXY : function(X, Y, PageNum, bYLine)
Get_ParaContentPosByXY : function(X, Y, PageNum, bYLine, StepEnd)
{
var SearchPos = new CParagraphSearchPosXY();
......@@ -8423,7 +8423,7 @@ Paragraph.prototype =
{
var Item = this.Content[CurPos];
if ( true === Item.Get_ParaContentPosByXY( SearchPos, 1, CurLine, CurRange ) )
if ( true === Item.Get_ParaContentPosByXY( SearchPos, 1, CurLine, CurRange, StepEnd ) )
SearchPos.Pos.Update( CurPos, 0 );
}
......@@ -8724,7 +8724,7 @@ Paragraph.prototype =
}
else
{
var SearchPosXY = this.Get_ParaContentPosByXY( X, Y, PageNum, bLine );
var SearchPosXY = this.Get_ParaContentPosByXY( X, Y, PageNum, bLine, false );
this.Set_ParaContentPos( SearchPosXY.Pos, SearchPosXY.Line, false );
this.Internal_Recalculate_CurPos(-1, false, false, false );
......@@ -11553,6 +11553,8 @@ Paragraph.prototype =
},
Selection_SetStart : function(X,Y,PageNum, bTableBorder)
{
if ( true !== Debug_ParaRunMode )
{
var Pos = this.Internal_GetContentPosByXY( X, Y, false, PageNum );
if ( -1 != Pos.Pos )
......@@ -11576,11 +11578,35 @@ Paragraph.prototype =
this.Selection.Flag = selectionflag_Common;
}
}
else
{
// Избавляемся от старого селекта
if ( true === this.Selection.Use )
this.Selection_Remove();
// Найдем позицию в контенте, в которую мы попали (для селекта ищем и за знаком параграфа, для курсора только перед)
var SearchPosXY = this.Get_ParaContentPosByXY( X, Y, PageNum, false, true );
var SearchPosXY2 = this.Get_ParaContentPosByXY( X, Y, PageNum, false, false );
// Начинаем селект
this.Selection.Use = true;
this.Selection.Start = true;
this.Selection.Flag = selectionflag_Common;
// Выставим текущую позицию
this.Set_ParaContentPos( SearchPosXY2.Pos, SearchPosXY2.Line, true );
// Выставляем селект
this.Set_SelectionContentPos( SearchPosXY.Pos, SearchPosXY.Pos );
}
},
// Данная функция может использоваться как при движении, так и при окончательном выставлении селекта.
// Если bEnd = true, тогда это конец селекта.
Selection_SetEnd : function(X,Y,PageNum, MouseEvent, bTableBorder)
{
if ( true !== Debug_ParaRunMode )
{
var PagesCount = this.Pages.length;
if ( false === editor.isViewMode && null === this.Parent.Is_HdrFtr(true) && null == this.Get_DocumentNext() && PageNum - this.PageNum >= PagesCount - 1 && Y > this.Pages[PagesCount - 1].Bounds.Bottom && MouseEvent.ClickCount >= 2 )
......@@ -11768,6 +11794,96 @@ Paragraph.prototype =
//Temp = this.Internal_GetContentPosByXY( X, Y, false, PageNum );
return;
}
}
else
{
var PagesCount = this.Pages.length;
// TODO: Реализовать Extend_ToPos
//if ( false === editor.isViewMode && null === this.Parent.Is_HdrFtr(true) && null == this.Get_DocumentNext() && PageNum - this.PageNum >= PagesCount - 1 && Y > this.Pages[PagesCount - 1].Bounds.Bottom && MouseEvent.ClickCount >= 2 )
// return this.Parent.Extend_ToPos( X, Y );
// Обновляем позицию курсора
this.CurPos.RealX = X;
this.CurPos.RealY = Y;
// Найдем позицию в контенте, в которую мы попали (для селекта ищем и за знаком параграфа, для курсора только перед)
var SearchPosXY = this.Get_ParaContentPosByXY( X, Y, PageNum, false, true );
var SearchPosXY2 = this.Get_ParaContentPosByXY( X, Y, PageNum, false, false );
// Выставим в полученном месте текущую позицию курсора
this.Set_ParaContentPos( SearchPosXY2.Pos, SearchPosXY2.Line, true );
if ( true === SearchPosXY.End )
{
// TODO: Реализовать Extend_ToPos
// if ( PageNum - this.PageNum >= PagesCount - 1 && X > this.Lines[this.Lines.length - 1].Ranges[this.Lines[this.Lines.length - 1].Ranges.length - 1].W && MouseEvent.ClickCount >= 2 && Y <= this.Pages[PagesCount - 1].Bounds.Bottom )
// {
// if ( false === editor.isViewMode && false === editor.WordControl.m_oLogicDocument.Document_Is_SelectionLocked(changestype_None, { Type : changestype_2_Element_and_Type, Element : this, CheckType : changestype_Paragraph_Content } ) )
// {
// History.Create_NewPoint();
// History.Set_Additional_ExtendDocumentToPos();
//
// this.Extend_ToPos( X );
// this.Cursor_MoveToEndPos();
// this.Document_SetThisElementCurrent(true);
// editor.WordControl.m_oLogicDocument.Recalculate();
// return;
// }
// }
}
// Выставляем селект
this.Set_SelectionContentPos( this.Get_ParaContentPos( true, true ), SearchPosXY.Pos );
var SelectionStartPos = this.Get_ParaContentPos( true, true );
var SelectionEndPos = this.Get_ParaContentPos( true, false );
if ( 0 === SelectionStartPos.Compare( SelectionEndPos ) && g_mouse_event_type_up === MouseEvent.Type )
{
var NumPr = this.Numbering_Get();
if ( true === SearchPosXY.Numbering && undefined != NumPr )
{
// TODO: Разобраться с нумерацией
// Ставим именно 0, а не this.Internal_GetStartPos(), чтобы при нажатии на клавишу "направо"
// мы оказывались в начале параграфа.
//this.Set_ContentPos( 0, true, -1 );
//this.Parent.Document_SelectNumbering( NumPr );
}
else
{
var ClickCounter = MouseEvent.ClickCount % 2;
if ( 1 >= MouseEvent.ClickCount )
{
// Убираем селект. Позицию курсора можно не выставлять, т.к. она у нас установлена на конец селекта
this.Selection_Remove();
}
else if ( 0 == ClickCounter )
{
// Выделяем слово, в котором находимся
var SearchPosS = new CParagraphSearchPos();
var SearchPosE = new CParagraphSearchPos();
this.Get_WordStartPos( SearchPosS, SearchPosXY.Pos );
this.Get_WordEndPos( SearchPosE, SearchPosXY.Pos );
var StartPos = ( true === SearchPosS.Found ? SearchPosS.Pos : this.Get_StartPos() );
var EndPos = ( true === SearchPosE.Found ? SearchPosE.Pos : this.Get_EndPos(false) );
this.Selection.Use = true;
this.Set_SelectionContentPos( StartPos, EndPos );
}
else // ( 1 == ClickCounter % 2 )
{
// Выделяем весь параграф целиком
this.Select_All( 1 );
}
}
}
}
},
Selection_Internal_Update : function()
......@@ -11839,6 +11955,7 @@ Paragraph.prototype =
}
this.Selection.Use = false;
this.Selection.Start = false;
this.Selection.Flag = selectionflag_Common;
this.Selection_Clear();
}
......@@ -12281,6 +12398,21 @@ Paragraph.prototype =
}
},
// Выставляем начало/конец селекта в начало/конец параграфа
Selection_SetBegEnd : function(StartSelection, StartPara)
{
var ContentPos = ( true === StartPara ? this.Get_StartPos() : this.Get_EndPos(true) );
if ( true === StartSelection )
{
this.Set_SelectionContentPos( ContentPos, this.Get_ParaContentPos( true, false ) );
}
else
{
this.Set_SelectionContentPos( this.Get_ParaContentPos( true, true ), ContentPos );
}
},
Select_All : function(Direction)
{
if ( true !== Debug_ParaRunMode )
......@@ -12295,21 +12427,19 @@ Paragraph.prototype =
this.Selection.Use = true;
var StartPos = null, EndPos = null;
if ( -1 === Direction )
{
this.Selection.StartPos = Count - 1;
this.Selection.EndPos = 0;
StartPos = this.Get_EndPos( true );
EndPos = this.Get_StartPos();
}
else
{
this.Selection.StartPos = 0;
this.Selection.EndPos = Count - 1;
StartPos = this.Get_StartPos();
EndPos = this.Get_EndPos( true );
}
for (var CurPos = 0; CurPos < Count; CurPos++)
{
this.Content[CurPos].Select_All(Direction);
}
this.Set_SelectionContentPos( StartPos, EndPos );
}
},
......
......@@ -2472,7 +2472,7 @@ ParaRun.prototype =
}
},
Get_ParaContentPosByXY : function(SearchPos, Depth, _CurLine, _CurRange)
Get_ParaContentPosByXY : function(SearchPos, Depth, _CurLine, _CurRange, StepEnd)
{
var Result = false;
......@@ -2488,8 +2488,6 @@ ParaRun.prototype =
var Item = this.Content[CurPos];
var TempDx = 0;
var bCheck = false;
// TODO: Сделать поддержку нумерации
// if ( ItemNum === this.Numbering.Pos )
......@@ -2556,19 +2554,23 @@ ParaRun.prototype =
}
}
// TODO: Сделать разруливование со строками
// if ( true != bEnd && ItemNum === this.Lines[CurLine].EndPos && X > CurX + TempDx && para_NewLine != Item.Type )
// {
// ResultLine = CurLine;
// DiffPos = ItemNum + 1;
// }
SearchPos.CurX += TempDx;
// Заглушка для знака параграфа
if ( para_End === Item.Type && Math.abs( SearchPos.X - SearchPos.CurX ) < SearchPos.DiffX )
// Заглушка для знака параграфа и конца строки
if ( Math.abs( SearchPos.X - SearchPos.CurX ) < SearchPos.DiffX )
{
if ( para_End === Item.Type )
{
SearchPos.End = true;
// Если мы ищем позицию для селекта, тогда нужно искать и за знаком параграфа
if ( true === StepEnd )
SearchPos.Pos.Update( this.Content.length, Depth );
}
else if ( CurPos === EndPos - 1 && para_NewLine != Item.Type )
{
SearchPos.Pos.Update( EndPos, Depth );
}
}
}
......@@ -2939,14 +2941,12 @@ ParaRun.prototype =
Selection_Stop : function()
{
this.State.Selection.Start = false;
},
Selection_Remove : function()
{
var Selection = this.State.Selection;
Selection.Start = false;
Selection.Use = false;
Selection.StartPos = 0;
Selection.EndPos = 0;
......@@ -2956,7 +2956,6 @@ ParaRun.prototype =
{
var Selection = this.State.Selection;
Selection.Start = false;
Selection.Use = true;
if ( -1 === Direction )
......@@ -3630,7 +3629,6 @@ ParaRun.prototype =
function CParaRunSelection()
{
this.Start = false;
this.Use = false;
this.StartPos = false;
this.EndPos = false;
......
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