IDE: package: new component: redirecting lclase to lcl, only using LCL units if LCL is used

git-svn-id: trunk@31683 -
This commit is contained in:
mattias 2011-07-12 21:38:12 +00:00
parent 4d6031177e
commit 0fe0eeaf6b
5 changed files with 45 additions and 35 deletions

View File

@ -241,6 +241,7 @@ type
function GetPackageCount: integer; virtual; abstract; function GetPackageCount: integer; virtual; abstract;
function GetPackages(Index: integer): TIDEPackage; virtual; abstract; function GetPackages(Index: integer): TIDEPackage; virtual; abstract;
function FindPackageWithName(const PkgName: string): TIDEPackage; virtual; abstract; function FindPackageWithName(const PkgName: string): TIDEPackage; virtual; abstract;
function RedirectPackageDependency(APackage: TIDEPackage): TIDEPackage; virtual; abstract;
// package editors // package editors
function GetPackageOfEditorItem(Sender: TObject): TIDEPackage; virtual; abstract; function GetPackageOfEditorItem(Sender: TObject): TIDEPackage; virtual; abstract;

View File

@ -38,10 +38,12 @@ unit AddToPackageDlg;
interface interface
uses uses
Math, Classes, SysUtils, LCLType, Forms, Controls, Buttons, ExtDlgs, Math, Classes, SysUtils, LCLProc, LCLType, Forms, Controls, Buttons, ExtDlgs,
StdCtrls, ExtCtrls, Dialogs, FileUtil, ComCtrls, AVL_Tree, LCLProc, StdCtrls, ExtCtrls, Dialogs, FileUtil, ComCtrls, AVL_Tree,
NewItemIntf, ProjectIntf, PackageIntf, FormEditingIntf, // IDEIntf
LazarusIDEStrConsts, IDEWindowIntf, InputHistory, CodeToolManager, IDEDefs, NewItemIntf, ProjectIntf, PackageIntf, FormEditingIntf, IDEWindowIntf,
// IDE
LazarusIDEStrConsts, InputHistory, CodeToolManager, IDEDefs,
IDEProcs, EnvironmentOpts, PackageSystem, PackageDefs, ComponentReg, IDEProcs, EnvironmentOpts, PackageSystem, PackageDefs, ComponentReg,
AddDirToPkgDlg; AddDirToPkgDlg;
@ -88,15 +90,6 @@ type
TAddToPackageDlg = class(TForm) TAddToPackageDlg = class(TForm)
CancelDependButton: TBitBtn; CancelDependButton: TBitBtn;
CancelNewComponentButton: TBitBtn; CancelNewComponentButton: TBitBtn;
ComponentIconLabel: TLabel;
ComponentIconSpeedButton: TSpeedButton;
NewCompBtnPanel: TPanel;
NewComponentButton: TBitBtn;
NewDepBtnPanel: TPanel;
NewDependButton: TBitBtn;
NewDepPanel: TPanel;
NewFileCancelButton: TBitBtn;
NewFileOkButton: TBitBtn;
// notebook // notebook
NoteBook: TPageControl; NoteBook: TPageControl;
NewFilePage: TTabSheet; NewFilePage: TTabSheet;
@ -107,7 +100,11 @@ type
NewFileTreeView: TTreeView; NewFileTreeView: TTreeView;
NewFileDescriptionGroupBox: TGroupBox; NewFileDescriptionGroupBox: TGroupBox;
NewFileHelpLabel: TLabel; NewFileHelpLabel: TLabel;
NewFileCancelButton: TBitBtn;
NewFileOkButton: TBitBtn;
// new component page // new component page
NewCompBtnPanel: TPanel;
NewComponentButton: TBitBtn;
AncestorTypeLabel: TLabel; AncestorTypeLabel: TLabel;
AncestorComboBox: TComboBox; AncestorComboBox: TComboBox;
AncestorShowAllCheckBox: TCheckBox; AncestorShowAllCheckBox: TCheckBox;
@ -115,6 +112,8 @@ type
ClassNameEdit: TEdit; ClassNameEdit: TEdit;
PalettePageLabel: TLabel; PalettePageLabel: TLabel;
PalettePageCombobox: TCombobox; PalettePageCombobox: TCombobox;
ComponentIconLabel: TLabel;
ComponentIconSpeedButton: TSpeedButton;
ComponentUnitFileLabel: TLabel; ComponentUnitFileLabel: TLabel;
ComponentUnitFileEdit: TEdit; ComponentUnitFileEdit: TEdit;
ComponentUnitFileBrowseButton: TButton; ComponentUnitFileBrowseButton: TButton;
@ -122,6 +121,9 @@ type
ComponentUnitNameLabel: TLabel; ComponentUnitNameLabel: TLabel;
ComponentUnitNameEdit: TEdit; ComponentUnitNameEdit: TEdit;
// new required package // new required package
NewDepBtnPanel: TPanel;
NewDependButton: TBitBtn;
NewDepPanel: TPanel;
DependPkgNameLabel: TLabel; DependPkgNameLabel: TLabel;
DependPkgNameComboBox: TComboBox; DependPkgNameComboBox: TComboBox;
DependMinVersionLabel: TLabel; DependMinVersionLabel: TLabel;
@ -861,6 +863,9 @@ begin
if PkgComponent<>nil then begin if PkgComponent<>nil then begin
Params.UsedUnitname:=PkgComponent.GetUnitName; Params.UsedUnitname:=PkgComponent.GetUnitName;
ARequiredPackage:=PkgComponent.PkgFile.LazPackage; ARequiredPackage:=PkgComponent.PkgFile.LazPackage;
ARequiredPackage:=TLazPackage(
PackageEditingInterface.RedirectPackageDependency(ARequiredPackage));
if (LazPackage<>ARequiredPackage) if (LazPackage<>ARequiredPackage)
and (not LazPackage.Requires(PkgComponent.PkgFile.LazPackage)) and (not LazPackage.Requires(PkgComponent.PkgFile.LazPackage))
then then

View File

@ -1140,9 +1140,13 @@ var
FNextSelectedPart := LazPackage.AddFile(UnitFilename,Unit_Name,FileType, FNextSelectedPart := LazPackage.AddFile(UnitFilename,Unit_Name,FileType,
PkgFileFlags,cpNormal); PkgFileFlags,cpNormal);
// add dependency // 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); 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); PackageEditors.DeleteAmbiguousFiles(LazPackage,AddParams.UnitFilename);
// open file in editor // open file in editor
PackageEditors.CreateNewFile(Self,AddParams); PackageEditors.CreateNewFile(Self,AddParams);

View File

@ -1212,17 +1212,10 @@ begin
end; end;
function TLazPackageGraph.CreateUniqueUnitName(const Prefix: string): string; function TLazPackageGraph.CreateUniqueUnitName(const Prefix: string): string;
var
i: Integer;
begin begin
if FindUnitInAllPackages(Prefix,false)=nil then Result:=Prefix;
Result:=Prefix while FindUnitInAllPackages(Result,false)<>nil do
else begin Result:=CreateNextIdentifier(Result);
i:=1;
repeat
Result:=Prefix+IntToStr(i);
until FindUnitInAllPackages(Result,false)=nil;
end;
end; end;
function TLazPackageGraph.PackageNameExists(const PkgName: string; function TLazPackageGraph.PackageNameExists(const PkgName: string;

View File

@ -239,7 +239,7 @@ type
function GetPackageCount: integer; override; function GetPackageCount: integer; override;
function GetPackages(Index: integer): TIDEPackage; override; function GetPackages(Index: integer): TIDEPackage; override;
function FindPackageWithName(const PkgName: string): TIDEPackage; override; function FindPackageWithName(const PkgName: string): TIDEPackage; override;
procedure RedirectPackageDependency(var APackage: TLazPackage); function RedirectPackageDependency(APackage: TIDEPackage): TIDEPackage; override;
// project // project
function OpenProjectDependencies(AProject: TProject; function OpenProjectDependencies(AProject: TProject;
@ -670,7 +670,12 @@ begin
// create sourcecode // create sourcecode
LE:=LineEnding; 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) if (System.Pos(Params.UsedUnitname,UsesLine)<1)
and (Params.UsedUnitname<>'') then and (Params.UsedUnitname<>'') then
UsesLine:=UsesLine+', '+Params.UsedUnitname; UsesLine:=UsesLine+', '+Params.UsedUnitname;
@ -1941,7 +1946,7 @@ begin
if (PkgFile=nil) then exit; if (PkgFile=nil) then exit;
APackage:=PkgFile.LazPackage; APackage:=PkgFile.LazPackage;
RedirectPackageDependency(APackage); APackage:=TLazPackage(RedirectPackageDependency(APackage));
AddProjectDependency(AProject,APackage); AddProjectDependency(AProject,APackage);
end; end;
@ -2493,12 +2498,14 @@ begin
end; end;
end; end;
procedure TPkgManager.RedirectPackageDependency(var APackage: TLazPackage); function TPkgManager.RedirectPackageDependency(APackage: TIDEPackage
): TIDEPackage;
begin 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 // Older Lazarus does not have a LCLBase and a component does not work
// without an LCLBase implementation, so we have to use LCL instead. // without an LCLBase implementation, so we have to use LCL instead.
APackage:=PackageGraph.LCLPackage; Result:=PackageGraph.LCLPackage;
end; end;
end; end;
@ -2708,7 +2715,7 @@ var
PkgFile:=TPkgComponent(RegComp).PkgFile; PkgFile:=TPkgComponent(RegComp).PkgFile;
if (PkgFile<>nil) then begin if (PkgFile<>nil) then begin
APackage:=PkgFile.LazPackage; APackage:=PkgFile.LazPackage;
RedirectPackageDependency(APackage); APackage:=TLazPackage(RedirectPackageDependency(APackage));
if (Packages.IndexOf(APackage)<0) then if (Packages.IndexOf(APackage)<0) then
Packages.Add(APackage); Packages.Add(APackage);
end; end;
@ -2762,7 +2769,7 @@ var
for i:=0 to MissingDependencies.Count-1 do begin for i:=0 to MissingDependencies.Count-1 do begin
UnitOwner:=TObject(MissingDependencies[i]); UnitOwner:=TObject(MissingDependencies[i]);
RequiredPackage:=TLazPackage(MissingDependencies.Objects[i]); RequiredPackage:=TLazPackage(MissingDependencies.Objects[i]);
RedirectPackageDependency(RequiredPackage); RequiredPackage:=TLazPackage(RedirectPackageDependency(RequiredPackage));
if UnitOwner is TProject then begin if UnitOwner is TProject then begin
PackageAdditions:=Format( PackageAdditions:=Format(
lisPkgMangAddingNewDependencyForProjectPackage, [PackageAdditions, lisPkgMangAddingNewDependencyForProjectPackage, [PackageAdditions,
@ -2801,7 +2808,7 @@ var
for i:=0 to MissingDependencies.Count-1 do begin for i:=0 to MissingDependencies.Count-1 do begin
UnitOwner:=TObject(MissingDependencies[i]); UnitOwner:=TObject(MissingDependencies[i]);
RequiredPackage:=TLazPackage(MissingDependencies.Objects[i]); RequiredPackage:=TLazPackage(MissingDependencies.Objects[i]);
RedirectPackageDependency(RequiredPackage); RequiredPackage:=TLazPackage(RedirectPackageDependency(RequiredPackage));
if UnitOwner is TProject then begin if UnitOwner is TProject then begin
DebugLn('TPkgManager.AddUnitDependenciesForComponentClasses Adding Project Dependency ',TProject(UnitOwner).Title,' -> ',RequiredPackage.Name); DebugLn('TPkgManager.AddUnitDependenciesForComponentClasses Adding Project Dependency ',TProject(UnitOwner).Title,' -> ',RequiredPackage.Name);
AddProjectDependency(TProject(UnitOwner),RequiredPackage); AddProjectDependency(TProject(UnitOwner),RequiredPackage);
@ -3278,7 +3285,7 @@ begin
end; end;
// add package dependency // add package dependency
//DebugLn(['TPkgManager.AddDependencyToUnitOwners ',dbgsName(TObject(OwnersList[0])),' ',RequiredPkg.IDAsString]); //DebugLn(['TPkgManager.AddDependencyToUnitOwners ',dbgsName(TObject(OwnersList[0])),' ',RequiredPkg.IDAsString]);
RedirectPackageDependency(RequiredPkg); RequiredPkg:=TLazPackage(RedirectPackageDependency(RequiredPkg));
Result:=AddDependencyToOwners(OwnersList,RequiredPkg,false); Result:=AddDependencyToOwners(OwnersList,RequiredPkg,false);
finally finally
OwnersList.Free; OwnersList.Free;