From 0fe0eeaf6bc1b484ec1d8b92ad3c7f5c80d53a93 Mon Sep 17 00:00:00 2001 From: mattias Date: Tue, 12 Jul 2011 21:38:12 +0000 Subject: [PATCH] IDE: package: new component: redirecting lclase to lcl, only using LCL units if LCL is used git-svn-id: trunk@31683 - --- ideintf/packageintf.pas | 1 + packager/addtopackagedlg.pas | 31 ++++++++++++++++++------------- packager/packageeditor.pas | 8 ++++++-- packager/packagesystem.pas | 13 +++---------- packager/pkgmanager.pas | 27 +++++++++++++++++---------- 5 files changed, 45 insertions(+), 35 deletions(-) diff --git a/ideintf/packageintf.pas b/ideintf/packageintf.pas index 15ed485010..9605205ea8 100644 --- a/ideintf/packageintf.pas +++ b/ideintf/packageintf.pas @@ -241,6 +241,7 @@ type function GetPackageCount: integer; virtual; abstract; function GetPackages(Index: integer): TIDEPackage; virtual; abstract; function FindPackageWithName(const PkgName: string): TIDEPackage; virtual; abstract; + function RedirectPackageDependency(APackage: TIDEPackage): TIDEPackage; virtual; abstract; // package editors function GetPackageOfEditorItem(Sender: TObject): TIDEPackage; virtual; abstract; diff --git a/packager/addtopackagedlg.pas b/packager/addtopackagedlg.pas index ff9d96952f..54c2a7232d 100644 --- a/packager/addtopackagedlg.pas +++ b/packager/addtopackagedlg.pas @@ -38,10 +38,12 @@ unit AddToPackageDlg; interface uses - Math, Classes, SysUtils, LCLType, Forms, Controls, Buttons, ExtDlgs, - StdCtrls, ExtCtrls, Dialogs, FileUtil, ComCtrls, AVL_Tree, LCLProc, - NewItemIntf, ProjectIntf, PackageIntf, FormEditingIntf, - LazarusIDEStrConsts, IDEWindowIntf, InputHistory, CodeToolManager, IDEDefs, + Math, Classes, SysUtils, LCLProc, LCLType, Forms, Controls, Buttons, ExtDlgs, + StdCtrls, ExtCtrls, Dialogs, FileUtil, ComCtrls, AVL_Tree, + // IDEIntf + NewItemIntf, ProjectIntf, PackageIntf, FormEditingIntf, IDEWindowIntf, + // IDE + LazarusIDEStrConsts, InputHistory, CodeToolManager, IDEDefs, IDEProcs, EnvironmentOpts, PackageSystem, PackageDefs, ComponentReg, AddDirToPkgDlg; @@ -88,15 +90,6 @@ type TAddToPackageDlg = class(TForm) CancelDependButton: TBitBtn; CancelNewComponentButton: TBitBtn; - ComponentIconLabel: TLabel; - ComponentIconSpeedButton: TSpeedButton; - NewCompBtnPanel: TPanel; - NewComponentButton: TBitBtn; - NewDepBtnPanel: TPanel; - NewDependButton: TBitBtn; - NewDepPanel: TPanel; - NewFileCancelButton: TBitBtn; - NewFileOkButton: TBitBtn; // notebook NoteBook: TPageControl; NewFilePage: TTabSheet; @@ -107,7 +100,11 @@ type NewFileTreeView: TTreeView; NewFileDescriptionGroupBox: TGroupBox; NewFileHelpLabel: TLabel; + NewFileCancelButton: TBitBtn; + NewFileOkButton: TBitBtn; // new component page + NewCompBtnPanel: TPanel; + NewComponentButton: TBitBtn; AncestorTypeLabel: TLabel; AncestorComboBox: TComboBox; AncestorShowAllCheckBox: TCheckBox; @@ -115,6 +112,8 @@ type ClassNameEdit: TEdit; PalettePageLabel: TLabel; PalettePageCombobox: TCombobox; + ComponentIconLabel: TLabel; + ComponentIconSpeedButton: TSpeedButton; ComponentUnitFileLabel: TLabel; ComponentUnitFileEdit: TEdit; ComponentUnitFileBrowseButton: TButton; @@ -122,6 +121,9 @@ type ComponentUnitNameLabel: TLabel; ComponentUnitNameEdit: TEdit; // new required package + NewDepBtnPanel: TPanel; + NewDependButton: TBitBtn; + NewDepPanel: TPanel; DependPkgNameLabel: TLabel; DependPkgNameComboBox: TComboBox; DependMinVersionLabel: TLabel; @@ -861,6 +863,9 @@ begin if PkgComponent<>nil then begin Params.UsedUnitname:=PkgComponent.GetUnitName; ARequiredPackage:=PkgComponent.PkgFile.LazPackage; + ARequiredPackage:=TLazPackage( + PackageEditingInterface.RedirectPackageDependency(ARequiredPackage)); + if (LazPackage<>ARequiredPackage) and (not LazPackage.Requires(PkgComponent.PkgFile.LazPackage)) then diff --git a/packager/packageeditor.pas b/packager/packageeditor.pas index 1a8e75c63b..3df9b53324 100644 --- a/packager/packageeditor.pas +++ b/packager/packageeditor.pas @@ -1140,9 +1140,13 @@ var FNextSelectedPart := LazPackage.AddFile(UnitFilename,Unit_Name,FileType, PkgFileFlags,cpNormal); // add dependency - if AddParams.Dependency<>nil then begin + if (AddParams.Dependency<>nil) + and (LazPackage.FindDependencyByName(AddParams.Dependency.PackageName)=nil) + then PackageGraph.AddDependencyToPackage(LazPackage,AddParams.Dependency); - end; + if (AddParams.IconFile<>'') + and (LazPackage.FindDependencyByName('LCL')=nil) then + PackageGraph.AddDependencyToPackage(LazPackage,PackageGraph.LCLPackage); PackageEditors.DeleteAmbiguousFiles(LazPackage,AddParams.UnitFilename); // open file in editor PackageEditors.CreateNewFile(Self,AddParams); diff --git a/packager/packagesystem.pas b/packager/packagesystem.pas index 2fbec4e19d..164b2538b1 100644 --- a/packager/packagesystem.pas +++ b/packager/packagesystem.pas @@ -1212,17 +1212,10 @@ begin end; function TLazPackageGraph.CreateUniqueUnitName(const Prefix: string): string; -var - i: Integer; begin - if FindUnitInAllPackages(Prefix,false)=nil then - Result:=Prefix - else begin - i:=1; - repeat - Result:=Prefix+IntToStr(i); - until FindUnitInAllPackages(Result,false)=nil; - end; + Result:=Prefix; + while FindUnitInAllPackages(Result,false)<>nil do + Result:=CreateNextIdentifier(Result); end; function TLazPackageGraph.PackageNameExists(const PkgName: string; diff --git a/packager/pkgmanager.pas b/packager/pkgmanager.pas index bd54fd513c..c9ef3c5e83 100644 --- a/packager/pkgmanager.pas +++ b/packager/pkgmanager.pas @@ -239,7 +239,7 @@ type function GetPackageCount: integer; override; function GetPackages(Index: integer): TIDEPackage; override; function FindPackageWithName(const PkgName: string): TIDEPackage; override; - procedure RedirectPackageDependency(var APackage: TLazPackage); + function RedirectPackageDependency(APackage: TIDEPackage): TIDEPackage; override; // project function OpenProjectDependencies(AProject: TProject; @@ -670,7 +670,12 @@ begin // create sourcecode LE:=LineEnding; - UsesLine:='Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs'; + if PackageGraph.FindDependencyRecursively(Params.Pkg.FirstRequiredDependency, + 'LCL')<>nil + then + UsesLine:='Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs' + else + UsesLine:='Classes, SysUtils'; if (System.Pos(Params.UsedUnitname,UsesLine)<1) and (Params.UsedUnitname<>'') then UsesLine:=UsesLine+', '+Params.UsedUnitname; @@ -1941,7 +1946,7 @@ begin if (PkgFile=nil) then exit; APackage:=PkgFile.LazPackage; - RedirectPackageDependency(APackage); + APackage:=TLazPackage(RedirectPackageDependency(APackage)); AddProjectDependency(AProject,APackage); end; @@ -2493,12 +2498,14 @@ begin end; end; -procedure TPkgManager.RedirectPackageDependency(var APackage: TLazPackage); +function TPkgManager.RedirectPackageDependency(APackage: TIDEPackage + ): TIDEPackage; begin - if APackage=PackageGraph.LCLBasePackage then begin + Result:=APackage; + if Result=PackageGraph.LCLBasePackage then begin // Older Lazarus does not have a LCLBase and a component does not work // without an LCLBase implementation, so we have to use LCL instead. - APackage:=PackageGraph.LCLPackage; + Result:=PackageGraph.LCLPackage; end; end; @@ -2708,7 +2715,7 @@ var PkgFile:=TPkgComponent(RegComp).PkgFile; if (PkgFile<>nil) then begin APackage:=PkgFile.LazPackage; - RedirectPackageDependency(APackage); + APackage:=TLazPackage(RedirectPackageDependency(APackage)); if (Packages.IndexOf(APackage)<0) then Packages.Add(APackage); end; @@ -2762,7 +2769,7 @@ var for i:=0 to MissingDependencies.Count-1 do begin UnitOwner:=TObject(MissingDependencies[i]); RequiredPackage:=TLazPackage(MissingDependencies.Objects[i]); - RedirectPackageDependency(RequiredPackage); + RequiredPackage:=TLazPackage(RedirectPackageDependency(RequiredPackage)); if UnitOwner is TProject then begin PackageAdditions:=Format( lisPkgMangAddingNewDependencyForProjectPackage, [PackageAdditions, @@ -2801,7 +2808,7 @@ var for i:=0 to MissingDependencies.Count-1 do begin UnitOwner:=TObject(MissingDependencies[i]); RequiredPackage:=TLazPackage(MissingDependencies.Objects[i]); - RedirectPackageDependency(RequiredPackage); + RequiredPackage:=TLazPackage(RedirectPackageDependency(RequiredPackage)); if UnitOwner is TProject then begin DebugLn('TPkgManager.AddUnitDependenciesForComponentClasses Adding Project Dependency ',TProject(UnitOwner).Title,' -> ',RequiredPackage.Name); AddProjectDependency(TProject(UnitOwner),RequiredPackage); @@ -3278,7 +3285,7 @@ begin end; // add package dependency //DebugLn(['TPkgManager.AddDependencyToUnitOwners ',dbgsName(TObject(OwnersList[0])),' ',RequiredPkg.IDAsString]); - RedirectPackageDependency(RequiredPkg); + RequiredPkg:=TLazPackage(RedirectPackageDependency(RequiredPkg)); Result:=AddDependencyToOwners(OwnersList,RequiredPkg,false); finally OwnersList.Free;