mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 12:16:18 +02:00
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:
parent
4d6031177e
commit
0fe0eeaf6b
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user