DBG: Toggle breakpoint enabled with ctrl-click. Issue

git-svn-id: trunk@32441 -
This commit is contained in:
martin 2011-09-20 19:24:22 +00:00
parent e3a3b6dab5
commit a65bbd7c40
3 changed files with 33 additions and 6 deletions

View File

@ -157,6 +157,9 @@ type
function DoCreateBreakPoint(const AFilename: string; ALine: integer;
WarnIfNoDebugger: boolean): TModalResult; virtual; abstract;
function DoCreateBreakPoint(const AFilename: string; ALine: integer;
WarnIfNoDebugger: boolean;
out ABrkPoint: TIDEBreakPoint): TModalResult; virtual; abstract;
function DoDeleteBreakPoint(const AFilename: string; ALine: integer
): TModalResult; virtual; abstract;
function DoDeleteBreakPointAtMark(const ASourceMark: TSourceMark

View File

@ -211,6 +211,9 @@ type
function DoCreateBreakPoint(const AFilename: string; ALine: integer;
WarnIfNoDebugger: boolean): TModalResult; override;
function DoCreateBreakPoint(const AFilename: string; ALine: integer;
WarnIfNoDebugger: boolean;
out ABrkPoint: TIDEBreakPoint): TModalResult; override;
function DoDeleteBreakPoint(const AFilename: string;
ALine: integer): TModalResult; override;
@ -2390,7 +2393,16 @@ end;
function TDebugManager.DoCreateBreakPoint(const AFilename: string;
ALine: integer; WarnIfNoDebugger: boolean): TModalResult;
var
ABrkPoint: TIDEBreakPoint;
begin
DoCreateBreakPoint(AFilename, ALine, WarnIfNoDebugger, ABrkPoint);
end;
function TDebugManager.DoCreateBreakPoint(const AFilename: string; ALine: integer;
WarnIfNoDebugger: boolean; out ABrkPoint: TIDEBreakPoint): TModalResult;
begin
ABrkPoint := nil;
if WarnIfNoDebugger
and ((FindDebuggerClass(EnvironmentOptions.DebuggerConfig.DebuggerClass)=nil)
or (not FileIsExecutable(EnvironmentOptions.DebuggerFilename)))
@ -2404,7 +2416,7 @@ begin
exit;
end;
FBreakPoints.Add(AFilename, ALine);
ABrkPoint := FBreakPoints.Add(AFilename, ALine);
Result := mrOK
end;

View File

@ -3654,27 +3654,39 @@ var
Marks: PSourceMark;
i, MarkCount: Integer;
BreakFound: Boolean;
Ctrl: Boolean;
ABrkPoint: TIDEBreakPoint;
Mrk: TSourceMark;
begin
// create or delete breakpoint
// find breakpoint mark at line
Marks := nil;
Ctrl := ssCtrl in GetKeyShiftState;
try
SourceEditorMarks.GetMarksForLine(Self, Line, Marks, MarkCount);
BreakFound := False;
for i := 0 to MarkCount - 1 do
begin
if Marks[i].IsBreakPoint then
begin
Mrk := Marks[i];
if Mrk.IsBreakPoint and
(Mrk.Data <> nil) and (Mrk.Data is TIDEBreakPoint)
then begin
BreakFound := True;
DebugBoss.DoDeleteBreakPointAtMark(Marks[i])
if Ctrl then
TIDEBreakPoint(Mrk.Data).Enabled := not TIDEBreakPoint(Mrk.Data).Enabled
else
DebugBoss.DoDeleteBreakPointAtMark(Mrk)
end;
end;
finally
FreeMem(Marks);
end;
if not BreakFound then
DebugBoss.DoCreateBreakPoint(Filename, Line, True);
if not BreakFound then begin
DebugBoss.DoCreateBreakPoint(Filename, Line, True, ABrkPoint);
if Ctrl and (ABrkPoint <> nil)
then ABrkPoint.Enabled := False;
end;
end;
procedure TSourceEditor.OnEditorSpecialLineColor(Sender: TObject; Line: integer;