mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-11 15:36:31 +02:00
Merged revision(s) 56058 #648e0fd02c, 56068-56069 #0f43b7c709-#0f43b7c709, 56082 #e05552a178 from trunk:
Package editor: Fix moving dependencies up/down. Use the display name for searching. Issue #32546. ........ Package editor: Update the view after modifying dependent package parameters. Issue #32546. ........ Package editor: Refactoring. ........ Package editor: Update the image for dependent package after modifying min/max version. Issue #32546. ........ git-svn-id: branches/fixes_1_8@56089 -
This commit is contained in:
parent
0f7b690083
commit
682a2912bd
@ -317,6 +317,7 @@ type
|
||||
FShowDirectoryHierarchy: boolean;
|
||||
FSortAlphabetically: boolean;
|
||||
FDirSummaryLabel: TLabel;
|
||||
FSingleSelectedNode: TTreeNode;
|
||||
FSingleSelectedFile: TPkgFile;
|
||||
FSingleSelectedDep: TPkgDependency;
|
||||
FFirstNodeData: array[TPENodeType] of TPENodeData;
|
||||
@ -325,6 +326,7 @@ type
|
||||
procedure DoAddNewFile(NewItem: TNewIDEItemTemplate);
|
||||
procedure FreeNodeData(Typ: TPENodeType);
|
||||
function CreateNodeData(Typ: TPENodeType; aName: string; aRemoved: boolean): TPENodeData;
|
||||
function GetSingleSelectedDep: TPkgDependency;
|
||||
procedure SetDependencyDefaultFilename(AsPreferred: boolean);
|
||||
procedure SetIdleConnected(AValue: boolean);
|
||||
procedure SetShowDirectoryHierarchy(const AValue: boolean);
|
||||
@ -332,7 +334,8 @@ type
|
||||
procedure SetupComponents;
|
||||
function OnTreeViewGetImageIndex({%H-}Str: String; Data: TObject; var {%H-}AIsEnabled: Boolean): Integer;
|
||||
procedure ShowAddDialogEx(AType: TAddToPkgType);
|
||||
procedure UpdateNodeImage(TVNode: TTreeNode; NodeData: TPENodeData);
|
||||
procedure UpdateNodeImage(TVNode: TTreeNode);
|
||||
procedure UpdateNodeImage(TVNode: TTreeNode; NodeData: TPENodeData; Item: TObject);
|
||||
procedure UpdatePending;
|
||||
function CanUpdate(Flag: TPEFlag; Immediately: boolean): boolean;
|
||||
procedure UpdateTitle(Immediately: boolean = false);
|
||||
@ -631,13 +634,29 @@ begin
|
||||
PkgEditMenuViewPackageSource:=RegisterIDEMenuCommand(AParent,'View Package Source',lisPckEditViewPackageSource);
|
||||
end;
|
||||
|
||||
function DependencyAsString(ADependency: TPkgDependency): string;
|
||||
// A display text for a dependency including min/max versions + other info.
|
||||
// ToDo: Modify Dependency.AsString output to replace this function,
|
||||
// or create a new method for the task.
|
||||
var
|
||||
aFilename: String;
|
||||
begin
|
||||
Result:=ADependency.AsString;
|
||||
if ADependency.DefaultFilename<>'' then begin
|
||||
aFilename:=ADependency.MakeFilenameRelativeToOwner(ADependency.DefaultFilename);
|
||||
if ADependency.PreferDefaultFilename then
|
||||
Result:=Result+' in '+aFilename // like the 'in' keyword in uses section
|
||||
else
|
||||
Result:=Format(lisPckEditDefault, [Result, aFilename]);
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TPENodeData }
|
||||
|
||||
constructor TPENodeData.Create(aTyp: TPENodeType; aName: string;
|
||||
aRemoved: boolean);
|
||||
constructor TPENodeData.Create(aTyp: TPENodeType; aName: string; aRemoved: boolean);
|
||||
begin
|
||||
Typ:=aTyp;
|
||||
Name:=aName;;
|
||||
Name:=aName;
|
||||
Removed:=aRemoved;
|
||||
end;
|
||||
|
||||
@ -1405,7 +1424,7 @@ begin
|
||||
fForcedFlags:=fForcedFlags+[pefNeedUpdateRemovedFiles];
|
||||
if PkgCount>0 then
|
||||
fForcedFlags:=fForcedFlags+[pefNeedUpdateRemovedFiles,pefNeedUpdateRequiredPkgs];
|
||||
LazPackage.Modified:=True; // This will update also other possible editors.
|
||||
LazPackage.Modified:=True;
|
||||
|
||||
finally
|
||||
EndUpdate;
|
||||
@ -1659,9 +1678,8 @@ var
|
||||
Flags: TPkgDependencyFlags;
|
||||
MinVers, MaxVers: TPkgVersion;
|
||||
begin
|
||||
if LazPackage=nil then exit;
|
||||
if FSingleSelectedDep=nil then exit;
|
||||
if LazPackage.FindDependencyByName(FSingleSelectedDep.PackageName)<>FSingleSelectedDep
|
||||
if (LazPackage=nil) or (FSingleSelectedNode=nil) or (FSingleSelectedDep=nil)
|
||||
or (LazPackage.FindDependencyByName(FSingleSelectedDep.PackageName)<>FSingleSelectedDep)
|
||||
then exit;
|
||||
|
||||
MinVers:=TPkgVersion.Create;
|
||||
@ -1704,7 +1722,10 @@ begin
|
||||
FSingleSelectedDep.Flags := Flags;
|
||||
FSingleSelectedDep.MinVersion.Assign(MinVers);
|
||||
FSingleSelectedDep.MaxVersion.Assign(MaxVers);
|
||||
LazPackage.ModifySilently;
|
||||
|
||||
UpdateNodeImage(FSingleSelectedNode);
|
||||
//fForcedFlags:=[pefNeedUpdateRequiredPkgs];
|
||||
LazPackage.Modified:=True;
|
||||
finally
|
||||
MaxVers.Free;
|
||||
MinVers.Free;
|
||||
@ -1730,7 +1751,7 @@ begin
|
||||
CurFile.HasRegisterProc:=CallRegisterProcCheckBox.Checked;
|
||||
if not NodeData.Removed then
|
||||
LazPackage.ModifySilently;
|
||||
UpdateNodeImage(TVNode, NodeData);
|
||||
UpdateNodeImage(TVNode, NodeData, Item);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -2303,13 +2324,31 @@ begin
|
||||
Caption:=NewCaption;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.UpdateNodeImage(TVNode: TTreeNode; NodeData: TPENodeData);
|
||||
procedure TPackageEditorForm.UpdateNodeImage(TVNode: TTreeNode);
|
||||
var
|
||||
ena: Boolean;
|
||||
ImgIndex: Integer;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
begin
|
||||
ena := True; // String param is not used.
|
||||
ImgIndex:=OnTreeViewGetImageIndex('', NodeData, ena);
|
||||
if GetNodeDataItem(TVNode, NodeData, Item) then
|
||||
UpdateNodeImage(TVNode, NodeData, Item);
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.UpdateNodeImage(TVNode: TTreeNode;
|
||||
NodeData: TPENodeData; Item: TObject);
|
||||
var
|
||||
PkgDependency: TPkgDependency;
|
||||
ImgIndex: Integer;
|
||||
Ena: Boolean;
|
||||
begin
|
||||
Assert(Assigned(Item), 'TPackageEditorForm.UpdateNodeImage: Item = Nil.');
|
||||
if Item is TPkgDependency then begin
|
||||
PkgDependency:=TPkgDependency(Item);
|
||||
// Try to load the package again. Min/max version may have changed.
|
||||
PkgDependency.LoadPackageResult := lprUndefined;
|
||||
PackageGraph.OpenDependency(PkgDependency, False);
|
||||
end;
|
||||
Ena := True; // Neither Ena nor the String param are used.
|
||||
ImgIndex := OnTreeViewGetImageIndex('', NodeData, Ena);
|
||||
TVNode.ImageIndex:=ImgIndex;
|
||||
TVNode.SelectedIndex:=ImgIndex;
|
||||
end;
|
||||
@ -2523,7 +2562,7 @@ procedure TPackageEditorForm.UpdateRequiredPkgs(Immediately: boolean);
|
||||
var
|
||||
CurDependency: TPkgDependency;
|
||||
RequiredBranch, RemovedBranch: TTreeFilterBranch;
|
||||
CurNodeText, aFilename, OldFilter: String;
|
||||
OldFilter: String;
|
||||
NodeData: TPENodeData;
|
||||
begin
|
||||
if not CanUpdate(pefNeedUpdateRequiredPkgs,Immediately) then exit;
|
||||
@ -2537,20 +2576,12 @@ begin
|
||||
CurDependency:=LazPackage.FirstRequiredDependency;
|
||||
FilterEdit.SelectedPart:=nil;
|
||||
while CurDependency<>nil do begin
|
||||
CurNodeText:=CurDependency.AsString;
|
||||
if CurDependency.DefaultFilename<>'' then begin
|
||||
aFilename:=CurDependency.MakeFilenameRelativeToOwner(CurDependency.DefaultFilename);
|
||||
if CurDependency.PreferDefaultFilename then
|
||||
CurNodeText:=CurNodeText+' in '+aFilename // like the 'in' keyword in uses section
|
||||
else
|
||||
CurNodeText:=Format(lisPckEditDefault, [CurNodeText, aFilename]);
|
||||
end;
|
||||
NodeData:=CreateNodeData(penDependency,CurDependency.PackageName,false);
|
||||
if (FNextSelectedPart<>nil) and (FNextSelectedPart.Typ=penDependency)
|
||||
and (FNextSelectedPart.Name=NodeData.Name)
|
||||
then
|
||||
FilterEdit.SelectedPart:=NodeData;
|
||||
RequiredBranch.AddNodeData(CurNodeText, NodeData);
|
||||
RequiredBranch.AddNodeData(DependencyAsString(CurDependency), NodeData);
|
||||
CurDependency:=CurDependency.NextRequiresDependency;
|
||||
end;
|
||||
if (FNextSelectedPart<>nil) and (FNextSelectedPart.Typ=penDependency) then
|
||||
@ -2569,7 +2600,7 @@ begin
|
||||
RemovedBranch.ClearNodeData;
|
||||
while CurDependency<>nil do begin
|
||||
NodeData:=CreateNodeData(penDependency,CurDependency.PackageName,true);
|
||||
RemovedBranch.AddNodeData(CurDependency.AsString, NodeData);
|
||||
RemovedBranch.AddNodeData(DependencyAsString(CurDependency), NodeData);
|
||||
CurDependency:=CurDependency.NextRequiresDependency;
|
||||
end;
|
||||
RemovedBranch.InvalidateBranch;
|
||||
@ -2646,7 +2677,6 @@ var
|
||||
TVNode: TTreeNode;
|
||||
SingleSelectedDirectory: TTreeNode;
|
||||
SingleSelectedRemoved: Boolean;
|
||||
SingleSelected: TTreeNode;
|
||||
FileCount: integer;
|
||||
HasRegisterProcCount: integer;
|
||||
AddToUsesPkgSectionCount: integer;
|
||||
@ -2656,11 +2686,11 @@ begin
|
||||
FPlugins.Clear;
|
||||
|
||||
// check selection
|
||||
FSingleSelectedNode:=nil;
|
||||
FSingleSelectedDep:=nil;
|
||||
FSingleSelectedFile:=nil;
|
||||
SingleSelectedDirectory:=nil;
|
||||
SingleSelectedRemoved:=false;
|
||||
SingleSelected:=nil;
|
||||
SelFileCount:=0;
|
||||
SelDepCount:=0;
|
||||
SelHasRegisterProc:=mubNone;
|
||||
@ -2676,7 +2706,7 @@ begin
|
||||
CurFile:=TPkgFile(Item);
|
||||
inc(SelFileCount);
|
||||
FSingleSelectedFile:=CurFile;
|
||||
SingleSelected:=TVNode;
|
||||
FSingleSelectedNode:=TVNode;
|
||||
SingleSelectedRemoved:=NodeData.Removed;
|
||||
MergeMultiBool(SelHasRegisterProc,CurFile.HasRegisterProc);
|
||||
if CurFile.FileType in PkgFileUnitTypes then begin
|
||||
@ -2703,13 +2733,13 @@ begin
|
||||
inc(SelDepCount);
|
||||
CurDependency:=TPkgDependency(Item);
|
||||
FSingleSelectedDep:=CurDependency;
|
||||
SingleSelected:=TVNode;
|
||||
FSingleSelectedNode:=TVNode;
|
||||
SingleSelectedRemoved:=NodeData.Removed;
|
||||
end;
|
||||
end else if IsDirectoryNode(TVNode) or (TVNode=FFilesNode) then begin
|
||||
inc(SelDirCount);
|
||||
SingleSelectedDirectory:=TVNode;
|
||||
SingleSelected:=TVNode;
|
||||
FSingleSelectedNode:=TVNode;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -2718,7 +2748,7 @@ begin
|
||||
FSingleSelectedFile:=nil;
|
||||
FSingleSelectedDep:=nil;
|
||||
SingleSelectedDirectory:=nil;
|
||||
SingleSelected:=nil;
|
||||
FSingleSelectedNode:=nil;
|
||||
end;
|
||||
OnlyFilesSelected:=(SelFileCount>0) and (SelDepCount=0) and (SelDirCount=0);
|
||||
OnlyFilesWithUnitsSelected:=OnlyFilesSelected and (SelUnitCount>0);
|
||||
@ -2731,8 +2761,8 @@ begin
|
||||
// move up/down (only single selection)
|
||||
aVisible:=(not (SortAlphabetically or SingleSelectedRemoved))
|
||||
and ((FSingleSelectedFile<>nil) or (FSingleSelectedDep<>nil));
|
||||
MoveUpBtn.Enabled :=aVisible and Assigned(SingleSelected.GetPrevVisibleSibling);
|
||||
MoveDownBtn.Enabled:=aVisible and Assigned(SingleSelected.GetNextVisibleSibling);
|
||||
MoveUpBtn.Enabled :=aVisible and Assigned(FSingleSelectedNode.GetPrevVisibleSibling);
|
||||
MoveDownBtn.Enabled:=aVisible and Assigned(FSingleSelectedNode.GetNextVisibleSibling);
|
||||
|
||||
// Min/Max version of dependency (only single selection)
|
||||
aVisible:=FSingleSelectedDep<>nil;
|
||||
@ -2798,33 +2828,37 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.UpdateApplyDependencyButton(Immediately: boolean);
|
||||
function TPackageEditorForm.GetSingleSelectedDep: TPkgDependency;
|
||||
var
|
||||
DependencyChanged: Boolean;
|
||||
AVersion: TPkgVersion;
|
||||
i: Integer;
|
||||
TVNode: TTreeNode;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
begin
|
||||
if not CanUpdate(pefNeedUpdateApplyDependencyButton,Immediately) then exit;
|
||||
|
||||
FSingleSelectedDep:=nil;
|
||||
Result:=nil;
|
||||
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
|
||||
TVNode:=ItemsTreeView.Selections[i];
|
||||
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
|
||||
if Item is TPkgFile then begin
|
||||
FSingleSelectedDep:=nil;
|
||||
Result:=nil;
|
||||
break;
|
||||
end else if Item is TPkgDependency then begin
|
||||
if FSingleSelectedDep<>nil then begin
|
||||
FSingleSelectedDep:=nil;
|
||||
if Result<>nil then begin
|
||||
Result:=nil;
|
||||
break;
|
||||
end;
|
||||
FSingleSelectedDep:=TPkgDependency(Item);
|
||||
Result:=TPkgDependency(Item);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.UpdateApplyDependencyButton(Immediately: boolean);
|
||||
var
|
||||
DependencyChanged: Boolean;
|
||||
AVersion: TPkgVersion;
|
||||
begin
|
||||
if not CanUpdate(pefNeedUpdateApplyDependencyButton,Immediately) then exit;
|
||||
FSingleSelectedDep:=GetSingleSelectedDep;
|
||||
DependencyChanged:=false;
|
||||
if (FSingleSelectedDep<>nil) then begin
|
||||
// check min version
|
||||
@ -3257,8 +3291,9 @@ begin
|
||||
if not Moved then exit;
|
||||
LazPackage.ModifySilently;
|
||||
RequiredBranch:=FilterEdit.GetExistingBranch(FRequiredPackagesNode);
|
||||
OldIndex:=RequiredBranch.Items.IndexOf(FSingleSelectedDep.PackageName);
|
||||
Assert(OldIndex<>-1, 'TPackageEditorForm.DoMoveDependency: "'+FSingleSelectedDep.PackageName+'" not found in FilterBranch.');
|
||||
OldIndex:=RequiredBranch.Items.IndexOf(DependencyAsString(FSingleSelectedDep));
|
||||
Assert(OldIndex<>-1, 'TPackageEditorForm.DoMoveDependency: "' +
|
||||
DependencyAsString(FSingleSelectedDep)+'" not found in FilterBranch.');
|
||||
NewIndex:=OldIndex+Offset;
|
||||
RequiredBranch.Move(OldIndex,NewIndex);
|
||||
UpdatePEProperties;
|
||||
|
Loading…
Reference in New Issue
Block a user