mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 02:56:01 +02:00
IDE: Reuse more code between Package Editor and Project Inspector.
git-svn-id: trunk@63954 -
This commit is contained in:
parent
0907626dec
commit
5286e8b775
@ -172,15 +172,12 @@ type
|
||||
ImageIndexBinary: integer;
|
||||
ImageIndexDirectory: integer;
|
||||
FFlags: TPEFlags;
|
||||
FProjectNodeDataList : array [TPENodeType] of TPENodeData;
|
||||
FPropGui: TProjPackFilePropGui;
|
||||
procedure AddMenuItemClick(Sender: TObject);
|
||||
function AddOneFile(aFilename: string): TModalResult;
|
||||
procedure DoAddMoreDialog;
|
||||
procedure DoAddDepDialog;
|
||||
procedure DoAddFPMakeDepDialog;
|
||||
procedure FreeNodeData(Typ: TPENodeType);
|
||||
function CreateNodeData(Typ: TPENodeType; aName: string; aRemoved: boolean): TPENodeData;
|
||||
function CreateToolButton(AName, ACaption, AHint, AImageName: String;
|
||||
AOnClick: TNotifyEvent): TToolButton;
|
||||
function CreateDivider: TToolButton;
|
||||
@ -473,19 +470,11 @@ begin
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.AddMenuItemClick(Sender: TObject);
|
||||
|
||||
function _NodeTreeIsIn(xIterNode, xParentNode: TTreeNode): Boolean;
|
||||
begin
|
||||
Result := (xIterNode = xParentNode);
|
||||
if not Result and Assigned(xIterNode) then
|
||||
Result := _NodeTreeIsIn(xIterNode.Parent, xParentNode);
|
||||
end;
|
||||
|
||||
begin
|
||||
//check the selected item in ItemsTreeView
|
||||
// -> if it's "Required Packages", call "New Requirement" (mnuAddReqClick)
|
||||
// -> otherwise (selected = "Files") call "Add files from file system" (AddBitBtnClick)
|
||||
if _NodeTreeIsIn(ItemsTreeView.Selected, FDependenciesNode) then
|
||||
if NodeTreeIsIn(ItemsTreeView.Selected, FDependenciesNode) then
|
||||
mnuAddReqClick(Sender)
|
||||
else
|
||||
mnuAddBitBtnClick(Sender);
|
||||
@ -806,26 +795,33 @@ begin
|
||||
NeedToRebuild := False;
|
||||
BeginUpdate;
|
||||
try
|
||||
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
|
||||
for i:=0 to ItemsTreeView.SelectionCount-1 do
|
||||
begin
|
||||
TVNode:=ItemsTreeView.Selections[i];
|
||||
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
|
||||
if Item is TUnitInfo then begin
|
||||
if Item is TUnitInfo then
|
||||
begin
|
||||
CurFile:=TUnitInfo(Item);
|
||||
if LazarusIDE.DoOpenEditorFile(CurFile.Filename,-1,-1,[ofAddToRecent])<>mrOk then begin
|
||||
PkgLinks.Free;
|
||||
Exit;
|
||||
if LazarusIDE.DoOpenEditorFile(CurFile.Filename,-1,-1,[ofAddToRecent])<>mrOk then
|
||||
begin
|
||||
FreeAndNil(PkgLinks);
|
||||
Exit;
|
||||
end;
|
||||
end
|
||||
else if Item is TPkgDependency then begin
|
||||
else if Item is TPkgDependency then
|
||||
begin
|
||||
CurDependency:=TPkgDependency(Item);
|
||||
if CurDependency.DependencyType=pdtLazarus then begin
|
||||
if CurDependency.LoadPackageResult = lprSuccess then begin
|
||||
if PackageEditingInterface.DoOpenPackageWithName(CurDependency.PackageName,[],false)<>mrOk then begin
|
||||
PkgLinks.Free;
|
||||
if CurDependency.DependencyType=pdtLazarus then
|
||||
begin
|
||||
if CurDependency.LoadPackageResult = lprSuccess then
|
||||
begin
|
||||
if PackageEditingInterface.DoOpenPackageWithName(CurDependency.PackageName,[],false)<>mrOk then
|
||||
begin
|
||||
FreeAndNil(PkgLinks);
|
||||
Exit;
|
||||
end;
|
||||
end else begin
|
||||
PackageLink:=FPropGui.FindOnlinePackageLink(CurDependency);
|
||||
PackageLink:=FPropGui.FindOPLink(CurDependency);
|
||||
if PackageLink<>nil then
|
||||
PkgLinks.Add(PackageLink);
|
||||
end;
|
||||
@ -1154,7 +1150,6 @@ begin
|
||||
DirectoryHierarchyButton.Hint:=lisPEShowDirectoryHierarchy;
|
||||
IDEImages.AssignImage(DirectoryHierarchyButton, 'pkg_hierarchical');
|
||||
|
||||
FPropGui:=TProjPackFilePropGui.Create(PropsGroupBox, False);
|
||||
FPropGui.OnGetPkgDep := @GetDependencyToUpdate;
|
||||
FPropGui.ApplyDependencyButton.OnClick := @ApplyDependencyButtonClick;
|
||||
|
||||
@ -1201,7 +1196,7 @@ begin
|
||||
if not CanUpdate(pefNeedUpdateFiles) then exit;
|
||||
FilesBranch:=FilterEdit.GetCleanBranch(FFilesNode);
|
||||
FilesBranch.ClearNodeData;
|
||||
FreeNodeData(penFile);
|
||||
FPropGui.FreeNodeData(penFile);
|
||||
if LazProject<>nil then begin
|
||||
FilterEdit.SelectedPart:=FNextSelectedPart;
|
||||
FilterEdit.ShowDirHierarchy:=ShowDirectoryHierarchy;
|
||||
@ -1212,7 +1207,7 @@ begin
|
||||
while CurFile<>nil do begin
|
||||
Filename:=CurFile.GetShortFilename(true);
|
||||
if Filename<>'' then Begin
|
||||
ANodeData := CreateNodeData(penFile, CurFile.Filename, False);
|
||||
ANodeData := FPropGui.CreateNodeData(penFile, CurFile.Filename, False);
|
||||
FilesBranch.AddNodeData(Filename, ANodeData, CurFile.Filename);
|
||||
end;
|
||||
CurFile:=CurFile.NextPartOfProject;
|
||||
@ -1233,7 +1228,7 @@ begin
|
||||
if not CanUpdate(pefNeedUpdateRequiredPkgs) then exit;
|
||||
RequiredBranch:=FilterEdit.GetCleanBranch(FDependenciesNode);
|
||||
RequiredBranch.ClearNodeData;
|
||||
FreeNodeData(penDependency);
|
||||
FPropGui.FreeNodeData(penDependency);
|
||||
Dependency:=Nil;
|
||||
if LazProject<>nil then begin
|
||||
// required packages
|
||||
@ -1249,12 +1244,12 @@ begin
|
||||
NodeText:=Format(lisPckEditDefault, [NodeText, AFilename]);
|
||||
end;
|
||||
if Dependency.LoadPackageResult<>lprSuccess then
|
||||
if FPropGui.FindOnlinePackageLink(Dependency)<>nil then
|
||||
if FPropGui.FindOPLink(Dependency)<>nil then
|
||||
NodeText:=NodeText+' '+lisPckEditAvailableOnline;
|
||||
if Dependency.DependencyType=pdtFPMake then
|
||||
NodeText:=NodeText+' '+lisPckEditFPMakePackage;
|
||||
// Add the required package under the branch
|
||||
ANodeData := CreateNodeData(penDependency, Dependency.PackageName, False);
|
||||
ANodeData := FPropGui.CreateNodeData(penDependency, Dependency.PackageName, False);
|
||||
RequiredBranch.AddNodeData(NodeText, ANodeData);
|
||||
Dependency:=Dependency.NextRequiresDependency;
|
||||
end;
|
||||
@ -1272,7 +1267,7 @@ begin
|
||||
RemovedBranch:=FilterEdit.GetCleanBranch(FRemovedDependenciesNode);
|
||||
// Add all removed dependencies under the branch
|
||||
while Dependency<>nil do begin
|
||||
ANodeData := CreateNodeData(penDependency, Dependency.PackageName, True);
|
||||
ANodeData := FPropGui.CreateNodeData(penDependency, Dependency.PackageName, True);
|
||||
RemovedBranch.AddNodeData(Dependency.AsString, ANodeData);
|
||||
Dependency:=Dependency.NextRequiresDependency;
|
||||
end;
|
||||
@ -1390,6 +1385,7 @@ begin
|
||||
Name:=NonModalIDEWindowNames[nmiwProjectInspector];
|
||||
Caption:=lisMenuProjectInspector;
|
||||
KeyPreview:=true;
|
||||
FPropGui:=TProjPackFilePropGui.Create(PropsGroupBox, False);
|
||||
SetupComponents;
|
||||
KeyPreview:=true;
|
||||
SortAlphabetically := EnvironmentOptions.ProjInspSortAlphabetically;
|
||||
@ -1397,17 +1393,13 @@ begin
|
||||
end;
|
||||
|
||||
destructor TProjectInspectorForm.Destroy;
|
||||
var
|
||||
nt: TPENodeType;
|
||||
begin
|
||||
IdleConnected:=false;
|
||||
LazProject:=nil;
|
||||
inherited Destroy;
|
||||
for nt:=Low(TPENodeType) to High(TPENodeType) do
|
||||
FreeNodeData(nt);
|
||||
FreeAndNil(FPropGui);
|
||||
if ProjInspector=Self then
|
||||
ProjInspector:=nil;
|
||||
FreeAndNil(FPropGui);
|
||||
end;
|
||||
|
||||
function TProjectInspectorForm.ExtendIncSearchPath(NewIncPaths: string): boolean;
|
||||
@ -1684,28 +1676,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.FreeNodeData(Typ: TPENodeType);
|
||||
var
|
||||
NodeData,
|
||||
n: TPENodeData;
|
||||
begin
|
||||
NodeData:=FProjectNodeDataList[Typ];
|
||||
while NodeData<>nil do begin
|
||||
n:=NodeData;
|
||||
NodeData:=NodeData.Next;
|
||||
n.Free;
|
||||
end;
|
||||
FProjectNodeDataList[Typ]:=nil;
|
||||
End;
|
||||
|
||||
function TProjectInspectorForm.CreateNodeData(Typ: TPENodeType;
|
||||
aName: string; aRemoved: boolean): TPENodeData;
|
||||
Begin
|
||||
Result := TPENodeData.Create(Typ,aName,aRemoved);
|
||||
Result.Next := FProjectNodeDataList[Typ];
|
||||
FProjectNodeDataList[Typ] := Result;
|
||||
end;
|
||||
|
||||
function TProjectInspectorForm.GetNodeItem(NodeData: TPENodeData): TObject;
|
||||
begin
|
||||
Result:=nil;
|
||||
|
@ -256,12 +256,9 @@ type
|
||||
FSortAlphabetically: boolean;
|
||||
FDirSummaryLabel: TLabel;
|
||||
FOptionsShownOfFile: TPkgFile;
|
||||
FFirstNodeData: array[TPENodeType] of TPENodeData;
|
||||
fUpdateLock: integer;
|
||||
fForcedFlags: TPEFlags;
|
||||
procedure DoAddNewFile(NewItem: TNewIDEItemTemplate);
|
||||
procedure FreeNodeData(Typ: TPENodeType);
|
||||
function CreateNodeData(Typ: TPENodeType; aName: string; aRemoved: boolean): TPENodeData;
|
||||
function CreateToolButton(AName, ACaption, AHint, AImageName: String;
|
||||
AOnClick: TNotifyEvent): TToolButton;
|
||||
function CreateDivider: TToolButton;
|
||||
@ -1354,28 +1351,25 @@ end;
|
||||
procedure TPackageEditorForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
FPlugins:=TStringList.Create;
|
||||
FPropGui:=TProjPackFilePropGui.Create(CommonOptionsTabSheet, True);
|
||||
SetupComponents;
|
||||
SortAlphabetically := EnvironmentOptions.PackageEditorSortAlphabetically;
|
||||
ShowDirectoryHierarchy := EnvironmentOptions.PackageEditorShowDirHierarchy;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.FormDestroy(Sender: TObject);
|
||||
var
|
||||
nt: TPENodeType;
|
||||
begin
|
||||
IdleConnected:=true;
|
||||
FreeAndNil(FNextSelectedPart);
|
||||
EnvironmentOptions.PackageEditorSortAlphabetically := SortAlphabetically;
|
||||
EnvironmentOptions.PackageEditorShowDirHierarchy := ShowDirectoryHierarchy;
|
||||
FilterEdit.ForceFilter('');
|
||||
for nt:=Low(TPENodeType) to High(TPENodeType) do
|
||||
FreeNodeData(nt);
|
||||
if PackageEditorMenuRoot.MenuItem=ItemsPopupMenu.Items then
|
||||
PackageEditorMenuRoot.MenuItem:=nil;
|
||||
FreeAndNil(FPropGui);
|
||||
PackageEditors.DoFreeEditor(LazPackage);
|
||||
FLazPackage:=nil;
|
||||
FreeAndNil(FPlugins);
|
||||
FreeAndNil(FPropGui);
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.FormDropFiles(Sender: TObject;
|
||||
@ -1448,30 +1442,6 @@ begin
|
||||
PackageEditors.ViewPkgToDos(LazPackage);
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.FreeNodeData(Typ: TPENodeType);
|
||||
var
|
||||
NodeData: TPENodeData;
|
||||
n: TPENodeData;
|
||||
begin
|
||||
NodeData:=FFirstNodeData[Typ];
|
||||
while NodeData<>nil do begin
|
||||
n:=NodeData;
|
||||
NodeData:=NodeData.Next;
|
||||
if Assigned(n.Branch) Then
|
||||
n.Branch.FreeNodeData(n.Node);
|
||||
n.Free;
|
||||
end;
|
||||
FFirstNodeData[Typ]:=nil;
|
||||
end;
|
||||
|
||||
function TPackageEditorForm.CreateNodeData(Typ: TPENodeType; aName: string;
|
||||
aRemoved: boolean): TPENodeData;
|
||||
begin
|
||||
Result:=TPENodeData.Create(Typ,aName,aRemoved);
|
||||
Result.Next:=FFirstNodeData[Typ];
|
||||
FFirstNodeData[Typ]:=Result;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.UseAllUnitsInDirectoryMenuItemClick(Sender: TObject);
|
||||
begin
|
||||
DoUseUnitsInDirectory(true);
|
||||
@ -1827,7 +1797,6 @@ begin
|
||||
MoveUpBtn.Hint:=lisMoveSelectedUp;
|
||||
MoveDownBtn.Hint:=lisMoveSelectedDown;
|
||||
|
||||
FPropGui:=TProjPackFilePropGui.Create(CommonOptionsTabSheet, True);
|
||||
// file properties
|
||||
FPropGui.AddToUsesPkgSectionCheckBox.OnChange := @AddToUsesPkgSectionCheckBoxChange;
|
||||
FPropGui.CallRegisterProcCheckBox.OnChange := @CallRegisterProcCheckBoxChange;
|
||||
@ -2266,7 +2235,7 @@ begin
|
||||
|
||||
// files belonging to package
|
||||
FilesBranch:=FilterEdit.GetCleanBranch(FFilesNode);
|
||||
FreeNodeData(penFile);
|
||||
FPropGui.FreeNodeData(penFile);
|
||||
FilesBranch.ClearNodeData;
|
||||
FilterEdit.SelectedPart:=nil;
|
||||
FilterEdit.ShowDirHierarchy:=ShowDirectoryHierarchy;
|
||||
@ -2275,7 +2244,7 @@ begin
|
||||
// collect and sort files
|
||||
for i:=0 to LazPackage.FileCount-1 do begin
|
||||
CurFile:=LazPackage.Files[i];
|
||||
NodeData:=CreateNodeData(penFile,CurFile.Filename,false);
|
||||
NodeData:=FPropGui.CreateNodeData(penFile,CurFile.Filename,false);
|
||||
NodeData.FileType:=CurFile.FileType;
|
||||
Filename:=CurFile.GetShortFilename(true);
|
||||
if Filename='' then continue;
|
||||
@ -2315,7 +2284,7 @@ begin
|
||||
RemovedBranch.ClearNodeData;
|
||||
for i:=0 to LazPackage.RemovedFilesCount-1 do begin
|
||||
CurFile:=LazPackage.RemovedFiles[i];
|
||||
NodeData:=CreateNodeData(penFile,CurFile.Filename,true);
|
||||
NodeData:=FPropGui.CreateNodeData(penFile,CurFile.Filename,true);
|
||||
RemovedBranch.AddNodeData(CurFile.GetShortFilename(true), NodeData);
|
||||
end;
|
||||
RemovedBranch.InvalidateBranch;
|
||||
@ -2346,12 +2315,12 @@ begin
|
||||
|
||||
// required packages
|
||||
RequiredBranch:=FilterEdit.GetCleanBranch(FRequiredPackagesNode);
|
||||
FreeNodeData(penDependency);
|
||||
FPropGui.FreeNodeData(penDependency);
|
||||
RequiredBranch.ClearNodeData;
|
||||
CurDependency:=LazPackage.FirstRequiredDependency;
|
||||
FilterEdit.SelectedPart:=nil;
|
||||
while CurDependency<>nil do begin
|
||||
NodeData:=CreateNodeData(penDependency,CurDependency.PackageName,false);
|
||||
NodeData:=FPropGui.CreateNodeData(penDependency,CurDependency.PackageName,false);
|
||||
if (FNextSelectedPart<>nil) and (FNextSelectedPart.Typ=penDependency)
|
||||
and (FNextSelectedPart.Name=NodeData.Name)
|
||||
then
|
||||
@ -2374,7 +2343,7 @@ begin
|
||||
RemovedBranch:=FilterEdit.GetCleanBranch(FRemovedRequiredNode);
|
||||
RemovedBranch.ClearNodeData;
|
||||
while CurDependency<>nil do begin
|
||||
NodeData:=CreateNodeData(penDependency,CurDependency.PackageName,true);
|
||||
NodeData:=FPropGui.CreateNodeData(penDependency,CurDependency.PackageName,true);
|
||||
RemovedBranch.AddNodeData(DependencyAsString(CurDependency), NodeData);
|
||||
CurDependency:=CurDependency.NextRequiresDependency;
|
||||
end;
|
||||
|
@ -56,6 +56,7 @@ type
|
||||
TProjPackFilePropGui = class
|
||||
private
|
||||
fOwner: TWinControl;
|
||||
FNodeDataList: array[TPENodeType] of TPENodeData;
|
||||
fOnGetPkgDep: TGetPkgDepEvent;
|
||||
procedure MinMaxVersionEditChange(Sender: TObject);
|
||||
procedure UseMinVersionCheckBoxChange(Sender: TObject);
|
||||
@ -83,8 +84,10 @@ type
|
||||
|
||||
constructor Create(aOwner: TWinControl; aPackageGui: Boolean);
|
||||
destructor Destroy; override;
|
||||
function CreateNodeData(Typ: TPENodeType; aName: string; aRemoved: boolean): TPENodeData;
|
||||
procedure FreeNodeData(Typ: TPENodeType);
|
||||
function GetDependencyImageIndex(aDep: TPkgDependencyID): Integer;
|
||||
function FindOnlinePackageLink(const ADependency: TPkgDependencyID): TPackageLink;
|
||||
function FindOPLink(const ADependency: TPkgDependencyID): TPackageLink;
|
||||
procedure SetAddToUsesCB(State: TMultiBool);
|
||||
procedure SetCallRegisterProcCB(State: TMultiBool);
|
||||
procedure SetRegisteredPluginsGB(aPlugins: TStringList);
|
||||
@ -98,6 +101,7 @@ type
|
||||
end;
|
||||
|
||||
function GetNodeData(TVNode: TTreeNode): TPENodeData;
|
||||
function NodeTreeIsIn(xIterNode, xParentNode: TTreeNode): Boolean;
|
||||
|
||||
|
||||
implementation
|
||||
@ -115,6 +119,14 @@ begin
|
||||
Result:=TPENodeData(o);
|
||||
end;
|
||||
|
||||
function NodeTreeIsIn(xIterNode, xParentNode: TTreeNode): Boolean;
|
||||
// Is xIterNode under xParentNode, or the xParentNode itself?
|
||||
begin
|
||||
Result := (xIterNode = xParentNode);
|
||||
if not Result and Assigned(xIterNode) then
|
||||
Result := NodeTreeIsIn(xIterNode.Parent, xParentNode);
|
||||
end;
|
||||
|
||||
{ TProjPackFilePropGui }
|
||||
|
||||
constructor TProjPackFilePropGui.Create(aOwner: TWinControl; aPackageGui: Boolean);
|
||||
@ -251,23 +263,50 @@ begin
|
||||
end;
|
||||
|
||||
destructor TProjPackFilePropGui.Destroy;
|
||||
var
|
||||
nt: TPENodeType;
|
||||
begin
|
||||
for nt:=Low(TPENodeType) to High(TPENodeType) do
|
||||
FreeNodeData(nt);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TProjPackFilePropGui.CreateNodeData(Typ: TPENodeType; aName: string;
|
||||
aRemoved: boolean): TPENodeData;
|
||||
begin
|
||||
Result:=TPENodeData.Create(Typ,aName,aRemoved);
|
||||
Result.Next:=FNodeDataList[Typ];
|
||||
FNodeDataList[Typ]:=Result;
|
||||
end;
|
||||
|
||||
procedure TProjPackFilePropGui.FreeNodeData(Typ: TPENodeType);
|
||||
var
|
||||
NodeData, n: TPENodeData;
|
||||
begin
|
||||
NodeData:=FNodeDataList[Typ];
|
||||
while NodeData<>nil do begin
|
||||
n:=NodeData;
|
||||
NodeData:=NodeData.Next;
|
||||
if Assigned(n.Branch) Then
|
||||
n.Branch.FreeNodeData(n.Node);
|
||||
n.Free;
|
||||
end;
|
||||
FNodeDataList[Typ]:=nil;
|
||||
end;
|
||||
|
||||
function TProjPackFilePropGui.GetDependencyImageIndex(aDep: TPkgDependencyID): Integer;
|
||||
begin
|
||||
if aDep.Removed then
|
||||
Result := ImageIndexRemovedRequired
|
||||
else if aDep.LoadPackageResult=lprSuccess then
|
||||
Result := ImageIndexRequired
|
||||
else if Assigned(FindOnlinePackageLink(aDep)) then
|
||||
else if Assigned(FindOPLink(aDep)) then
|
||||
Result := ImageIndexAvailableOnline
|
||||
else
|
||||
Result := ImageIndexConflict;
|
||||
end;
|
||||
|
||||
function TProjPackFilePropGui.FindOnlinePackageLink(const ADependency: TPkgDependencyID): TPackageLink;
|
||||
function TProjPackFilePropGui.FindOPLink(const ADependency: TPkgDependencyID): TPackageLink;
|
||||
var
|
||||
PackageLink: TPackageLink;
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user