mirror of https://gitlab.com/basile.b/dexed.git
editor, add/rem breakpoints in the gutter
This commit is contained in:
parent
256017709a
commit
bfd1a9c6a8
|
@ -8,6 +8,7 @@ uses
|
||||||
Classes, SysUtils, controls,lcltype, Forms, graphics, ExtCtrls, crc,
|
Classes, SysUtils, controls,lcltype, Forms, graphics, ExtCtrls, crc,
|
||||||
SynPluginSyncroEdit, SynCompletion, SynEditKeyCmds, LazSynEditText, SynEdit,
|
SynPluginSyncroEdit, SynCompletion, SynEditKeyCmds, LazSynEditText, SynEdit,
|
||||||
SynHighlighterLFM, SynEditHighlighter, SynEditMouseCmds, SynEditFoldedView,
|
SynHighlighterLFM, SynEditHighlighter, SynEditMouseCmds, SynEditFoldedView,
|
||||||
|
SynEditMarks,
|
||||||
ce_common, ce_observer, ce_writableComponent, ce_d2syn, ce_txtsyn, ce_dialogs,
|
ce_common, ce_observer, ce_writableComponent, ce_d2syn, ce_txtsyn, ce_dialogs,
|
||||||
ce_sharedres;
|
ce_sharedres;
|
||||||
|
|
||||||
|
@ -104,6 +105,8 @@ type
|
||||||
fCompletion: TSynCompletion;
|
fCompletion: TSynCompletion;
|
||||||
fD2Highlighter: TSynD2Syn;
|
fD2Highlighter: TSynD2Syn;
|
||||||
fTxtHighlighter: TSynTxtSyn;
|
fTxtHighlighter: TSynTxtSyn;
|
||||||
|
fImages: TImageList;
|
||||||
|
fBreakPoints: TFPList;
|
||||||
function getMouseFileBytePos: Integer;
|
function getMouseFileBytePos: Integer;
|
||||||
procedure changeNotify(Sender: TObject);
|
procedure changeNotify(Sender: TObject);
|
||||||
procedure identifierToD2Syn;
|
procedure identifierToD2Syn;
|
||||||
|
@ -125,6 +128,10 @@ type
|
||||||
Selected: boolean; Index: integer): boolean;
|
Selected: boolean; Index: integer): boolean;
|
||||||
procedure completionCodeCompletion(var Value: string; SourceValue: string;
|
procedure completionCodeCompletion(var Value: string; SourceValue: string;
|
||||||
var SourceStart, SourceEnd: TPoint; KeyChar: TUTF8Char; Shift: TShiftState);
|
var SourceStart, SourceEnd: TPoint; KeyChar: TUTF8Char; Shift: TShiftState);
|
||||||
|
procedure gutterClick(Sender: TObject; X, Y, Line: integer; mark: TSynEditMark);
|
||||||
|
procedure addBreakPoint(line: integer);
|
||||||
|
procedure removeBreakPoint(line: integer);
|
||||||
|
function findBreakPoint(line: integer): boolean;
|
||||||
protected
|
protected
|
||||||
procedure MouseLeave; override;
|
procedure MouseLeave; override;
|
||||||
procedure SetVisible(Value: Boolean); override;
|
procedure SetVisible(Value: Boolean); override;
|
||||||
|
@ -152,6 +159,9 @@ type
|
||||||
procedure save;
|
procedure save;
|
||||||
procedure saveTempFile;
|
procedure saveTempFile;
|
||||||
//
|
//
|
||||||
|
function breakPointsCount: integer;
|
||||||
|
function BreakPointLine(index: integer): integer;
|
||||||
|
//
|
||||||
property Identifier: string read fIdentifier;
|
property Identifier: string read fIdentifier;
|
||||||
property fileName: string read fFilename;
|
property fileName: string read fFilename;
|
||||||
property modified: boolean read fModified;
|
property modified: boolean read fModified;
|
||||||
|
@ -384,6 +394,7 @@ begin
|
||||||
Gutter.SeparatorPart.LineWidth := 1;
|
Gutter.SeparatorPart.LineWidth := 1;
|
||||||
Gutter.SeparatorPart.MarkupInfo.Foreground := clGray;
|
Gutter.SeparatorPart.MarkupInfo.Foreground := clGray;
|
||||||
Gutter.CodeFoldPart.MarkupInfo.Foreground := clGray;
|
Gutter.CodeFoldPart.MarkupInfo.Foreground := clGray;
|
||||||
|
Gutter.OnGutterClick:= @gutterClick;
|
||||||
BracketMatchColor.Foreground:=clRed;
|
BracketMatchColor.Foreground:=clRed;
|
||||||
//
|
//
|
||||||
fSyncEdit := TSynPluginSyncroEdit.Create(self);
|
fSyncEdit := TSynPluginSyncroEdit.Create(self);
|
||||||
|
@ -416,6 +427,11 @@ begin
|
||||||
fModified := false;
|
fModified := false;
|
||||||
TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
|
TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
|
||||||
//
|
//
|
||||||
|
fImages := TImageList.Create(self);
|
||||||
|
fImages.AddLazarusResource('bullet_red');
|
||||||
|
fImages.AddLazarusResource('bullet_green');
|
||||||
|
fBreakPoints := TFPList.Create;
|
||||||
|
//
|
||||||
fPositions := TCESynMemoPositions.create(self);
|
fPositions := TCESynMemoPositions.create(self);
|
||||||
fMultiDocSubject := TCEMultiDocSubject.create;
|
fMultiDocSubject := TCEMultiDocSubject.create;
|
||||||
//
|
//
|
||||||
|
@ -430,6 +446,7 @@ begin
|
||||||
fMultiDocSubject.Free;
|
fMultiDocSubject.Free;
|
||||||
fPositions.Free;
|
fPositions.Free;
|
||||||
fCompletion.Free;
|
fCompletion.Free;
|
||||||
|
fBreakPoints.Free;
|
||||||
//
|
//
|
||||||
if fileExists(fTempFileName) then
|
if fileExists(fTempFileName) then
|
||||||
sysutils.DeleteFile(fTempFileName);
|
sysutils.DeleteFile(fTempFileName);
|
||||||
|
@ -974,6 +991,65 @@ begin
|
||||||
fCanShowHint:=false;
|
fCanShowHint:=false;
|
||||||
fHintTimer.Enabled:=false;
|
fHintTimer.Enabled:=false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCESynMemo.breakPointsCount: integer;
|
||||||
|
begin
|
||||||
|
exit(fBreakPoints.Count);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCESynMemo.BreakPointLine(index: integer): integer;
|
||||||
|
begin
|
||||||
|
if index >= fBreakPoints.Count then
|
||||||
|
exit(0);
|
||||||
|
{$WARNINGS OFF}
|
||||||
|
exit(Integer(fBreakPoints.Items[index]));
|
||||||
|
{$WARNINGS ON}
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemo.addBreakPoint(line: integer);
|
||||||
|
var
|
||||||
|
m: TSynEditMark;
|
||||||
|
begin
|
||||||
|
if findBreakPoint(line) then
|
||||||
|
exit;
|
||||||
|
m:= TSynEditMark.Create(self);
|
||||||
|
m.Line := line;
|
||||||
|
m.ImageList := fImages;
|
||||||
|
m.ImageIndex := 0;
|
||||||
|
m.Visible := true;
|
||||||
|
Marks.Add(m);
|
||||||
|
{$WARNINGS OFF}
|
||||||
|
fBreakPoints.Add(pointer(line));
|
||||||
|
{$WARNINGS ON}
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemo.removeBreakPoint(line: integer);
|
||||||
|
begin
|
||||||
|
if not findBreakPoint(line) then
|
||||||
|
exit;
|
||||||
|
if (marks.Line[line] <> nil) and (marks.Line[line].Count > 0) then
|
||||||
|
marks.Line[line].Clear(true);
|
||||||
|
{$WARNINGS OFF}
|
||||||
|
fBreakPoints.Remove(pointer(line));
|
||||||
|
{$WARNINGS ON}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCESynMemo.findBreakPoint(line: integer): boolean;
|
||||||
|
begin
|
||||||
|
{$WARNINGS OFF}
|
||||||
|
exit(fBreakPoints.IndexOf(pointer(line)) <> -1);
|
||||||
|
{$WARNINGS ON}
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemo.gutterClick(Sender: TObject; X, Y, Line: integer; mark: TSynEditMark);
|
||||||
|
var
|
||||||
|
m: TSynEditMark;
|
||||||
|
begin
|
||||||
|
if findBreakPoint(line) then
|
||||||
|
removeBreakPoint(line)
|
||||||
|
else
|
||||||
|
addBreakPoint(line);
|
||||||
|
end;
|
||||||
{$ENDREGION --------------------------------------------------------------------}
|
{$ENDREGION --------------------------------------------------------------------}
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
|
|
Loading…
Reference in New Issue