mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 00:19:15 +02:00
IDE: Use ListFilterEdit in Project inspector.
git-svn-id: trunk@31464 -
This commit is contained in:
parent
f889b1127c
commit
87cda11560
@ -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
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user