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 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;

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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;