From 53810b548ddb5634ee45156dc42fee3886a1be42 Mon Sep 17 00:00:00 2001 From: juha Date: Mon, 14 Dec 2015 12:19:01 +0000 Subject: [PATCH] Package editor: Don't update the whole tree when moving a dependency up/down. Part of issue #26188. git-svn-id: trunk@50796 - --- components/lazcontrols/treefilteredit.pas | 6 ++-- packager/packagedefs.pas | 34 ++++++++++++----------- packager/packageeditor.pas | 24 ++++++++++------ 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/components/lazcontrols/treefilteredit.pas b/components/lazcontrols/treefilteredit.pas index 2c7fcec850..c8dabf22e4 100644 --- a/components/lazcontrols/treefilteredit.pas +++ b/components/lazcontrols/treefilteredit.pas @@ -55,7 +55,9 @@ type function GetData(AIndex: integer): TObject; procedure ClearNodeData; procedure InvalidateBranch; - procedure MoveFile(CurIndex, NewIndex: integer); + procedure Move(CurIndex, NewIndex: integer); + public + property Items: TStringList read fOriginalData; end; TBranchList = specialize TFPGObjectList; @@ -397,7 +399,7 @@ begin ApplyFilter; end; -procedure TTreeFilterBranch.MoveFile(CurIndex, NewIndex: integer); +procedure TTreeFilterBranch.Move(CurIndex, NewIndex: integer); begin fOriginalData.Move(CurIndex, NewIndex); end; diff --git a/packager/packagedefs.pas b/packager/packagedefs.pas index cb1176b3d8..3ff1393456 100644 --- a/packager/packagedefs.pas +++ b/packager/packagedefs.pas @@ -294,10 +294,10 @@ type ListType: TPkgDependencyList); procedure RemoveFromList(var FirstDependency: TPkgDependency; ListType: TPkgDependencyList); - procedure MoveUpInList(var FirstDependency: TPkgDependency; - ListType: TPkgDependencyList); - procedure MoveDownInList(var FirstDependency: TPkgDependency; - ListType: TPkgDependencyList); + function MoveUpInList(var FirstDependency: TPkgDependency; + ListType: TPkgDependencyList): Boolean; + function MoveDownInList(var FirstDependency: TPkgDependency; + ListType: TPkgDependencyList): Boolean; function MakeFilenameRelativeToOwner(const AFilename: string): string; function FindDefaultFilename: string; public @@ -708,8 +708,8 @@ type procedure DeleteRequiredDependency(Dependency: TPkgDependency); procedure DeleteRemovedDependency(Dependency: TPkgDependency); procedure RemoveRemovedDependency(Dependency: TPkgDependency); - procedure MoveRequiredDependencyUp(Dependency: TPkgDependency); - procedure MoveRequiredDependencyDown(Dependency: TPkgDependency); + function MoveRequiredDependencyUp(Dependency: TPkgDependency): Boolean; + function MoveRequiredDependencyDown(Dependency: TPkgDependency): Boolean; function CreateDependencyWithOwner(NewOwner: TObject; WithMinVersion: boolean = false): TPkgDependency; function Requires(APackage: TLazPackage): boolean; @@ -2095,12 +2095,12 @@ begin PrevDependency[ListType]:=nil; end; -procedure TPkgDependency.MoveUpInList(var FirstDependency: TPkgDependency; - ListType: TPkgDependencyList); +function TPkgDependency.MoveUpInList(var FirstDependency: TPkgDependency; + ListType: TPkgDependencyList): Boolean; var OldPrev: TPkgDependency; begin - if (FirstDependency=Self) or (PrevDependency[ListType]=nil) then exit; + if (FirstDependency=Self) or (PrevDependency[ListType]=nil) then exit(False); OldPrev:=PrevDependency[ListType]; if OldPrev.PrevDependency[ListType]<>nil then OldPrev.PrevDependency[ListType].NextDependency[ListType]:=Self; @@ -2111,14 +2111,15 @@ begin NextDependency[ListType]:=OldPrev; OldPrev.PrevDependency[ListType]:=Self; if FirstDependency=OldPrev then FirstDependency:=Self; + Result:=True; end; -procedure TPkgDependency.MoveDownInList(var FirstDependency: TPkgDependency; - ListType: TPkgDependencyList); +function TPkgDependency.MoveDownInList(var FirstDependency: TPkgDependency; + ListType: TPkgDependencyList): Boolean; var OldNext: TPkgDependency; begin - if (NextDependency[ListType]=nil) then exit; + if (NextDependency[ListType]=nil) then exit(False); OldNext:=NextDependency[ListType]; if OldNext.NextDependency[ListType]<>nil then OldNext.NextDependency[ListType].PrevDependency[ListType]:=Self; @@ -2129,6 +2130,7 @@ begin PrevDependency[ListType]:=OldNext; OldNext.NextDependency[ListType]:=Self; if FirstDependency=Self then FirstDependency:=OldNext; + Result:=True; end; function TPkgDependency.MakeFilenameRelativeToOwner(const AFilename: string): string; @@ -3624,14 +3626,14 @@ begin Dependency.Free; end; -procedure TLazPackage.MoveRequiredDependencyUp(Dependency: TPkgDependency); +function TLazPackage.MoveRequiredDependencyUp(Dependency: TPkgDependency): Boolean; begin - Dependency.MoveUpInList(FFirstRequiredDependency,pdlRequires); + Result := Dependency.MoveUpInList(FFirstRequiredDependency,pdlRequires); end; -procedure TLazPackage.MoveRequiredDependencyDown(Dependency: TPkgDependency); +function TLazPackage.MoveRequiredDependencyDown(Dependency: TPkgDependency): Boolean; begin - Dependency.MoveDownInList(FFirstRequiredDependency,pdlRequires); + Result := Dependency.MoveDownInList(FFirstRequiredDependency,pdlRequires); end; function TLazPackage.CreateDependencyWithOwner(NewOwner: TObject; diff --git a/packager/packageeditor.pas b/packager/packageeditor.pas index 999798cb80..7bd354a09b 100644 --- a/packager/packageeditor.pas +++ b/packager/packageeditor.pas @@ -3241,7 +3241,7 @@ begin if (NewIndex<0) or (NewIndex>=LazPackage.FileCount) then exit; FilesBranch:=FilterEdit.GetExistingBranch(FFilesNode); LazPackage.MoveFile(OldIndex,NewIndex); - FilesBranch.MoveFile(OldIndex,NewIndex); + FilesBranch.Move(OldIndex,NewIndex); UpdatePEProperties; UpdateStatusBar; FilterEdit.InvalidateFilter; @@ -3249,16 +3249,24 @@ end; procedure TPackageEditorForm.DoMoveDependency(Offset: integer); var - OldSelection: TStringList; + OldIndex, NewIndex: Integer; + RequiredBranch: TTreeFilterBranch; + Moved: Boolean; begin - ItemsTreeView.BeginUpdate; - OldSelection:=ItemsTreeView.StoreCurrentSelection; + if (LazPackage=nil) or (FSingleSelectedDep=nil) then exit; if Offset<0 then - PackageGraph.MoveRequiredDependencyUp(FSingleSelectedDep) + Moved := LazPackage.MoveRequiredDependencyUp(FSingleSelectedDep) else - PackageGraph.MoveRequiredDependencyDown(FSingleSelectedDep); - ItemsTreeView.ApplyStoredSelection(OldSelection); - ItemsTreeView.EndUpdate; + Moved := LazPackage.MoveRequiredDependencyDown(FSingleSelectedDep); + if not Moved then exit; + RequiredBranch:=FilterEdit.GetExistingBranch(FRequiredPackagesNode); + OldIndex:=RequiredBranch.Items.IndexOf(FSingleSelectedDep.PackageName); + Assert(OldIndex<>-1, 'TPackageEditorForm.DoMoveDependency: "'+FSingleSelectedDep.PackageName+'" not found in FilterBranch.'); + NewIndex:=OldIndex+Offset; + RequiredBranch.Move(OldIndex,NewIndex); + UpdatePEProperties; + UpdateStatusBar; + FilterEdit.InvalidateFilter; end; procedure TPackageEditorForm.DoSortFiles;