121 lines
2.2 KiB
ObjectPascal
121 lines
2.2 KiB
ObjectPascal
unit ATSynEdit_Markers;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils;
|
|
|
|
type
|
|
TATMarkerItem = class
|
|
public
|
|
PosX, PosY: integer;
|
|
CoordX, CoordY: integer; //screen coords
|
|
Tag: integer;
|
|
//used in CudaText: when "collect marker" runs, for all markers
|
|
//with the same Tag>0 multi-carets placed
|
|
SelLen: integer;
|
|
//used in CudaText: when "collect marker" runs, caret will
|
|
//be with selection of this len
|
|
Ptr: TObject;
|
|
//used in Attribs object of ATSynedit
|
|
end;
|
|
|
|
type
|
|
{ TATMarkers }
|
|
|
|
TATMarkers = class
|
|
private
|
|
FList: TList;
|
|
function GetItem(N: integer): TATMarkerItem;
|
|
public
|
|
constructor Create; virtual;
|
|
destructor Destroy; override;
|
|
procedure Clear;
|
|
procedure Delete(N: integer);
|
|
function Count: integer;
|
|
function IsIndexValid(N: integer): boolean;
|
|
property Items[N: integer]: TATMarkerItem read GetItem; default;
|
|
procedure Add(APosX, APosY: integer;
|
|
ATag: integer=0; ASelLen: integer=0; APtr: TObject=nil);
|
|
end;
|
|
|
|
implementation
|
|
|
|
{ TATMarkers }
|
|
|
|
constructor TATMarkers.Create;
|
|
begin
|
|
inherited;
|
|
FList:= TList.Create;
|
|
end;
|
|
|
|
destructor TATMarkers.Destroy;
|
|
begin
|
|
Clear;
|
|
FreeAndNil(FList);
|
|
inherited;
|
|
end;
|
|
|
|
procedure TATMarkers.Clear;
|
|
var
|
|
i: integer;
|
|
begin
|
|
for i:= FList.Count-1 downto 0 do
|
|
Delete(i);
|
|
end;
|
|
|
|
procedure TATMarkers.Delete(N: integer);
|
|
var
|
|
Mark: TATMarkerItem;
|
|
begin
|
|
if IsIndexValid(N) then
|
|
begin
|
|
Mark:= TATMarkerItem(FList[N]);
|
|
if Assigned(Mark.Ptr) then
|
|
Mark.Ptr.Free;
|
|
Mark.Free;
|
|
|
|
FList.Delete(N);
|
|
end;
|
|
end;
|
|
|
|
function TATMarkers.Count: integer;
|
|
begin
|
|
Result:= FList.Count;
|
|
end;
|
|
|
|
function TATMarkers.IsIndexValid(N: integer): boolean;
|
|
begin
|
|
Result:= (N>=0) and (N<FList.Count);
|
|
end;
|
|
|
|
function TATMarkers.GetItem(N: integer): TATMarkerItem;
|
|
begin
|
|
if IsIndexValid(N) then
|
|
Result:= TATMarkerItem(FList[N])
|
|
else
|
|
Result:= nil;
|
|
end;
|
|
|
|
procedure TATMarkers.Add(APosX, APosY: integer; ATag: integer;
|
|
ASelLen: integer; APtr: TObject);
|
|
var
|
|
Item: TATMarkerItem;
|
|
begin
|
|
Item:= TATMarkerItem.Create;
|
|
Item.PosX:= APosX;
|
|
Item.PosY:= APosY;
|
|
Item.CoordX:= -1;
|
|
Item.CoordY:= -1;
|
|
Item.Tag:= ATag;
|
|
Item.SelLen:= ASelLen;
|
|
Item.Ptr:= APtr;
|
|
|
|
FList.Add(Item);
|
|
end;
|
|
|
|
end.
|
|
|