فهرست منبع

design: drop component: redirect to package Fresnel or FresnelLCL

mattias 1 سال پیش
والد
کامیت
07429225c5
1فایلهای تغییر یافته به همراه46 افزوده شده و 3 حذف شده
  1. 46 3
      design/fresnel.register.pas

+ 46 - 3
design/fresnel.register.pas

@@ -16,9 +16,10 @@ interface
 
 uses
   LCLProc, LCLType, Classes, SysUtils, FormEditingIntf, PropEdits, LazIDEIntf,
-  LCLIntf, Graphics, Controls, Forms, ProjectIntf, LazLoggerBase, Fresnel.DOM,
-  Fresnel.Controls, Fresnel.Forms, Fresnel.Renderer, Fresnel.Classes,
-  Fresnel.LCLApp, Fresnel.LCL, Fresnel.DsgnStrConsts, Fresnel.StylePropEdit;
+  ComponentEditors, LCLIntf, Graphics, Controls, Forms, ProjectIntf,
+  PackageIntf, LazLoggerBase, Fresnel.DOM, Fresnel.Controls, Fresnel.Forms,
+  Fresnel.Renderer, Fresnel.Classes, Fresnel.LCLApp, Fresnel.LCL,
+  Fresnel.DsgnStrConsts, Fresnel.StylePropEdit;
 
 const
   ProjDescNameFresnelApplication = 'Fresnel Application';
@@ -101,6 +102,13 @@ type
     function GetAttributes: TPropertyAttributes; override;
   end;
 
+  { TFresnelComponentRequirements }
+
+  TFresnelComponentRequirements = class(TComponentRequirements)
+  public
+    procedure RequiredPkgs(Pkgs: TStrings); override;
+  end;
+
 var
   FileDescFresnelForm: TFileDescFresnelForm;
   ProjDescFresnelApplication: TProjDescFresnelApplication;
@@ -117,6 +125,7 @@ begin
   FormEditingHook.SetDesignerBaseClassCanAppCreateForm(TFresnelCustomForm,true);
 
   RegisterComponents('Fresnel',[TDiv,TSpan,TLabel,TButton,TImage,TBody]);
+  RegisterComponentRequirements([TDiv,TSpan,TLabel,TButton,TImage,TBody],TFresnelComponentRequirements);
 
   FileDescFresnelForm:=TFileDescFresnelForm.Create;
   RegisterProjectFileDescriptor(FileDescFresnelForm,FileDescGroupName);
@@ -520,5 +529,39 @@ begin
   Result := [paMultiSelect, paDialog, paRevertable, paReadOnly];
 end;
 
+{ TFresnelComponentRequirements }
+
+procedure TFresnelComponentRequirements.RequiredPkgs(Pkgs: TStrings);
+
+  procedure RemoveFresnelBase;
+  var
+    i: Integer;
+  begin
+    i:=Pkgs.IndexOf('FresnelBase');
+    if i<0 then exit;
+    Pkgs.Delete(i);
+  end;
+
+var
+  aProject: TLazProject;
+  DependencyOwner: TObject;
+begin
+  // the Fresnel components are part of package FresnelBase, but the project
+  // actually needs a Fresnel backend.
+
+  // if project is using the LCL then use FresnelLCL else Fresnel
+  aProject:=LazarusIDE.ActiveProject;
+  if aProject<>nil then
+  begin
+    RemoveFresnelBase;
+    if PackageEditingInterface.IsOwnerDependingOnPkg(aProject,'LCL',DependencyOwner) then
+    begin
+      Pkgs.Add('FresnelLCL');
+    end else begin
+      Pkgs.Add('Fresnel');
+    end;
+  end;
+end;
+
 end.