Opkman: Add the possibility to open the package file(lpk) directly from the package tree.

git-svn-id: trunk@62959 -
This commit is contained in:
balazs 2020-04-13 16:03:03 +00:00
parent 083db4d426
commit 2eedadafce
4 changed files with 83 additions and 14 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<Package Version="4">
<Package Version="5">
<PathDelim Value="\"/>
<Name Value="OnlinePackageManager"/>
<Type Value="RunAndDesignTime"/>

View File

@ -54,8 +54,8 @@ const
cOpenSSLURL = 'http://packages.lazarus-ide.org/openssl-1.0.2j-i386-win32.zip';
{$endif}
cExtractDir = 'ExtractDir';
cSubmitURL_Zip = 'aHR0cDovL2xhemFydXNvcG0uMDAwd2ViaG9zdGFwcC5jb20vemlwLnBocA==';
cSubmitURL_JSON = 'aHR0cDovL2xhemFydXNvcG0uMDAwd2ViaG9zdGFwcC5jb20vanNvbi5waHA=';
cSubmitURL_Zip = 'aHR0cDovL2xhemFydXNvcG0ub3JnL3ppcC5waHA=';
cSubmitURL_JSON = 'aHR0cDovL2xhemFydXNvcG0ub3JnL2pzb24ucGhw';
cSep = '#@$%^';
resourcestring
@ -139,6 +139,9 @@ resourcestring
rsMainFrm_VSTText_PackageCategory27 = 'Games and Game Engines';
rsMainFrm_VSTText_Desc = 'Description for package';
rsMainFrm_VSTText_Lic = 'License info for package';
rsMainFrm_VSTText_Open = 'Open';
rsMainFrm_VSTText_Open_Notfound = 'Package file not found';
rsMainFrm_VSTText_Open_Error = 'Cannot open package file';
rsMainFrm_VSTText_ComDesc = 'Community description for metapackage';
rsMainFrm_cbAll_Caption = 'All/None';
rsMainFrm_cbAll_Hint = 'Check/Uncheck packages';

View File

@ -30,9 +30,11 @@ uses
SysUtils, Classes, laz.VirtualTrees,
// LCL
Forms, Controls, Graphics, Dialogs, ComCtrls, StdCtrls, ExtCtrls, ButtonPanel,
// IdeIntf
PackageIntf,
// OpkMan
opkman_installer, opkman_common, opkman_const, opkman_downloader, opkman_zipper,
opkman_options, opkman_maindm;
opkman_options, opkman_maindm, opkman_serializablepackages;
type
@ -403,6 +405,7 @@ var
Msg: String;
Node: PVirtualNode;
Data: PData;
LazarusPkg: TLazarusPackage;
begin
Node := FVST.AddChild(nil);
Data := FVST.GetNodeData(Node);
@ -432,6 +435,17 @@ begin
PackageInstaller.OnPackageInstallError := nil;
PackageInstaller.NeedToBreak := True;
Close;
if MessageDlgEx(rsMainFrm_VSTText_Open + ' "' + APackageName + '" ?', mtConfirmation, [mbYes, mbNo], Self) = mrYes then
begin
LazarusPkg := SerializablePackages.FindLazarusPackage(APackageName);
if (LazarusPkg <> nil) and (FileExists(LazarusPkg.PackageAbsolutePath)) then
begin
if PackageEditingInterface.DoOpenPackageFile(LazarusPkg.PackageAbsolutePath, [], True) <> mrOk then
MessageDlgEx(rsMainFrm_VSTText_Open_Error, mtError, [mbOk], TForm(FVST.Parent.Parent));
end
else
MessageDlgEx(rsMainFrm_VSTText_Open_Notfound, mtError, [mbOk], TForm(FVST.Parent.Parent));
end
end;
Application.ProcessMessages;
end;

View File

@ -107,6 +107,7 @@ type
FShowHintFrm: TShowHintFrm;
FOldButtonNode: PVirtualNode;
FStarSize: Integer;
procedure DoOpenPackage(const APackageName: String);
procedure VSTBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; {%H-}Column: TColumnIndex;
{%H-}CellPaintMode: TVTCellPaintMode; CellRect: TRect; var {%H-}ContentRect: TRect);
@ -149,6 +150,7 @@ type
procedure SetButtonVisibility(Node: PVirtualNode; Column: TColumnIndex);
procedure CallBack(Sender: TBaseVirtualTree; Node: PVirtualNode; {%H-}Data: Pointer; var {%H-}Abort: Boolean);
procedure ShowDetails(const AButtonID: Integer);
procedure OpenPackage(const AButtonID: Integer);
procedure ResetDependencyNodes;
public
constructor Create(const AParent: TWinControl; const AImgList: TImageList;
@ -371,6 +373,8 @@ begin
ChildData^.PackageState := LazarusPkg.PackageState;
ChildData^.HasUpdate := LazarusPkg.HasUpdate;
ChildData^.DataType := 2;
Inc(UniqueID);
ChildData^.ButtonID := -UniqueID;
//add description(DataType = 3)
GrandChildNode := FVST.AddChild(ChildNode);
FVST.IsDisabled[GrandChildNode] := FVST.IsDisabled[GrandChildNode^.Parent];
@ -528,6 +532,7 @@ var
begin
if Assigned(PackageDetailsFrm) then
Exit;
Node := VST.GetFirst;
while Assigned(Node) do
begin
@ -570,9 +575,47 @@ begin
end;
end;
procedure TVisualTree.ButtonClick(Sender: TObject);
procedure TVisualTree.DoOpenPackage(const APackageName: String);
var
LazarusPkg: TLazarusPackage;
begin
ShowDetails((Sender as TSpeedButton).Tag);
LazarusPkg := SerializablePackages.FindLazarusPackage(APackageName);
if (LazarusPkg <> nil) and (FileExists(LazarusPkg.PackageAbsolutePath)) then
begin
if PackageEditingInterface.DoOpenPackageFile(LazarusPkg.PackageAbsolutePath, [], True) <> mrOk then
MessageDlgEx(rsMainFrm_VSTText_Open_Error, mtError, [mbOk], TForm(FVST.Parent.Parent));
end
else
MessageDlgEx(rsMainFrm_VSTText_Open_Notfound, mtError, [mbOk], TForm(FVST.Parent.Parent));
end;
procedure TVisualTree.OpenPackage(const AButtonID: Integer);
var
Node: PVirtualNode;
Data: PData;
begin
Node := VST.GetFirst;
while Assigned(Node) do
begin
Data := VST.GetNodeData(Node);
if Data^.ButtonID = AButtonID then
begin
DoOpenPackage(Data^.LazarusPackageName);
Break;
end;
Node := VST.GetNext(Node);
end;
end;
procedure TVisualTree.ButtonClick(Sender: TObject);
var
Tag: Integer;
begin
Tag := (Sender as TSpeedButton).Tag;
if Tag < 0 then
OpenPackage(Tag)
else
ShowDetails(Tag);
end;
function TVisualTree.TranslateCategories(const AStr: String): String;
@ -1794,17 +1837,23 @@ begin
if (Data^.Button = nil) and
(
((Data^.DataType = 2) and (Data^.PackageState in [psExtracted, psInstalled])) or
((Data^.DataType = 3) and (Trim(Data^.Description) <> '')) or
((Data^.DataType = 9) and (Trim(Data^.License) <> '')) or
((Data^.DataType = 19) and (Trim(Data^.CommunityDescription) <> ''))
) then
begin
Data := FVST.GetNodeData(FHoverNode);
Data^.Button := TSpeedButton.Create(VST);
with Data^.Button do
begin
Caption := '...';
if Data^.DataType = 2 then
begin
Width := 75;
Caption := rsMainFrm_VSTText_Open;
end
else
Caption := '...';
Parent := FVST;
Tag := Data^.ButtonID;
Visible := True;
@ -1963,14 +2012,17 @@ begin
end;
procedure TVisualTree.VSTDblClick(Sender: TObject);
var
Data: PData;
Node: PVirtualNode;
begin
{ if FLinkClicked then
Node := FVST.GetFirstSelected;
if (Node <> nil) and (FVST.GetNodeLevel(Node) = 2) then
begin
FLinkClicked := False;
FHoverColumn := -1;
FHoverNode := nil;
OpenURL(FLink);
end;}
Data := FVST.GetNodeData(Node);
if (Data^.DataType = 2) and (Data^.PackageState in [psExtracted, psInstalled]) then
DoOpenPackage(Data^.LazarusPackageName);
end;
end;
procedure TVisualTree.VSTScroll(Sender: TBaseVirtualTree; DeltaX, DeltaY: Integer);