mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-03 08:41:44 +02:00
IDE: Project Inspector: Display missing "Required Packages" with different icon if the packages are available online. The possibility to install online packages directly from Project Inspector when Opkman is installed.
git-svn-id: trunk@56712 -
This commit is contained in:
parent
640a82f920
commit
08558f4b92
@ -106,9 +106,12 @@ type
|
|||||||
{ TOPMInterface }
|
{ TOPMInterface }
|
||||||
|
|
||||||
TOPMInterface = class
|
TOPMInterface = class
|
||||||
|
private
|
||||||
|
FPackageListAvailable: TNotifyEvent;
|
||||||
public
|
public
|
||||||
{confirmation/install/extract/download dialogs will be displayed in the center of WorkArea}
|
{confirmation/install/extract/download dialogs will be displayed in the center of WorkArea}
|
||||||
function InstallPackages(APkgLinks: TList; var ANeedToRebuild: Boolean): TModalResult; virtual; abstract;
|
function InstallPackages(APkgLinks: TList; var ANeedToRebuild: Boolean): TModalResult; virtual; abstract;
|
||||||
|
property OnPackageListAvailable: TNotifyEvent read FPackageListAvailable write FPackageListAvailable;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
|
@ -4299,7 +4299,7 @@ resourcestring
|
|||||||
lisPkgMangTheFollowingPackagesFailedToLoad = 'The following packages failed to load:';
|
lisPkgMangTheFollowingPackagesFailedToLoad = 'The following packages failed to load:';
|
||||||
lisMissingPackages = 'Missing Packages';
|
lisMissingPackages = 'Missing Packages';
|
||||||
lisNotInstalledPackages = 'Not installed packages';
|
lisNotInstalledPackages = 'Not installed packages';
|
||||||
lisInstallPackagesMsg = 'The following packages are not installed, but available in the main repository: %s.' +
|
lisInstallPackagesMsg = 'The following packages are not installed, but available online: %s.' +
|
||||||
sLineBreak + 'Do you wish to install missing packages?';
|
sLineBreak + 'Do you wish to install missing packages?';
|
||||||
lisOtherSourcesPathOfPackageContainsDirectoryWhichIsA = 'other sources path '
|
lisOtherSourcesPathOfPackageContainsDirectoryWhichIsA = 'other sources path '
|
||||||
+'of package "%s" contains directory "%s", which is already in the unit '
|
+'of package "%s" contains directory "%s", which is already in the unit '
|
||||||
@ -4622,6 +4622,7 @@ resourcestring
|
|||||||
lisPckEditRemovedFiles = 'Removed Files';
|
lisPckEditRemovedFiles = 'Removed Files';
|
||||||
lisPckEditRemovedRequiredPackages = 'Removed required packages';
|
lisPckEditRemovedRequiredPackages = 'Removed required packages';
|
||||||
lisPckEditDefault = '%s, default: %s';
|
lisPckEditDefault = '%s, default: %s';
|
||||||
|
lisPckEditAvailableOnline = '(available online)';
|
||||||
lisPckEditDependencyProperties = 'Dependency Properties';
|
lisPckEditDependencyProperties = 'Dependency Properties';
|
||||||
lisFilesHasRegisterProcedureInPackageUsesSection = 'Files: %s, has Register '
|
lisFilesHasRegisterProcedureInPackageUsesSection = 'Files: %s, has Register '
|
||||||
+'procedure: %s, in package uses section: %s';
|
+'procedure: %s, in package uses section: %s';
|
||||||
|
@ -60,11 +60,11 @@ uses
|
|||||||
TreeFilterEdit,
|
TreeFilterEdit,
|
||||||
// IDEIntf
|
// IDEIntf
|
||||||
IDEHelpIntf, IDECommands, IDEDialogs, IDEImagesIntf, LazIDEIntf, ProjectIntf,
|
IDEHelpIntf, IDECommands, IDEDialogs, IDEImagesIntf, LazIDEIntf, ProjectIntf,
|
||||||
PackageIntf,
|
PackageIntf, PackageLinkIntf, MainIntf,
|
||||||
// IDE
|
// IDE
|
||||||
LazarusIDEStrConsts, IDEProcs, DialogProcs, IDEOptionDefs, EnvironmentOpts,
|
LazarusIDEStrConsts, IDEProcs, DialogProcs, IDEOptionDefs, EnvironmentOpts,
|
||||||
PackageDefs, Project, PackageEditor, AddToProjectDlg, AddPkgDependencyDlg,
|
PackageDefs, Project, PackageEditor, AddToProjectDlg, AddPkgDependencyDlg,
|
||||||
InputHistory, MainBase, ProjPackChecks;
|
InputHistory, MainBase, ProjPackChecks, PackageLinks;
|
||||||
|
|
||||||
type
|
type
|
||||||
TOnAddUnitToProject =
|
TOnAddUnitToProject =
|
||||||
@ -163,6 +163,7 @@ type
|
|||||||
ImageIndexFiles: integer;
|
ImageIndexFiles: integer;
|
||||||
ImageIndexRequired: integer;
|
ImageIndexRequired: integer;
|
||||||
ImageIndexConflict: integer;
|
ImageIndexConflict: integer;
|
||||||
|
ImageIndexAvailableOnline: integer;
|
||||||
ImageIndexRemovedRequired: integer;
|
ImageIndexRemovedRequired: integer;
|
||||||
ImageIndexProject: integer;
|
ImageIndexProject: integer;
|
||||||
ImageIndexUnit: integer;
|
ImageIndexUnit: integer;
|
||||||
@ -188,6 +189,8 @@ type
|
|||||||
procedure OnProjectBeginUpdate(Sender: TObject);
|
procedure OnProjectBeginUpdate(Sender: TObject);
|
||||||
procedure OnProjectEndUpdate(Sender: TObject; ProjectChanged: boolean);
|
procedure OnProjectEndUpdate(Sender: TObject; ProjectChanged: boolean);
|
||||||
procedure EnableI18NForSelectedLFM(TheEnable: boolean);
|
procedure EnableI18NForSelectedLFM(TheEnable: boolean);
|
||||||
|
procedure DoOnPackageListAvailable(Sender: TObject);
|
||||||
|
function FindOnlinePackageLink(const ADependency: TPkgDependency): TPackageLink;
|
||||||
protected
|
protected
|
||||||
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
|
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
|
||||||
procedure IdleHandler(Sender: TObject; var {%H-}Done: Boolean);
|
procedure IdleHandler(Sender: TObject; var {%H-}Done: Boolean);
|
||||||
@ -546,6 +549,8 @@ end;
|
|||||||
procedure TProjectInspectorForm.FormCreate(Sender: TObject);
|
procedure TProjectInspectorForm.FormCreate(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
TIDEImages.AssignImage(FilterEdit.Glyph, 'btnfiltercancel');
|
TIDEImages.AssignImage(FilterEdit.Glyph, 'btnfiltercancel');
|
||||||
|
if OPMInterface <> nil then
|
||||||
|
OPMInterface.OnPackageListAvailable := @DoOnPackageListAvailable;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectInspectorForm.FormDropFiles(Sender: TObject;
|
procedure TProjectInspectorForm.FormDropFiles(Sender: TObject;
|
||||||
@ -744,27 +749,50 @@ var
|
|||||||
Item: TObject;
|
Item: TObject;
|
||||||
CurFile: TUnitInfo;
|
CurFile: TUnitInfo;
|
||||||
CurDependency: TPkgDependency;
|
CurDependency: TPkgDependency;
|
||||||
|
PackageLink: TPackageLink;
|
||||||
|
PkgLinks: TList;
|
||||||
|
NeedToRebuild: Boolean;
|
||||||
begin
|
begin
|
||||||
BeginUpdate;
|
PkgLinks := TList.Create;
|
||||||
try
|
try
|
||||||
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
|
NeedToRebuild := False;
|
||||||
TVNode:=ItemsTreeView.Selections[i];
|
BeginUpdate;
|
||||||
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
|
try
|
||||||
if Item is TUnitInfo then begin
|
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
|
||||||
CurFile:=TUnitInfo(Item);
|
TVNode:=ItemsTreeView.Selections[i];
|
||||||
if LazarusIDE.DoOpenEditorFile(CurFile.Filename,-1,-1,[ofAddToRecent])<>mrOk
|
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
|
||||||
then exit;
|
if Item is TUnitInfo then begin
|
||||||
end else if Item is TPkgDependency then begin
|
CurFile:=TUnitInfo(Item);
|
||||||
CurDependency:=TPkgDependency(Item);
|
if LazarusIDE.DoOpenEditorFile(CurFile.Filename,-1,-1,[ofAddToRecent])<>mrOk then begin
|
||||||
if PackageEditingInterface.DoOpenPackageWithName(
|
PkgLinks.Free;
|
||||||
CurDependency.PackageName,[],false)<>mrOk
|
Exit;
|
||||||
then
|
end;
|
||||||
exit;
|
end else if Item is TPkgDependency then begin
|
||||||
|
CurDependency:=TPkgDependency(Item);
|
||||||
|
if CurDependency.LoadPackageResult = lprSuccess then begin
|
||||||
|
if PackageEditingInterface.DoOpenPackageWithName(CurDependency.PackageName,[],false)<>mrOk then begin
|
||||||
|
PkgLinks.Free;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
if OPMInterface<>nil then begin
|
||||||
|
PackageLink:=FindOnlinePackageLink(CurDependency);
|
||||||
|
if PackageLink<>nil then
|
||||||
|
PkgLinks.Add(PackageLink);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
finally
|
||||||
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
if (OPMInterface<>nil) and (PkgLinks.Count>0) then
|
||||||
|
OPMInterface.InstallPackages(PkgLinks, NeedToRebuild);
|
||||||
finally
|
finally
|
||||||
EndUpdate;
|
PkgLinks.Free;
|
||||||
end;
|
end;
|
||||||
|
if (OPMInterface<>nil) and (NeedToRebuild) then
|
||||||
|
MainIDEInterface.DoBuildLazarus([])
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectInspectorForm.OptionsBitBtnClick(Sender: TObject);
|
procedure TProjectInspectorForm.OptionsBitBtnClick(Sender: TObject);
|
||||||
@ -1016,6 +1044,7 @@ begin
|
|||||||
ImageIndexFiles := IDEImages.LoadImage('pkg_files');
|
ImageIndexFiles := IDEImages.LoadImage('pkg_files');
|
||||||
ImageIndexRequired := IDEImages.LoadImage('pkg_required');
|
ImageIndexRequired := IDEImages.LoadImage('pkg_required');
|
||||||
ImageIndexConflict := IDEImages.LoadImage('pkg_conflict');
|
ImageIndexConflict := IDEImages.LoadImage('pkg_conflict');
|
||||||
|
ImageIndexAvailableOnline := IDEImages.LoadImage('pkg_install');
|
||||||
ImageIndexRemovedRequired := IDEImages.LoadImage('pkg_removedrequired');
|
ImageIndexRemovedRequired := IDEImages.LoadImage('pkg_removedrequired');
|
||||||
ImageIndexProject := IDEImages.LoadImage('item_project_source');
|
ImageIndexProject := IDEImages.LoadImage('item_project_source');
|
||||||
ImageIndexUnit := IDEImages.LoadImage('item_unit');
|
ImageIndexUnit := IDEImages.LoadImage('item_unit');
|
||||||
@ -1086,8 +1115,12 @@ begin
|
|||||||
Result:=ImageIndexRemovedRequired
|
Result:=ImageIndexRemovedRequired
|
||||||
else if TPkgDependency(Item).LoadPackageResult=lprSuccess then
|
else if TPkgDependency(Item).LoadPackageResult=lprSuccess then
|
||||||
Result:=ImageIndexRequired
|
Result:=ImageIndexRequired
|
||||||
else
|
else begin
|
||||||
Result:=ImageIndexConflict;
|
Result:=ImageIndexConflict;
|
||||||
|
if OPMInterface<>nil then
|
||||||
|
if FindOnlinePackageLink(TPkgDependency(Item))<>nil then
|
||||||
|
Result:=ImageIndexAvailableOnline;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1154,6 +1187,10 @@ begin
|
|||||||
else
|
else
|
||||||
NodeText:=Format(lisPckEditDefault, [NodeText, AFilename]);
|
NodeText:=Format(lisPckEditDefault, [NodeText, AFilename]);
|
||||||
end;
|
end;
|
||||||
|
if Dependency.LoadPackageResult<>lprSuccess then
|
||||||
|
if OPMInterface<>nil then
|
||||||
|
if FindOnlinePackageLink(Dependency)<>nil then
|
||||||
|
NodeText:=NodeText+lisPckEditAvailableOnline;
|
||||||
// Add the required package under the branch
|
// Add the required package under the branch
|
||||||
ANodeData := CreateNodeData(penDependency, Dependency.PackageName, False);
|
ANodeData := CreateNodeData(penDependency, Dependency.PackageName, False);
|
||||||
RequiredBranch.AddNodeData(NodeText, ANodeData);
|
RequiredBranch.AddNodeData(NodeText, ANodeData);
|
||||||
@ -1224,6 +1261,55 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TProjectInspectorForm.DoOnPackageListAvailable(Sender: TObject);
|
||||||
|
var
|
||||||
|
CurDependency: TPkgDependency;
|
||||||
|
i: Integer;
|
||||||
|
TVNode: TTreeNode;
|
||||||
|
NodeData: TPENodeData;
|
||||||
|
Item: TObject;
|
||||||
|
NodeText: String;
|
||||||
|
ImageIndex: Integer;
|
||||||
|
begin
|
||||||
|
BeginUpdate;
|
||||||
|
try
|
||||||
|
for i:=0 to ItemsTreeView.Items.Count-1 do begin
|
||||||
|
TVNode:=ItemsTreeView.Items[i];
|
||||||
|
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
|
||||||
|
if not (Item is TPkgDependency) then continue;
|
||||||
|
CurDependency:=TPkgDependency(Item);
|
||||||
|
NodeText:=CurDependency.AsString;
|
||||||
|
ImageIndex:=ImageIndexRequired;
|
||||||
|
if CurDependency.LoadPackageResult<>lprSuccess then begin
|
||||||
|
ImageIndex:=ImageIndexConflict;
|
||||||
|
if OPMInterface<>nil then begin
|
||||||
|
if FindOnlinePackageLink(CurDependency)<>nil then begin
|
||||||
|
NodeText:=NodeText+lisPckEditAvailableOnline;
|
||||||
|
ImageIndex:=ImageIndexAvailableOnline;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
TVNode.Text:=NodeText;
|
||||||
|
TVNode.ImageIndex:=ImageIndex;
|
||||||
|
TVNode.SelectedIndex:=ImageIndex;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TProjectInspectorForm.FindOnlinePackageLink(
|
||||||
|
const ADependency: TPkgDependency): TPackageLink;
|
||||||
|
var
|
||||||
|
PackageLink: TPackageLink;
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
PackageLink := LazPackageLinks.FindLinkWithPkgName(ADependency.AsString);
|
||||||
|
if (PackageLink <> nil) and (PackageLink.Origin = ploOnline) and
|
||||||
|
(ADependency.IsCompatible(PackageLink.Version)) then
|
||||||
|
Result := PackageLink;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TProjectInspectorForm.KeyDown(var Key: Word; Shift: TShiftState);
|
procedure TProjectInspectorForm.KeyDown(var Key: Word; Shift: TShiftState);
|
||||||
begin
|
begin
|
||||||
inherited KeyDown(Key, Shift);
|
inherited KeyDown(Key, Shift);
|
||||||
|
@ -3356,6 +3356,7 @@ begin
|
|||||||
if BrokenDependencies<>nil then begin
|
if BrokenDependencies<>nil then begin
|
||||||
if OPMInterface <> nil then begin
|
if OPMInterface <> nil then begin
|
||||||
ResolveBrokenDependenciesOnline(BrokenDependencies, NeedToRebuild);
|
ResolveBrokenDependenciesOnline(BrokenDependencies, NeedToRebuild);
|
||||||
|
FreeAndNil(BrokenDependencies);
|
||||||
BrokenDependencies := PackageGraph.FindAllBrokenDependencies(nil, AProject.FirstRequiredDependency);
|
BrokenDependencies := PackageGraph.FindAllBrokenDependencies(nil, AProject.FirstRequiredDependency);
|
||||||
if BrokenDependencies <> nil then
|
if BrokenDependencies <> nil then
|
||||||
Result := ShowBrokenDependenciesReport(BrokenDependencies);
|
Result := ShowBrokenDependenciesReport(BrokenDependencies);
|
||||||
|
Loading…
Reference in New Issue
Block a user