mirror of https://gitlab.com/basile.b/dexed.git
added editor position-buffer, controlled with mbX1-mbX2
This commit is contained in:
parent
547985bcbe
commit
37f281c1df
|
@ -10,6 +10,21 @@ uses
|
||||||
ce_common, ce_observer;
|
ce_common, ce_observer;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
TCESynMemoPositions = class
|
||||||
|
private
|
||||||
|
fPos: Integer;
|
||||||
|
fMax: Integer;
|
||||||
|
fList: TFPList;
|
||||||
|
fMemo: TSynMemo;
|
||||||
|
public
|
||||||
|
constructor create(aMemo: TSynMemo);
|
||||||
|
destructor destroy; override;
|
||||||
|
procedure store;
|
||||||
|
procedure back;
|
||||||
|
procedure next;
|
||||||
|
end;
|
||||||
|
|
||||||
TCESynMemo = class(TSynMemo)
|
TCESynMemo = class(TSynMemo)
|
||||||
private
|
private
|
||||||
fFilename: string;
|
fFilename: string;
|
||||||
|
@ -22,6 +37,7 @@ type
|
||||||
fTempFileName: string;
|
fTempFileName: string;
|
||||||
fMultiDocSubject: TCECustomSubject;
|
fMultiDocSubject: TCECustomSubject;
|
||||||
fStoredFontSize: Integer;
|
fStoredFontSize: Integer;
|
||||||
|
fPositions: TCESynMemoPositions;
|
||||||
procedure changeNotify(Sender: TObject);
|
procedure changeNotify(Sender: TObject);
|
||||||
procedure identifierToD2Syn;
|
procedure identifierToD2Syn;
|
||||||
protected
|
protected
|
||||||
|
@ -61,6 +77,50 @@ implementation
|
||||||
uses
|
uses
|
||||||
graphics, ce_interfaces;
|
graphics, ce_interfaces;
|
||||||
|
|
||||||
|
constructor TCESynMemoPositions.create(aMemo: TSynMemo);
|
||||||
|
begin
|
||||||
|
fList := TFPList.Create;
|
||||||
|
fMax := 20;
|
||||||
|
fMemo := aMemo;
|
||||||
|
fPos := -1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TCESynMemoPositions.destroy;
|
||||||
|
begin
|
||||||
|
fList.Free;
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemoPositions.back;
|
||||||
|
begin
|
||||||
|
Inc(fPos);
|
||||||
|
if fPos < fList.Count then
|
||||||
|
fMemo.CaretY := Integer(fList.Items[fPos])
|
||||||
|
else Dec(fPos);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemoPositions.next;
|
||||||
|
begin
|
||||||
|
Dec(fPos);
|
||||||
|
if fPos > -1 then
|
||||||
|
fMemo.CaretY := Integer(fList.Items[fPos])
|
||||||
|
else Inc(fPos);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemoPositions.store;
|
||||||
|
begin
|
||||||
|
fPos := 0;
|
||||||
|
if fList.Count > 0 then
|
||||||
|
{$WARNINGS OFF}
|
||||||
|
if Integer(fList.Items[fPos]) = fMemo.CaretY then
|
||||||
|
exit;
|
||||||
|
{$WARNINGS ON}
|
||||||
|
//
|
||||||
|
fList.Insert(0, Pointer(fMemo.CaretY));
|
||||||
|
while fList.Count > fMax do
|
||||||
|
fList.Delete(fList.Count-1);
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TCESynMemo.Create(aOwner: TComponent);
|
constructor TCESynMemo.Create(aOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
|
@ -95,6 +155,7 @@ begin
|
||||||
ShowHint := true;
|
ShowHint := true;
|
||||||
TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
|
TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
|
||||||
//
|
//
|
||||||
|
fPositions := TCESynMemoPositions.create(self);
|
||||||
fMultiDocSubject := TCEMultiDocSubject.create;
|
fMultiDocSubject := TCEMultiDocSubject.create;
|
||||||
subjDocNew(TCEMultiDocSubject(fMultiDocSubject), self);
|
subjDocNew(TCEMultiDocSubject(fMultiDocSubject), self);
|
||||||
end;
|
end;
|
||||||
|
@ -103,6 +164,7 @@ destructor TCESynMemo.destroy;
|
||||||
begin
|
begin
|
||||||
subjDocClosing(TCEMultiDocSubject(fMultiDocSubject), self);
|
subjDocClosing(TCEMultiDocSubject(fMultiDocSubject), self);
|
||||||
fMultiDocSubject.Free;
|
fMultiDocSubject.Free;
|
||||||
|
fPositions.Free;
|
||||||
//
|
//
|
||||||
if fileExists(fTempFileName) then
|
if fileExists(fTempFileName) then
|
||||||
sysutils.DeleteFile(fTempFileName);
|
sysutils.DeleteFile(fTempFileName);
|
||||||
|
@ -154,6 +216,7 @@ procedure TCESynMemo.changeNotify(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
identifierToD2Syn;
|
identifierToD2Syn;
|
||||||
fModified := true;
|
fModified := true;
|
||||||
|
fPositions.store;
|
||||||
subjDocChanged(TCEMultiDocSubject(fMultiDocSubject), self);
|
subjDocChanged(TCEMultiDocSubject(fMultiDocSubject), self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -216,6 +279,9 @@ end;
|
||||||
|
|
||||||
procedure TCESynMemo.KeyDown(var Key: Word; Shift: TShiftState);
|
procedure TCESynMemo.KeyDown(var Key: Word; Shift: TShiftState);
|
||||||
begin
|
begin
|
||||||
|
if Key in [VK_PRIOR, VK_NEXT] then
|
||||||
|
fPositions.store;
|
||||||
|
//
|
||||||
inherited;
|
inherited;
|
||||||
identifierToD2Syn;
|
identifierToD2Syn;
|
||||||
//
|
//
|
||||||
|
@ -243,7 +309,13 @@ procedure TCESynMemo.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y:Inte
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
if (Button = mbMiddle) and (Shift = [ssCtrl]) then
|
if (Button = mbMiddle) and (Shift = [ssCtrl]) then
|
||||||
Font.Size := fStoredFontSize;
|
Font.Size := fStoredFontSize
|
||||||
|
else if Button = mbExtra1 then
|
||||||
|
fPositions.back
|
||||||
|
else if Button = mbExtra2 then
|
||||||
|
fPositions.next
|
||||||
|
else if Button = mbLeft then
|
||||||
|
fPositions.store;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
|
|
Loading…
Reference in New Issue