IDE: codebrowser: added filter for packages, units and identifiers - ToDo: reg ex

git-svn-id: trunk@10747 -
This commit is contained in:
mattias 2007-03-14 10:30:08 +00:00
parent c1e14d850d
commit 07d40f291c
5 changed files with 412 additions and 73 deletions

View File

@ -135,6 +135,7 @@ function ComparePrefixIdent(PrefixIdent, Identifier: PChar): boolean;
function TextBeginsWith(Txt: PChar; TxtLen: integer; StartTxt: PChar;
StartTxtLen: integer; CaseSensitive: boolean): boolean;
function StrBeginsWith(const s, Prefix: string): boolean;
function IdentifierPos(Search, Identifier: PChar): PtrInt;
// space and special chars
function TrimCodeSpace(const ACode: string): string;
@ -2677,6 +2678,33 @@ begin
Result:=true;
end;
function IdentifierPos(Search, Identifier: PChar): PtrInt;
var
i: Integer;
begin
if Search=nil then exit(-1);
if Identifier=nil then exit(-1);
Result:=0;
while (IsIdentChar[Identifier[Result]]) do begin
if UpChars[Search^]=UpChars[Identifier[Result]] then begin
i:=1;
repeat
if IsIdentChar[Search[i]] then begin
if (UpChars[Search[i]]=UpChars[Identifier[Result+i]]) then
inc(i)
else
break;
end else begin
// whole found
exit;
end;
until false;
end;
inc(Result);
end;
Result:=-1;
end;
function GetIdentifier(Identifier: PChar): string;
var len: integer;
begin

View File

@ -125,10 +125,14 @@ object CodeBrowserView: TCodeBrowserView
AnchorSideTop.Control = PackageFilterEdit
Left = 424
Height = 22
Top = 2
Top = 3
Width = 23
Color = clBtnFace
GroupIndex = 1
NumGlyphs = 0
OnClick = PackageFilterEditEditingDone
ShowHint = True
ParentShowHint = False
end
object PackageFilterContainsSpeedButton: TSpeedButton
AnchorSideLeft.Control = PackageFilterBeginsSpeedButton
@ -136,10 +140,14 @@ object CodeBrowserView: TCodeBrowserView
AnchorSideTop.Control = PackageFilterEdit
Left = 447
Height = 22
Top = 2
Top = 3
Width = 23
Color = clBtnFace
GroupIndex = 1
NumGlyphs = 0
OnClick = PackageFilterEditEditingDone
ShowHint = True
ParentShowHint = False
end
object PackageFilterRegExSpeedButton: TSpeedButton
AnchorSideLeft.Control = PackageFilterContainsSpeedButton
@ -147,15 +155,115 @@ object CodeBrowserView: TCodeBrowserView
AnchorSideTop.Control = PackageFilterEdit
Left = 470
Height = 22
Top = 2
Top = 3
Width = 23
Color = clBtnFace
GroupIndex = 1
NumGlyphs = 0
OnClick = PackageFilterEditEditingDone
ShowHint = True
ParentShowHint = False
end
object UnitFilterBeginsSpeedButton: TSpeedButton
AnchorSideLeft.Control = UnitFilterEdit
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = UnitFilterEdit
AnchorSideTop.Side = asrCenter
Left = 424
Height = 22
Top = 31
Width = 23
Color = clBtnFace
GroupIndex = 2
NumGlyphs = 0
OnClick = PackageFilterEditEditingDone
ShowHint = True
ParentShowHint = False
end
object UnitFilterContainsSpeedButton: TSpeedButton
AnchorSideLeft.Control = UnitFilterBeginsSpeedButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = UnitFilterEdit
AnchorSideTop.Side = asrCenter
Left = 447
Height = 22
Top = 31
Width = 23
Color = clBtnFace
GroupIndex = 2
NumGlyphs = 0
OnClick = PackageFilterEditEditingDone
ShowHint = True
ParentShowHint = False
end
object UnitFilterRegExSpeedButton: TSpeedButton
AnchorSideLeft.Control = UnitFilterContainsSpeedButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = UnitFilterEdit
AnchorSideTop.Side = asrCenter
Left = 470
Height = 22
Top = 31
Width = 23
Color = clBtnFace
GroupIndex = 2
NumGlyphs = 0
OnClick = PackageFilterEditEditingDone
ShowHint = True
ParentShowHint = False
end
object IdentifierFilterBeginsSpeedButton: TSpeedButton
AnchorSideLeft.Control = IdentifierFilterEdit
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = IdentifierFilterEdit
AnchorSideTop.Side = asrCenter
Left = 424
Height = 22
Top = 58
Width = 23
Color = clBtnFace
GroupIndex = 3
NumGlyphs = 0
OnClick = PackageFilterEditEditingDone
ShowHint = True
ParentShowHint = False
end
object IdentifierFilterContainsSpeedButton: TSpeedButton
AnchorSideLeft.Control = IdentifierFilterBeginsSpeedButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = IdentifierFilterEdit
AnchorSideTop.Side = asrCenter
Left = 447
Height = 22
Top = 58
Width = 23
Color = clBtnFace
GroupIndex = 3
NumGlyphs = 0
OnClick = PackageFilterEditEditingDone
ShowHint = True
ParentShowHint = False
end
object IdentifierFilterRegExSpeedButton: TSpeedButton
AnchorSideLeft.Control = IdentifierFilterContainsSpeedButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = IdentifierFilterEdit
AnchorSideTop.Side = asrCenter
Left = 470
Height = 22
Top = 58
Width = 23
Color = clBtnFace
GroupIndex = 3
NumGlyphs = 0
OnClick = PackageFilterEditEditingDone
ShowHint = True
ParentShowHint = False
end
object ShowPackagesCheckBox: TCheckBox
Left = 6
Height = 20
Top = 3
Top = 4
Width = 170
Caption = 'ShowPackagesCheckBox'
OnChange = ShowPackagesCheckBoxChange
@ -164,7 +272,7 @@ object CodeBrowserView: TCodeBrowserView
object ShowUnitsCheckBox: TCheckBox
Left = 6
Height = 20
Top = 27
Top = 32
Width = 142
Caption = 'ShowUnitsCheckBox'
OnChange = ShowUnitsCheckBoxChange
@ -173,7 +281,7 @@ object CodeBrowserView: TCodeBrowserView
object ShowIdentifiersCheckBox: TCheckBox
Left = 6
Height = 20
Top = 51
Top = 59
Width = 168
Caption = 'ShowIdentifiersCheckBox'
OnChange = ShowIdentifiersCheckBoxChange
@ -184,11 +292,34 @@ object CodeBrowserView: TCodeBrowserView
AnchorSideTop.Side = asrCenter
Left = 223
Height = 23
Top = 2
Top = 3
Width = 201
OnEditingDone = PackageFilterEditEditingDone
TabOrder = 3
Text = 'PackageFilterEdit'
end
object UnitFilterEdit: TEdit
AnchorSideTop.Control = ShowUnitsCheckBox
AnchorSideTop.Side = asrCenter
Left = 223
Height = 23
Top = 31
Width = 201
OnEditingDone = PackageFilterEditEditingDone
TabOrder = 4
Text = 'UnitFilterEdit'
end
object IdentifierFilterEdit: TEdit
AnchorSideTop.Control = ShowIdentifiersCheckBox
AnchorSideTop.Side = asrCenter
Left = 223
Height = 23
Top = 58
Width = 201
OnEditingDone = PackageFilterEditEditingDone
TabOrder = 5
Text = 'IdentifierFilterEdit'
end
end
object ImageList1: TImageList
left = 298

View File

@ -46,46 +46,93 @@ LazarusResources.Add('TCodeBrowserView','FORMDATA',[
+#3#0#12'TSpeedButton'#30'PackageFilterBeginsSpeedButton'#22'AnchorSideLeft.C'
+'ontrol'#7#17'PackageFilterEdit'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'A'
+'nchorSideTop.Control'#7#17'PackageFilterEdit'#4'Left'#3#168#1#6'Height'#2#22
+#3'Top'#2#2#5'Width'#2#23#5'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#0#0#12'TS'
+'peedButton PackageFilterContainsSpeedButton'#22'AnchorSideLeft.Control'#7#30
+'PackageFilterBeginsSpeedButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'A'
+'nchorSideTop.Control'#7#17'PackageFilterEdit'#4'Left'#3#191#1#6'Height'#2#22
+#3'Top'#2#2#5'Width'#2#23#5'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#0#0#12'TS'
+'peedButton'#29'PackageFilterRegExSpeedButton'#22'AnchorSideLeft.Control'#7
+' PackageFilterContainsSpeedButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21
+'AnchorSideTop.Control'#7#17'PackageFilterEdit'#4'Left'#3#214#1#6'Height'#2
+#22#3'Top'#2#2#5'Width'#2#23#5'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#0#0#9
+'TCheckBox'#20'ShowPackagesCheckBox'#4'Left'#2#6#6'Height'#2#20#3'Top'#2#3#5
+'Width'#3#170#0#7'Caption'#6#20'ShowPackagesCheckBox'#8'OnChange'#7#26'ShowP'
+'ackagesCheckBoxChange'#8'TabOrder'#2#0#0#0#9'TCheckBox'#17'ShowUnitsCheckBo'
+'x'#4'Left'#2#6#6'Height'#2#20#3'Top'#2#27#5'Width'#3#142#0#7'Caption'#6#17
+'ShowUnitsCheckBox'#8'OnChange'#7#23'ShowUnitsCheckBoxChange'#8'TabOrder'#2#1
+#0#0#9'TCheckBox'#23'ShowIdentifiersCheckBox'#4'Left'#2#6#6'Height'#2#20#3'T'
+'op'#2'3'#5'Width'#3#168#0#7'Caption'#6#23'ShowIdentifiersCheckBox'#8'OnChan'
+'ge'#7#29'ShowIdentifiersCheckBoxChange'#8'TabOrder'#2#2#0#0#5'TEdit'#17'Pac'
+'kageFilterEdit'#21'AnchorSideTop.Control'#7#20'ShowPackagesCheckBox'#18'Anc'
+'horSideTop.Side'#7#9'asrCenter'#4'Left'#3#223#0#6'Height'#2#23#3'Top'#2#2#5
,'Width'#3#201#0#8'TabOrder'#2#3#4'Text'#6#17'PackageFilterEdit'#0#0#0#10'TIm'
+'ageList'#10'ImageList1'#4'left'#3'*'#1#3'top'#3#196#0#0#0#10'TPopupMenu'#10
+'PopupMenu1'#7'OnPopup'#7#15'PopupMenu1Popup'#4'left'#3#248#0#3'top'#3#196#0
+#0#9'TMenuItem'#23'CopyDescriptionMenuItem'#7'Caption'#6#23'CopyDescriptionM'
+'enuItem'#7'OnClick'#7#28'CopyDescriptionMenuItemClick'#0#0#9'TMenuItem'#22
+'CopyIdentifierMenuItem'#7'Caption'#6#22'CopyIdentifierMenuItem'#7'OnClick'#7
+#27'CopyIdentifierMenuItemClick'#0#0#9'TMenuItem'#21'CopySeparatorMenuItem'#7
+'Caption'#6#1'-'#0#0#9'TMenuItem'#25'ExpandAllPackagesMenuItem'#7'Caption'#6
+#25'ExpandAllPackagesMenuItem'#7'OnClick'#7#30'ExpandAllPackagesMenuItemClic'
+'k'#0#0#9'TMenuItem'#27'CollapseAllPackagesMenuItem'#7'Caption'#6#27'Collaps'
+'eAllPackagesMenuItem'#7'OnClick'#7' CollapseAllPackagesMenuItemClick'#0#0#9
+'TMenuItem'#28'AllPackagesSeparatorMenuItem'#7'Caption'#6#1'-'#0#0#9'TMenuIt'
+'em'#22'ExpandAllUnitsMenuItem'#7'Caption'#6#22'ExpandAllUnitsMenuItem'#7'On'
+'Click'#7#27'ExpandAllUnitsMenuItemClick'#0#0#9'TMenuItem'#24'CollapseAllUni'
+'tsMenuItem'#7'Caption'#6#24'CollapseAllUnitsMenuItem'#7'OnClick'#7#29'Colla'
+'pseAllUnitsMenuItemClick'#0#0#9'TMenuItem'#25'AllUnitsSeparatorMenuItem'#7
+'Caption'#6#1'-'#0#0#9'TMenuItem'#24'ExpandAllClassesMenuItem'#7'Caption'#6
+#24'ExpandAllClassesMenuItem'#7'OnClick'#7#29'ExpandAllClassesMenuItemClick'
+#0#0#9'TMenuItem'#26'CollapseAllClassesMenuItem'#7'Caption'#6#26'CollapseAll'
+'ClassesMenuItem'#7'OnClick'#7#31'CollapseAllClassesMenuItemClick'#0#0#9'TMe'
+'nuItem'#27'AllClassesSeparatorMenuItem'#7'Caption'#6#1'-'#0#0#9'TMenuItem'
+#14'ExportMenuItem'#7'Caption'#6#14'ExportMenuItem'#7'OnClick'#7#19'ExportMe'
+'nuItemClick'#0#0#0#0
+#3'Top'#2#3#5'Width'#2#23#5'Color'#7#9'clBtnFace'#10'GroupIndex'#2#1#9'NumGl'
+'yphs'#2#0#7'OnClick'#7#28'PackageFilterEditEditingDone'#8'ShowHint'#9#14'Pa'
+'rentShowHint'#8#0#0#12'TSpeedButton PackageFilterContainsSpeedButton'#22'An'
+'chorSideLeft.Control'#7#30'PackageFilterBeginsSpeedButton'#19'AnchorSideLef'
+'t.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#17'PackageFilterEdit'#4
+'Left'#3#191#1#6'Height'#2#22#3'Top'#2#3#5'Width'#2#23#5'Color'#7#9'clBtnFac'
+'e'#10'GroupIndex'#2#1#9'NumGlyphs'#2#0#7'OnClick'#7#28'PackageFilterEditEdi'
+'tingDone'#8'ShowHint'#9#14'ParentShowHint'#8#0#0#12'TSpeedButton'#29'Packag'
+'eFilterRegExSpeedButton'#22'AnchorSideLeft.Control'#7' PackageFilterContain'
+'sSpeedButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Contr'
+'ol'#7#17'PackageFilterEdit'#4'Left'#3#214#1#6'Height'#2#22#3'Top'#2#3#5'Wid'
+'th'#2#23#5'Color'#7#9'clBtnFace'#10'GroupIndex'#2#1#9'NumGlyphs'#2#0#7'OnCl'
+'ick'#7#28'PackageFilterEditEditingDone'#8'ShowHint'#9#14'ParentShowHint'#8#0
+#0#12'TSpeedButton'#27'UnitFilterBeginsSpeedButton'#22'AnchorSideLeft.Contro'
+'l'#7#14'UnitFilterEdit'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSid'
+'eTop.Control'#7#14'UnitFilterEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4
+'Left'#3#168#1#6'Height'#2#22#3'Top'#2#31#5'Width'#2#23#5'Color'#7#9'clBtnFa'
+'ce'#10'GroupIndex'#2#2#9'NumGlyphs'#2#0#7'OnClick'#7#28'PackageFilterEditEd'
+'itingDone'#8'ShowHint'#9#14'ParentShowHint'#8#0#0#12'TSpeedButton'#29'UnitF'
,'ilterContainsSpeedButton'#22'AnchorSideLeft.Control'#7#27'UnitFilterBeginsS'
+'peedButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'
+#7#14'UnitFilterEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#3#191#1#6
+'Height'#2#22#3'Top'#2#31#5'Width'#2#23#5'Color'#7#9'clBtnFace'#10'GroupInde'
+'x'#2#2#9'NumGlyphs'#2#0#7'OnClick'#7#28'PackageFilterEditEditingDone'#8'Sho'
+'wHint'#9#14'ParentShowHint'#8#0#0#12'TSpeedButton'#26'UnitFilterRegExSpeedB'
+'utton'#22'AnchorSideLeft.Control'#7#29'UnitFilterContainsSpeedButton'#19'An'
+'chorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#14'UnitFilter'
+'Edit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#3#214#1#6'Height'#2#22#3
+'Top'#2#31#5'Width'#2#23#5'Color'#7#9'clBtnFace'#10'GroupIndex'#2#2#9'NumGly'
+'phs'#2#0#7'OnClick'#7#28'PackageFilterEditEditingDone'#8'ShowHint'#9#14'Par'
+'entShowHint'#8#0#0#12'TSpeedButton!IdentifierFilterBeginsSpeedButton'#22'An'
+'chorSideLeft.Control'#7#20'IdentifierFilterEdit'#19'AnchorSideLeft.Side'#7#9
+'asrBottom'#21'AnchorSideTop.Control'#7#20'IdentifierFilterEdit'#18'AnchorSi'
+'deTop.Side'#7#9'asrCenter'#4'Left'#3#168#1#6'Height'#2#22#3'Top'#2':'#5'Wid'
+'th'#2#23#5'Color'#7#9'clBtnFace'#10'GroupIndex'#2#3#9'NumGlyphs'#2#0#7'OnCl'
+'ick'#7#28'PackageFilterEditEditingDone'#8'ShowHint'#9#14'ParentShowHint'#8#0
+#0#12'TSpeedButton#IdentifierFilterContainsSpeedButton'#22'AnchorSideLeft.Co'
+'ntrol'#7'!IdentifierFilterBeginsSpeedButton'#19'AnchorSideLeft.Side'#7#9'as'
+'rBottom'#21'AnchorSideTop.Control'#7#20'IdentifierFilterEdit'#18'AnchorSide'
+'Top.Side'#7#9'asrCenter'#4'Left'#3#191#1#6'Height'#2#22#3'Top'#2':'#5'Width'
+#2#23#5'Color'#7#9'clBtnFace'#10'GroupIndex'#2#3#9'NumGlyphs'#2#0#7'OnClick'
+#7#28'PackageFilterEditEditingDone'#8'ShowHint'#9#14'ParentShowHint'#8#0#0#12
+'TSpeedButton IdentifierFilterRegExSpeedButton'#22'AnchorSideLeft.Control'#7
+'#IdentifierFilterContainsSpeedButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'
+#21'AnchorSideTop.Control'#7#20'IdentifierFilterEdit'#18'AnchorSideTop.Side'
+#7#9'asrCenter'#4'Left'#3#214#1#6'Height'#2#22#3'Top'#2':'#5'Width'#2#23#5'C'
+'olor'#7#9'clBtnFace'#10'GroupIndex'#2#3#9'NumGlyphs'#2#0#7'OnClick'#7#28'Pa'
+'ckageFilterEditEditingDone'#8'ShowHint'#9#14'ParentShowHint'#8#0#0#9'TCheck'
+'Box'#20'ShowPackagesCheckBox'#4'Left'#2#6#6'Height'#2#20#3'Top'#2#4#5'Width'
+#3#170#0#7'Caption'#6#20'ShowPackagesCheckBox'#8'OnChange'#7#26'ShowPackages'
+'CheckBoxChange'#8'TabOrder'#2#0#0#0#9'TCheckBox'#17'ShowUnitsCheckBox'#4'Le'
+'ft'#2#6#6'Height'#2#20#3'Top'#2' '#5'Width'#3#142#0#7'Caption'#6#17'ShowUni'
+'tsCheckBox'#8'OnChange'#7#23'ShowUnitsCheckBoxChange'#8'TabOrder'#2#1#0#0#9
+'TCheckBox'#23'ShowIdentifiersCheckBox'#4'Left'#2#6#6'Height'#2#20#3'Top'#2
+';'#5'Width'#3#168#0#7'Caption'#6#23'ShowIdentifiersCheckBox'#8'OnChange'#7
+#29'ShowIdentifiersCheckBoxChange'#8'TabOrder'#2#2#0#0#5'TEdit'#17'PackageFi'
+'lterEdit'#21'AnchorSideTop.Control'#7#20'ShowPackagesCheckBox'#18'AnchorSid'
+'eTop.Side'#7#9'asrCenter'#4'Left'#3#223#0#6'Height'#2#23#3'Top'#2#3#5'Width'
+#3#201#0#13'OnEditingDone'#7#28'PackageFilterEditEditingDone'#8'TabOrder'#2#3
+#4'Text'#6#17'PackageFilterEdit'#0#0#5'TEdit'#14'UnitFilterEdit'#21'AnchorSi'
+'deTop.Control'#7#17'ShowUnitsCheckBox'#18'AnchorSideTop.Side'#7#9'asrCenter'
+#4'Left'#3#223#0#6'Height'#2#23#3'Top'#2#31#5'Width'#3#201#0#13'OnEditingDon'
+'e'#7#28'PackageFilterEditEditingDone'#8'TabOrder'#2#4#4'Text'#6#14'UnitFilt'
+'erEdit'#0#0#5'TEdit'#20'IdentifierFilterEdit'#21'AnchorSideTop.Control'#7#23
+'ShowIdentifiersCheckBox'#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#3#223
+#0#6'Height'#2#23#3'Top'#2':'#5'Width'#3#201#0#13'OnEditingDone'#7#28'Packag'
+'eFilterEditEditingDone'#8'TabOrder'#2#5#4'Text'#6#20'IdentifierFilterEdit'#0
+#0#0#10'TImageList'#10'ImageList1'#4'left'#3'*'#1#3'top'#3#196#0#0#0#10'TPop'
+'upMenu'#10'PopupMenu1'#7'OnPopup'#7#15'PopupMenu1Popup'#4'left'#3#248#0#3't'
+'op'#3#196#0#0#9'TMenuItem'#23'CopyDescriptionMenuItem'#7'Caption'#6#23'Copy'
+'DescriptionMenuItem'#7'OnClick'#7#28'CopyDescriptionMenuItemClick'#0#0#9'TM'
+'enuItem'#22'CopyIdentifierMenuItem'#7'Caption'#6#22'CopyIdentifierMenuItem'
+#7'OnClick'#7#27'CopyIdentifierMenuItemClick'#0#0#9'TMenuItem'#21'CopySepara'
+'torMenuItem'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#25'ExpandAllPackagesMenuIte'
+'m'#7'Caption'#6#25'ExpandAllPackagesMenuItem'#7'OnClick'#7#30'ExpandAllPack'
+'agesMenuItemClick'#0#0#9'TMenuItem'#27'CollapseAllPackagesMenuItem'#7'Capti'
+'on'#6#27'CollapseAllPackagesMenuItem'#7'OnClick'#7' CollapseAllPackagesMenu'
+'ItemClick'#0#0#9'TMenuItem'#28'AllPackagesSeparatorMenuItem'#7'Caption'#6#1
+'-'#0#0#9'TMenuItem'#22'ExpandAllUnitsMenuItem'#7'Caption'#6#22'ExpandAllUni'
+'tsMenuItem'#7'OnClick'#7#27'ExpandAllUnitsMenuItemClick'#0#0#9'TMenuItem'#24
+'CollapseAllUnitsMenuItem'#7'Caption'#6#24'CollapseAllUnitsMenuItem'#7'OnCli'
+'ck'#7#29'CollapseAllUnitsMenuItemClick'#0#0#9'TMenuItem'#25'AllUnitsSeparat'
+'orMenuItem'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#24'ExpandAllClassesMenuItem'
,#7'Caption'#6#24'ExpandAllClassesMenuItem'#7'OnClick'#7#29'ExpandAllClassesM'
+'enuItemClick'#0#0#9'TMenuItem'#26'CollapseAllClassesMenuItem'#7'Caption'#6
+#26'CollapseAllClassesMenuItem'#7'OnClick'#7#31'CollapseAllClassesMenuItemCl'
+'ick'#0#0#9'TMenuItem'#27'AllClassesSeparatorMenuItem'#7'Caption'#6#1'-'#0#0
+#9'TMenuItem'#14'ExportMenuItem'#7'Caption'#6#14'ExportMenuItem'#7'OnClick'#7
+#19'ExportMenuItemClick'#0#0#0#0
]);

View File

@ -106,6 +106,7 @@ type
destructor Destroy; override;
procedure Clear;
function AddNode(const Description, Identifier: string): TCodeBrowserNode;
procedure DeleteNode(var Node: TCodeBrowserNode);
property Filename: string read FFilename;
property CodeBuffer: TCodeBuffer read FCodeBuffer write SetCodeBuffer;
property CodeTool: TCodeTool read FCodeTool write SetCodeTool;
@ -253,6 +254,8 @@ type
{ TCodeBrowserView }
TCodeBrowserView = class(TForm)
UnitFilterEdit: TEdit;
IdentifierFilterEdit: TEdit;
PackageFilterEdit: TEdit;
ShowIdentifiersCheckBox: TCheckBox;
ShowUnitsCheckBox: TCheckBox;
@ -283,6 +286,12 @@ type
PackageFilterBeginsSpeedButton: TSpeedButton;
PackageFilterContainsSpeedButton: TSpeedButton;
PackageFilterRegExSpeedButton: TSpeedButton;
UnitFilterBeginsSpeedButton: TSpeedButton;
UnitFilterContainsSpeedButton: TSpeedButton;
UnitFilterRegExSpeedButton: TSpeedButton;
IdentifierFilterBeginsSpeedButton: TSpeedButton;
IdentifierFilterContainsSpeedButton: TSpeedButton;
IdentifierFilterRegExSpeedButton: TSpeedButton;
StatusBar1: TStatusBar;
procedure BrowseTreeViewMouseDown(Sender: TOBject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
@ -299,6 +308,7 @@ type
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure PackageFilterEditEditingDone(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
procedure ScopeComboBoxDropDown(Sender: TObject);
procedure ScopeComboBoxEditingDone(Sender: TObject);
@ -489,6 +499,16 @@ begin
ExpandAllClassesMenuItem.Caption:='Expand all classes';
CollapseAllClassesMenuItem.Caption:='Collapse all classes';
ExportMenuItem.Caption:='Export ...';
PackageFilterBeginsSpeedButton.Hint:='Package name begins with ...';
PackageFilterContainsSpeedButton.Hint:='Package name contains ...';
PackageFilterRegExSpeedButton.Hint:='Package name fits regular expression ...';
UnitFilterBeginsSpeedButton.Hint:='Unit name begins with ...';
UnitFilterContainsSpeedButton.Hint:='Unit name contains ...';
UnitFilterRegExSpeedButton.Hint:='Unit name fits regular expression ...';
IdentifierFilterBeginsSpeedButton.Hint:='Identifier begins with ...';
IdentifierFilterContainsSpeedButton.Hint:='Identifier contains ...';
IdentifierFilterRegExSpeedButton.Hint:='Identifier fits regular expression ...';
InitImageList;
LoadOptions;
@ -507,6 +527,11 @@ begin
FreeAndNil(FOptions);
end;
procedure TCodeBrowserView.PackageFilterEditEditingDone(Sender: TObject);
begin
fStage:=cbwsGetOptions;
end;
procedure TCodeBrowserView.PopupMenu1Popup(Sender: TObject);
var
TVNode: TTreeNode;
@ -619,6 +644,27 @@ procedure TCodeBrowserView.LoadFilterGroupbox;
begin
ShowPrivateCheckBox.Checked:=Options.ShowPrivate;
ShowProtectedCheckBox.Checked:=Options.ShowProtected;
PackageFilterEdit.Text:=Options.LevelFilterText[cblPackages];
case Options.LevelFilterType[cblPackages] of
cbtfBegins: PackageFilterBeginsSpeedButton.Down:=true;
cbtfContains: PackageFilterContainsSpeedButton.Down:=true;
cbtfRegEx: PackageFilterRegExSpeedButton.Down:=true;
end;
UnitFilterEdit.Text:=Options.LevelFilterText[cblUnits];
case Options.LevelFilterType[cblUnits] of
cbtfBegins: UnitFilterBeginsSpeedButton.Down:=true;
cbtfContains: UnitFilterContainsSpeedButton.Down:=true;
cbtfRegEx: UnitFilterRegExSpeedButton.Down:=true;
end;
IdentifierFilterEdit.Text:=Options.LevelFilterText[cblIdentifiers];
case Options.LevelFilterType[cblIdentifiers] of
cbtfBegins: IdentifierFilterBeginsSpeedButton.Down:=true;
cbtfContains: IdentifierFilterContainsSpeedButton.Down:=true;
cbtfRegEx: IdentifierFilterRegExSpeedButton.Down:=true;
end;
end;
procedure TCodeBrowserView.FillScopeComboBox;
@ -745,6 +791,8 @@ begin
Options.Scope:=ScopeComboBox.Text;
Options.ShowPrivate:=ShowPrivateCheckBox.Checked;
Options.ShowProtected:=ShowProtectedCheckBox.Checked;
// levels
NewLevels:=TStringList.Create;
if ShowPackagesCheckBox.Checked then
NewLevels.Add(CodeBrowserLevelNames[cblPackages]);
@ -754,6 +802,32 @@ begin
NewLevels.Add(CodeBrowserLevelNames[cblIdentifiers]);
Options.Levels:=NewLevels;
NewLevels.Free;
// level filter
Options.LevelFilterText[cblPackages]:=PackageFilterEdit.Text;
if PackageFilterBeginsSpeedButton.Down then
Options.LevelFilterType[cblPackages]:=cbtfBegins;
if PackageFilterContainsSpeedButton.Down then
Options.LevelFilterType[cblPackages]:=cbtfContains;
if PackageFilterRegExSpeedButton.Down then
Options.LevelFilterType[cblPackages]:=cbtfRegEx;
Options.LevelFilterText[cblUnits]:=UnitFilterEdit.Text;
DebugLn(['TCodeBrowserView.WorkGetOptions UnitFIlter=',Options.LevelFilterText[cblUnits],' Edit=',UnitFilterEdit.Text]);
if UnitFilterBeginsSpeedButton.Down then
Options.LevelFilterType[cblUnits]:=cbtfBegins;
if UnitFilterContainsSpeedButton.Down then
Options.LevelFilterType[cblUnits]:=cbtfContains;
if UnitFilterRegExSpeedButton.Down then
Options.LevelFilterType[cblUnits]:=cbtfRegEx;
Options.LevelFilterText[cblIdentifiers]:=IdentifierFilterEdit.Text;
if IdentifierFilterBeginsSpeedButton.Down then
Options.LevelFilterType[cblIdentifiers]:=cbtfBegins;
if IdentifierFilterContainsSpeedButton.Down then
Options.LevelFilterType[cblIdentifiers]:=cbtfContains;
if IdentifierFilterRegExSpeedButton.Down then
Options.LevelFilterType[cblIdentifiers]:=cbtfRegEx;
// this stage finished -> next stage
if UpdateNeeded or Options.Modified then
@ -1379,6 +1453,9 @@ var
ShowIdentifiers: boolean;
ShowPrivate: boolean;
ShowProtected: boolean;
LevelFilterText: array[TCodeBrowserLevel] of string;
LevelFilterType: array[TCodeBrowserLevel] of TCodeBrowserTextFilter;
function GetCodeTool(AnUnit: TCodeBrowserUnit): TCodeTool;
begin
@ -1391,6 +1468,26 @@ var
//DebugLn(['GetCodeTool END ',Result<>nil]);
end;
function IdentifierFitsFilter(LvlType: TCodeBrowserLevel;
const Identifier: string): boolean;
begin
//DebugLn(['IdentifierFitsFilter Identifier=',Identifier,' Filter=',LevelFilterText[LvlType]]);
if (LevelFilterText[LvlType]='') then exit(true);
if Identifier='' then exit(false);
case LevelFilterType[LvlType] of
cbtfBegins,
cbtfRegEx:
Result:=ComparePrefixIdent(PChar(Pointer(LevelFilterText[LvlType])),
PChar(Pointer(Identifier)));
cbtfContains:
Result:=IdentifierPos(PChar(Pointer(LevelFilterText[LvlType])),
PChar(Pointer(Identifier)))>=0;
else
Result:=true;
end;
end;
procedure AddUnitNodes(SrcUnit: TCodeBrowserUnit; var DestUnit: TObject);
var
Tool: TCodeTool;
@ -1468,7 +1565,7 @@ var
end;
end;
end;
procedure AddIdentifierNode(CTNode: TCodeTreeNode);
var
NewNode: TCodeBrowserNode;
@ -1486,21 +1583,26 @@ var
then
exit;
GetNodeDescription(ChildCTNode,ChildDescription,ChildIdentifier);
NewChildNode:=NewNode.AddNode(ChildDescription,ChildIdentifier);
if NewChildNode<>nil then begin
NewChildNode.Desc:=ChildCTNode.Desc;
Tool.CleanPosToCodePos(ChildCTNode.StartPos,NewChildNode.FCodePos);
if IdentifierFitsFilter(cblIdentifiers,ChildIdentifier) then begin
NewChildNode:=NewNode.AddNode(ChildDescription,ChildIdentifier);
if NewChildNode<>nil then begin
NewChildNode.Desc:=ChildCTNode.Desc;
Tool.CleanPosToCodePos(ChildCTNode.StartPos,NewChildNode.FCodePos);
end;
end;
end;
var
Description, Identifier: string;
CurUnit: TCodeBrowserUnit;
begin
if not ShowIdentifiers then exit;
AddUnit;
CurUnit:=TCodeBrowserUnit(DestUnit);
//DebugLn(['AddIdentifierNode ',CTNode.DescAsString,' Description="',Description,'"']);
GetNodeDescription(CTNode,Description,Identifier);
NewNode:=TCodeBrowserUnit(DestUnit).AddNode(Description,Identifier);
NewNode:=CurUnit.AddNode(Description,Identifier);
NewNode.Desc:=CTNode.Desc;
Tool.CleanPosToCodePos(CTNode.StartPos,NewNode.FCodePos);
//DebugLn(['AddIdentifierNode Code=',NewNode.FCodePos.Code<>nil,' P=',NewNode.FCodePos.P]);
@ -1525,6 +1627,12 @@ var
ChildCTNode:=ChildCTNode.Next;
end;
end;
if (NewNode.ChildNodes=nil)
and (not IdentifierFitsFilter(cblIdentifiers,Identifier)) then begin
// identifier is not needed -> remove
CurUnit.DeleteNode(NewNode);
end;
end;
var
@ -1582,23 +1690,26 @@ var
NewUnit:=nil;
while Node<>nil do begin
CurUnit:=TCodeBrowserUnit(Node.Data);
if DestParentList=nil then begin
DestParentList:=TCodeBrowserUnitList.Create(CodeBrowserHidden,nil);
end else if not (DestParentList is TCodeBrowserUnitList) then
RaiseParentNotUnitList;
if ShowUnits then begin
// create a unit node
NewUnit:=TCodeBrowserUnitList(DestParentList).AddUnit(CurUnit.Filename);
NewUnit.CodeBuffer:=CurUnit.CodeBuffer;
NewUnit.CodeTool:=CurUnit.CodeTool;
end else if NewUnit=nil then begin
// create a dummy unit node to add all identifiers
NewUnit:=TCodeBrowserUnitList(DestParentList).AddUnit('');
if IdentifierFitsFilter(cblUnits,ExtractFileNameOnly(CurUnit.Filename))
then begin
if DestParentList=nil then begin
DestParentList:=TCodeBrowserUnitList.Create(CodeBrowserHidden,nil);
end else if not (DestParentList is TCodeBrowserUnitList) then
RaiseParentNotUnitList;
if ShowUnits then begin
// create a unit node
NewUnit:=TCodeBrowserUnitList(DestParentList).AddUnit(CurUnit.Filename);
NewUnit.CodeBuffer:=CurUnit.CodeBuffer;
NewUnit.CodeTool:=CurUnit.CodeTool;
end else if NewUnit=nil then begin
// create a dummy unit node to add all identifiers
NewUnit:=TCodeBrowserUnitList(DestParentList).AddUnit('');
end;
//DebugLn(['AddUnits AddUnitNodes ',CurUnit.Filename]);
AddUnitNodes(CurUnit,NewUnit);
if (DestParentList=nil) then
DestParentList:=NewUnit;
end;
//DebugLn(['AddUnits AddUnitNodes ',CurUnit.Filename]);
AddUnitNodes(CurUnit,NewUnit);
if (DestParentList=nil) then
DestParentList:=NewUnit;
Node:=SrcList.Units.FindSuccessor(Node);
end;
end;
@ -1613,6 +1724,10 @@ var
begin
if SrcList=nil then exit;
//DebugLn(['AddUnitLists SrcList.Owner="',SrcList.Owner,'"']);
// check filter
if not IdentifierFitsFilter(cblPackages,SrcList.Owner) then exit;
// create node
if ShowPackages then begin
if DestParentList=nil then begin
@ -1733,12 +1848,20 @@ var
var
RootTVNode: TTreeNode;
lvl: TCodeBrowserLevel;
begin
ShowPackages:=Options.HasLevel(cblPackages);
ShowUnits:=Options.HasLevel(cblUnits);
ShowIdentifiers:=Options.HasLevel(cblIdentifiers);
ShowPrivate:=Options.ShowPrivate;
ShowProtected:=Options.ShowProtected;
for lvl:=Low(TCodeBrowserLevel) to High(TCodeBrowserLevel) do begin
LevelFilterText[lvl]:=Options.LevelFilterText[lvl];
LevelFilterType[lvl]:=Options.LevelFilterType[lvl];
end;
DebugLn(['TCodeBrowserView.UpdateTreeView UnitFilter=',LevelFilterText[cblUnits]]);
DebugLn(['TCodeBrowserView.UpdateTreeView ShowPackages=',ShowPackages,' ShowUnits=',ShowUnits]);
BrowseTreeView.BeginUpdate;
@ -2230,6 +2353,14 @@ begin
FChildNodes.Add(Result);
end;
procedure TCodeBrowserUnit.DeleteNode(var Node: TCodeBrowserNode);
begin
if Node=nil then exit;
if ChildNodes<>nil then
FChildNodes.RemovePointer(Node);
FreeAndNil(Node);
end;
{ TCodeBrowserUnitList }
procedure TCodeBrowserUnitList.SetOwner(const AValue: string);
@ -2437,13 +2568,14 @@ var
begin
FLevels.Clear;
FLevels.Text:=CodeBrowserLevelNames[cblPackages]+#13
+CodeBrowserLevelNames[cblUnits];
+CodeBrowserLevelNames[cblUnits]+#13
+CodeBrowserLevelNames[cblIdentifiers];
WithRequiredPackages:=false;
ShowPrivate:=false;
ShowProtected:=true;
Scope:='Project';
for l:=Low(TCodeBrowserLevel) to High(TCodeBrowserLevel) do begin
FLevelFilterType[l]:=cbtfBegins;
FLevelFilterType[l]:=cbtfContains;
FLevelFilterText[l]:='';
end;
Modified:=false;

View File

@ -3148,6 +3148,7 @@ begin
ItemCnt:=CodeToolBoss.IdentifierList.GetFilteredCount;
SL:=TStringList.Create;
try
sl.Capacity:=ItemCnt;
for i:=0 to ItemCnt-1 do
SL.Add('Dummy'); // these entries are not shown
CurCompletionControl.ItemList:=SL;