IDE: Use ListFilterEdit in Project inspector.

git-svn-id: trunk@31464 -
This commit is contained in:
juha 2011-06-29 22:44:20 +00:00
parent f889b1127c
commit 87cda11560
2 changed files with 88 additions and 244 deletions

View File

@ -1,22 +1,22 @@
object ProjectInspectorForm: TProjectInspectorForm object ProjectInspectorForm: TProjectInspectorForm
Left = 457 Left = 389
Height = 335 Height = 474
Top = 399 Top = 328
Width = 279 Width = 388
ActiveControl = ItemsTreeView ActiveControl = ItemsTreeView
Caption = 'ProjectInspectorForm' Caption = 'ProjectInspectorForm'
ClientHeight = 335 ClientHeight = 474
ClientWidth = 279 ClientWidth = 388
OnShow = ProjectInspectorFormShow OnShow = ProjectInspectorFormShow
LCLVersion = '0.9.31' LCLVersion = '0.9.31'
object ItemsTreeView: TTreeView object ItemsTreeView: TTreeView
Left = 0 Left = 0
Height = 304 Height = 448
Top = 31 Top = 26
Width = 279 Width = 388
Align = alClient Align = alClient
BorderSpacing.Top = 2 BorderSpacing.Top = 2
DefaultItemHeight = 19 DefaultItemHeight = 15
PopupMenu = ItemsPopupMenu PopupMenu = ItemsPopupMenu
ReadOnly = True ReadOnly = True
RightClickSelect = True RightClickSelect = True
@ -28,17 +28,25 @@ object ProjectInspectorForm: TProjectInspectorForm
end end
object BtnPanel: TPanel object BtnPanel: TPanel
Left = 0 Left = 0
Height = 29 Height = 24
Top = 0 Top = 0
Width = 279 Width = 388
Align = alTop Align = alTop
AutoSize = True AutoSize = True
ClientHeight = 29 ClientHeight = 24
ClientWidth = 279 ClientWidth = 388
TabOrder = 1 TabOrder = 1
object DummySpeedButton: TSpeedButton
Left = 318
Height = 22
Top = 1
Width = 23
Align = alRight
NumGlyphs = 0
end
object OpenBitBtn: TSpeedButton object OpenBitBtn: TSpeedButton
Left = 1 Left = 1
Height = 27 Height = 22
Top = 1 Top = 1
Width = 40 Width = 40
Align = alLeft Align = alLeft
@ -51,7 +59,7 @@ object ProjectInspectorForm: TProjectInspectorForm
end end
object AddBitBtn: TSpeedButton object AddBitBtn: TSpeedButton
Left = 41 Left = 41
Height = 27 Height = 22
Top = 1 Top = 1
Width = 40 Width = 40
Align = alLeft Align = alLeft
@ -64,7 +72,7 @@ object ProjectInspectorForm: TProjectInspectorForm
end end
object RemoveBitBtn: TSpeedButton object RemoveBitBtn: TSpeedButton
Left = 81 Left = 81
Height = 27 Height = 22
Top = 1 Top = 1
Width = 40 Width = 40
Align = alLeft Align = alLeft
@ -77,7 +85,7 @@ object ProjectInspectorForm: TProjectInspectorForm
end end
object OptionsBitBtn: TSpeedButton object OptionsBitBtn: TSpeedButton
Left = 121 Left = 121
Height = 27 Height = 22
Top = 1 Top = 1
Width = 40 Width = 40
Align = alLeft Align = alLeft
@ -89,8 +97,8 @@ object ProjectInspectorForm: TProjectInspectorForm
ParentShowHint = False ParentShowHint = False
end end
object DirectoryHierarchySpeedButton: TSpeedButton object DirectoryHierarchySpeedButton: TSpeedButton
Left = 232 Left = 341
Height = 27 Height = 22
Top = 1 Top = 1
Width = 23 Width = 23
Align = alRight Align = alRight
@ -103,8 +111,8 @@ object ProjectInspectorForm: TProjectInspectorForm
ParentShowHint = False ParentShowHint = False
end end
object SortAlphabeticallySpeedButton: TSpeedButton object SortAlphabeticallySpeedButton: TSpeedButton
Left = 255 Left = 364
Height = 27 Height = 22
Top = 1 Top = 1
Width = 23 Width = 23
Align = alRight Align = alRight
@ -116,17 +124,19 @@ object ProjectInspectorForm: TProjectInspectorForm
ShowHint = True ShowHint = True
ParentShowHint = False ParentShowHint = False
end end
object FilterEdit: TEdit object FilterEdit: TListFilterEdit
Left = 161 Left = 161
Height = 27 Height = 22
Top = 1 Top = 1
Width = 71 Width = 157
FilteredTreeview = ItemsTreeView
ButtonWidth = 23
NumGlyphs = 0
Align = alClient Align = alClient
OnChange = FilterEditChange Font.Color = clBtnShadow
OnEnter = FilterEditEnter MaxLength = 0
OnExit = FilterEditExit ParentFont = False
TabOrder = 0 TabOrder = 0
Text = 'FilterEdit'
end end
end end
object ItemsPopupMenu: TPopupMenu object ItemsPopupMenu: TPopupMenu

View File

@ -63,7 +63,7 @@ uses
ComCtrls, StdCtrls, Menus, Dialogs, Graphics, FileUtil, ExtCtrls, ComCtrls, StdCtrls, Menus, Dialogs, Graphics, FileUtil, ExtCtrls,
LazIDEIntf, IDECommands, LazIDEIntf, IDECommands,
LazarusIDEStrConsts, IDEProcs, IDEOptionDefs, EnvironmentOpts, LazarusIDEStrConsts, IDEProcs, IDEOptionDefs, EnvironmentOpts,
Project, AddToProjectDlg, PackageSystem, PackageDefs; Project, AddToProjectDlg, PackageSystem, PackageDefs, ListFilterEdit;
type type
TOnAddUnitToProject = TOnAddUnitToProject =
@ -84,32 +84,22 @@ type
); );
TProjectInspectorFlags = set of TProjectInspectorFlag; TProjectInspectorFlags = set of TProjectInspectorFlag;
{ TProjInspFileItem }
TProjInspFileItem = class
public
Filename: string;
constructor Create(AFilename: string);
end;
{ TProjectInspectorForm } { TProjectInspectorForm }
TProjectInspectorForm = class(TForm) TProjectInspectorForm = class(TForm)
AddBitBtn: TSpeedButton; AddBitBtn: TSpeedButton;
BtnPanel: TPanel; BtnPanel: TPanel;
DirectoryHierarchySpeedButton: TSpeedButton; DirectoryHierarchySpeedButton: TSpeedButton;
FilterEdit: TEdit; FilterEdit: TListFilterEdit;
OpenBitBtn: TSpeedButton; OpenBitBtn: TSpeedButton;
ItemsTreeView: TTreeView; ItemsTreeView: TTreeView;
ItemsPopupMenu: TPopupMenu; ItemsPopupMenu: TPopupMenu;
OptionsBitBtn: TSpeedButton; OptionsBitBtn: TSpeedButton;
RemoveBitBtn: TSpeedButton; RemoveBitBtn: TSpeedButton;
SortAlphabeticallySpeedButton: TSpeedButton; SortAlphabeticallySpeedButton: TSpeedButton;
DummySpeedButton: TSpeedButton;
procedure AddBitBtnClick(Sender: TObject); procedure AddBitBtnClick(Sender: TObject);
procedure DirectoryHierarchySpeedButtonClick(Sender: TObject); procedure DirectoryHierarchySpeedButtonClick(Sender: TObject);
procedure FilterEditChange(Sender: TObject);
procedure FilterEditEnter(Sender: TObject);
procedure FilterEditExit(Sender: TObject);
procedure ItemsPopupMenuPopup(Sender: TObject); procedure ItemsPopupMenuPopup(Sender: TObject);
procedure ItemsTreeViewDblClick(Sender: TObject); procedure ItemsTreeViewDblClick(Sender: TObject);
procedure ItemsTreeViewKeyDown(Sender: TObject; var Key: Word; procedure ItemsTreeViewKeyDown(Sender: TObject; var Key: Word;
@ -129,7 +119,6 @@ type
procedure SortAlphabeticallySpeedButtonClick(Sender: TObject); procedure SortAlphabeticallySpeedButtonClick(Sender: TObject);
procedure ToggleI18NForLFMMenuItemClick(Sender: TObject); procedure ToggleI18NForLFMMenuItemClick(Sender: TObject);
private private
FFilter: string;
FIdleConnected: boolean; FIdleConnected: boolean;
FOnAddDependency: TAddProjInspDepEvent; FOnAddDependency: TAddProjInspDepEvent;
FOnAddUnitToProject: TOnAddUnitToProject; FOnAddUnitToProject: TOnAddUnitToProject;
@ -158,21 +147,18 @@ type
ImageIndexDirectory: integer; ImageIndexDirectory: integer;
FFlags: TProjectInspectorFlags; FFlags: TProjectInspectorFlags;
procedure SetDependencyDefaultFilename(AsPreferred: boolean); procedure SetDependencyDefaultFilename(AsPreferred: boolean);
procedure SetFilter(const AValue: string);
procedure SetIdleConnected(const AValue: boolean); procedure SetIdleConnected(const AValue: boolean);
procedure SetLazProject(const AValue: TProject); procedure SetLazProject(const AValue: TProject);
procedure SetShowDirectoryHierarchy(const AValue: boolean); procedure SetShowDirectoryHierarchy(const AValue: boolean);
procedure SetSortAlphabetically(const AValue: boolean); procedure SetSortAlphabetically(const AValue: boolean);
procedure SetupComponents; procedure SetupComponents;
function ChooseImageIndex(Str: String; Data: TObject): Integer;
procedure UpdateProjectFiles(Immediately: boolean); procedure UpdateProjectFiles(Immediately: boolean);
procedure UpdateRequiredPackages; procedure UpdateRequiredPackages;
procedure UpdateRemovedRequiredPackages; procedure UpdateRemovedRequiredPackages;
function GetImageIndexOfFile(AFile: TUnitInfo): integer;
procedure OnProjectBeginUpdate(Sender: TObject); procedure OnProjectBeginUpdate(Sender: TObject);
procedure OnProjectEndUpdate(Sender: TObject; ProjectChanged: boolean); procedure OnProjectEndUpdate(Sender: TObject; ProjectChanged: boolean);
function FitsFilter(aFilename: string): boolean;
function CompareProjFilenames(AFilename1, AFilename2: string): integer; function CompareProjFilenames(AFilename1, AFilename2: string): integer;
procedure FreeTVNodeData(Node: TTreeNode);
protected protected
procedure KeyUp(var Key: Word; Shift: TShiftState); override; procedure KeyUp(var Key: Word; Shift: TShiftState); override;
procedure IdleHandler(Sender: TObject; var Done: Boolean); procedure IdleHandler(Sender: TObject; var Done: Boolean);
@ -188,8 +174,6 @@ type
procedure UpdateItems(Immediately: boolean); procedure UpdateItems(Immediately: boolean);
function GetSelectedFile: TUnitInfo; function GetSelectedFile: TUnitInfo;
function GetSelectedDependency: TPkgDependency; function GetSelectedDependency: TPkgDependency;
function StoreCurrentTreeSelection: TStringList;
procedure ApplyTreeSelection(ASelection: TStringList; FreeList: boolean);
public public
property LazProject: TProject read FLazProject write SetLazProject; property LazProject: TProject read FLazProject write SetLazProject;
property OnOpen: TNotifyEvent read FOnOpen write FOnOpen; property OnOpen: TNotifyEvent read FOnOpen write FOnOpen;
@ -204,7 +188,6 @@ type
read FOnRemoveDependency write FOnRemoveDependency; read FOnRemoveDependency write FOnRemoveDependency;
property OnReAddDependency: TAddProjInspDepEvent property OnReAddDependency: TAddProjInspDepEvent
read FOnReAddDependency write FOnReAddDependency; read FOnReAddDependency write FOnReAddDependency;
property Filter: string read FFilter write SetFilter;
property SortAlphabetically: boolean read FSortAlphabetically write SetSortAlphabetically; property SortAlphabetically: boolean read FSortAlphabetically write SetSortAlphabetically;
property ShowDirectoryHierarchy: boolean read FShowDirectoryHierarchy write SetShowDirectoryHierarchy; property ShowDirectoryHierarchy: boolean read FShowDirectoryHierarchy write SetShowDirectoryHierarchy;
property IdleConnected: boolean read FIdleConnected write SetIdleConnected; property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
@ -221,12 +204,6 @@ implementation
uses uses
IDEImagesIntf; IDEImagesIntf;
{ TProjInspFileItem }
constructor TProjInspFileItem.Create(AFilename: string);
begin
Filename:=AFilename;
end;
{ TProjectInspectorForm } { TProjectInspectorForm }
@ -352,23 +329,6 @@ begin
ShowDirectoryHierarchy:=DirectoryHierarchySpeedButton.Down; ShowDirectoryHierarchy:=DirectoryHierarchySpeedButton.Down;
end; end;
procedure TProjectInspectorForm.FilterEditChange(Sender: TObject);
begin
Filter:=FilterEdit.Text;
end;
procedure TProjectInspectorForm.FilterEditEnter(Sender: TObject);
begin
if FilterEdit.Text=lisCEFilter then
FilterEdit.Text:='';
end;
procedure TProjectInspectorForm.FilterEditExit(Sender: TObject);
begin
if FilterEdit.Text=lisCEFilter then
FilterEdit.Text:='';
end;
procedure TProjectInspectorForm.ItemsPopupMenuPopup(Sender: TObject); procedure TProjectInspectorForm.ItemsPopupMenuPopup(Sender: TObject);
var var
ItemCnt: integer; ItemCnt: integer;
@ -497,8 +457,7 @@ begin
end; end;
end; end;
procedure TProjectInspectorForm.RemoveNonExistingFilesMenuItemClick( procedure TProjectInspectorForm.RemoveNonExistingFilesMenuItemClick(Sender: TObject);
Sender: TObject);
var var
AnUnitInfo: TUnitInfo; AnUnitInfo: TUnitInfo;
NextUnitInfo: TUnitInfo; NextUnitInfo: TUnitInfo;
@ -554,8 +513,7 @@ begin
UpdateAll(false); UpdateAll(false);
end; end;
procedure TProjectInspectorForm.SetShowDirectoryHierarchy(const AValue: boolean procedure TProjectInspectorForm.SetShowDirectoryHierarchy(const AValue: boolean);
);
begin begin
if FShowDirectoryHierarchy=AValue then exit; if FShowDirectoryHierarchy=AValue then exit;
FShowDirectoryHierarchy:=AValue; FShowDirectoryHierarchy:=AValue;
@ -571,8 +529,7 @@ begin
UpdateProjectFiles(false); UpdateProjectFiles(false);
end; end;
procedure TProjectInspectorForm.SetDependencyDefaultFilename( procedure TProjectInspectorForm.SetDependencyDefaultFilename(AsPreferred: boolean);
AsPreferred: boolean);
var var
NewFilename: String; NewFilename: String;
CurDependency: TPkgDependency; CurDependency: TPkgDependency;
@ -590,24 +547,6 @@ begin
UpdateButtons; UpdateButtons;
end; end;
procedure TProjectInspectorForm.SetFilter(const AValue: string);
var
NewValue: String;
begin
NewValue:=AValue;
if NewValue=lisCEFilter then NewValue:='';
NewValue:=LowerCase(NewValue);
//debugln(['TProjectInspectorForm.SetFilter Old="',Filter,'" New="',NewValue,'"']);
if FFilter=NewValue then exit;
FFilter:=NewValue;
if not FilterEdit.Focused then
if Filter='' then
FilterEdit.Text:=lisCEFilter
else
FilterEdit.Text:=Filter;
UpdateProjectFiles(false);
end;
procedure TProjectInspectorForm.SetIdleConnected(const AValue: boolean); procedure TProjectInspectorForm.SetIdleConnected(const AValue: boolean);
begin begin
if FIdleConnected=AValue then exit; if FIdleConnected=AValue then exit;
@ -632,6 +571,7 @@ begin
ImageIndexBinary := IDEImages.LoadImage(16, 'pkg_binary'); ImageIndexBinary := IDEImages.LoadImage(16, 'pkg_binary');
ImageIndexDirectory := IDEImages.LoadImage(16, 'pkg_files'); ImageIndexDirectory := IDEImages.LoadImage(16, 'pkg_files');
FilterEdit.OnGetImageIndex:=@ChooseImageIndex;
OpenBitBtn.LoadGlyphFromLazarusResource('laz_open'); OpenBitBtn.LoadGlyphFromLazarusResource('laz_open');
AddBitBtn.LoadGlyphFromLazarusResource('laz_add'); AddBitBtn.LoadGlyphFromLazarusResource('laz_add');
RemoveBitBtn.LoadGlyphFromLazarusResource('laz_delete'); RemoveBitBtn.LoadGlyphFromLazarusResource('laz_delete');
@ -661,14 +601,19 @@ begin
end; end;
end; end;
function TProjectInspectorForm.ChooseImageIndex(Str: String; Data: TObject): Integer;
begin
if FilenameIsPascalUnit((Data as TUnitInfo).Filename) then
Result:=ImageIndexUnit
else if (LazProject<>nil) and (LazProject.MainUnitinfo=Data) then
Result:=ImageIndexProject
else
Result:=ImageIndexText;
end;
procedure TProjectInspectorForm.UpdateProjectFiles(Immediately: boolean); procedure TProjectInspectorForm.UpdateProjectFiles(Immediately: boolean);
var var
CurFile: TUnitInfo; CurFile: TUnitInfo;
CurNode: TTreeNode;
OldSelection: TStringList;
Files: TStringList;
TVNodeStack: TFPList;
ExpandedState: TTreeNodeExpandedState;
Filename: String; Filename: String;
i: Integer; i: Integer;
begin begin
@ -678,72 +623,31 @@ begin
exit; exit;
end; end;
Exclude(FFlags,pifFilesChanged); Exclude(FFlags,pifFilesChanged);
if LazProject=nil then Exit;
ItemsTreeView.BeginUpdate; FilterEdit.RootNode:=FFilesNode;
if FNextSelectedPart=nil then FilterEdit.SelectedPart:=FNextSelectedPart;
OldSelection:=StoreCurrentTreeSelection FilterEdit.StoreFilenameInNode:=True;
else FilterEdit.ShowDirHierarchy:=ShowDirectoryHierarchy;
OldSelection:=nil; FilterEdit.SortData:=SortAlphabetically;
Files:=TStringList.Create; FilterEdit.ImageIndexDirectory:=ImageIndexDirectory;
TVNodeStack:=TFPList.Create; FilterEdit.Data.Clear;
ExpandedState:=TTreeNodeExpandedState.Create(ItemsTreeView); // collect and sort files
try CurFile:=LazProject.FirstPartOfProject;
FreeTVNodeData(FFilesNode); while CurFile<>nil do begin
if LazProject<>nil then begin Filename:=CurFile.GetShortFilename(true);
// collect and sort files if Filename<>'' then begin
CurFile:=LazProject.FirstPartOfProject; i:=FilterEdit.Data.Count-1;
while CurFile<>nil do begin while i>=0 do begin
Filename:=CurFile.GetShortFilename(true); if CompareProjFilenames(Filename,FilterEdit.Data[i])>=0 then break;
if (Filename<>'') and FitsFilter(Filename) then begin dec(i);
i:=Files.Count-1;
while i>=0 do begin
if CompareProjFilenames(Filename,Files[i])>=0 then break;
dec(i);
end;
Files.Insert(i+1,Filename);
Files.Objects[i+1]:=CurFile;
end;
CurFile:=CurFile.NextPartOfProject;
end; end;
//debugln(['TProjectInspectorForm.UpdateFiles filtered=',Files.Count,' of ',LazProject.FileCount,' Filter="',Filter,'" Hierachy=',ShowDirectoryHierarchy,' SortAlpha=',SortAlphabetically]); FilterEdit.MapShortToFullFilename(Filename, CurFile.Filename);
FilterEdit.Data.Insert(i+1,Filename);
// update treeview nodes FilterEdit.Data.Objects[i+1]:=CurFile;
if Files.Count=0 then
FFilesNode.DeleteChildren
else begin
CurNode:=FFilesNode.GetFirstChild;
for i:=0 to Files.Count-1 do begin
Filename:=Files[i];
CurFile:=TUnitInfo(Files.Objects[i]);
TVClearUnneededAndCreateHierachy(ItemsTreeView,FFilesNode,Filename,
TVNodeStack,ShowDirectoryHierarchy,ImageIndexDirectory);
CurNode:=TTreeNode(TVNodeStack[TVNodeStack.Count-1]);
if FNextSelectedPart<>nil then begin
CurNode.Selected:=FNextSelectedPart=CurFile;
FNextSelectedPart:=nil;
end;
CurNode.Data:=TProjInspFileItem.Create(CurFile.Filename);
CurNode.ImageIndex:=GetImageIndexOfFile(CurFile);
CurNode.SelectedIndex:=CurNode.ImageIndex;
CurNode.DeleteChildren;
end;
TVDeleteUnneededNodes(TVNodeStack,0);
end;
end else begin
// delete file nodes
FFilesNode.DeleteChildren;
end; end;
ExpandedState.Apply(ItemsTreeView); CurFile:=CurFile.NextPartOfProject;
FFilesNode.Expanded:=true;
finally
ExpandedState.Free;
TVNodeStack.Free;
Files.Free;
end; end;
if OldSelection<>nil then FilterEdit.Invalidate;
ApplyTreeSelection(OldSelection,true);
ItemsTreeView.EndUpdate;
end; end;
procedure TProjectInspectorForm.UpdateRequiredPackages; procedure TProjectInspectorForm.UpdateRequiredPackages;
@ -760,8 +664,7 @@ begin
while Dependency<>nil do begin while Dependency<>nil do begin
NodeText:=Dependency.AsString; NodeText:=Dependency.AsString;
if Dependency.DefaultFilename<>'' then begin if Dependency.DefaultFilename<>'' then begin
AFilename:=Dependency.MakeFilenameRelativeToOwner( AFilename:=Dependency.MakeFilenameRelativeToOwner(Dependency.DefaultFilename);
Dependency.DefaultFilename);
if Dependency.PreferDefaultFilename then if Dependency.PreferDefaultFilename then
NodeText:=Format(lisCEIn, [NodeText,AFilename]) // like the 'in' keyword in the uses section NodeText:=Format(lisCEIn, [NodeText,AFilename]) // like the 'in' keyword in the uses section
else else
@ -803,9 +706,8 @@ begin
if (LazProject<>nil) and (LazProject.FirstRemovedDependency<>nil) then begin if (LazProject<>nil) and (LazProject.FirstRemovedDependency<>nil) then begin
Dependency:=LazProject.FirstRemovedDependency; Dependency:=LazProject.FirstRemovedDependency;
if RemovedDependenciesNode=nil then begin if RemovedDependenciesNode=nil then begin
RemovedDependenciesNode:= RemovedDependenciesNode:=ItemsTreeView.Items.Add(DependenciesNode,
ItemsTreeView.Items.Add(DependenciesNode, lisProjInspRemovedRequiredPackages);
lisProjInspRemovedRequiredPackages);
RemovedDependenciesNode.ImageIndex:=ImageIndexRemovedRequired; RemovedDependenciesNode.ImageIndex:=ImageIndexRemovedRequired;
RemovedDependenciesNode.SelectedIndex:=RemovedDependenciesNode.ImageIndex; RemovedDependenciesNode.SelectedIndex:=RemovedDependenciesNode.ImageIndex;
end; end;
@ -835,16 +737,6 @@ begin
ItemsTreeView.EndUpdate; ItemsTreeView.EndUpdate;
end; end;
function TProjectInspectorForm.GetImageIndexOfFile(AFile: TUnitInfo): integer;
begin
if FilenameIsPascalUnit(AFile.Filename) then
Result:=ImageIndexUnit
else if (LazProject<>nil) and (LazProject.MainUnitinfo=AFile) then
Result:=ImageIndexProject
else
Result:=ImageIndexText;
end;
procedure TProjectInspectorForm.OnProjectBeginUpdate(Sender: TObject); procedure TProjectInspectorForm.OnProjectBeginUpdate(Sender: TObject);
begin begin
BeginUpdate; BeginUpdate;
@ -857,11 +749,6 @@ begin
EndUpdate; EndUpdate;
end; end;
function TProjectInspectorForm.FitsFilter(aFilename: string): boolean;
begin
Result:=(Filter='') or (System.Pos(Filter,lowercase(aFilename))>0);
end;
function TProjectInspectorForm.CompareProjFilenames(AFilename1, function TProjectInspectorForm.CompareProjFilenames(AFilename1,
AFilename2: string): integer; AFilename2: string): integer;
begin begin
@ -873,31 +760,13 @@ begin
Result:=0; Result:=0;
end; end;
procedure TProjectInspectorForm.FreeTVNodeData(Node: TTreeNode);
var
Child: TTreeNode;
begin
if Node=nil then exit;
if (Node.Data<>nil) then begin
TObject(Node.Data).Free;
Node.Data:=nil;
end;
Child:=Node.GetFirstChild;
while Child<>nil do
begin
FreeTVNodeData(Child);
Child:=Child.GetNextSibling;
end;
end;
procedure TProjectInspectorForm.KeyUp(var Key: Word; Shift: TShiftState); procedure TProjectInspectorForm.KeyUp(var Key: Word; Shift: TShiftState);
begin begin
inherited KeyDown(Key, Shift); inherited KeyDown(Key, Shift);
ExecuteIDEShortCut(Self,Key,Shift,nil); ExecuteIDEShortCut(Self,Key,Shift,nil);
end; end;
procedure TProjectInspectorForm.IdleHandler(Sender: TObject; var Done: Boolean procedure TProjectInspectorForm.IdleHandler(Sender: TObject; var Done: Boolean);
);
begin begin
if (not Visible) or (FUpdateLock>0) then begin if (not Visible) or (FUpdateLock>0) then begin
IdleConnected:=false; IdleConnected:=false;
@ -920,16 +789,16 @@ end;
function TProjectInspectorForm.GetSelectedFile: TUnitInfo; function TProjectInspectorForm.GetSelectedFile: TUnitInfo;
var var
CurNode: TTreeNode; CurNode: TTreeNode;
Item: TProjInspFileItem; Item: TFileNameItem;
begin begin
Result:=nil; Result:=nil;
if LazProject=nil then exit; if LazProject=nil then exit;
CurNode:=ItemsTreeView.Selected; CurNode:=ItemsTreeView.Selected;
if (CurNode=nil) then exit; if (CurNode=nil) then exit;
//debugln(['TProjectInspectorForm.GetCurrentFile ',DbgSName(TObject(CurNode.Data)),' ',CurNode.Text]); //debugln(['TProjectInspectorForm.GetCurrentFile ',DbgSName(TObject(CurNode.Data)),' ',CurNode.Text]);
if TObject(CurNode.Data) is TProjInspFileItem then if TObject(CurNode.Data) is TFileNameItem then
begin begin
Item:=TProjInspFileItem(CurNode.Data); Item:=TFileNameItem(CurNode.Data);
//debugln(['TProjectInspectorForm.GetCurrentFile Item=',Item.Filename,' ',Item.IsDirectory]); //debugln(['TProjectInspectorForm.GetCurrentFile Item=',Item.Filename,' ',Item.IsDirectory]);
Result:=LazProject.UnitInfoWithFilename(Item.Filename); Result:=LazProject.UnitInfoWithFilename(Item.Filename);
end; end;
@ -955,40 +824,6 @@ begin
end; end;
end; end;
function TProjectInspectorForm.StoreCurrentTreeSelection: TStringList;
var
ANode: TTreeNode;
begin
Result:=TStringList.Create;
ANode:=ItemsTreeView.Selected;
while ANode<>nil do begin
Result.Insert(0,ANode.Text);
ANode:=ANode.Parent;
end;
end;
procedure TProjectInspectorForm.ApplyTreeSelection(ASelection: TStringList;
FreeList: boolean);
var
ANode: TTreeNode;
CurText: string;
begin
ANode:=nil;
while ASelection.Count>0 do begin
CurText:=ASelection[0];
if ANode=nil then
ANode:=ItemsTreeView.Items.GetFirstNode
else
ANode:=ANode.GetFirstChild;
while (ANode<>nil) and (ANode.Text<>CurText) do
ANode:=ANode.GetNextSibling;
if ANode=nil then break;
ASelection.Delete(0);
end;
if ANode<>nil then ItemsTreeView.Selected:=ANode;
if FreeList then ASelection.Free;
end;
constructor TProjectInspectorForm.Create(TheOwner: TComponent); constructor TProjectInspectorForm.Create(TheOwner: TComponent);
begin begin
inherited Create(TheOwner); inherited Create(TheOwner);
@ -1003,11 +838,10 @@ end;
destructor TProjectInspectorForm.Destroy; destructor TProjectInspectorForm.Destroy;
begin begin
IdleConnected:=false; IdleConnected:=false;
BeginUpdate;
FreeTVNodeData(FFilesNode);
LazProject:=nil; LazProject:=nil;
inherited Destroy; inherited Destroy;
if ProjInspector=Self then ProjInspector:=nil; if ProjInspector=Self then
ProjInspector:=nil;
end; end;
procedure TProjectInspectorForm.BeginUpdate; procedure TProjectInspectorForm.BeginUpdate;