33
33
Classes, SysUtils, InterfaceBase, LCLProc, Contnrs, Forms, Controls, Graphics,
34
Dialogs, StdCtrls, ComCtrls, Masks, ExtCtrls, Buttons,
34
Dialogs, StdCtrls, ComCtrls, TreeFilterEdit, ExtCtrls, Buttons,
35
35
IDEImagesIntf, ObjectInspector,
36
36
CompatibilityRestrictions, IDEOptionDefs, LazarusIDEStrConsts,
37
37
EnvironmentOpts, ComponentReg, LazConf;
40
40
{ TRestrictionBrowserView }
42
42
TRestrictionBrowserView = class(TForm)
43
NameFilterEdit: TEdit;
43
FilterEdit: TTreeFilterEdit;
44
44
IssueFilterGroupBox: TGroupBox;
46
IssueTreeView: TTreeView;
47
IssueTreeView: TTreeView;
48
50
procedure FormCreate(Sender: TObject);
49
51
procedure IssueTreeViewSelectionChanged(Sender: TObject);
50
52
procedure NameFilterEditChange(Sender: TObject);
75
77
FIssueList := GetRestrictedList;
77
78
Name := NonModalIDEWindowNames[nmiwIssueBrowser];
78
79
Caption := lisMenuViewRestrictionBrowser;
80
IssueFilterGroupBox.Caption := lisFilter;
80
IssueFilterGroupBox.Caption := lisIssues;
81
81
NameLabel.Caption := lisCodeToolsDefsName;
82
82
IssueTreeView.Images := IDEImages.Images_16;
85
84
// create widget set filter buttons
86
85
for P := Low(TLCLPlatform) to High(TLCLPlatform) do
95
94
GroupIndex := Integer(P) + 1;
97
96
AllowAllUp := True;
100
98
IDEImages.Images_16.GetBitmap(
101
99
IDEImages.LoadImage(16, 'issue_'+LCLPlatformDirNames[P]), Glyph);
103
101
DebugLn('Restriction Browser: Unable to load image for ' + LCLPlatformDirNames[P] + '!');
106
103
ShowHint := True;
107
104
Hint := LCLPlatformDisplayNames[P];
108
105
OnClick := @NameFilterEditChange;
110
106
Parent := IssueFilterGroupBox;
115
110
FCanUpdate := True;
118
114
procedure TRestrictionBrowserView.IssueTreeViewSelectionChanged(Sender: TObject);
120
116
Issue: TRestriction;
142
137
procedure TRestrictionBrowserView.UpdateIssueList;
145
IssueProperty: String;
146
IssueMask: TMaskList;
149
140
Issues: TStringList;
152
AddParentClass: Boolean;
154
142
WidgetSetFilter: TLCLPlatforms;
155
143
Component: TComponent;
157
145
if not FCanUpdate then Exit;
158
S := Trim(NameFilterEdit.Text);
162
146
WidgetSetFilter := [];
163
147
for P := Low(TLCLPlatform) to High(TLCLPlatform) do
165
149
Component := FindComponent('SpeedButton' + LCLPlatformDirNames[P]);
166
if Component is TSpeedButton then
167
if (Component as TSpeedButton).Down then Include(WidgetSetFilter, P);
171
if I = 0 then IssueClass := S
174
IssueClass := Copy(S, 0, I - 1);
175
IssueProperty := Copy(S, I + 1, MaxInt);
178
if (IssueProperty = '') and (IssueClass = '') then
182
if IssueClass = '' then
183
M := '*.' + IssueProperty + '*'
186
// find parent classes
188
FClasses := TClassList.Create;
190
IDEComponentPalette.IterateRegisteredClasses(@GetComponentClass);
192
FClasses.Add(TCustomForm);
194
FClasses.Add(TDataModule);
195
FClasses.Add(TFrame);
197
for I := 0 to FClasses.Count - 1 do
200
AddParentClass := False;
203
if AddParentClass or (Copy(C.ClassName, 0, Length(IssueClass)) = IssueClass) then
205
if M <> '' then M := M + ';';
206
M := M + C.ClassName + ';' + C.ClassName + '.' + IssueProperty + '*';
207
AddParentClass := True;
214
if FClasses.Count = 0 then
215
M := IssueClass + '*;' + IssueClass + '*.' + IssueProperty + '*';
217
if (Copy('TWidgetSet', 0, Length(IssueClass)) = IssueClass) then
218
M := M + ';TWidgetSet';
225
IssueMask := TMaskList.Create(M);
150
Assert(Component is TSpeedButton, 'Component '+Component.Name+' is not TSpeedButton');
151
if (Component as TSpeedButton).Down then
152
Include(WidgetSetFilter, P);
226
154
Issues := TStringList.Create;
228
156
for I := 0 to High(FIssueList) do
230
Issue := FIssueList[I];
231
if Issue.WidgetSet in WidgetSetFilter then
232
if IssueMask.Matches(Issue.Name) then
233
Issues.AddObject(Issue.Name, TObject(I));
157
if FIssueList[I].WidgetSet in WidgetSetFilter then
158
Issues.AddObject(FIssueList[I].Name, TObject(I));
238
160
IssueTreeView.BeginUpdate;
240
162
IssueTreeView.Items.Clear;
242
163
for I := 0 to Issues.Count - 1 do
244
165
with IssueTreeView.Items.AddChild(nil, Issues[I]) do
246
167
ID := PtrInt(Issues.Objects[I]);
248
168
ImageIndex := IDEImages.LoadImage(16,
249
169
'issue_'+LCLPlatformDirNames[FIssueList[ID].WidgetSet]);
250
170
StateIndex := ImageIndex;
251
171
SelectedIndex := ImageIndex;
253
172
Data := @FIssueList[ID];
255
if NameFilterEdit.Text = Issues[I] then
257
IssueTreeView.Selected := IssueTreeView.Items[I];
261
176
IssueTreeView.EndUpdate;
268
181
if IssueTreeView.Items.Count > 0 then
270
183
if IssueTreeView.Selected = nil then
282
195
FCanUpdate := False;
284
NameFilterEdit.Text := AIssueName;
197
FilterEdit.Text := AIssueName;
286
198
if AIssueName <> '' then
288
200
for P := Low(TLCLPlatform) to High(TLCLPlatform) do
290
202
Component := FindComponent('SpeedButton' + LCLPlatformDirNames[P]);
291
if Component is TSpeedButton then
292
(Component as TSpeedButton).Down := True;
203
Assert(Component is TSpeedButton, 'Component '+Component.Name+' is not TSpeedButton');
204
(Component as TSpeedButton).Down := True;