فهرست منبع

design: add uses Fresnel

mattias 1 سال پیش
والد
کامیت
572658bef0

+ 1 - 0
demo/Button/ButtonSkia.lpi

@@ -26,6 +26,7 @@
     <RequiredPackages>
       <Item>
         <PackageName Value="Fresnel"/>
+        <DefaultFilename Value="../../src/fresnel.lpk" Prefer="True"/>
       </Item>
     </RequiredPackages>
     <Units>

+ 1 - 0
demo/ButtonGenerator/ButtonGenerator.lpi

@@ -27,6 +27,7 @@
     <RequiredPackages>
       <Item>
         <PackageName Value="Fresnel"/>
+        <DefaultFilename Value="../../src/fresnel.lpk" Prefer="True"/>
       </Item>
     </RequiredPackages>
     <Units>

+ 1 - 0
demo/lcl/Button/LCLButton.lpi

@@ -26,6 +26,7 @@
     <RequiredPackages>
       <Item>
         <PackageName Value="FresnelLCL"/>
+        <DefaultFilename Value="../../../src/lcl/fresnellcl.lpk" Prefer="True"/>
       </Item>
       <Item>
         <PackageName Value="LCL"/>

+ 1 - 0
demo/lclcontrol/DivAndSpan/FresnelDivAndSpan1.lpi

@@ -26,6 +26,7 @@
     <RequiredPackages>
       <Item>
         <PackageName Value="FresnelLCL"/>
+        <DefaultFilename Value="../../../src/lcl/fresnellcl.lpk" Prefer="True"/>
       </Item>
       <Item>
         <PackageName Value="LCL"/>

+ 47 - 8
design/fresnel.register.pas

@@ -17,12 +17,17 @@ interface
 uses
   LCLProc, LCLType, Classes, SysUtils, FormEditingIntf, PropEdits, LazIDEIntf,
   ComponentEditors, LCLIntf, Graphics, Controls, Forms, ProjectIntf,
-  PackageIntf, LazLoggerBase, Fresnel.DOM, Fresnel.Controls, Fresnel.Forms,
+  PackageIntf, LazLoggerBase, CodeToolManager, CodeCache, CodeTree,
+  SourceChanger, StdCodeTools, Fresnel.DOM, Fresnel.Controls, Fresnel.Forms,
   Fresnel.Renderer, Fresnel.Classes, Fresnel.LCLApp, Fresnel.LCL,
   Fresnel.DsgnStrConsts, Fresnel.StylePropEdit;
 
 const
   ProjDescNameFresnelApplication = 'Fresnel Application';
+  FresnelPkgName = 'Fresnel';
+  FresnelLCLPkgName = 'FresnelLCL';
+  FresnelBasePkgName = 'FresnelBase';
+  FresnelDesignPkgName = 'FresnelDsgn';
 
 type
 
@@ -72,6 +77,7 @@ type
     constructor Create; override;
     function Init(var NewFilename: string; NewOwner: TObject;
       var NewSource: string; Quiet: boolean): TModalResult; override;
+    function Initialized(NewFile: TLazProjectFile): TModalResult; override;
     function GetInterfaceUsesSection: string; override;
     function GetLocalizedName: string; override;
     function GetLocalizedDescription: string; override;
@@ -386,20 +392,53 @@ end;
 
 function TFileDescFresnelForm.Init(var NewFilename: string; NewOwner: TObject;
   var NewSource: string; Quiet: boolean): TModalResult;
+var
+  DependencyOwner, aOwner: TObject;
+begin
+  Result:=inherited Init(NewFilename, NewOwner, NewSource, Quiet);
+
+  // if project uses the LCL, add dependency FresnelLCL else Fresnel
+  RequiredPackages:=FresnelPkgName+';'+FresnelDesignPkgName;
+  aOwner:=NewOwner;
+  if aOwner=nil then
+    aOwner:=LazarusIDE.ActiveProject;
+
+  if aOwner<>nil then
+  begin
+    if PackageEditingInterface.IsOwnerDependingOnPkg(aOwner,'LCL',DependencyOwner) then
+      RequiredPackages:=FresnelLCLPkgName+';'+FresnelDesignPkgName;
+  end;
+end;
+
+function TFileDescFresnelForm.Initialized(NewFile: TLazProjectFile
+  ): TModalResult;
 var
   aProject: TLazProject;
+  MainFilename: String;
+  Code: TCodeBuffer;
   DependencyOwner: TObject;
 begin
-  // if project uses the LCL, add dependency FresnelLCL else Fresnel
+  Result:=inherited Initialized(NewFile);
   aProject:=LazarusIDE.ActiveProject;
-  RequiredPackages:='Fresnel;FresnelDsgn';
-  if aProject<>nil then
+  if aProject=nil then begin
+    debugln(['Warning: TFileDescFresnelForm.Initialized: not adding uses Fresnel, because ActiveProject=nil']);
+    exit;
+  end;
+  if aProject.MainFile=nil then begin
+    debugln(['Warning: TFileDescFresnelForm.Initialized: not adding uses Fresnel, because ActiveProject.MainFile=nil']);
+    exit;
+  end;
+  if PackageEditingInterface.IsOwnerDependingOnPkg(aProject,'LCL',DependencyOwner) then
   begin
-    if PackageEditingInterface.IsOwnerDependingOnPkg(aProject,'LCL',DependencyOwner) then
-      RequiredPackages:='FresnelLCL;FresnelDsgn';
+    // a lcl app -> add FresnelLCL behind 'interfaces'
+    MainFilename:=aProject.MainFile.Filename;
+    Code:=CodeToolBoss.LoadFile(MainFilename,true,false);
+    if not CodeToolBoss.AddUnitToMainUsesSectionIfNeeded(Code,'Fresnel','',[aufLast]) then
+    begin
+      debugln(['Warning: TFileDescFresnelForm.Initialized: failed adding uses Fresnel to "',MainFilename,'"']);
+      exit;
+    end;
   end;
-
-  Result:=inherited Init(NewFilename, NewOwner, NewSource, Quiet);
 end;
 
 function TFileDescFresnelForm.GetInterfaceUsesSection: string;

+ 4 - 1
design/fresneldsgn.lpk

@@ -25,10 +25,13 @@
       </Item>
       <Item>
         <Filename Value="fresnel.dsgnstrconsts.pas"/>
-        <UnitName Value="fresnel.dsgnstrconsts"/>
+        <UnitName Value="Fresnel.DsgnStrConsts"/>
       </Item>
     </Files>
     <RequiredPkgs>
+      <Item>
+        <PackageName Value="CodeTools"/>
+      </Item>
       <Item>
         <PackageName Value="FresnelLCL"/>
         <DefaultFilename Value="../src/lcl/fresnellcl.lpk" Prefer="True"/>