implemented inherited compiler options

git-svn-id: trunk@4059 -
This commit is contained in:
mattias 2003-04-14 18:03:48 +00:00
parent aa0f5a45d5
commit 74214654f9
10 changed files with 503 additions and 324 deletions

File diff suppressed because it is too large Load Diff

View File

@ -4260,7 +4260,7 @@ begin
Left:=5; Left:=5;
Width:=MaxX-Left-Left; Width:=MaxX-Left-Left;
Height:=16; Height:=16;
Caption:=dlgEdHintCommand ; Caption:=dlgEdHintCommand;
Visible:=true; Visible:=true;
end; end;
@ -4272,7 +4272,7 @@ begin
Left:=0; Left:=0;
Width:=MaxX-Left-Left; Width:=MaxX-Left-Left;
Height:=MaxY-Top; Height:=MaxY-Top;
Options:=[tvoReadOnly, tvoShowButtons, tvoShowRoot, Options:=Options+[tvoReadOnly, tvoShowButtons, tvoShowRoot,
tvoShowLines, tvoRowSelect, tvoKeepCollapsedNodes, tvoShowSeparators]; tvoShowLines, tvoRowSelect, tvoKeepCollapsedNodes, tvoShowSeparators];
OnMouseUp:=@KeyMappingTreeViewMouseUp; OnMouseUp:=@KeyMappingTreeViewMouseUp;
Images:=Self.ImageList; Images:=Self.ImageList;

View File

@ -563,6 +563,7 @@ resourcestring
dlgCOLinking = 'Linking'; dlgCOLinking = 'Linking';
dlgCOMessages = 'Messages'; dlgCOMessages = 'Messages';
dlgCOOther = 'Other'; dlgCOOther = 'Other';
dlgCOInherited = 'Inherited';
dlgShowCompilerOptions = 'Show compiler options'; dlgShowCompilerOptions = 'Show compiler options';
dlgCOOpts = 'Options: '; dlgCOOpts = 'Options: ';
dlgCOStyle = 'Style:'; dlgCOStyle = 'Style:';

View File

@ -1039,7 +1039,7 @@ begin
fActiveEditorIndexAtStart := -1; fActiveEditorIndexAtStart := -1;
FAutoCreateForms := true; FAutoCreateForms := true;
fBookmarks := TProjectBookmarkList.Create; fBookmarks := TProjectBookmarkList.Create;
fCompilerOptions := TCompilerOptions.Create; fCompilerOptions := TCompilerOptions.Create(Self);
FFlags:=DefaultProjectFlags; FFlags:=DefaultProjectFlags;
fIconPath := ''; fIconPath := '';
fJumpHistory:=TProjectJumpHistory.Create; fJumpHistory:=TProjectJumpHistory.Create;
@ -2296,6 +2296,9 @@ end.
{ {
$Log$ $Log$
Revision 1.104 2003/04/14 18:03:47 mattias
implemented inherited compiler options
Revision 1.103 2003/04/13 13:45:04 mattias Revision 1.103 2003/04/13 13:45:04 mattias
implemented broken dependencies dialog implemented broken dependencies dialog

View File

@ -1299,6 +1299,7 @@ type
tvsStateChanging, tvsStateChanging,
tvsManualNotify, tvsManualNotify,
tvsUpdating, tvsUpdating,
tvsPainting,
tvsMouseCapture, tvsMouseCapture,
tvsWaitForDragging, tvsWaitForDragging,
tvsDblClicked, tvsDblClicked,
@ -1500,6 +1501,8 @@ type
procedure Expand(Node: TTreeNode); dynamic; procedure Expand(Node: TTreeNode); dynamic;
procedure GetImageIndex(Node: TTreeNode); virtual; procedure GetImageIndex(Node: TTreeNode); virtual;
procedure GetSelectedIndex(Node: TTreeNode); virtual; procedure GetSelectedIndex(Node: TTreeNode); virtual;
procedure InitializeWnd; override;
procedure Invalidate; override;
procedure KeyDown(var Key : Word; Shift : TShiftState); override; procedure KeyDown(var Key : Word; Shift : TShiftState); override;
procedure Loaded; override; procedure Loaded; override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:
@ -1754,6 +1757,9 @@ end.
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.72 2003/04/14 18:03:48 mattias
implemented inherited compiler options
Revision 1.71 2003/04/13 13:45:04 mattias Revision 1.71 2003/04/13 13:45:04 mattias
implemented broken dependencies dialog implemented broken dependencies dialog

View File

@ -33,6 +33,7 @@
const const
TTreeNodeStreamVersion : word = 1; TTreeNodeStreamVersion : word = 1;
TVAutoHeightString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789|\()^';
// maximum scroll range // maximum scroll range
//MAX_SCROLL = 32767; //MAX_SCROLL = 32767;
@ -2556,7 +2557,6 @@ procedure TCustomTreeView.CreateWnd;
begin begin
Exclude(FStates,tvsStateChanging); Exclude(FStates,tvsStateChanging);
inherited CreateWnd; inherited CreateWnd;
UpdateDefaultItemHeight;
//TreeView_SetBkColor(Handle, ColorToRGB(Color)); //TreeView_SetBkColor(Handle, ColorToRGB(Color));
//TreeView_SetTextColor(Handle, ColorToRGB(Font.Color)); //TreeView_SetTextColor(Handle, ColorToRGB(Font.Color));
@ -2576,6 +2576,18 @@ begin
// SetImageList(StateImages.Handle, TVSIL_STATE); // SetImageList(StateImages.Handle, TVSIL_STATE);
end; end;
procedure TCustomTreeView.InitializeWnd;
begin
inherited InitializeWnd;
UpdateDefaultItemHeight;
end;
procedure TCustomTreeView.Invalidate;
begin
if tvsPainting in FStates then exit;
inherited Invalidate;
end;
procedure TCustomTreeView.DestroyWnd; procedure TCustomTreeView.DestroyWnd;
//var Node: TTreeNode; //var Node: TTreeNode;
begin begin
@ -2858,7 +2870,7 @@ begin
end; end;
end; end;
if tvoAutoItemHeight in ChangedOptions then if tvoAutoItemHeight in ChangedOptions then
UpdateDefaultItemHeight; UpdateDefaultItemHeight;
if ([tvoHideSelection,tvoReadOnly,tvoShowButtons,tvoShowRoot,tvoShowLines] if ([tvoHideSelection,tvoReadOnly,tvoShowButtons,tvoShowRoot,tvoShowLines]
* ChangedOptions)<>[] * ChangedOptions)<>[]
then then
@ -2866,16 +2878,22 @@ begin
end; end;
procedure TCustomTreeView.UpdateDefaultItemHeight; procedure TCustomTreeView.UpdateDefaultItemHeight;
var
NewDefItemHeight: Integer;
begin begin
if HandleAllocated and (tvoAutoItemHeight in FOptions) then begin if (tvoAutoItemHeight in FOptions)
FDefItemHeight:= and HandleAllocated and Canvas.HandleAllocated then begin
Canvas.TextHeight('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789|\()^') NewDefItemHeight:=Canvas.TextHeight(TVAutoHeightString)+2; // +2 for border
+2 // border if NewDefItemHeight<2 then NewDefItemHeight:=2;
; if (Images<>nil) and (Images.Height>NewDefItemHeight) then
if (Images<>nil) and (Images.Height>FDefItemHeight) then NewDefItemHeight:=Images.Height;
FDefItemHeight:=Images.Height; if (StateImages<>nil) and (StateImages.Height>NewDefItemHeight) then
if (StateImages<>nil) and (StateImages.Height>FDefItemHeight) then NewDefItemHeight:=StateImages.Height;
FDefItemHeight:=StateImages.Height; if NewDefItemHeight<>FDefItemHeight then begin
FDefItemHeight:=NewDefItemHeight;
Include(FStates,tvsTopsNeedsUpdate);
Invalidate;
end;
end; end;
end; end;
@ -3884,7 +3902,10 @@ var
SpaceRect, DrawRect: TRect; SpaceRect, DrawRect: TRect;
Node: TTreeNode; Node: TTreeNode;
begin begin
if tvsUpdating in FStates then exit; if [tvsUpdating,tvsPainting]*FStates<>[] then exit;
Include(FStates,tvsPainting);
if (tvoAutoItemHeight in fOptions) then
UpdateDefaultItemHeight;
UpdateScrollbars; UpdateScrollbars;
with Canvas do begin with Canvas do begin
if Assigned(FOnCustomDraw) or Assigned(FOnAdvancedCustomDraw) then begin if Assigned(FOnCustomDraw) or Assigned(FOnAdvancedCustomDraw) then begin
@ -3939,6 +3960,7 @@ begin
if not CustomDraw(DrawRect,cdPostPaint) then exit; if not CustomDraw(DrawRect,cdPostPaint) then exit;
end; end;
end; end;
Exclude(FStates,tvsPainting);
end; end;
procedure TCustomTreeView.DoPaintNode(Node: TTreeNode); procedure TCustomTreeView.DoPaintNode(Node: TTreeNode);

View File

@ -49,12 +49,17 @@ uses
CompilerOptions, Forms, FileCtrl, IDEProcs, ComponentReg; CompilerOptions, Forms, FileCtrl, IDEProcs, ComponentReg;
type type
TLazPackageID = class;
TLazPackage = class; TLazPackage = class;
TLazPackageID = class;
TPkgFile = class; TPkgFile = class;
TBasePackageEditor = class; TBasePackageEditor = class;
TPkgDependency = class; TPkgDependency = class;
TIteratePackagesEvent =
procedure(APackage: TLazPackageID) of object;
TGetAllRequiredPackagesEvent =
procedure(FirstDependency: TPkgDependency; var List: TList) of object;
{ TPkgComponent } { TPkgComponent }
@ -247,7 +252,24 @@ type
procedure SetLazPackage(const AValue: TLazPackage); procedure SetLazPackage(const AValue: TLazPackage);
procedure SetModified(const NewValue: boolean); override; procedure SetModified(const NewValue: boolean); override;
public public
constructor Create(ThePackage: TLazPackage);
procedure Clear; override; procedure Clear; override;
procedure GetInheritedCompilerOptions(var OptionsList: TList); override;
function GetOwnerName: string; override;
public
property LazPackage: TLazPackage read FLazPackage write SetLazPackage;
end;
{ TPkgAdditinoalCompilerOptions }
TPkgAdditionalCompilerOptions = class(TAdditionalCompilerOptions)
private
FLazPackage: TLazPackage;
procedure SetLazPackage(const AValue: TLazPackage);
public
constructor Create(ThePackage: TLazPackage);
function GetOwnerName: string; override;
public public
property LazPackage: TLazPackage read FLazPackage write SetLazPackage; property LazPackage: TLazPackage read FLazPackage write SetLazPackage;
end; end;
@ -311,7 +333,6 @@ type
TLazPackage = class(TLazPackageID) TLazPackage = class(TLazPackageID)
private private
FAddDependCompilerOptions: TAdditionalCompilerOptions;
FAuthor: string; FAuthor: string;
FAutoCreated: boolean; FAutoCreated: boolean;
FAutoInstall: TPackageInstallType; FAutoInstall: TPackageInstallType;
@ -334,7 +355,7 @@ type
FReadOnly: boolean; FReadOnly: boolean;
FRemovedFiles: TList; // TList of TPkgFile FRemovedFiles: TList; // TList of TPkgFile
FRegistered: boolean; FRegistered: boolean;
FUsageOptions: TAdditionalCompilerOptions; FUsageOptions: TPkgAdditionalCompilerOptions;
function GetAutoIncrementVersionOnBuild: boolean; function GetAutoIncrementVersionOnBuild: boolean;
function GetAutoUpdate: boolean; function GetAutoUpdate: boolean;
function GetComponentCount: integer; function GetComponentCount: integer;
@ -407,9 +428,9 @@ type
procedure RemoveUsedByDependency(Dependency: TPkgDependency); procedure RemoveUsedByDependency(Dependency: TPkgDependency);
procedure ChangeID(const NewName: string; NewVersion: TPkgVersion); procedure ChangeID(const NewName: string; NewVersion: TPkgVersion);
procedure UpdateEditorRect; procedure UpdateEditorRect;
procedure GetAllRequiredPackages(var List: TList);
procedure GetInheritedCompilerOptions(var OptionsList: TList);
public public
property AddDependCompilerOptions: TAdditionalCompilerOptions
read FAddDependCompilerOptions;
property Author: string read FAuthor write SetAuthor; property Author: string read FAuthor write SetAuthor;
property AutoCreated: boolean read FAutoCreated write SetAutoCreated; property AutoCreated: boolean read FAutoCreated write SetAutoCreated;
property AutoIncrementVersionOnBuild: boolean property AutoIncrementVersionOnBuild: boolean
@ -439,7 +460,7 @@ type
property ReadOnly: boolean read FReadOnly write SetReadOnly; property ReadOnly: boolean read FReadOnly write SetReadOnly;
property RemovedFilesCount: integer read GetRemovedCount; property RemovedFilesCount: integer read GetRemovedCount;
property RemovedFiles[Index: integer]: TPkgFile read GetRemovedFiles; property RemovedFiles[Index: integer]: TPkgFile read GetRemovedFiles;
property UsageOptions: TAdditionalCompilerOptions property UsageOptions: TPkgAdditionalCompilerOptions
read FUsageOptions; read FUsageOptions;
end; end;
@ -476,6 +497,8 @@ var
// All TPkgDependency are added to this AVL tree (sorted for names, not version!) // All TPkgDependency are added to this AVL tree (sorted for names, not version!)
PackageDependencies: TAVLTree; // tree of TPkgDependency PackageDependencies: TAVLTree; // tree of TPkgDependency
OnGetAllRequiredPackages: TGetAllRequiredPackagesEvent;
function PkgFileTypeIdentToType(const s: string): TPkgFileType; function PkgFileTypeIdentToType(const s: string): TPkgFileType;
function LazPackageTypeIdentToType(const s: string): TLazPackageType; function LazPackageTypeIdentToType(const s: string): TLazPackageType;
@ -1372,15 +1395,13 @@ end;
constructor TLazPackage.Create; constructor TLazPackage.Create;
begin begin
inherited Create; inherited Create;
FAddDependCompilerOptions:=TAdditionalCompilerOptions.Create;
FComponents:=TList.Create; FComponents:=TList.Create;
FFiles:=TList.Create; FFiles:=TList.Create;
FRemovedFiles:=TList.Create; FRemovedFiles:=TList.Create;
FCompilerOptions:=TPkgCompilerOptions.Create; FCompilerOptions:=TPkgCompilerOptions.Create(Self);
FCompilerOptions.LazPackage:=Self;
FUsageOptions:=TAdditionalCompilerOptions.Create;
FInstalled:=pitNope; FInstalled:=pitNope;
FAutoInstall:=pitNope; FAutoInstall:=pitNope;
FUsageOptions:=TPkgAdditionalCompilerOptions.Create(Self);
FFlags:=[lpfAutoIncrementVersionOnBuild,lpfAutoUpdate]; FFlags:=[lpfAutoIncrementVersionOnBuild,lpfAutoUpdate];
end; end;
@ -1392,7 +1413,6 @@ begin
FreeAndNil(FComponents); FreeAndNil(FComponents);
FreeAndNil(FCompilerOptions); FreeAndNil(FCompilerOptions);
FreeAndNil(FUsageOptions); FreeAndNil(FUsageOptions);
FreeAndNil(FAddDependCompilerOptions);
inherited Destroy; inherited Destroy;
end; end;
@ -1426,7 +1446,6 @@ begin
FPackageType:=lptRunAndDesignTime; FPackageType:=lptRunAndDesignTime;
FRegistered:=false; FRegistered:=false;
FUsageOptions.Clear; FUsageOptions.Clear;
FAddDependCompilerOptions.Clear;
end; end;
procedure TLazPackage.LockModified; procedure TLazPackage.LockModified;
@ -1522,8 +1541,6 @@ begin
LoadPkgDependencyList(Path+'RequiredPkgs/', LoadPkgDependencyList(Path+'RequiredPkgs/',
FFirstRequiredDependency,pdlRequires); FFirstRequiredDependency,pdlRequires);
FUsageOptions.LoadFromXMLConfig(XMLConfig,Path+'UsageOptions/'); FUsageOptions.LoadFromXMLConfig(XMLConfig,Path+'UsageOptions/');
FAddDependCompilerOptions.LoadFromXMLConfig(
XMLConfig,Path+'AddDependCompilerOptions/');
LoadRect(XMLConfig,Path+'EditorRect/',fEditorRect); LoadRect(XMLConfig,Path+'EditorRect/',fEditorRect);
Modified:=false; Modified:=false;
UnlockModified; UnlockModified;
@ -1583,8 +1600,6 @@ begin
SavePkgDependencyList(Path+'RequiredPkgs/', SavePkgDependencyList(Path+'RequiredPkgs/',
FFirstRequiredDependency,pdlRequires); FFirstRequiredDependency,pdlRequires);
FUsageOptions.SaveToXMLConfig(XMLConfig,Path+'UsageOptions/'); FUsageOptions.SaveToXMLConfig(XMLConfig,Path+'UsageOptions/');
FAddDependCompilerOptions.SaveToXMLConfig(
XMLConfig,Path+'AddDependCompilerOptions/');
SaveRect(XMLConfig,Path+'EditorRect/',fEditorRect); SaveRect(XMLConfig,Path+'EditorRect/',fEditorRect);
Modified:=false; Modified:=false;
end; end;
@ -1889,6 +1904,32 @@ begin
Editor.Left+Editor.Width,Editor.Top+Editor.Height); Editor.Left+Editor.Width,Editor.Top+Editor.Height);
end; end;
procedure TLazPackage.GetAllRequiredPackages(var List: TList);
begin
if Assigned(OnGetAllRequiredPackages) then
OnGetAllRequiredPackages(FirstRequiredDependency,List);
end;
procedure TLazPackage.GetInheritedCompilerOptions(var OptionsList: TList);
var
PkgList: TList; // list of TLazPackage
Cnt: Integer;
i: Integer;
begin
PkgList:=nil;
GetAllRequiredPackages(PkgList);
if PkgList<>nil then begin
OptionsList:=TList.Create;
Cnt:=PkgList.Count;
for i:=0 to Cnt-1 do begin
writeln('TLazPackage.GetInheritedCompilerOptions A ');
OptionsList.Add(TLazPackage(PkgList[i]).UsageOptions);
end;
end else begin
OptionsList:=nil;
end;
end;
{ TPkgComponent } { TPkgComponent }
procedure TPkgComponent.SetPkgFile(const AValue: TPkgFile); procedure TPkgComponent.SetPkgFile(const AValue: TPkgFile);
@ -2041,11 +2082,49 @@ begin
if Modified and (LazPackage<>nil) then LazPackage.Modified:=true; if Modified and (LazPackage<>nil) then LazPackage.Modified:=true;
end; end;
constructor TPkgCompilerOptions.Create(ThePackage: TLazPackage);
begin
inherited Create(ThePackage);
fLazPackage:=ThePackage;
end;
procedure TPkgCompilerOptions.Clear; procedure TPkgCompilerOptions.Clear;
begin begin
inherited Clear; inherited Clear;
end; end;
procedure TPkgCompilerOptions.GetInheritedCompilerOptions(var OptionsList: TList
);
begin
LazPackage.GetInheritedCompilerOptions(OptionsList);
end;
function TPkgCompilerOptions.GetOwnerName: string;
begin
writeln('TPkgCompilerOptions.GetOwnerName ',HexStr(Cardinal(Self),8),' ',HexStr(Cardinal(fLazPackage),8));
Result:=LazPackage.IDAsString;
end;
{ TPkgAdditionalCompilerOptions }
procedure TPkgAdditionalCompilerOptions.SetLazPackage(const AValue: TLazPackage
);
begin
if FLazPackage=AValue then exit;
FLazPackage:=AValue;
end;
constructor TPkgAdditionalCompilerOptions.Create(ThePackage: TLazPackage);
begin
inherited Create(ThePackage);
FLazPackage:=ThePackage;
end;
function TPkgAdditionalCompilerOptions.GetOwnerName: string;
begin
Result:=LazPackage.IDAsString;
end;
initialization initialization
PackageDependencies:=TAVLTree.Create(@ComparePkgDependencyNames); PackageDependencies:=TAVLTree.Create(@ComparePkgDependencyNames);

View File

@ -42,9 +42,6 @@ uses
PackageDefs, LazConf; PackageDefs, LazConf;
type type
TIteratePackagesEvent =
procedure(APackage: TLazPackageID) of object;
{ TPackageLink } { TPackageLink }

View File

@ -142,6 +142,7 @@ type
procedure AddStaticBasePackages; procedure AddStaticBasePackages;
procedure ClosePackage(APackage: TLazPackage); procedure ClosePackage(APackage: TLazPackage);
procedure MarkNeededPackages; procedure MarkNeededPackages;
procedure MarkAllPackagesAsNotVisited;
procedure CloseUnneededPackages; procedure CloseUnneededPackages;
procedure ChangePackageID(APackage: TLazPackage; procedure ChangePackageID(APackage: TLazPackage;
const NewName: string; NewVersion: TPkgVersion; const NewName: string; NewVersion: TPkgVersion;
@ -165,6 +166,8 @@ type
Event: TIteratePackagesEvent); Event: TIteratePackagesEvent);
procedure IteratePackagesSorted(Flags: TFindPackageFlags; procedure IteratePackagesSorted(Flags: TFindPackageFlags;
Event: TIteratePackagesEvent); Event: TIteratePackagesEvent);
procedure GetAllRequiredPackages(FirstDependency: TPkgDependency;
var List: TList);
public public
property AbortRegistration: boolean read FAbortRegistration property AbortRegistration: boolean read FAbortRegistration
write SetAbortRegistration; write SetAbortRegistration;
@ -287,6 +290,7 @@ end;
constructor TLazPackageGraph.Create; constructor TLazPackageGraph.Create;
begin begin
OnGetAllRequiredPackages:=@GetAllRequiredPackages;
FTree:=TAVLTree.Create(@CompareLazPackageID); FTree:=TAVLTree.Create(@CompareLazPackageID);
FItems:=TList.Create; FItems:=TList.Create;
end; end;
@ -299,6 +303,8 @@ begin
RegisterComponentsProc:=nil; RegisterComponentsProc:=nil;
if RegisterNoIconProc=@RegisterNoIconGlobalHandler then if RegisterNoIconProc=@RegisterNoIconGlobalHandler then
RegisterNoIconProc:=nil; RegisterNoIconProc:=nil;
if OnGetAllRequiredPackages=@GetAllRequiredPackages then
OnGetAllRequiredPackages:=nil;
Clear; Clear;
FItems.Free; FItems.Free;
FTree.Free; FTree.Free;
@ -790,7 +796,7 @@ begin
AddFile('calendar.pp','Calendar',pftUnit,[pffHasRegisterProc],cpLCL); AddFile('calendar.pp','Calendar',pftUnit,[pffHasRegisterProc],cpLCL);
// add unit paths // add unit paths
AddDependCompilerOptions.UnitPath:= UsageOptions.UnitPath:=
'$(LazarusDir)/lcl/units;$(LazarusDir)/lcl/units/$(LCLWidgetType)'; '$(LazarusDir)/lcl/units;$(LazarusDir)/lcl/units/$(LCLWidgetType)';
// add requirements // add requirements
@ -857,7 +863,7 @@ var
Dependency: TPkgDependency; Dependency: TPkgDependency;
begin begin
if Count=0 then exit; if Count=0 then exit;
// mark all packages as unneeded and not visited // mark all packages as unneeded
for i:=0 to FItems.Count-1 do begin for i:=0 to FItems.Count-1 do begin
Pkg:=TLazPackage(FItems[i]); Pkg:=TLazPackage(FItems[i]);
Pkg.Flags:=Pkg.Flags-[lpfNeeded]; Pkg.Flags:=Pkg.Flags-[lpfNeeded];
@ -898,6 +904,18 @@ begin
FreeMem(PkgStack); FreeMem(PkgStack);
end; end;
procedure TLazPackageGraph.MarkAllPackagesAsNotVisited;
var
i: Integer;
Pkg: TLazPackage;
begin
// mark all packages as not visited
for i:=FItems.Count-1 downto 0 do begin
Pkg:=TLazPackage(FItems[i]);
Pkg.Flags:=Pkg.Flags-[lpfVisited];
end;
end;
procedure TLazPackageGraph.CloseUnneededPackages; procedure TLazPackageGraph.CloseUnneededPackages;
var var
i: Integer; i: Integer;
@ -1190,6 +1208,53 @@ begin
end; end;
end; end;
procedure TLazPackageGraph.GetAllRequiredPackages(
FirstDependency: TPkgDependency; var List: TList);
var
Pkg: TLazPackage;
PkgStack: PLazPackage;
StackPtr: Integer;
procedure PutPackagesFromDependencyListOnStack(CurDependency: TPkgDependency);
var
RequiredPackage: TLazPackage;
begin
while CurDependency<>nil do begin
if CurDependency.LoadPackageResult=lprSuccess then begin
RequiredPackage:=CurDependency.RequiredPackage;
if (not (lpfVisited in RequiredPackage.Flags)) then begin
RequiredPackage.Flags:=RequiredPackage.Flags+[lpfVisited];
PkgStack[StackPtr]:=RequiredPackage;
inc(StackPtr);
end;
end;
CurDependency:=CurDependency.NextRequiresDependency;
end;
end;
begin
// initialize
MarkAllPackagesAsNotVisited;
// create stack
GetMem(PkgStack,SizeOf(Pointer)*Count);
StackPtr:=0;
// put dependency list on stack
PutPackagesFromDependencyListOnStack(FirstDependency);
// mark all required packages
while StackPtr>0 do begin
// get required package from stack
dec(StackPtr);
Pkg:=PkgStack[StackPtr];
// add package to list
if List=nil then List:=TList.Create;
List.Add(Pkg);
// put all required packages on stack
PutPackagesFromDependencyListOnStack(Pkg.FirstRequiredDependency);
end;
// clean up
FreeMem(PkgStack);
end;
initialization initialization
PackageGraph:=nil; PackageGraph:=nil;

View File

@ -378,7 +378,7 @@ begin
// Usage page // Usage page
LazPackage.PackageType:=NewPackageType; LazPackage.PackageType:=NewPackageType;
LazPackage.AutoUpdate:=(UpdateRadioGroup.ItemIndex=0); LazPackage.AutoUpdate:=(UpdateRadioGroup.ItemIndex=0);
with LazPackage.AddDependCompilerOptions do begin with LazPackage.UsageOptions do begin
UnitPath:=UnitPathEdit.Text; UnitPath:=UnitPathEdit.Text;
IncludePath:=IncludePathEdit.Text; IncludePath:=IncludePathEdit.Text;
ObjectPath:=ObjectPathEdit.Text; ObjectPath:=ObjectPathEdit.Text;
@ -817,12 +817,14 @@ begin
else else
UpdateRadioGroup.ItemIndex:=1; UpdateRadioGroup.ItemIndex:=1;
UnitPathEdit.Text:=LazPackage.AddDependCompilerOptions.UnitPath; with LazPackage.UsageOptions do begin
IncludePathEdit.Text:=LazPackage.AddDependCompilerOptions.IncludePath; UnitPathEdit.Text:=UnitPath;
ObjectPathEdit.Text:=LazPackage.AddDependCompilerOptions.ObjectPath; IncludePathEdit.Text:=IncludePath;
LibraryPathEdit.Text:=LazPackage.AddDependCompilerOptions.LibraryPath; ObjectPathEdit.Text:=ObjectPath;
LinkerOptionsMemo.Text:=LazPackage.AddDependCompilerOptions.LinkerOptions; LibraryPathEdit.Text:=LibraryPath;
CustomOptionsMemo.Text:=LazPackage.AddDependCompilerOptions.CustomOptions; LinkerOptionsMemo.Text:=LinkerOptions;
CustomOptionsMemo.Text:=CustomOptions;
end;
end; end;
procedure TPackageOptionsDialog.ReadPkgTypeFromPackage; procedure TPackageOptionsDialog.ReadPkgTypeFromPackage;