IDE: Fix ordering of required packages in Project Inspector and Package Editor. Issue #21277

git-svn-id: trunk@35362 -
This commit is contained in:
juha 2012-02-14 07:04:03 +00:00
parent 2550bbf3be
commit 4323c55273
4 changed files with 47 additions and 73 deletions

View File

@ -40,6 +40,7 @@ type
constructor Create(AOwner: TTreeFilterEdit; ARootNode: TTreeNode); constructor Create(AOwner: TTreeFilterEdit; ARootNode: TTreeNode);
destructor Destroy; override; destructor Destroy; override;
procedure AddNodeData(ANodeText: string; AData: TObject; AFullFilename: string = ''); procedure AddNodeData(ANodeText: string; AData: TObject; AFullFilename: string = '');
function GetData(AIndex: integer): TObject;
end; end;
TBranchList = specialize TFPGObjectList<TTreeFilterBranch>; TBranchList = specialize TFPGObjectList<TTreeFilterBranch>;
@ -135,6 +136,14 @@ begin
fFilenameMap[ANodeText]:=AFullFilename; fFilenameMap[ANodeText]:=AFullFilename;
end; end;
function TTreeFilterBranch.GetData(AIndex: integer): TObject;
begin
if AIndex<fSortedData.Count then
Result:=fSortedData.Objects[AIndex]
else
Result:=Nil;
end;
function TTreeFilterBranch.CompareFNs(AFilename1,AFilename2: string): integer; function TTreeFilterBranch.CompareFNs(AFilename1,AFilename2: string): integer;
begin begin
if fOwner.SortData then if fOwner.SortData then
@ -467,7 +476,6 @@ begin
for i := 0 to fBranches.Count-1 do for i := 0 to fBranches.Count-1 do
if fBranches[i].fRootNode = ARootNode then begin if fBranches[i].fRootNode = ARootNode then begin
Result := fBranches[i]; Result := fBranches[i];
Result.fOriginalData.Clear;
Break; Break;
end; end;
end; end;
@ -478,7 +486,9 @@ begin
if not Assigned(fBranches) then if not Assigned(fBranches) then
fBranches := TBranchList.Create; fBranches := TBranchList.Create;
Result := GetExistingBranch(ARootNode); Result := GetExistingBranch(ARootNode);
if Result = Nil then begin if Assigned(Result) then
Result.fOriginalData.Clear
else begin
Result := TTreeFilterBranch.Create(Self, ARootNode); Result := TTreeFilterBranch.Create(Self, ARootNode);
fBranches.Add(Result); fBranches.Add(Result);
end; end;

View File

@ -17768,11 +17768,10 @@ var
CurUnitInfo: TUnitInfo; CurUnitInfo: TUnitInfo;
begin begin
CurUnitInfo:=ProjInspector.GetSelectedFile; CurUnitInfo:=ProjInspector.GetSelectedFile;
if CurUnitInfo<>nil then begin if CurUnitInfo<>nil then
DoOpenEditorFile(CurUnitInfo.Filename,-1,-1,[ofRegularFile]); DoOpenEditorFile(CurUnitInfo.Filename,-1,-1,[ofRegularFile])
exit; else
end; PkgBoss.OnProjectInspectorOpen(Sender);
if PkgBoss.OnProjectInspectorOpen(Sender) then exit;
end; end;
procedure TMainIDE.OnExtToolNeedsOutputFilter(var OutputFilter: TOutputFilter; procedure TMainIDE.OnExtToolNeedsOutputFilter(var OutputFilter: TOutputFilter;

View File

@ -238,7 +238,7 @@ var
Dependency: TPkgDependency; Dependency: TPkgDependency;
begin begin
Dependency:=GetSelectedDependency; Dependency:=GetSelectedDependency;
if (Dependency=nil) or (Dependency.Removed) if SortAlphabetically or (Dependency=nil) or Dependency.Removed
or (Dependency.PrevRequiresDependency=nil) then exit; or (Dependency.PrevRequiresDependency=nil) then exit;
LazProject.MoveRequiredDependencyUp(Dependency); LazProject.MoveRequiredDependencyUp(Dependency);
end; end;
@ -248,7 +248,7 @@ var
Dependency: TPkgDependency; Dependency: TPkgDependency;
begin begin
Dependency:=GetSelectedDependency; Dependency:=GetSelectedDependency;
if (Dependency=nil) or (Dependency.Removed) if SortAlphabetically or (Dependency=nil) or Dependency.Removed
or (Dependency.NextRequiresDependency=nil) then exit; or (Dependency.NextRequiresDependency=nil) then exit;
LazProject.MoveRequiredDependencyDown(Dependency); LazProject.MoveRequiredDependencyDown(Dependency);
end; end;
@ -782,20 +782,17 @@ end;
function TProjectInspectorForm.GetSelectedDependency: TPkgDependency; function TProjectInspectorForm.GetSelectedDependency: TPkgDependency;
var var
CurNode: TTreeNode; CurNode: TTreeNode;
NodeIndex: Integer; Branch: TTreeFilterBranch;
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 Assigned(CurNode) and Assigned(CurNode.Parent)
NodeIndex:=CurNode.Index; and ((CurNode.Parent=DependenciesNode) or (CurNode.Parent=RemovedDependenciesNode))
if (CurNode.Parent=DependenciesNode) then begin then begin
Result:=GetDependencyWithIndex(LazProject.FirstRequiredDependency, Branch:=FilterEdit.GetExistingBranch(CurNode.Parent);
pdlRequires,NodeIndex); Assert(Assigned(Branch));
end; Result:=Branch.GetData(CurNode.Index) as TPkgDependency;
if (CurNode.Parent=RemovedDependenciesNode) then begin
Result:=GetDependencyWithIndex(LazProject.FirstRemovedDependency,
pdlRequires,NodeIndex);
end; end;
end; end;
@ -805,7 +802,6 @@ begin
Name:=NonModalIDEWindowNames[nmiwProjectInspector]; Name:=NonModalIDEWindowNames[nmiwProjectInspector];
Caption:=lisMenuProjectInspector; Caption:=lisMenuProjectInspector;
KeyPreview:=true; KeyPreview:=true;
SetupComponents; SetupComponents;
KeyPreview:=true; KeyPreview:=true;
end; end;

View File

@ -802,6 +802,7 @@ end;
procedure TPackageEditorForm.MoveUpBtnClick(Sender: TObject); procedure TPackageEditorForm.MoveUpBtnClick(Sender: TObject);
begin begin
if SortAlphabetically then exit;
if Assigned(FSelectedFile) then if Assigned(FSelectedFile) then
DoMoveCurrentFile(-1) DoMoveCurrentFile(-1)
else if Assigned(FSelectedDependency) then else if Assigned(FSelectedDependency) then
@ -810,6 +811,7 @@ end;
procedure TPackageEditorForm.MoveDownBtnClick(Sender: TObject); procedure TPackageEditorForm.MoveDownBtnClick(Sender: TObject);
begin begin
if SortAlphabetically then exit;
if Assigned(FSelectedFile) then if Assigned(FSelectedFile) then
DoMoveCurrentFile(1) DoMoveCurrentFile(1)
else if Assigned(FSelectedDependency) then else if Assigned(FSelectedDependency) then
@ -819,29 +821,18 @@ end;
procedure TPackageEditorForm.OpenFileMenuItemClick(Sender: TObject); procedure TPackageEditorForm.OpenFileMenuItemClick(Sender: TObject);
var var
CurNode: TTreeNode; CurNode: TTreeNode;
NodeIndex: Integer;
CurFile: TPkgFile; CurFile: TPkgFile;
CurDependency: TPkgDependency; CurDependency: TPkgDependency;
Removed: boolean; Removed: boolean;
begin begin
CurNode:=FilesTreeView.Selected; CurDependency:=nil;
if CurNode=nil then exit; CurFile:=GetCurrentFile(Removed);
NodeIndex:=CurNode.Index; if Assigned(CurFile) then
if CurNode.Parent<>nil then begin DoOpenPkgFile(CurFile)
if TObject(CurNode.Data) is TFileNameItem then begin else begin
CurFile:=GetCurrentFile(Removed); CurDependency:=GetCurrentDependency(Removed);
if CurFile=nil then exit; if Assigned(CurDependency) then
DoOpenPkgFile(CurFile);
end else if CurNode.Parent=FRequiredPackagesNode then begin
CurDependency:=LazPackage.RequiredDepByIndex(NodeIndex);
PackageEditors.OpenDependency(Self,CurDependency); PackageEditors.OpenDependency(Self,CurDependency);
end else if CurNode.Parent=FRemovedFilesNode then begin
CurFile:=LazPackage.RemovedFiles[NodeIndex];
DoOpenPkgFile(CurFile);
end else if CurNode.Parent=FRemovedRequiredNode then begin
CurDependency:=LazPackage.RemovedDepByIndex(NodeIndex);
PackageEditors.OpenDependency(Self,CurDependency);
end;
end; end;
end; end;
@ -1802,7 +1793,7 @@ begin
and LazPackage.EnableI18NForLFM; and LazPackage.EnableI18NForLFM;
FDirSummaryLabel.Visible:=IsDir; FDirSummaryLabel.Visible:=IsDir;
b:=Assigned(FSelectedFile) or Assigned(FSelectedDependency); b:=(Assigned(FSelectedFile) or Assigned(FSelectedDependency)) and not SortAlphabetically;
MoveUpBtn.Enabled :=b and Assigned(CurNode.GetPrevVisibleSibling); MoveUpBtn.Enabled :=b and Assigned(CurNode.GetPrevVisibleSibling);
MoveDownBtn.Enabled:=b and Assigned(CurNode.GetNextVisibleSibling); MoveDownBtn.Enabled:=b and Assigned(CurNode.GetNextVisibleSibling);
@ -1906,58 +1897,36 @@ end;
function TPackageEditorForm.GetCurrentDependency(out Removed: boolean): TPkgDependency; function TPackageEditorForm.GetCurrentDependency(out Removed: boolean): TPkgDependency;
var var
CurNode: TTreeNode; CurNode: TTreeNode;
NodeIndex: Integer; Branch: TTreeFilterBranch;
begin begin
Result:=nil; Result:=nil;
Removed:=false; Removed:=false;
CurNode:=FilesTreeView.Selected; CurNode:=FilesTreeView.Selected;
if (CurNode<>nil) and (CurNode.Parent<>nil) then begin if Assigned(CurNode) and Assigned(CurNode.Parent)
NodeIndex:=CurNode.Index; and ((CurNode.Parent=FRequiredPackagesNode) or (CurNode.Parent=FRemovedRequiredNode))
if CurNode.Parent=FRequiredPackagesNode then begin then begin
Result:=LazPackage.RequiredDepByIndex(NodeIndex); Removed:=CurNode.Parent=FRemovedRequiredNode;
Removed:=false; Branch:=FilterEdit.GetExistingBranch(CurNode.Parent);
end else if CurNode.Parent=FRemovedRequiredNode then begin Assert(Assigned(Branch));
Result:=LazPackage.RemovedDepByIndex(NodeIndex); Result:=Branch.GetData(CurNode.Index) as TPkgDependency;
Removed:=true;
end;
end; end;
end; end;
function TPackageEditorForm.GetCurrentFile(out Removed: boolean): TPkgFile; function TPackageEditorForm.GetCurrentFile(out Removed: boolean): TPkgFile;
var var
CurNode: TTreeNode; CurNode: TTreeNode;
NodeIndex: Integer;
Item: TFileNameItem;
i: Integer;
begin begin
Result:=nil; Result:=nil;
Removed:=false; Removed:=false;
CurNode:=FilesTreeView.Selected; CurNode:=FilesTreeView.Selected;
if (CurNode=nil) or (CurNode.Parent=nil) then exit; if (CurNode=nil) or (CurNode.Parent=nil) then exit;
NodeIndex:=CurNode.Index;
if CurNode.Parent=FRemovedFilesNode then if CurNode.Parent=FRemovedFilesNode then
begin begin
Result:=LazPackage.RemovedFiles[NodeIndex]; Result:=LazPackage.RemovedFiles[CurNode.Index];
Removed:=true; Removed:=true;
exit; end
end; else if TObject(CurNode.Data) is TFileNameItem then
//debugln(['TPackageEditorForm.GetCurrentFile ',DbgSName(TObject(CurNode.Data)),' ',CurNode.Text]); Result:=LazPackage.FindPkgFile(TFileNameItem(CurNode.Data).Filename, False, True);
if TObject(CurNode.Data) is TFileNameItem then
begin
Item:=TFileNameItem(CurNode.Data);
//debugln(['TPackageEditorForm.GetCurrentFile Item=',Item.Filename,' ',Item.IsDirectory]);
for i:=0 to LazPackage.FileCount-1 do
begin
//if ExtractFIlename(LazPackage.Files[i].Filename)=ExtractFIlename(Item.Filename) then
// debugln(['TPackageEditorForm.GetCurrentFile FOUND ',LazPackage.Files[i].Filename,' ',Item.Filename=LazPackage.Files[i].Filename]);
if Item.Filename=LazPackage.Files[i].Filename then
begin
Result:=LazPackage.Files[i];
Removed:=false;
exit;
end;
end;
end;
end; end;
function TPackageEditorForm.IsDirectoryNode(Node: TTreeNode): boolean; function TPackageEditorForm.IsDirectoryNode(Node: TTreeNode): boolean;