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

View File

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

View File

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

View File

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