File: breakpropertydlggroups.pas

package info (click to toggle)
lazarus 2.2.6%2Bdfsg2-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 219,980 kB
  • sloc: pascal: 1,944,919; xml: 357,634; makefile: 270,608; cpp: 57,115; sh: 3,249; java: 609; perl: 297; sql: 222; ansic: 137
file content (129 lines) | stat: -rw-r--r-- 3,170 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
unit BreakPropertyDlgGroups;

{$mode objfpc}{$H+}

interface

uses
  Classes,
  // LCL
  Forms, Controls, ButtonPanel, StdCtrls, CheckLst,
  // LazUtils
  LazUTF8,
  // IDE
  Debugger, LazarusIDEStrConsts;

type

  TBreakPointGroupAction = (bgaEnable, bgaDisable);

  { TBreakPointGroupDlg }

  TBreakPointGroupDlg = class(TForm)
    ButtonPanel1: TButtonPanel;
    CheckListBox1: TCheckListBox;
    Label1: TLabel;
  protected
    FBrkPointPoint: TIDEBreakPoint;
    FGroupList: TStringListUTF8Fast;
    FAvailableGroups: TIDEBreakPointGroups;
  public
    { public declarations }
    constructor Create(ABrkPointPoint: TIDEBreakPoint;
                       AGroupList: String;
                       AAvailableGroups: TIDEBreakPointGroups;
                       AAction: TBreakPointGroupAction
                      ); reintroduce;
    destructor Destroy; override;
    function ShowModal: Integer; override;
  end; 


function ExecuteBreakPointGroupDlg(ABrkPointPoint: TIDEBreakPoint;
                               var AGroupList: String;
                               AAvailableGroups: TIDEBreakPointGroups;
                               AAction: TBreakPointGroupAction
                              ): TModalResult;


implementation

function ExecuteBreakPointGroupDlg(ABrkPointPoint: TIDEBreakPoint;
  var AGroupList: String; AAvailableGroups: TIDEBreakPointGroups;
  AAction: TBreakPointGroupAction): TModalResult;
var
  dlg: TBreakPointGroupDlg;
begin
  Result := mrAbort;
  dlg := TBreakPointGroupDlg.Create(ABrkPointPoint, AGroupList, AAvailableGroups, AAction);
  try
    Result := dlg.ShowModal;
    if Result = mrOK then
      AGroupList := dlg. FGroupList.DelimitedText;
  finally
    dlg.Free;
  end;
end;

{ TBreakPointGroupDlg }

constructor TBreakPointGroupDlg.Create(ABrkPointPoint: TIDEBreakPoint;
  AGroupList: String; AAvailableGroups: TIDEBreakPointGroups;
  AAction: TBreakPointGroupAction);
var
  g: TIDEBreakPointGroup;
  i, j: Integer;
begin
  inherited Create(nil);
  FBrkPointPoint := ABrkPointPoint;
  FAvailableGroups := AAvailableGroups;
  FGroupList := TStringListUTF8Fast.Create;
  FGroupList.Delimiter := ';';
  FGroupList.DelimitedText := AGroupList;

  Caption := dbgBreakGroupDlgCaption;
  case AAction of
    bgaEnable:
      Label1.Caption := dbgBreakGroupDlgHeaderEnable;
    bgaDisable:
      Label1.Caption := dbgBreakGroupDlgHeaderDisable;
  end;

  for i := 0 to FAvailableGroups.Count - 1 do begin
    g := FAvailableGroups[i];
    j := CheckListBox1.Items.Add(g.Name);
    CheckListBox1.Checked[j] := FGroupList.IndexOf(g.Name) >= 0;
  end;
end;

destructor TBreakPointGroupDlg.Destroy;
begin
  inherited Destroy;
  FGroupList.Free;
end;

function TBreakPointGroupDlg.ShowModal: Integer;
var
  i, j: Integer;
  g: TIDEBreakPointGroup;
begin
  Result := inherited ShowModal;

  FGroupList.Clear;
  if Result = mrOK then begin
    for i := 0 to FAvailableGroups.Count - 1 do begin
      g := FAvailableGroups[i];
      j := CheckListBox1.Items.IndexOf(g.Name);
      if j < 0 then continue;

      if CheckListBox1.Checked[j] then begin
        FGroupList.Add(g.Name);
      end;
    end;
  end;
end;

{$R *.lfm}

end.