mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 07:49:27 +02:00
SynEdit: Multi caret beta / small fix
git-svn-id: trunk@47599 -
This commit is contained in:
parent
b48672e38e
commit
59b3e94a65
@ -327,6 +327,11 @@ begin
|
||||
then h := FHighIndex
|
||||
else h := HighIdx;
|
||||
|
||||
if h < l then begin
|
||||
Result := h;
|
||||
exit;
|
||||
end;
|
||||
|
||||
Result := (l + h) div 2;
|
||||
while (h > l) do begin
|
||||
if (FCarets[Result].y > y) or ((FCarets[Result].y = y) and (FCarets[Result].x >= x)) then
|
||||
@ -541,7 +546,7 @@ begin
|
||||
if (FLowIndex > 0) and ((Result < Middle) or (FHighIndex = len))
|
||||
then begin
|
||||
// use space in front of list
|
||||
if (Result = FHighIndex) and (FHighIndex = High(FCarets)) // moving all entries
|
||||
if (Result > FHighIndex) and (FHighIndex = High(FCarets)) // moving all entries
|
||||
then i := max(FLowIndex div 2 - 1, 0) // Make some room at the end of the list
|
||||
else i := 0;
|
||||
if Result > FLowIndex then
|
||||
|
@ -24,6 +24,7 @@ type
|
||||
procedure ReCreateEdit; reintroduce;
|
||||
procedure RunCmdSeq(cmds: Array of TSynEditorCommand; chars: array of String);
|
||||
published
|
||||
procedure CaretList;
|
||||
procedure Edit;
|
||||
procedure ReplaceColSel;
|
||||
procedure TabKey;
|
||||
@ -59,6 +60,109 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTestMultiCaret.CaretList;
|
||||
procedure TestSequence(name: string; a: Array of Integer);
|
||||
var
|
||||
c: TSynPluginMultiCaretList;
|
||||
i, j, k, n, m: Integer;
|
||||
begin
|
||||
|
||||
c := TSynPluginMultiCaretList.Create;
|
||||
for i := 0 to high(a) do begin
|
||||
c.AddCaret(1,a[i]);
|
||||
for j := 1 to c.Count-1 do
|
||||
AssertTrue(Format(name+' Test %d %d', [i, j]), c.Caret[j].y > c.Caret[j-1].y);
|
||||
end;
|
||||
|
||||
c.Clear;
|
||||
for i := 0 to high(a) do begin
|
||||
k := c.AddCaret(1,a[i]);
|
||||
AssertEquals(Format(name+' Test %d %d', [i, j]),a[i], c.Caret[k].y);
|
||||
for j := 1 to c.Count-1 do
|
||||
AssertTrue(Format(name+' Test %d %d', [i, j]), c.Caret[j].y > c.Caret[j-1].y);
|
||||
end;
|
||||
|
||||
c.Clear;
|
||||
for i := 0 to high(a) do begin
|
||||
c.AddCaret(1,a[i]);
|
||||
end;
|
||||
for j := 1 to c.Count-1 do
|
||||
AssertTrue(Format(name+' Test %d %d', [i, j]), c.Caret[j].y > c.Caret[j-1].y);
|
||||
|
||||
c.Clear;
|
||||
for i := high(a) downto 0 do begin
|
||||
k := c.AddCaret(1,a[i]);
|
||||
AssertEquals(Format(name+' Test %d %d', [i, j]),a[i], c.Caret[k].y);
|
||||
for j := 1 to c.Count-1 do
|
||||
AssertTrue(Format(name+' Test %d %d', [i, j]), c.Caret[j].y > c.Caret[j-1].y);
|
||||
end;
|
||||
|
||||
|
||||
for m := 0 to length(a)-1 do begin
|
||||
for n := 0 to m do begin
|
||||
c.Clear;
|
||||
for i := 0 to m do begin
|
||||
k := c.AddCaret(1,a[i]);
|
||||
AssertEquals(Format(name+' Test %d %d', [i, j]),a[i], c.Caret[k].y);
|
||||
end;
|
||||
for j := 1 to c.Count-1 do
|
||||
AssertTrue(Format(name+' Test %d %d', [i, j]), c.Caret[j].y > c.Caret[j-1].y);
|
||||
k := c.Caret[n].y;
|
||||
c.RemoveCaret(n);
|
||||
for j := 1 to c.Count-1 do begin
|
||||
AssertTrue(Format(name+' Test %d %d', [i, j]), c.Caret[j].y > c.Caret[j-1].y);
|
||||
AssertTrue(Format(name+' Test %d %d', [i, j]), c.Caret[j].y <> k);
|
||||
end;
|
||||
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
c.Free;
|
||||
end;
|
||||
procedure TestSequenceEx(n: string; a: Array of Integer);
|
||||
var
|
||||
i, j: Integer;
|
||||
b: Array of Integer;
|
||||
begin
|
||||
for i := 1 to length(a) do begin
|
||||
TestSequence(n+IntToStr(i),a);
|
||||
j := a[0];
|
||||
if Length(a) > 1 then
|
||||
move(a[1],a[0],(Length(a)-1)*SizeOf(a[0]));
|
||||
a[high(a)] := j;
|
||||
end;
|
||||
|
||||
SetLength(b, Length(a));
|
||||
for i := 0 to length(a)-1 do
|
||||
b[i] := a[high(a)-i];
|
||||
|
||||
for i := 1 to length(b) do begin
|
||||
TestSequence(n+IntToStr(i),b);
|
||||
j := b[0];
|
||||
if Length(b) > 1 then
|
||||
move(b[1],b[0],(Length(b)-1)*SizeOf(b[0]));
|
||||
b[high(b)] := j;
|
||||
end;
|
||||
end;
|
||||
begin
|
||||
TestSequence('XXX', [3,2,1,12,11,10,9,8,7,6,5,4]);
|
||||
TestSequence('XXX', [4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3]);
|
||||
|
||||
TestSequenceEx('1', [1,2]);
|
||||
TestSequenceEx('1', [1,2,3,4,5,6,7,8,9,10,11,12]);
|
||||
TestSequenceEx('1', [1,99,2,98,3,97,4,96,5,95,6,94]);
|
||||
TestSequenceEx('1', [1,2,99,98,3,4,97,96,5,6,95,94,7,8,93,92,9,10]);
|
||||
TestSequenceEx('1', [1,2,3,4,5,6,7,8,9,10,11,12,-1]);
|
||||
TestSequenceEx('1', [1,2,3,4,5,6,7,8,9,10,-1]);
|
||||
TestSequenceEx('1', [1,2,3,4,5,6,7,8,9,-1]);
|
||||
TestSequenceEx('1', [1,2,3,4,5,6,7,8,-1]);
|
||||
TestSequenceEx('1', [1,2,3,4,5,6,7,-1]);
|
||||
TestSequenceEx('1', [1,2,3,4,5,6,-1]);
|
||||
TestSequenceEx('1', [1,2,3,4,5,-1]);
|
||||
TestSequenceEx('1', [1,2,3,4,-1]);
|
||||
end;
|
||||
|
||||
procedure TTestMultiCaret.Edit;
|
||||
function TestText1: TStringArray;
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user