Package editor: Don't update the whole tree when moving a dependency up/down. Part of issue #26188.

git-svn-id: trunk@50796 -
This commit is contained in:
juha 2015-12-14 12:19:01 +00:00
parent d9f10162d5
commit 53810b548d
3 changed files with 38 additions and 26 deletions

View File

@ -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<TTreeFilterBranch>;
@ -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;

View File

@ -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;

View File

@ -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;