h2paswizard: implemented merging multiple C header files into one unit

git-svn-id: trunk@10781 -
This commit is contained in:
mattias 2007-03-22 16:11:40 +00:00
parent bb7d1e7f50
commit 14b348460c
7 changed files with 765 additions and 311 deletions

View File

@ -151,20 +151,29 @@ type
function Execute(aText: TIDETextConverter): TModalResult; override;
end;
TH2PasFile = class;
{ TH2PasFileCInclude }
TH2PasFileCInclude = class
private
FFilename: string;
FH2PasFile: TH2PasFile;
FOwner: TH2PasFile;
FSrcFilename: string;
FSrcPos: TPoint;
procedure SetFilename(const AValue: string);
procedure SetH2PasFile(const AValue: TH2PasFile);
procedure SetSrcFilename(const AValue: string);
procedure SetSrcPos(const AValue: TPoint);
public
constructor Create(TheOwner: TH2PasFile);
destructor Destroy; override;
property Owner: TH2PasFile read FOwner;
property SrcFilename: string read FSrcFilename write SetSrcFilename;
property SrcPos: TPoint read FSrcPos write SetSrcPos;
property Filename: string read FFilename write SetFilename;
property H2PasFile: TH2PasFile read FH2PasFile write SetH2PasFile;
end;
TH2PasProject = class;
@ -177,21 +186,30 @@ type
FCIncludes: TFPList; // list of TH2PasFileCInclude
FCIncludesValid: boolean;
FCIncludesFileAge: TDateTime;
FCIncludedBy: TFPList; // list of TH2PasFileCInclude
FEnabled: boolean;
FFilename: string;
FMerge: boolean;
FModified: boolean;
FProject: TH2PasProject;
function GetCIncludeCount: integer;
function GetCIncludedBy(Index: integer): TH2PasFileCInclude;
function GetCIncludedByCount: integer;
function GetCIncludes(Index: integer): TH2PasFileCInclude;
procedure SetEnabled(const AValue: boolean);
procedure SetFilename(const AValue: string);
procedure SetMerge(const AValue: boolean);
procedure SetModified(const AValue: boolean);
procedure SetProject(const AValue: TH2PasProject);
procedure SearchCIncFilenames;
procedure InternalAddCIncludedBy(CIncludedBy: TH2PasFileCInclude);
procedure InternalRemoveCIncludedBy(CIncludedBy: TH2PasFileCInclude);
public
constructor Create;
destructor Destroy; override;
procedure Clear;
procedure ClearIncludedByReferences;
procedure ClearCIncludes;
procedure Assign(Source: TPersistent); override;
function IsEqual(AFile: TH2PasFile): boolean;
procedure Load(Config: TConfigStorage);
@ -202,6 +220,7 @@ type
function GetH2PasParameters(const InputFilename: string = ''): string;
function ReadCIncludes(ForceUpdate: boolean): TModalResult;
function CIncludesValid: boolean;
function FindCIncludedByWithOwner(ByOwner: TH2PasFile): TH2PasFileCInclude;
public
property Project: TH2PasProject read FProject write SetProject;
property Filename: string read FFilename write SetFilename;
@ -209,6 +228,9 @@ type
property Modified: boolean read FModified write SetModified;
property CIncludeCount: integer read GetCIncludeCount;
property CIncludes[Index: integer]: TH2PasFileCInclude read GetCIncludes;
property CIncludedByCount: integer read GetCIncludedByCount;
property CIncludedBy[Index: integer]: TH2PasFileCInclude read GetCIncludedBy;
property Merge: boolean read FMerge write SetMerge;
end;
{ TH2PasProject }
@ -291,6 +313,7 @@ type
procedure AddDefaultPostH2PasTools;
function SearchIncludedCHeaderFile(aFile: TH2PasFile;
const SrcFilename: string): string;
function ReadAllCIncludes(ForceUpdate: boolean): TModalResult;
public
property CHeaderFileCount: integer read GetCHeaderFileCount;
property CHeaderFiles[Index: integer]: TH2PasFile read GetCHeaderFiles;
@ -369,6 +392,9 @@ type
procedure SaveProject(const Filename: string);
function Execute: TModalResult;
function ConvertFile(AFile: TH2PasFile): TModalResult;
function CheckMergeDependencies: TModalResult;
function MergeIncludeFiles(AFile: TH2PasFile;
TextConverter: TIDETextConverter): TModalResult;
function GetH2PasFilename: string;
function FindH2PasErrorMessage: integer;
function GetH2PasErrorPostion(const Line: string;
@ -404,6 +430,13 @@ begin
Modified:=true;
end;
procedure TH2PasFile.SetMerge(const AValue: boolean);
begin
if FMerge=AValue then exit;
FMerge:=AValue;
Modified:=true;
end;
procedure TH2PasFile.SetEnabled(const AValue: boolean);
begin
if FEnabled=AValue then exit;
@ -419,6 +452,19 @@ begin
Result:=FCIncludes.Count;
end;
function TH2PasFile.GetCIncludedBy(Index: integer): TH2PasFileCInclude;
begin
Result:=TH2PasFileCInclude(FCIncludedBy[Index]);
end;
function TH2PasFile.GetCIncludedByCount: integer;
begin
if (FCIncludedBy=nil) then
Result:=0
else
Result:=FCIncludedBy.Count;
end;
function TH2PasFile.GetCIncludes(Index: integer): TH2PasFileCInclude;
begin
Result:=TH2PasFileCInclude(FCIncludes[Index]);
@ -456,10 +502,26 @@ begin
for i:=0 to FCIncludes.Count-1 do begin
IncFile:=CIncludes[i];
IncFile.Filename:=
Project.SearchIncludedCHeaderFile(Self,IncFile.SrcFilename);
Project.SearchIncludedCHeaderFile(Self,IncFile.SrcFilename);
IncFile.H2PasFile:=Project.CHeaderFileWithFilename(IncFile.Filename);
end;
end;
procedure TH2PasFile.InternalAddCIncludedBy(CIncludedBy: TH2PasFileCInclude);
begin
if FCIncludedBy=nil then
FCIncludedBy:=TFPList.Create;
FCIncludedBy.Add(CIncludedBy);
//DebugLn(['TH2PasFile.InternalAddCIncludedBy ',Filename,' included by ',CIncludedBy.Filename]);
end;
procedure TH2PasFile.InternalRemoveCIncludedBy(CIncludedBy: TH2PasFileCInclude
);
begin
if FCIncludedBy=nil then exit;
FCIncludedBy.Remove(CIncludedBy);
end;
constructor TH2PasFile.Create;
begin
Clear;
@ -471,6 +533,7 @@ begin
Project:=nil;
end;
Clear;
ClearIncludedByReferences;
inherited Destroy;
end;
@ -479,8 +542,37 @@ begin
FEnabled:=true;
FFilename:='';
FModified:=false;
FMerge:=false;
ClearCIncludes;
end;
procedure TH2PasFile.ClearIncludedByReferences;
var
i: Integer;
IncFile: TH2PasFileCInclude;
begin
if FCIncludedBy=nil then exit;
for i:=FCIncludedBy.Count-1 downto 0 do begin
IncFile:=TH2PasFileCInclude(FCIncludedBy[i]);
if IncFile=nil then continue;
IncFile.FH2PasFile:=nil;
end;
FCIncludedBy.Clear;
end;
procedure TH2PasFile.ClearCIncludes;
var
i: Integer;
IncFile: TH2PasFileCInclude;
begin
FCIncludesValid:=false;
FreeAndNil(FCIncludes);
if FCIncludes<>nil then begin
for i:=0 to FCIncludes.Count-1 do begin
IncFile:=TH2PasFileCInclude(FCIncludes[i]);
IncFile.Free;
end;
FreeAndNil(FCIncludes);
end;
end;
procedure TH2PasFile.Assign(Source: TPersistent);
@ -509,6 +601,7 @@ end;
procedure TH2PasFile.Load(Config: TConfigStorage);
begin
FEnabled:=Config.GetValue('Enabled/Value',true);
FMerge:=Config.GetValue('Merge/Value',false);
FFilename:=Config.GetValue('Filename/Value','');
if Project<>nil then
FFilename:=Project.NormalizeFilename(FFilename);
@ -521,6 +614,7 @@ var
AFilename: String;
begin
Config.SetDeleteValue('Enabled/Value',Enabled,true);
Config.SetDeleteValue('Merge/Value',Merge,true);
AFilename:=FFilename;
if Project<>nil then
AFilename:=Project.ShortenFilename(AFilename);
@ -590,9 +684,10 @@ begin
if (not ForceUpdate) and CIncludesValid then exit(mrOk);
Result:=mrCancel;
if not FileExistsCached(Filename) then exit;
ClearCIncludes;
FCIncludesFileAge:=FileAge(Filename);
FCIncludesValid:=true;
DebugLn(['TH2PasFile.ReadCIncludes Filename="',Filename,'"']);
//DebugLn(['TH2PasFile.ReadCIncludes Filename="',Filename,'"']);
try
sl:=TStringList.Create;
try
@ -603,9 +698,10 @@ begin
if SrcFilename='' then continue;
// add new include
if FCIncludes=nil then FCIncludes:=TFPList.Create;
Item:=TH2PasFileCInclude.Create;
Item:=TH2PasFileCInclude.Create(Self);
Item.SrcFilename:=SrcFilename;
Item.SrcPos:=Point(1,i);
//DebugLn(['TH2PasFile.ReadCIncludes Self=',Filename,' include=',SrcFilename,' ',dbgs(Item.SrcPos)]);
FCIncludes.Add(Item);
end;
finally
@ -632,6 +728,20 @@ begin
Result:=true;
end;
function TH2PasFile.FindCIncludedByWithOwner(ByOwner: TH2PasFile
): TH2PasFileCInclude;
var
i: Integer;
begin
if FCIncludedBy<>nil then begin
for i:=0 to CIncludedByCount-1 do begin
Result:=CIncludedBy[i];
if Result.Owner=ByOwner then exit;
end;
end;
Result:=nil;
end;
{ TH2PasProject }
function TH2PasProject.GetCHeaderFileCount: integer;
@ -1261,6 +1371,17 @@ begin
Result:='';
end;
function TH2PasProject.ReadAllCIncludes(ForceUpdate: boolean): TModalResult;
var
i: Integer;
begin
for i:=0 to CHeaderFileCount-1 do begin
Result:=CHeaderFiles[i].ReadCIncludes(ForceUpdate);
if Result=mrAbort then exit;
end;
Result:=mrOk;
end;
{ TH2PasConverter }
procedure TH2PasConverter.OnParseH2PasLine(Sender: TObject;
@ -1480,10 +1601,18 @@ begin
FExecuting:=true;
try
FLastUsedFilename:='';
CurResult:=CheckMergeDependencies;
if CurResult=mrAbort then begin
DebugLn(['TH2PasConverter.Execute aborted because merging not possible']);
exit(mrAbort);
end;
// convert every c header file
for i:=0 to Project.CHeaderFileCount-1 do begin
AFile:=Project.CHeaderFiles[i];
if not AFile.Enabled then continue;
if AFile.Merge then continue;
CurResult:=ConvertFile(AFile);
if CurResult=mrAbort then begin
DebugLn(['TH2PasConverter.Execute aborted on file ',AFile.Filename]);
@ -1506,7 +1635,7 @@ var
begin
Result:=mrCancel;
FLastUsedFilename:='';
// check if file exists
InputFilename:=AFile.Filename;
if not FileExistsCached(InputFilename) then begin
@ -1527,13 +1656,20 @@ begin
mtError,[mbCancel,mbAbort],'');
exit;
end;
TextConverter.Filename:=TempCHeaderFilename;
FLastUsedFilename:=TextConverter.Filename;
DebugLn(['TH2PasConverter.ConvertFile TempCHeaderFilename="',TempCHeaderFilename,'" CurrentType=',ord(TextConverter.CurrentType),' FileSize=',FileSize(TempCHeaderFilename)]);
// merge files
TextConverter.LoadFromFile(InputFilename);
Result:=MergeIncludeFiles(AFile,TextConverter);
if Result<>mrOk then begin
DebugLn(['TH2PasConverter.ConvertFile Failed merging include files in ',TempCHeaderFilename]);
exit;
end;
// run converters for .h file to make it compatible for h2pas
TextConverter.LoadFromFile(InputFilename);
Result:=TextConverter.Execute(Project.PreH2PasTools);
if Result<>mrOk then begin
DebugLn(['TH2PasConverter.ConvertFile Failed running Project.PreH2PasTools on ',TempCHeaderFilename]);
@ -1587,6 +1723,141 @@ begin
Result:=mrOk;
end;
function TH2PasConverter.CheckMergeDependencies: TModalResult;
var
CheckedFiles: TFPList;
procedure AddIncludedByFiles(IncludedByFiles: TFPList; CurFile: TH2PasFile);
var
i: Integer;
IncludedBy: TH2PasFile;
begin
if CheckedFiles.IndexOf(CurFile)>=0 then exit;
CheckedFiles.Add(CurFile);
for i:=0 to CurFile.CIncludedByCount-1 do begin
IncludedBy:=CurFile.CIncludedBy[i].Owner;
if IncludedBy.Merge then
AddIncludedByFiles(IncludedByFiles,IncludedBy)
else
if IncludedByFiles.IndexOf(IncludedBy)<0 then
IncludedByFiles.Add(IncludedBy);
end;
end;
var
i: Integer;
CurFile: TH2PasFile;
j: Integer;
IncludedByFiles: TFPList;
Warning: String;
begin
// update graph
Result:=Project.ReadAllCIncludes(true);
if Result=mrAbort then begin
DebugLn(['TH2PasConverter.CheckMergeDependencies aborted reading all include dependencies']);
exit;
end;
Warning:='';
for i:=0 to Project.CHeaderFileCount-1 do begin
CurFile:=Project.CHeaderFiles[i];
if CurFile.Merge then begin
// this file should be merged
// -> check if it is included only once
IncludedByFiles:=TFPList.Create;
CheckedFiles:=TFPList.Create;
AddIncludedByFiles(IncludedByFiles,CurFile);
if IncludedByFiles.Count>1 then begin
// this merged file is included by more than unit
Warning:=Warning
+'Warning: the file "'+Project.ShortenFilename(CurFile.Filename)+'"'#13
+'will be merged into multiple files:'#13;
for j:=0 to IncludedByFiles.Count-1 do begin
if j>0 then
Warning:=Warning+', ';
Warning:=Warning
+Project.ShortenFilename(TH2PasFile(IncludedByFiles[j]).Filename);
end;
Warning:=Warning+#13;
end;
CheckedFiles.Free;
IncludedByFiles.Free;
end;
end;
if Warning<>'' then begin
Result:=MessageDlg('Warning',
'Ambiguous merges:'#13
+Warning,mtWarning,[mbIgnore,mbAbort],0);
if Result<>mrIgnore then exit(mrCancel);
end;
Result:=mrOk;
end;
function TH2PasConverter.MergeIncludeFiles(AFile: TH2PasFile;
TextConverter: TIDETextConverter): TModalResult;
procedure GetMergeFiles(MergedFiles: TFPList; CurFile: TH2PasFile);
var
i: Integer;
CInclude: TH2PasFileCInclude;
IncFile: TH2PasFile;
begin
//DebugLn(['GetMergeFiles CurFile=',CurFile.Filename,' CurFile.CIncludeCount=',CurFile.CIncludeCount]);
for i:=0 to CurFile.CIncludeCount-1 do begin
CInclude:=CurFile.CIncludes[i];
IncFile:=CInclude.H2PasFile;
if IncFile=nil then continue;
//DebugLn(['GetMergeFiles AFile=',AFile.Filename,' CInclude=',CInclude.Filename,' IncFile.Merge=',IncFile.Merge,' ']);
if not IncFile.Merge then continue;
if IncFile=AFile then continue;
if MergedFiles.IndexOf(IncFile)<0 then
MergedFiles.Add(IncFile);
GetMergeFiles(MergedFiles,IncFile);
end;
end;
var
MergedFiles: TFPList;// list of TH2PasFile
i: Integer;
IncludeFile: TH2PasFile;
fs: TFileStream;
s: string;
begin
Result:=mrCancel;
MergedFiles:=TFPList.Create;
try
GetMergeFiles(MergedFiles,AFile);
for i:=0 to MergedFiles.Count-1 do begin
IncludeFile:=TH2PasFile(MergedFiles[i]);
DebugLn(['TH2PasConverter.MergeIncludeFiles merging file '
,'"'+IncludeFile.Filename+'"'+' into "'+TextConverter.Filename+'"']);
try
fs:=TFileStream.Create(IncludeFile.Filename,fmOpenRead);
try
SetLength(s,fs.Size);
if s<>'' then begin
fs.Read(s[1],length(s));
TextConverter.Source:=TextConverter.Source+LineEnding+s;
end;
finally
fs.Free;
end;
except
on E: Exception do begin
MessageDlg('Error','Unable to merge file "'+IncludeFile.Filename+'"'
+' into "'+TextConverter.Filename+'"',mtError,[mbCancel],0);
exit;
end;
end;
end;
Result:=mrOk;
finally
MergedFiles.Free;
end;
end;
function TH2PasConverter.GetH2PasFilename: string;
begin
Result:=FindDefaultExecutablePath(h2pasFilename);
@ -2762,6 +3033,16 @@ begin
FFilename:=AValue;
end;
procedure TH2PasFileCInclude.SetH2PasFile(const AValue: TH2PasFile);
begin
if FH2PasFile=AValue then exit;
if (FH2PasFile<>nil) then
FH2PasFile.InternalRemoveCIncludedBy(Self);
FH2PasFile:=AValue;
if (FH2PasFile<>nil) then
FH2PasFile.InternalAddCIncludedBy(Self);
end;
procedure TH2PasFileCInclude.SetSrcFilename(const AValue: string);
begin
if FSrcFilename=AValue then exit;
@ -2774,4 +3055,15 @@ begin
FSrcPos:=AValue;
end;
constructor TH2PasFileCInclude.Create(TheOwner: TH2PasFile);
begin
FOwner:=TheOwner;
end;
destructor TH2PasFileCInclude.Destroy;
begin
H2PasFile:=nil;
inherited Destroy;
end;
end.

View File

@ -1,10 +1,10 @@
object H2PasDialog: TH2PasDialog
Left = 245
Height = 501
Height = 549
Top = 205
Width = 785
HorzScrollBar.Page = 784
VertScrollBar.Page = 500
VertScrollBar.Page = 548
ActiveControl = ConvertButton
Caption = 'H2PasDialog'
KeyPreview = True
@ -15,9 +15,8 @@ object H2PasDialog: TH2PasDialog
Position = poDesktopCenter
object MainPageControl: TPageControl
AnchorSideBottom.Control = OpenSettingsButton
Height = 465
Height = 509
Width = 785
TabStop = True
ActivePage = FilesTabSheet
Align = alTop
Anchors = [akTop, akLeft, akRight, akBottom]
@ -26,17 +25,18 @@ object H2PasDialog: TH2PasDialog
object FilesTabSheet: TTabSheet
Caption = 'FilesTabSheet'
object CHeaderFilesCheckTreeView: TTreeView
Height = 435
Height = 475
Width = 255
Align = alLeft
DefaultItemHeight = 16
DefaultItemHeight = 18
StateImages = FileStateImageList
TabOrder = 0
OnDblClick = CHeaderFilesCheckTreeViewDblClick
OnMouseDown = CHeaderFilesCheckTreeViewMouseDown
OnSelectionChanged = CHeaderFilesCheckTreeViewSelectionChanged
Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips]
end
object AddCHeaderFilesButton: TButton
object AddCHeadersButton: TButton
AnchorSideLeft.Control = CHeaderFilesSplitter1
AnchorSideLeft.Side = asrBottom
Left = 266
@ -45,11 +45,11 @@ object H2PasDialog: TH2PasDialog
Width = 185
BorderSpacing.Left = 6
BorderSpacing.InnerBorder = 4
Caption = 'AddCHeaderFilesButton'
OnClick = AddCHeaderFilesButtonClick
Caption = 'AddCHeadersButton'
OnClick = AddCHeadersButtonClick
TabOrder = 1
end
object DeleteCHeaderFilesButton: TButton
object DeleteCHeadersButton: TButton
AnchorSideLeft.Control = CHeaderFilesSplitter1
AnchorSideLeft.Side = asrBottom
Left = 266
@ -58,11 +58,11 @@ object H2PasDialog: TH2PasDialog
Width = 185
BorderSpacing.Left = 6
BorderSpacing.InnerBorder = 4
Caption = 'DeleteCHeaderFilesButton'
OnClick = DeleteCHeaderFilesButtonClick
Caption = 'DeleteCHeadersButton'
OnClick = DeleteCHeadersButtonClick
TabOrder = 2
end
object EnableAllCHeaderFilesButton: TButton
object EnableAllCHeadersButton: TButton
AnchorSideLeft.Control = CHeaderFilesSplitter1
AnchorSideLeft.Side = asrBottom
Left = 266
@ -71,11 +71,11 @@ object H2PasDialog: TH2PasDialog
Width = 185
BorderSpacing.Left = 6
BorderSpacing.InnerBorder = 4
Caption = 'EnableAllCHeaderFilesButton'
OnClick = EnableAllCHeaderFilesButtonClick
Caption = 'EnableAllCHeadersButton'
OnClick = EnableAllCHeadersButtonClick
TabOrder = 3
end
object DisableAllCHeaderFilesButton: TButton
object DisableAllCHeadersButton: TButton
AnchorSideLeft.Control = CHeaderFilesSplitter1
AnchorSideLeft.Side = asrBottom
Left = 266
@ -84,13 +84,13 @@ object H2PasDialog: TH2PasDialog
Width = 185
BorderSpacing.Left = 6
BorderSpacing.InnerBorder = 4
Caption = 'DisableAllCHeaderFilesButton'
OnClick = DisableAllCHeaderFilesButtonClick
Caption = 'DisableAllCHeadersButton'
OnClick = DisableAllCHeadersButtonClick
TabOrder = 4
end
object CHeaderFilesSplitter1: TSplitter
Left = 255
Height = 435
Height = 475
Width = 5
Beveled = True
end
@ -102,28 +102,19 @@ object H2PasDialog: TH2PasDialog
AnchorSideBottom.Control = FilesTabSheet
AnchorSideBottom.Side = asrBottom
Left = 260
Height = 227
Height = 267
Top = 208
Width = 521
Anchors = [akTop, akLeft, akRight, akBottom]
Caption = 'FileInfoGroupBox'
TabOrder = 5
object FileInfoLabel: TLabel
Left = 8
Height = 13
Top = 1
Width = 73
Caption = 'FileInfoLabel'
Color = clNone
ParentColor = False
end
object AddIncludedCHeaderFilesButton: TButton
AnchorSideBottom.Control = FileInfoGroupBox
AnchorSideBottom.Side = asrBottom
Left = 8
Height = 26
Top = 178
Width = 197
Height = 30
Top = 210
Width = 249
Anchors = [akLeft, akBottom]
AutoSize = True
BorderSpacing.Around = 6
@ -132,12 +123,35 @@ object H2PasDialog: TH2PasDialog
OnClick = AddIncludedCHeaderFilesButtonClick
TabOrder = 0
end
object FileInfoMemo: TMemo
AnchorSideLeft.Control = FileInfoGroupBox
AnchorSideTop.Control = MergeFileCheckBox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = FileInfoGroupBox
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = AddIncludedCHeaderFilesButton
Height = 183
Top = 21
Width = 517
Anchors = [akTop, akLeft, akRight, akBottom]
Color = clNone
ReadOnly = True
TabOrder = 1
end
object MergeFileCheckBox: TCheckBox
Left = 8
Height = 24
Top = -3
Width = 168
Caption = 'MergeFileCheckBox'
TabOrder = 2
end
end
object MoveFileUpButton: TButton
AnchorSideLeft.Control = AddCHeaderFilesButton
AnchorSideTop.Control = DisableAllCHeaderFilesButton
AnchorSideLeft.Control = AddCHeadersButton
AnchorSideTop.Control = DisableAllCHeadersButton
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = AddCHeaderFilesButton
AnchorSideRight.Control = AddCHeadersButton
AnchorSideRight.Side = asrBottom
Left = 266
Height = 25
@ -151,10 +165,10 @@ object H2PasDialog: TH2PasDialog
TabOrder = 6
end
object MoveFileDownButton: TButton
AnchorSideLeft.Control = AddCHeaderFilesButton
AnchorSideLeft.Control = AddCHeadersButton
AnchorSideTop.Control = MoveFileUpButton
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = AddCHeaderFilesButton
AnchorSideRight.Control = AddCHeadersButton
AnchorSideRight.Side = asrBottom
Left = 266
Height = 25
@ -167,11 +181,21 @@ object H2PasDialog: TH2PasDialog
OnClick = MoveFileDownButtonClick
TabOrder = 7
end
object MergeAllCHeadersExceptCurrentButton: TButton
Left = 486
Height = 25
Top = 12
Width = 184
BorderSpacing.InnerBorder = 4
Caption = 'MergeAllCHeadersExceptCurrentButton'
OnClick = MergeAllCHeadersExceptCurrentButtonClick
TabOrder = 8
end
end
object PreH2PasTabSheet: TTabSheet
Caption = 'PreH2PasTabSheet'
object PreH2PasGroupBox: TGroupBox
Height = 435
Height = 475
Width = 781
Align = alClient
Caption = 'PreH2PasGroupBox'
@ -184,9 +208,9 @@ object H2PasDialog: TH2PasDialog
AnchorSideTop.Control = LibnameEdit
AnchorSideTop.Side = asrCenter
Left = 6
Height = 13
Top = 281
Width = 81
Height = 17
Top = 279
Width = 105
BorderSpacing.Top = 10
Caption = 'LibNameLabel'
Color = clNone
@ -196,9 +220,9 @@ object H2PasDialog: TH2PasDialog
AnchorSideTop.Control = OutputExtEdit
AnchorSideTop.Side = asrCenter
Left = 6
Height = 13
Top = 313
Width = 86
Height = 17
Top = 311
Width = 114
Caption = 'OutputExtLabel'
Color = clNone
ParentColor = False
@ -207,9 +231,9 @@ object H2PasDialog: TH2PasDialog
AnchorSideTop.Control = OutputDirEdit
AnchorSideTop.Side = asrCenter
Left = 6
Height = 13
Top = 342
Width = 85
Height = 17
Top = 340
Width = 110
Caption = 'OutputDirLabel'
Color = clNone
ParentColor = False
@ -218,7 +242,7 @@ object H2PasDialog: TH2PasDialog
AnchorSideLeft.Control = LibNameLabel
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Side = asrBottom
Left = 93
Left = 117
Height = 23
Top = 276
Width = 113
@ -232,7 +256,7 @@ object H2PasDialog: TH2PasDialog
AnchorSideLeft.Control = OutputExtLabel
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Side = asrBottom
Left = 98
Left = 126
Height = 23
Top = 308
Width = 80
@ -247,7 +271,7 @@ object H2PasDialog: TH2PasDialog
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = OutputExtEdit
AnchorSideTop.Side = asrBottom
Left = 97
Left = 122
Height = 23
Top = 337
Width = 397
@ -263,7 +287,7 @@ object H2PasDialog: TH2PasDialog
AnchorSideTop.Control = OutputDirEdit
AnchorSideBottom.Control = OutputDirEdit
AnchorSideBottom.Side = asrBottom
Left = 494
Left = 519
Height = 23
Top = 337
Width = 32
@ -296,7 +320,7 @@ object H2PasDialog: TH2PasDialog
object PostH2PasTabSheet: TTabSheet
Caption = 'PostH2PasTabSheet'
object PostH2PasGroupBox: TGroupBox
Height = 435
Height = 475
Width = 781
Align = alClient
Caption = 'PostH2PasGroupBox'
@ -383,9 +407,9 @@ object H2PasDialog: TH2PasDialog
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 5
Height = 26
Top = 470
Width = 124
Height = 30
Top = 514
Width = 161
Anchors = [akLeft, akBottom]
AutoSize = True
BorderSpacing.Around = 5
@ -399,10 +423,10 @@ object H2PasDialog: TH2PasDialog
AnchorSideLeft.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 134
Height = 26
Top = 470
Width = 122
Left = 171
Height = 30
Top = 514
Width = 158
Anchors = [akLeft, akBottom]
AutoSize = True
BorderSpacing.Around = 5
@ -415,10 +439,10 @@ object H2PasDialog: TH2PasDialog
AnchorSideLeft.Control = SaveSettingsButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = OpenSettingsButton
Left = 271
Height = 26
Top = 470
Width = 93
Left = 344
Height = 30
Top = 514
Width = 119
AutoSize = True
BorderSpacing.Left = 15
BorderSpacing.InnerBorder = 4
@ -431,10 +455,10 @@ object H2PasDialog: TH2PasDialog
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 699
Height = 26
Top = 470
Width = 81
Left = 677
Height = 30
Top = 514
Width = 103
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Around = 5
@ -447,10 +471,10 @@ object H2PasDialog: TH2PasDialog
AnchorSideLeft.Control = ConvertButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = OpenSettingsButton
Left = 370
Height = 26
Top = 470
Width = 144
Left = 469
Height = 30
Top = 514
Width = 183
AutoSize = True
BorderSpacing.Left = 6
BorderSpacing.InnerBorder = 4

View File

@ -1,187 +1,196 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TH2PasDialog','FORMDATA',[
'TPF0'#12'TH2PasDialog'#11'H2PasDialog'#4'Left'#3#245#0#6'Height'#3#245#1#3'T'
+'op'#3#205#0#5'Width'#3#17#3#18'HorzScrollBar.Page'#3#16#3#18'VertScrollBar.'
+'Page'#3#244#1#13'ActiveControl'#7#13'ConvertButton'#7'Caption'#6#11'H2PasDi'
+'alog'#10'KeyPreview'#9#12'OnCloseQuery'#7#14'FormCloseQuery'#8'OnCreate'#7
+#10'FormCreate'#9'OnDestroy'#7#11'FormDestroy'#9'OnKeyDown'#7#11'FormKeyDown'
+#8'Position'#7#15'poDesktopCenter'#0#12'TPageControl'#15'MainPageControl'#24
+'AnchorSideBottom.Control'#7#18'OpenSettingsButton'#6'Height'#3#209#1#5'Widt'
+'h'#3#17#3#7'TabStop'#9#10'ActivePage'#7#13'FilesTabSheet'#5'Align'#7#5'alTo'
+'p'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'TabIndex'#2#0
+#8'TabOrder'#2#4#0#9'TTabSheet'#13'FilesTabSheet'#7'Caption'#6#13'FilesTabSh'
+'eet'#0#9'TTreeView'#25'CHeaderFilesCheckTreeView'#6'Height'#3#179#1#5'Width'
+#3#255#0#5'Align'#7#6'alLeft'#17'DefaultItemHeight'#2#16#11'StateImages'#7#18
+'FileStateImageList'#8'TabOrder'#2#0#11'OnMouseDown'#7'"CHeaderFilesCheckTre'
+'eViewMouseDown'#18'OnSelectionChanged'#7')CHeaderFilesCheckTreeViewSelectio'
+'nChanged'#7'Options'#11#19'tvoAllowMultiselect'#17'tvoAutoItemHeight'#16'tv'
+'oHideSelection'#21'tvoKeepCollapsedNodes'#14'tvoShowButtons'#12'tvoShowLine'
+'s'#11'tvoShowRoot'#11'tvoToolTips'#0#0#0#7'TButton'#21'AddCHeaderFilesButto'
+'n'#22'AnchorSideLeft.Control'#7#21'CHeaderFilesSplitter1'#19'AnchorSideLeft'
+'.Side'#7#9'asrBottom'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#2#12#5'Width'#3
'TPF0'#12'TH2PasDialog'#11'H2PasDialog'#4'Left'#3#245#0#6'Height'#3'%'#2#3'To'
+'p'#3#205#0#5'Width'#3#17#3#18'HorzScrollBar.Page'#3#16#3#18'VertScrollBar.P'
+'age'#3'$'#2#13'ActiveControl'#7#13'ConvertButton'#7'Caption'#6#11'H2PasDial'
+'og'#10'KeyPreview'#9#12'OnCloseQuery'#7#14'FormCloseQuery'#8'OnCreate'#7#10
+'FormCreate'#9'OnDestroy'#7#11'FormDestroy'#9'OnKeyDown'#7#11'FormKeyDown'#8
+'Position'#7#15'poDesktopCenter'#0#12'TPageControl'#15'MainPageControl'#24'A'
+'nchorSideBottom.Control'#7#18'OpenSettingsButton'#6'Height'#3#253#1#5'Width'
+#3#17#3#10'ActivePage'#7#13'FilesTabSheet'#5'Align'#7#5'alTop'#7'Anchors'#11
+#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'TabIndex'#2#0#8'TabOrder'#2#4
+#0#9'TTabSheet'#13'FilesTabSheet'#7'Caption'#6#13'FilesTabSheet'#0#9'TTreeVi'
+'ew'#25'CHeaderFilesCheckTreeView'#6'Height'#3#219#1#5'Width'#3#255#0#5'Alig'
+'n'#7#6'alLeft'#17'DefaultItemHeight'#2#18#11'StateImages'#7#18'FileStateIma'
+'geList'#8'TabOrder'#2#0#10'OnDblClick'#7'!CHeaderFilesCheckTreeViewDblClick'
+#11'OnMouseDown'#7'"CHeaderFilesCheckTreeViewMouseDown'#18'OnSelectionChange'
+'d'#7')CHeaderFilesCheckTreeViewSelectionChanged'#7'Options'#11#19'tvoAllowM'
+'ultiselect'#17'tvoAutoItemHeight'#16'tvoHideSelection'#21'tvoKeepCollapsedN'
+'odes'#14'tvoShowButtons'#12'tvoShowLines'#11'tvoShowRoot'#11'tvoToolTips'#0
+#0#0#7'TButton'#17'AddCHeadersButton'#22'AnchorSideLeft.Control'#7#21'CHeade'
+'rFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#4'Left'#3#10#1#6'He'
+'ight'#2#25#3'Top'#2#12#5'Width'#3#185#0#18'BorderSpacing.Left'#2#6#25'Borde'
+'rSpacing.InnerBorder'#2#4#7'Caption'#6#17'AddCHeadersButton'#7'OnClick'#7#22
+'AddCHeadersButtonClick'#8'TabOrder'#2#1#0#0#7'TButton'#20'DeleteCHeadersBut'
+'ton'#22'AnchorSideLeft.Control'#7#21'CHeaderFilesSplitter1'#19'AnchorSideLe'
+'ft.Side'#7#9'asrBottom'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#2'('#5'Width'#3
+#185#0#18'BorderSpacing.Left'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Captio'
+'n'#6#21'AddCHeaderFilesButton'#7'OnClick'#7#26'AddCHeaderFilesButtonClick'#8
+'TabOrder'#2#1#0#0#7'TButton'#24'DeleteCHeaderFilesButton'#22'AnchorSideLeft'
+'.Control'#7#21'CHeaderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'
+#4'Left'#3#10#1#6'Height'#2#25#3'Top'#2'('#5'Width'#3#185#0#18'BorderSpacing'
+'.Left'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#24'DeleteCHeaderF'
+'ilesButton'#7'OnClick'#7#29'DeleteCHeaderFilesButtonClick'#8'TabOrder'#2#2#0
+#0#7'TButton'#27'EnableAllCHeaderFilesButton'#22'AnchorSideLeft.Control'#7#21
+'CHeaderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#4'Left'#3#10#1
+#6'Height'#2#25#3'Top'#2'H'#5'Width'#3#185#0#18'BorderSpacing.Left'#2#6#25'B'
+'orderSpacing.InnerBorder'#2#4#7'Caption'#6#27'EnableAllCHeaderFilesButton'#7
+'OnClick'#7' EnableAllCHeaderFilesButtonClick'#8'TabOrder'#2#3#0#0#7'TButton'
+#28'DisableAllCHeaderFilesButton'#22'AnchorSideLeft.Control'#7#21'CHeaderFil'
+'esSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#4'Left'#3#10#1#6'Height'
+#2#25#3'Top'#2'h'#5'Width'#3#185#0#18'BorderSpacing.Left'#2#6#25'BorderSpaci'
+'ng.InnerBorder'#2#4#7'Caption'#6#28'DisableAllCHeaderFilesButton'#7'OnClick'
+#7'!DisableAllCHeaderFilesButtonClick'#8'TabOrder'#2#4#0#0#9'TSplitter'#21'C'
+'HeaderFilesSplitter1'#4'Left'#3#255#0#6'Height'#3#179#1#5'Width'#2#5#7'Beve'
+'led'#9#0#0#9'TGroupBox'#16'FileInfoGroupBox'#22'AnchorSideLeft.Control'#7#21
+'CHeaderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#23'AnchorSide'
+'Right.Control'#7#13'FilesTabSheet'#20'AnchorSideRight.Side'#7#9'asrBottom'
+#24'AnchorSideBottom.Control'#7#13'FilesTabSheet'#21'AnchorSideBottom.Side'#7
+#9'asrBottom'#4'Left'#3#4#1#6'Height'#3#227#0#3'Top'#3#208#0#5'Width'#3#9#2#7
+'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6#16'Fil'
+'eInfoGroupBox'#8'TabOrder'#2#5#0#6'TLabel'#13'FileInfoLabel'#4'Left'#2#8#6
+'Height'#2#13#3'Top'#2#1#5'Width'#2'I'#7'Caption'#6#13'FileInfoLabel'#5'Colo'
+'r'#7#6'clNone'#11'ParentColor'#8#0#0#7'TButton'#29'AddIncludedCHeaderFilesB'
+'utton'#24'AnchorSideBottom.Control'#7#16'FileInfoGroupBox'#21'AnchorSideBot'
+'tom.Side'#7#9'asrBottom'#4'Left'#2#8#6'Height'#2#26#3'Top'#3#178#0#5'Width'
+#3#197#0#7'Anchors'#11#6'akLeft'#8'akBottom'#0#8'AutoSize'#9#20'BorderSpacin'
+'g.Around'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#29'AddIncluded'
+'CHeaderFilesButton'#7'OnClick'#7'"AddIncludedCHeaderFilesButtonClick'#8'Tab'
+'Order'#2#0#0#0#0#7'TButton'#16'MoveFileUpButton'#22'AnchorSideLeft.Control'
+#7#21'AddCHeaderFilesButton'#21'AnchorSideTop.Control'#7#28'DisableAllCHeade'
+'rFilesButton'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Cont'
+'rol'#7#21'AddCHeaderFilesButton'#20'AnchorSideRight.Side'#7#9'asrBottom'#4
+'Left'#3#10#1#6'Height'#2#25#3'Top'#3#135#0#5'Width'#3#185#0#7'Anchors'#11#5
+'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#6#25'BorderSpacing.In'
+'nerBorder'#2#4#7'Caption'#6#16'MoveFileUpButton'#7'OnClick'#7#21'MoveFileUp'
+'ButtonClick'#8'TabOrder'#2#6#0#0#7'TButton'#18'MoveFileDownButton'#22'Ancho'
+'rSideLeft.Control'#7#21'AddCHeaderFilesButton'#21'AnchorSideTop.Control'#7
+#16'MoveFileUpButton'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRig'
+'ht.Control'#7#21'AddCHeaderFilesButton'#20'AnchorSideRight.Side'#7#9'asrBot'
+'tom'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#3#166#0#5'Width'#3#185#0#7'Anchor'
+'s'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#6#25'BorderSp'
,'acing.InnerBorder'#2#4#7'Caption'#6#18'MoveFileDownButton'#7'OnClick'#7#23
+'MoveFileDownButtonClick'#8'TabOrder'#2#7#0#0#0#9'TTabSheet'#16'PreH2PasTabS'
+'heet'#7'Caption'#6#16'PreH2PasTabSheet'#0#9'TGroupBox'#16'PreH2PasGroupBox'
+#6'Height'#3#179#1#5'Width'#3#13#3#5'Align'#7#8'alClient'#7'Caption'#6#16'Pr'
+'eH2PasGroupBox'#8'TabOrder'#2#0#0#0#0#9'TTabSheet'#20'h2pasOptionsTabSheet'
+#7'Caption'#6#20'h2pasOptionsTabSheet'#0#6'TLabel'#12'LibNameLabel'#21'Ancho'
+'rSideTop.Control'#7#11'LibnameEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4
+'Left'#2#6#6'Height'#2#13#3'Top'#3#25#1#5'Width'#2'Q'#17'BorderSpacing.Top'#2
+#10#7'Caption'#6#12'LibNameLabel'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0
+#6'TLabel'#14'OutputExtLabel'#21'AnchorSideTop.Control'#7#13'OutputExtEdit'
+#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#2#6#6'Height'#2#13#3'Top'#3'9'
+#1#5'Width'#2'V'#7'Caption'#6#14'OutputExtLabel'#5'Color'#7#6'clNone'#11'Par'
+'entColor'#8#0#0#6'TLabel'#14'OutputDirLabel'#21'AnchorSideTop.Control'#7#13
+'OutputDirEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#2#6#6'Height'#2
+#13#3'Top'#3'V'#1#5'Width'#2'U'#7'Caption'#6#14'OutputDirLabel'#5'Color'#7#6
+'clNone'#11'ParentColor'#8#0#0#5'TEdit'#11'LibnameEdit'#22'AnchorSideLeft.Co'
+'ntrol'#7#12'LibNameLabel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#18'AnchorS'
+'ideTop.Side'#7#9'asrBottom'#4'Left'#2']'#6'Height'#2#23#3'Top'#3#20#1#5'Wid'
+'th'#2'q'#18'BorderSpacing.Left'#2#6#17'BorderSpacing.Top'#2#6#13'OnEditingD'
+'one'#7#22'LibnameEditEditingDone'#8'TabOrder'#2#0#4'Text'#6#11'LibnameEdit'
+#0#0#5'TEdit'#13'OutputExtEdit'#22'AnchorSideLeft.Control'#7#14'OutputExtLab'
+'el'#19'AnchorSideLeft.Side'#7#9'asrBottom'#18'AnchorSideTop.Side'#7#9'asrBo'
+'ttom'#4'Left'#2'b'#6'Height'#2#23#3'Top'#3'4'#1#5'Width'#2'P'#18'BorderSpac'
+'ing.Left'#2#6#17'BorderSpacing.Top'#2#6#13'OnEditingDone'#7#24'OutputExtEdi'
+'tEditingDone'#8'TabOrder'#2#1#4'Text'#6#13'OutputExtEdit'#0#0#5'TEdit'#13'O'
+'utputDirEdit'#22'AnchorSideLeft.Control'#7#14'OutputDirLabel'#19'AnchorSide'
+'Left.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#13'OutputExtEdit'#18
+'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2'a'#6'Height'#2#23#3'Top'#3'Q'#1
+#5'Width'#3#141#1#18'BorderSpacing.Left'#2#6#17'BorderSpacing.Top'#2#6#13'On'
+'EditingDone'#7#24'OutputDirEditEditingDone'#8'TabOrder'#2#2#4'Text'#6#13'Ou'
+'tputDirEdit'#0#0#7'TButton'#21'OutputDirBrowseButton'#22'AnchorSideLeft.Con'
+'trol'#7#13'OutputDirEdit'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorS'
+'ideTop.Control'#7#13'OutputDirEdit'#24'AnchorSideBottom.Control'#7#13'Outpu'
+'tDirEdit'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3#238#1#6'Height'
+#2#23#3'Top'#3'Q'#1#5'Width'#2' '#7'Anchors'#11#5'akTop'#6'akLeft'#8'akBotto'
+'m'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#3'...'#7'OnClick'#7#26
+'OutputDirBrowseButtonClick'#8'TabOrder'#2#3#0#0#11'TCheckGroup'#22'h2pasOpt'
+'ionsCheckGroup'#4'Left'#2#6#6'Height'#3#8#1#3'Top'#2#4#5'Width'#3#0#3#8'Aut'
+'oFill'#9#7'Caption'#6#22'h2pasOptionsCheckGroup'#28'ChildSizing.LeftRightSp'
+'acing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHoriz'
+'ontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24
+'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChi'
+'lds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Lay'
+'out'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#2
+#7'Columns'#2#2#11'OnItemClick'#7#31'h2pasOptionsCheckGroupItemClick'#8'TabO'
+'rder'#2#4#0#0#0#9'TTabSheet'#17'PostH2PasTabSheet'#7'Caption'#6#17'PostH2Pa'
+'sTabSheet'#0#9'TGroupBox'#17'PostH2PasGroupBox'#6'Height'#3#179#1#5'Width'#3
+#13#3#5'Align'#7#8'alClient'#7'Caption'#6#17'PostH2PasGroupBox'#8'TabOrder'#2
+#0#0#0#0#9'TTabSheet'#16'SettingsTabSheet'#7'Caption'#6#16'SettingsTabSheet'
+#0#6'TLabel'#18'H2PasFilenameLabel'#21'AnchorSideTop.Control'#7#17'H2PasFile'
+'nameEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#2#6#6'Height'#2#17#3
+'Top'#2#7#5'Width'#3#155#0#7'Caption'#6#18'H2PasFilenameLabel'#5'Color'#7#6
+'clNone'#11'ParentColor'#8#0#0#9'TCheckBox'#30'OpenLastProjectOnStartCheckBo'
+'x'#4'Left'#2#6#6'Height'#2#24#3'Top'#2'*'#5'Width'#3#21#1#7'Caption'#6#30'O'
+'penLastProjectOnStartCheckBox'#8'OnChange'#7'$OpenLastProjectOnStartCheckBo'
+'xChange'#8'TabOrder'#2#0#0#0#7'TButton'#20'SaveSettingsAsButton'#4'Left'#2#6
+#6'Height'#2#30#3'Top'#2'R'#5'Width'#3#177#0#8'AutoSize'#9#25'BorderSpacing.'
+'InnerBorder'#2#4#7'Caption'#6#20'SaveSettingsAsButton'#7'OnClick'#7#25'Save'
+'SettingsAsButtonClick'#8'TabOrder'#2#1#0#0#5'TEdit'#17'H2PasFilenameEdit'#22
+'AnchorSideLeft.Control'#7#18'H2PasFilenameLabel'#19'AnchorSideLeft.Side'#7#9
+'asrBottom'#4'Left'#3#167#0#6'Height'#2#23#3'Top'#2#4#5'Width'#3'`'#1#18'Bor'
+'derSpacing.Left'#2#6#17'BorderSpacing.Top'#2#6#13'OnEditingDone'#7#28'H2Pas'
+'FilenameEditEditingDone'#8'TabOrder'#2#2#4'Text'#6#17'H2PasFilenameEdit'#0#0
+#7'TButton'#25'h2pasFilenameBrowseButton'#22'AnchorSideLeft.Control'#7#17'H2'
,'PasFilenameEdit'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Co'
+'ntrol'#7#17'H2PasFilenameEdit'#24'AnchorSideBottom.Control'#7#17'H2PasFilen'
+'ameEdit'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3#7#2#6'Height'#2
+#23#3'Top'#2#4#5'Width'#2'#'#7'Anchors'#11#5'akTop'#6'akLeft'#8'akBottom'#0
+#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#3'...'#7'OnClick'#7#30'h2pas'
+'FilenameBrowseButtonClick'#8'TabOrder'#2#3#0#0#7'TButton'#17'NewSettingsBut'
+'ton'#4'Left'#2#6#6'Height'#2#30#3'Top'#2'|'#5'Width'#3#154#0#8'AutoSize'#9
+#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#17'NewSettingsButton'#7'OnCl'
+'ick'#7#22'NewSettingsButtonClick'#8'TabOrder'#2#4#0#0#0#0#7'TButton'#18'Ope'
+'nSettingsButton'#22'AnchorSideLeft.Control'#7#5'Owner'#24'AnchorSideBottom.'
+'Control'#7#5'Owner'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#2#5#6
+'Height'#2#26#3'Top'#3#214#1#5'Width'#2'|'#7'Anchors'#11#6'akLeft'#8'akBotto'
+'m'#0#8'AutoSize'#9#20'BorderSpacing.Around'#2#5#25'BorderSpacing.InnerBorde'
+'r'#2#4#7'Caption'#6#18'OpenSettingsButton'#7'OnClick'#7#23'OpenSettingsButt'
+'onClick'#8'TabOrder'#2#1#0#0#7'TButton'#18'SaveSettingsButton'#22'AnchorSid'
+'eLeft.Control'#7#18'OpenSettingsButton'#19'AnchorSideLeft.Side'#7#9'asrBott'
+'om'#24'AnchorSideBottom.Control'#7#5'Owner'#21'AnchorSideBottom.Side'#7#9'a'
+'srBottom'#4'Left'#3#134#0#6'Height'#2#26#3'Top'#3#214#1#5'Width'#2'z'#7'Anc'
+'hors'#11#6'akLeft'#8'akBottom'#0#8'AutoSize'#9#20'BorderSpacing.Around'#2#5
+#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#18'SaveSettingsButton'#7'OnC'
+'lick'#7#23'SaveSettingsButtonClick'#8'TabOrder'#2#2#0#0#7'TButton'#13'Conve'
+'rtButton'#22'AnchorSideLeft.Control'#7#18'SaveSettingsButton'#19'AnchorSide'
+'Left.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#18'OpenSettingsButton'
+#4'Left'#3#15#1#6'Height'#2#26#3'Top'#3#214#1#5'Width'#2']'#8'AutoSize'#9#18
+'BorderSpacing.Left'#2#15#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#13
+'ConvertButton'#7'OnClick'#7#18'ConvertButtonClick'#8'TabOrder'#2#0#0#0#7'TB'
+'utton'#11'CloseButton'#23'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSide'
+'Right.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'#7#5'Owner'#21'Ancho'
+'rSideBottom.Side'#7#9'asrBottom'#4'Left'#3#187#2#6'Height'#2#26#3'Top'#3#214
+#1#5'Width'#2'Q'#7'Anchors'#11#7'akRight'#8'akBottom'#0#8'AutoSize'#9#20'Bor'
+'derSpacing.Around'#2#5#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#11'Cl'
+'oseButton'#7'OnClick'#7#16'CloseButtonClick'#8'TabOrder'#2#3#0#0#7'TButton'
+#21'ConvertAndBuildButton'#22'AnchorSideLeft.Control'#7#13'ConvertButton'#19
+'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#18'OpenSett'
+'ingsButton'#4'Left'#3'r'#1#6'Height'#2#26#3'Top'#3#214#1#5'Width'#3#144#0#8
+'AutoSize'#9#18'BorderSpacing.Left'#2#6#25'BorderSpacing.InnerBorder'#2#4#7
+'Caption'#6#21'ConvertAndBuildButton'#7'OnClick'#7#26'ConvertAndBuildButtonC'
+'lick'#8'TabOrder'#2#5#0#0#10'TImageList'#18'FileStateImageList'#4'left'#3
+#136#0#3'top'#2'^'#6'Bitmap'#10'}'#3#0#0'li'#2#0#0#0#16#0#0#0#16#0#0#0#191#1
+#0#0'/* XPM */'#10'static char * pkg_removedfiles_xpm[] = {'#10'"14 13 10 1"'
+','#10'" '#9'c None",'#10'".'#9'c #000044",'#10'"+'#9'c #000055",'#10'"@'#9
+'c #FF1414",'#10'"#'#9'c #000084",'#10'"$'#9'c #000033",'#10'"%'#9'c #FFFFFF'
+'",'#10'"&'#9'c #D5D5EF",'#10'"*'#9'c #CBCBCB",'#10'"='#9'c #000000",'#10'" '
+' ..++.... ",'#10'" .@@####. @@ ",'#10'" $%@@%%&.@@ ",'#10'" $*%@@..@'
+'@.. ",'#10'" =%%.@@@@... ",'#10'"...++$%@@%%&=%",'#10'".....$@@@@&&=%",'#10
+'".%*%%@@%%@@&=%",'#10'".*%%@@%&&&@@=%",'#10'".%%@@======@@%",'#10'".%@@&&&='
+'%%%%@%",'#10'".@@=====% ",'#10'" %%%%%%%% "};'#10#168#1#0#0'/* XPM '
+'*/'#10'static char * pkg_files_xpm[] = {'#10'"14 13 9 1",'#10'" '#9'c None"'
+','#10'".'#9'c #000044",'#10'"+'#9'c #000055",'#10'"@'#9'c #000084",'#10'"#'
+#9'c #000033",'#10'"$'#9'c #FFFFFF",'#10'"%'#9'c #CBCBCB",'#10'"&'#9'c #D5D5'
+'EF",'#10'"*'#9'c #000000",'#10'" ..++.... ",'#10'" .@@@@@@. ",'#10
+'" #$%$$$&.$ ",'#10'" #%$........ ",'#10'" *$$........ ",'#10'"...++#$%'
+'$$$&*$",'#10'".....#%$$$&&*$",'#10'".$%$$*$$$&$&*$",'#10'".%$$$*$&&&&&*$",'
+#10'".$$$$********$",'#10'".$&&&&&*$$$$$$",'#10'".*******$ ",'#10'" $$$$'
+'$$$$ "};'#10#0#0#0
+'n'#6#20'DeleteCHeadersButton'#7'OnClick'#7#25'DeleteCHeadersButtonClick'#8
+'TabOrder'#2#2#0#0#7'TButton'#23'EnableAllCHeadersButton'#22'AnchorSideLeft.'
+'Control'#7#21'CHeaderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'
+#4'Left'#3#10#1#6'Height'#2#25#3'Top'#2'H'#5'Width'#3#185#0#18'BorderSpacing'
+'.Left'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#23'EnableAllCHead'
+'ersButton'#7'OnClick'#7#28'EnableAllCHeadersButtonClick'#8'TabOrder'#2#3#0#0
+#7'TButton'#24'DisableAllCHeadersButton'#22'AnchorSideLeft.Control'#7#21'CHe'
+'aderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#4'Left'#3#10#1#6
+'Height'#2#25#3'Top'#2'h'#5'Width'#3#185#0#18'BorderSpacing.Left'#2#6#25'Bor'
+'derSpacing.InnerBorder'#2#4#7'Caption'#6#24'DisableAllCHeadersButton'#7'OnC'
+'lick'#7#29'DisableAllCHeadersButtonClick'#8'TabOrder'#2#4#0#0#9'TSplitter'
+#21'CHeaderFilesSplitter1'#4'Left'#3#255#0#6'Height'#3#219#1#5'Width'#2#5#7
+'Beveled'#9#0#0#9'TGroupBox'#16'FileInfoGroupBox'#22'AnchorSideLeft.Control'
+#7#21'CHeaderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#23'Ancho'
+'rSideRight.Control'#7#13'FilesTabSheet'#20'AnchorSideRight.Side'#7#9'asrBot'
+'tom'#24'AnchorSideBottom.Control'#7#13'FilesTabSheet'#21'AnchorSideBottom.S'
+'ide'#7#9'asrBottom'#4'Left'#3#4#1#6'Height'#3#11#1#3'Top'#3#208#0#5'Width'#3
+#9#2#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6
+#16'FileInfoGroupBox'#8'TabOrder'#2#5#0#7'TButton'#29'AddIncludedCHeaderFile'
+'sButton'#24'AnchorSideBottom.Control'#7#16'FileInfoGroupBox'#21'AnchorSideB'
+'ottom.Side'#7#9'asrBottom'#4'Left'#2#8#6'Height'#2#30#3'Top'#3#210#0#5'Widt'
+'h'#3#249#0#7'Anchors'#11#6'akLeft'#8'akBottom'#0#8'AutoSize'#9#20'BorderSpa'
+'cing.Around'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#29'AddInclu'
+'dedCHeaderFilesButton'#7'OnClick'#7'"AddIncludedCHeaderFilesButtonClick'#8
+'TabOrder'#2#0#0#0#5'TMemo'#12'FileInfoMemo'#22'AnchorSideLeft.Control'#7#16
+'FileInfoGroupBox'#21'AnchorSideTop.Control'#7#17'MergeFileCheckBox'#18'Anch'
+'orSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#16'FileInfoGro'
+'upBox'#20'AnchorSideRight.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'
+#7#29'AddIncludedCHeaderFilesButton'#6'Height'#3#183#0#3'Top'#2#21#5'Width'#3
+#5#2#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#5'Color'#7#6
+'clNone'#8'ReadOnly'#9#8'TabOrder'#2#1#0#0#9'TCheckBox'#17'MergeFileCheckBox'
+#4'Left'#2#8#6'Height'#2#24#3'Top'#2#253#5'Width'#3#168#0#7'Caption'#6#17'Me'
+'rgeFileCheckBox'#8'TabOrder'#2#2#0#0#0#7'TButton'#16'MoveFileUpButton'#22'A'
+'nchorSideLeft.Control'#7#17'AddCHeadersButton'#21'AnchorSideTop.Control'#7
+#24'DisableAllCHeadersButton'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'Ancho'
+'rSideRight.Control'#7#17'AddCHeadersButton'#20'AnchorSideRight.Side'#7#9'as'
+'rBottom'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#3#135#0#5'Width'#3#185#0#7'An'
+'chors'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#6#25'Bord'
+'erSpacing.InnerBorder'#2#4#7'Caption'#6#16'MoveFileUpButton'#7'OnClick'#7#21
,'MoveFileUpButtonClick'#8'TabOrder'#2#6#0#0#7'TButton'#18'MoveFileDownButton'
+#22'AnchorSideLeft.Control'#7#17'AddCHeadersButton'#21'AnchorSideTop.Control'
+#7#16'MoveFileUpButton'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideR'
+'ight.Control'#7#17'AddCHeadersButton'#20'AnchorSideRight.Side'#7#9'asrBotto'
+'m'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#3#166#0#5'Width'#3#185#0#7'Anchors'
+#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#6#25'BorderSpaci'
+'ng.InnerBorder'#2#4#7'Caption'#6#18'MoveFileDownButton'#7'OnClick'#7#23'Mov'
+'eFileDownButtonClick'#8'TabOrder'#2#7#0#0#7'TButton#MergeAllCHeadersExceptC'
+'urrentButton'#4'Left'#3#230#1#6'Height'#2#25#3'Top'#2#12#5'Width'#3#184#0#25
+'BorderSpacing.InnerBorder'#2#4#7'Caption'#6'#MergeAllCHeadersExceptCurrentB'
+'utton'#7'OnClick'#7'(MergeAllCHeadersExceptCurrentButtonClick'#8'TabOrder'#2
+#8#0#0#0#9'TTabSheet'#16'PreH2PasTabSheet'#7'Caption'#6#16'PreH2PasTabSheet'
+#0#9'TGroupBox'#16'PreH2PasGroupBox'#6'Height'#3#219#1#5'Width'#3#13#3#5'Ali'
+'gn'#7#8'alClient'#7'Caption'#6#16'PreH2PasGroupBox'#8'TabOrder'#2#0#0#0#0#9
+'TTabSheet'#20'h2pasOptionsTabSheet'#7'Caption'#6#20'h2pasOptionsTabSheet'#0
+#6'TLabel'#12'LibNameLabel'#21'AnchorSideTop.Control'#7#11'LibnameEdit'#18'A'
+'nchorSideTop.Side'#7#9'asrCenter'#4'Left'#2#6#6'Height'#2#17#3'Top'#3#23#1#5
+'Width'#2'i'#17'BorderSpacing.Top'#2#10#7'Caption'#6#12'LibNameLabel'#5'Colo'
+'r'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#14'OutputExtLabel'#21'Anchor'
+'SideTop.Control'#7#13'OutputExtEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4
+'Left'#2#6#6'Height'#2#17#3'Top'#3'7'#1#5'Width'#2'r'#7'Caption'#6#14'Output'
+'ExtLabel'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#14'OutputDir'
+'Label'#21'AnchorSideTop.Control'#7#13'OutputDirEdit'#18'AnchorSideTop.Side'
+#7#9'asrCenter'#4'Left'#2#6#6'Height'#2#17#3'Top'#3'T'#1#5'Width'#2'n'#7'Cap'
+'tion'#6#14'OutputDirLabel'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#5'TEd'
+'it'#11'LibnameEdit'#22'AnchorSideLeft.Control'#7#12'LibNameLabel'#19'Anchor'
+'SideLeft.Side'#7#9'asrBottom'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'
+#2'u'#6'Height'#2#23#3'Top'#3#20#1#5'Width'#2'q'#18'BorderSpacing.Left'#2#6
+#17'BorderSpacing.Top'#2#6#13'OnEditingDone'#7#22'LibnameEditEditingDone'#8
+'TabOrder'#2#0#4'Text'#6#11'LibnameEdit'#0#0#5'TEdit'#13'OutputExtEdit'#22'A'
+'nchorSideLeft.Control'#7#14'OutputExtLabel'#19'AnchorSideLeft.Side'#7#9'asr'
+'Bottom'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2'~'#6'Height'#2#23#3
+'Top'#3'4'#1#5'Width'#2'P'#18'BorderSpacing.Left'#2#6#17'BorderSpacing.Top'#2
+#6#13'OnEditingDone'#7#24'OutputExtEditEditingDone'#8'TabOrder'#2#1#4'Text'#6
+#13'OutputExtEdit'#0#0#5'TEdit'#13'OutputDirEdit'#22'AnchorSideLeft.Control'
+#7#14'OutputDirLabel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTo'
+'p.Control'#7#13'OutputExtEdit'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'
+#2'z'#6'Height'#2#23#3'Top'#3'Q'#1#5'Width'#3#141#1#18'BorderSpacing.Left'#2
+#6#17'BorderSpacing.Top'#2#6#13'OnEditingDone'#7#24'OutputDirEditEditingDone'
+#8'TabOrder'#2#2#4'Text'#6#13'OutputDirEdit'#0#0#7'TButton'#21'OutputDirBrow'
+'seButton'#22'AnchorSideLeft.Control'#7#13'OutputDirEdit'#19'AnchorSideLeft.'
+'Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#13'OutputDirEdit'#24'Ancho'
+'rSideBottom.Control'#7#13'OutputDirEdit'#21'AnchorSideBottom.Side'#7#9'asrB'
+'ottom'#4'Left'#3#7#2#6'Height'#2#23#3'Top'#3'Q'#1#5'Width'#2' '#7'Anchors'
+#11#5'akTop'#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Cap'
+'tion'#6#3'...'#7'OnClick'#7#26'OutputDirBrowseButtonClick'#8'TabOrder'#2#3#0
+#0#11'TCheckGroup'#22'h2pasOptionsCheckGroup'#4'Left'#2#6#6'Height'#3#8#1#3
+'Top'#2#4#5'Width'#3#0#3#8'AutoFill'#9#7'Caption'#6#22'h2pasOptionsCheckGrou'
+'p'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6
+#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSi'
+'zing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkH'
+'orizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScal'
+'eChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'Chil'
+'dSizing.ControlsPerLine'#2#2#7'Columns'#2#2#11'OnItemClick'#7#31'h2pasOptio'
+'nsCheckGroupItemClick'#8'TabOrder'#2#4#0#0#0#9'TTabSheet'#17'PostH2PasTabSh'
+'eet'#7'Caption'#6#17'PostH2PasTabSheet'#0#9'TGroupBox'#17'PostH2PasGroupBox'
+#6'Height'#3#219#1#5'Width'#3#13#3#5'Align'#7#8'alClient'#7'Caption'#6#17'Po'
+'stH2PasGroupBox'#8'TabOrder'#2#0#0#0#0#9'TTabSheet'#16'SettingsTabSheet'#7
+'Caption'#6#16'SettingsTabSheet'#0#6'TLabel'#18'H2PasFilenameLabel'#21'Ancho'
+'rSideTop.Control'#7#17'H2PasFilenameEdit'#18'AnchorSideTop.Side'#7#9'asrCen'
+'ter'#4'Left'#2#6#6'Height'#2#17#3'Top'#2#7#5'Width'#3#155#0#7'Caption'#6#18
+'H2PasFilenameLabel'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#9'TCheckBox'
+#30'OpenLastProjectOnStartCheckBox'#4'Left'#2#6#6'Height'#2#24#3'Top'#2'*'#5
+'Width'#3#21#1#7'Caption'#6#30'OpenLastProjectOnStartCheckBox'#8'OnChange'#7
,'$OpenLastProjectOnStartCheckBoxChange'#8'TabOrder'#2#0#0#0#7'TButton'#20'Sa'
+'veSettingsAsButton'#4'Left'#2#6#6'Height'#2#30#3'Top'#2'R'#5'Width'#3#177#0
+#8'AutoSize'#9#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#20'SaveSetting'
+'sAsButton'#7'OnClick'#7#25'SaveSettingsAsButtonClick'#8'TabOrder'#2#1#0#0#5
+'TEdit'#17'H2PasFilenameEdit'#22'AnchorSideLeft.Control'#7#18'H2PasFilenameL'
+'abel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#4'Left'#3#167#0#6'Height'#2#23
+#3'Top'#2#4#5'Width'#3'`'#1#18'BorderSpacing.Left'#2#6#17'BorderSpacing.Top'
+#2#6#13'OnEditingDone'#7#28'H2PasFilenameEditEditingDone'#8'TabOrder'#2#2#4
+'Text'#6#17'H2PasFilenameEdit'#0#0#7'TButton'#25'h2pasFilenameBrowseButton'
+#22'AnchorSideLeft.Control'#7#17'H2PasFilenameEdit'#19'AnchorSideLeft.Side'#7
+#9'asrBottom'#21'AnchorSideTop.Control'#7#17'H2PasFilenameEdit'#24'AnchorSid'
+'eBottom.Control'#7#17'H2PasFilenameEdit'#21'AnchorSideBottom.Side'#7#9'asrB'
+'ottom'#4'Left'#3#7#2#6'Height'#2#23#3'Top'#2#4#5'Width'#2'#'#7'Anchors'#11#5
+'akTop'#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'
+#6#3'...'#7'OnClick'#7#30'h2pasFilenameBrowseButtonClick'#8'TabOrder'#2#3#0#0
+#7'TButton'#17'NewSettingsButton'#4'Left'#2#6#6'Height'#2#30#3'Top'#2'|'#5'W'
+'idth'#3#154#0#8'AutoSize'#9#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6
+#17'NewSettingsButton'#7'OnClick'#7#22'NewSettingsButtonClick'#8'TabOrder'#2
+#4#0#0#0#0#7'TButton'#18'OpenSettingsButton'#22'AnchorSideLeft.Control'#7#5
+'Owner'#24'AnchorSideBottom.Control'#7#5'Owner'#21'AnchorSideBottom.Side'#7#9
+'asrBottom'#4'Left'#2#5#6'Height'#2#30#3'Top'#3#2#2#5'Width'#3#161#0#7'Ancho'
+'rs'#11#6'akLeft'#8'akBottom'#0#8'AutoSize'#9#20'BorderSpacing.Around'#2#5#25
+'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#18'OpenSettingsButton'#7'OnClic'
+'k'#7#23'OpenSettingsButtonClick'#8'TabOrder'#2#1#0#0#7'TButton'#18'SaveSett'
+'ingsButton'#22'AnchorSideLeft.Control'#7#18'OpenSettingsButton'#19'AnchorSi'
+'deLeft.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'#7#5'Owner'#21'Anch'
+'orSideBottom.Side'#7#9'asrBottom'#4'Left'#3#171#0#6'Height'#2#30#3'Top'#3#2
+#2#5'Width'#3#158#0#7'Anchors'#11#6'akLeft'#8'akBottom'#0#8'AutoSize'#9#20'B'
+'orderSpacing.Around'#2#5#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#18
+'SaveSettingsButton'#7'OnClick'#7#23'SaveSettingsButtonClick'#8'TabOrder'#2#2
+#0#0#7'TButton'#13'ConvertButton'#22'AnchorSideLeft.Control'#7#18'SaveSettin'
+'gsButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7
+#18'OpenSettingsButton'#4'Left'#3'X'#1#6'Height'#2#30#3'Top'#3#2#2#5'Width'#2
+'w'#8'AutoSize'#9#18'BorderSpacing.Left'#2#15#25'BorderSpacing.InnerBorder'#2
+#4#7'Caption'#6#13'ConvertButton'#7'OnClick'#7#18'ConvertButtonClick'#8'TabO'
+'rder'#2#0#0#0#7'TButton'#11'CloseButton'#23'AnchorSideRight.Control'#7#5'Ow'
+'ner'#20'AnchorSideRight.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'#7
+#5'Owner'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3#165#2#6'Height'
+#2#30#3'Top'#3#2#2#5'Width'#2'g'#7'Anchors'#11#7'akRight'#8'akBottom'#0#8'Au'
+'toSize'#9#20'BorderSpacing.Around'#2#5#25'BorderSpacing.InnerBorder'#2#4#7
+'Caption'#6#11'CloseButton'#7'OnClick'#7#16'CloseButtonClick'#8'TabOrder'#2#3
+#0#0#7'TButton'#21'ConvertAndBuildButton'#22'AnchorSideLeft.Control'#7#13'Co'
+'nvertButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Contro'
+'l'#7#18'OpenSettingsButton'#4'Left'#3#213#1#6'Height'#2#30#3'Top'#3#2#2#5'W'
+'idth'#3#183#0#8'AutoSize'#9#18'BorderSpacing.Left'#2#6#25'BorderSpacing.Inn'
+'erBorder'#2#4#7'Caption'#6#21'ConvertAndBuildButton'#7'OnClick'#7#26'Conver'
+'tAndBuildButtonClick'#8'TabOrder'#2#5#0#0#10'TImageList'#18'FileStateImageL'
+'ist'#4'left'#3#136#0#3'top'#2'^'#6'Bitmap'#10'}'#3#0#0'li'#2#0#0#0#16#0#0#0
+#16#0#0#0#191#1#0#0'/* XPM */'#10'static char * pkg_removedfiles_xpm[] = {'
+#10'"14 13 10 1",'#10'" '#9'c None",'#10'".'#9'c #000044",'#10'"+'#9'c #0000'
+'55",'#10'"@'#9'c #FF1414",'#10'"#'#9'c #000084",'#10'"$'#9'c #000033",'#10
+'"%'#9'c #FFFFFF",'#10'"&'#9'c #D5D5EF",'#10'"*'#9'c #CBCBCB",'#10'"='#9'c #'
+'000000",'#10'" ..++.... ",'#10'" .@@####. @@ ",'#10'" $%@@%%&.@@ ",'
+#10'" $*%@@..@@.. ",'#10'" =%%.@@@@... ",'#10'"...++$%@@%%&=%",'#10'".....'
+'$@@@@&&=%",'#10'".%*%%@@%%@@&=%",'#10'".*%%@@%&&&@@=%",'#10'".%%@@======@@%'
+'",'#10'".%@@&&&=%%%%@%",'#10'".@@=====% ",'#10'" %%%%%%%% "};'#10
+#168#1#0#0'/* XPM */'#10'static char * pkg_files_xpm[] = {'#10'"14 13 9 1",'
+#10'" '#9'c None",'#10'".'#9'c #000044",'#10'"+'#9'c #000055",'#10'"@'#9'c #'
+'000084",'#10'"#'#9'c #000033",'#10'"$'#9'c #FFFFFF",'#10'"%'#9'c #CBCBCB",'
+#10'"&'#9'c #D5D5EF",'#10'"*'#9'c #000000",'#10'" ..++.... ",'#10'" .@@'
+'@@@@. ",'#10'" #$%$$$&.$ ",'#10'" #%$........ ",'#10'" *$$........ '
+'",'#10'"...++#$%$$$&*$",'#10'".....#%$$$&&*$",'#10'".$%$$*$$$&$&*$",'#10'".'
+'%$$$*$&&&&&*$",'#10'".$$$$********$",'#10'".$&&&&&*$$$$$$",'#10'".*******$ '
+' ",'#10'" $$$$$$$$ "};'#10#0#0#0
]);

View File

@ -36,22 +36,24 @@ type
{ TH2PasDialog }
TH2PasDialog = class(TForm)
MergeAllCHeadersExceptCurrentButton: TButton;
MergeFileCheckBox: TCheckBox;
FileInfoMemo: TMemo;
FileStateImageList: TImageList;
MoveFileDownButton: TButton;
MoveFileUpButton: TButton;
ConvertAndBuildButton: TButton;
FileInfoGroupBox: TGroupBox;
FileInfoLabel: TLabel;
MainPageControl: TPageControl;
AddIncludedCHeaderFilesButton: TButton;
// c header files
FilesTabSheet: TTabSheet;
CHeaderFilesSplitter1: TSplitter;
AddCHeaderFilesButton: TButton;
DisableAllCHeaderFilesButton: TButton;
EnableAllCHeaderFilesButton: TButton;
DeleteCHeaderFilesButton: TButton;
AddCHeadersButton: TButton;
DisableAllCHeadersButton: TButton;
EnableAllCHeadersButton: TButton;
DeleteCHeadersButton: TButton;
CHeaderFilesCheckTreeView: TTreeView;
// pre h2pas
@ -90,8 +92,9 @@ type
ConvertButton: TButton;
CloseButton: TButton;
procedure AddCHeaderFilesButtonClick(Sender: TObject);
procedure AddCHeadersButtonClick(Sender: TObject);
procedure AddIncludedCHeaderFilesButtonClick(Sender: TObject);
procedure CHeaderFilesCheckTreeViewDblClick(Sender: TObject);
procedure CHeaderFilesCheckTreeViewMouseDown(Sender: TOBject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure CHeaderFilesCheckTreeViewSelectionChanged(Sender: TObject);
@ -99,13 +102,14 @@ type
procedure ConstantsInsteadOfEnumsCheckBoxChange(Sender: TObject);
procedure ConvertAndBuildButtonClick(Sender: TObject);
procedure ConvertButtonClick(Sender: TObject);
procedure DeleteCHeaderFilesButtonClick(Sender: TObject);
procedure DeleteCHeadersButtonClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure H2PasFilenameEditEditingDone(Sender: TObject);
procedure LibnameEditEditingDone(Sender: TObject);
procedure MergeAllCHeadersExceptCurrentButtonClick(Sender: TObject);
procedure MoveFileDownButtonClick(Sender: TObject);
procedure MoveFileUpButtonClick(Sender: TObject);
procedure NewSettingsButtonClick(Sender: TObject);
@ -118,8 +122,8 @@ type
procedure PreH2PasEditModified(Sender: TObject);
procedure SaveSettingsAsButtonClick(Sender: TObject);
procedure SaveSettingsButtonClick(Sender: TObject);
procedure EnableAllCHeaderFilesButtonClick(Sender: TObject);
procedure DisableAllCHeaderFilesButtonClick(Sender: TObject);
procedure EnableAllCHeadersButtonClick(Sender: TObject);
procedure DisableAllCHeadersButtonClick(Sender: TObject);
procedure h2pasFilenameBrowseButtonClick(Sender: TObject);
procedure h2pasOptionsCheckGroupItemClick(Sender: TObject; Index: LongInt);
procedure OnShowSrcEditSection(Sender: TObject);
@ -131,18 +135,20 @@ type
function GetProject: TH2PasProject;
procedure UpdateAll;
procedure UpdateProjectChanged; // show project settings
procedure UpdateAll(ScanIncludes: boolean);
procedure UpdateProjectChanged(ScanIncludes: boolean); // show project settings
procedure UpdateCaption;
procedure UpdateFileInfo;
procedure ClearMessages;
procedure CreateLazarusMenuItems;
function GetNodeFilename(Node: TTreeNode): string;
function GetCurrentCHeaderFile: TH2PasFile;
procedure MoveCurrentFile(Offset: integer);
function GetFileNodeStateIndex(aFile: TH2PasFile): Integer;
procedure MarkAllCHeadersExceptCurrentToMerge;
// project settings
procedure UpdateFilesPage;
procedure UpdateFilesPage(ScanIncludes: boolean);
procedure UpdateH2PasPage;
procedure UpdateConvertPage;
// global settings
@ -220,14 +226,16 @@ procedure TH2PasDialog.FormCreate(Sender: TObject);
begin
Caption:=h2pCHeaderFileConverter;
FilesTabSheet.Caption:='C header files';
AddCHeaderFilesButton.Caption:='Add .h files ...';
DeleteCHeaderFilesButton.Caption:='Delete selected .h files';
EnableAllCHeaderFilesButton.Caption:='Enable all .h files';
DisableAllCHeaderFilesButton.Caption:='Disable all .h files';
AddCHeadersButton.Caption:='Add .h files ...';
DeleteCHeadersButton.Caption:='Delete selected .h files';
EnableAllCHeadersButton.Caption:='Enable all .h files';
DisableAllCHeadersButton.Caption:='Disable all .h files';
MoveFileDownButton.Caption:='Move file down';
MoveFileUpButton.Caption:='Move file up';
FileInfoGroupBox.Caption:='File information';
AddIncludedCHeaderFilesButton.Caption:='Add included .h files';
MergeAllCHeadersExceptCurrentButton.Caption:='Merge all but this';
MergeFileCheckBox.Caption:='Merge file';
h2pasOptionsTabSheet.Caption:='h2pas Options';
h2pasOptionsCheckGroup.Caption:='Options';
with h2pasOptionsCheckGroup.Items do begin
@ -301,7 +309,7 @@ begin
PostH2PasEdit.ListOfTools:=Project.PostH2PasTools;
end;
UpdateAll;
UpdateAll(false);
end;
procedure TH2PasDialog.FormCloseQuery(Sender: TObject; var CanClose: boolean);
@ -344,7 +352,7 @@ begin
Convert;
end;
procedure TH2PasDialog.DeleteCHeaderFilesButtonClick(Sender: TObject);
procedure TH2PasDialog.DeleteCHeadersButtonClick(Sender: TObject);
var
DeleteFiles: TStringList;
Node: TTreeNode;
@ -354,7 +362,7 @@ begin
while Node<>nil do begin
if Node.Parent=nil then begin
// top lvl node is a .h file
DeleteFiles.Add(Project.LongenFilename(Node.Text));
DeleteFiles.Add(GetNodeFilename(Node));
end;
Node:=Node.GetNextMultiSelected;
end;
@ -367,12 +375,12 @@ begin
then begin
Project.DeleteFiles(DeleteFiles);
end;
UpdateFilesPage;
UpdateFilesPage(true);
end;
DeleteFiles.Free;
end;
procedure TH2PasDialog.AddCHeaderFilesButtonClick(Sender: TObject);
procedure TH2PasDialog.AddCHeadersButtonClick(Sender: TObject);
var
OpenDialog: TOpenDialog;
begin
@ -384,7 +392,7 @@ begin
OpenDialog.Filter:='C header file (*.h)|*.h|All files (*.*)|'+FileMask;
if OpenDialog.Execute then begin
Project.AddFiles(OpenDialog.Files);
UpdateFilesPage;
UpdateFilesPage(true);
end;
finally
StoreIDEFileDialog(OpenDialog);
@ -406,7 +414,7 @@ begin
StateIconLeft:=Node.DisplayStateIconLeft;
if (x>=StateIconLeft) and (x<StateIconLeft+FileStateImageList.Width) then
begin
AFilename:=Project.LongenFilename(Node.Text);
AFilename:=GetNodeFilename(Node);
CurFile:=Project.CHeaderFileWithFilename(AFilename);
if CurFile=nil then exit;
CurFile.Enabled:=not CurFile.Enabled;
@ -449,12 +457,13 @@ begin
s:=s+#13+CurFilename;
end;
if QuestionDlg('Add .h files?',
'Add these .h files to h2pas project:'#13#13
'Add these .h files to h2pas project:'#13
+s+#13+'?',
mtConfirmation,[mbYes,mbNo],0)=mrYes
mtConfirmation,[mrYes,mrNo],0)=mrYes
then begin
Project.AddFiles(sl);
UpdateFilesPage;
Project.ReadAllCIncludes(true);
UpdateFilesPage(false);
end;
end;
finally
@ -462,6 +471,15 @@ begin
end;
end;
procedure TH2PasDialog.CHeaderFilesCheckTreeViewDblClick(Sender: TObject);
var
CurFile: TH2PasFile;
begin
CurFile:=GetCurrentCHeaderFile;
if CurFile<>nil then
LazarusIDE.DoOpenEditorFile(CurFile.Filename,-1,[]);
end;
procedure TH2PasDialog.CHeaderFilesCheckTreeViewSelectionChanged(Sender: TObject
);
begin
@ -500,6 +518,12 @@ begin
Project.Libname:=LibnameEdit.Text;
end;
procedure TH2PasDialog.MergeAllCHeadersExceptCurrentButtonClick(Sender: TObject
);
begin
MarkAllCHeadersExceptCurrentToMerge;
end;
procedure TH2PasDialog.MoveFileDownButtonClick(Sender: TObject);
begin
MoveCurrentFile(1);
@ -514,7 +538,7 @@ procedure TH2PasDialog.NewSettingsButtonClick(Sender: TObject);
begin
Project.Filename:='';
Project.Clear(true);
UpdateAll;
UpdateAll(true);
end;
procedure TH2PasDialog.OpenLastProjectOnStartCheckBoxChange(Sender: TObject);
@ -581,7 +605,7 @@ begin
SaveProject('',[]);
end;
procedure TH2PasDialog.EnableAllCHeaderFilesButtonClick(Sender: TObject);
procedure TH2PasDialog.EnableAllCHeadersButtonClick(Sender: TObject);
var
i: Integer;
begin
@ -594,7 +618,7 @@ begin
UpdateFileInfo;
end;
procedure TH2PasDialog.DisableAllCHeaderFilesButtonClick(Sender: TObject);
procedure TH2PasDialog.DisableAllCHeadersButtonClick(Sender: TObject);
var
i: Integer;
begin
@ -697,19 +721,19 @@ begin
Result:=Converter.Project;
end;
procedure TH2PasDialog.UpdateAll;
procedure TH2PasDialog.UpdateAll(ScanIncludes: boolean);
begin
UpdateCaption;
UpdateFilesPage;
UpdateFilesPage(ScanIncludes);
UpdateH2PasPage;
UpdateConvertPage;
UpdateSettingsPage;
end;
procedure TH2PasDialog.UpdateProjectChanged;
procedure TH2PasDialog.UpdateProjectChanged(ScanIncludes: boolean);
begin
UpdateCaption;
UpdateFilesPage;
UpdateFilesPage(ScanIncludes);
UpdateH2PasPage;
UpdateConvertPage;
end;
@ -747,17 +771,29 @@ begin
s:=s+#13#13+'Includes:';
for i:=0 to AFile.CIncludeCount-1 do begin
IncFile:=AFile.CIncludes[i];
s:=s+#13+IncFile.SrcFilename+':'+IntToStr(IncFile.SrcPos.Y);
s:=s+#13+Project.ShortenFilename(IncFile.Filename)+':'+IntToStr(IncFile.SrcPos.Y);
end;
AddIncludedCHeaderFilesButton.Visible:=true;
AddIncludedCHeaderFilesButton.Enabled:=true;
end else begin
AddIncludedCHeaderFilesButton.Visible:=false;
AddIncludedCHeaderFilesButton.Enabled:=false;
end;
FileInfoLabel.Caption:=s;
if AFile.CIncludedByCount>0 then begin
s:=s+#13#13+'Included by:';
for i:=0 to AFile.CIncludedByCount-1 do begin
IncFile:=AFile.CIncludedBy[i];
s:=s+#13+Project.ShortenFilename(IncFile.Owner.Filename)+':'+IntToStr(IncFile.SrcPos.Y);
end;
end;
FileInfoMemo.Caption:=s;
MergeFileCheckBox.Checked:=AFile.Merge;
MergeFileCheckBox.Enabled:=true;
end else begin
FileInfoLabel.Caption:='No file selected.';
AddIncludedCHeaderFilesButton.Visible:=false;
FileInfoMemo.Caption:='No file selected.';
MergeFileCheckBox.Enabled:=false;
AddIncludedCHeaderFilesButton.Enabled:=false;
end;
end;
@ -780,6 +816,17 @@ begin
@OnAddSearchAndReplaceBeforeH2PasClick);
end;
function TH2PasDialog.GetNodeFilename(Node: TTreeNode): string;
var
p: LongInt;
begin
Result:=Node.Text;
p:=System.Pos('(',Result);
if p>0 then
Result:=copy(Result,1,p-2);
Result:=Project.LongenFilename(Result);
end;
function TH2PasDialog.GetCurrentCHeaderFile: TH2PasFile;
var
AFilename: String;
@ -788,7 +835,7 @@ begin
Result:=nil;
Node:=CHeaderFilesCheckTreeView.Selected;
if (Node=nil) or (Node.Parent<>nil) then exit;
AFilename:=Project.LongenFilename(Node.Text);
AFilename:=GetNodeFilename(Node);
Result:=Project.CHeaderFileWithFilename(AFilename);
end;
@ -805,7 +852,7 @@ begin
end;
Node:=CHeaderFilesCheckTreeView.Selected;
if (Node=nil) or (Node.Parent<>nil) then exit;
AFilename:=Project.LongenFilename(Node.Text);
AFilename:=GetNodeFilename(Node);
Index:=Project.CHeaderFileIndexWithFilename(AFilename);
if Index<0 then begin
DebugLn(['TH2PasDialog.MoveCurrentFile not found: Filename=',AFilename]);
@ -832,7 +879,23 @@ begin
Result:=0;
end;
procedure TH2PasDialog.UpdateFilesPage;
procedure TH2PasDialog.MarkAllCHeadersExceptCurrentToMerge;
var
CurFile: TH2PasFile;
i: Integer;
OtherFile: TH2PasFile;
begin
if Project=nil then exit;
CurFile:=GetCurrentCHeaderFile;
if CurFile=nil then exit;
for i:=0 to Project.CHeaderFileCount-1 do begin
OtherFile:=Project.CHeaderFiles[i];
OtherFile.Merge:=OtherFile<>CurFile;
end;
UpdateFileInfo;
end;
procedure TH2PasDialog.UpdateFilesPage(ScanIncludes: boolean);
var
i: Integer;
CurFile: TH2PasFile;
@ -841,8 +904,10 @@ var
OldExpandedState: TTreeNodeExpandedState;
Node: TTreeNode;
OldSelected: String;
j: Integer;
begin
CHeaderFilesCheckTreeView.ConsistencyCheck;
if ScanIncludes and (Project<>nil) then
Project.ReadAllCIncludes(false);
CHeaderFilesCheckTreeView.BeginUpdate;
OldSelection:=nil;
OldExpandedState:=TTreeNodeExpandedState.Create(CHeaderFilesCheckTreeView);
@ -866,10 +931,15 @@ begin
for i:=0 to Project.CHeaderFileCount-1 do begin
CurFile:=Project.CHeaderFiles[i];
s:=Project.ShortenFilename(CurFile.Filename);
if CurFile.CIncludedByCount>0 then
s:=s+' (included by '+IntToStr(CurFile.CIncludedByCount)+')';
Node:=CHeaderFilesCheckTreeView.Items.Add(nil,s);
Node.MultiSelected:=OldSelection.IndexOf(Node.GetTextPath)>=0;
Node.Selected:=Node.Text=OldSelected;
Node.StateIndex:=GetFileNodeStateIndex(CurFile);
for j:=0 to CurFile.CIncludeCount-1 do begin
end;
end;
// restore expanded state
@ -1196,7 +1266,7 @@ begin
Project.Filename:=NewFilename;
end;
UpdateProjectChanged;
UpdateProjectChanged(true);
end;
initialization

View File

@ -42,25 +42,28 @@
</Item6>
<Item7>
<Filename Value="idetextconvlistadd.pas"/>
<UnitName Value="idetextconvlistadd"/>
<UnitName Value="IDETextConvListAdd"/>
</Item7>
</Files>
<RST OutDir="languages/"/>
<Type Value="RunAndDesignTime"/>
<RequiredPkgs Count="4">
<RequiredPkgs Count="5">
<Item1>
<PackageName Value="SynEdit"/>
<PackageName Value="LCL"/>
</Item1>
<Item2>
<PackageName Value="IDEIntf"/>
<PackageName Value="SynEdit"/>
</Item2>
<Item3>
<PackageName Value="FCL"/>
<MinVersion Major="1" Valid="True"/>
<PackageName Value="IDEIntf"/>
</Item3>
<Item4>
<PackageName Value="CodeTools"/>
<PackageName Value="FCL"/>
<MinVersion Major="1" Valid="True"/>
</Item4>
<Item5>
<PackageName Value="CodeTools"/>
</Item5>
</RequiredPkgs>
<UsageOptions>
<UnitPath Value="$(PkgOutDir)/"/>

View File

@ -339,6 +339,7 @@ var
DesignerMenuDeleteSelection: TIDEMenuCommand;
DesignerMenuChangeClass: TIDEMenuCommand;
DesignerMenuChangeParent: TIDEMenuSection;
DesignerMenuViewLFM: TIDEMenuCommand;
DesignerMenuSaveAsXML: TIDEMenuCommand;
@ -419,6 +420,9 @@ begin
'Miscellaneous section');
DesignerMenuChangeClass:=RegisterIDEMenuCommand(DesignerMenuSectionMisc,
'Change class',lisChangeClass);
DesignerMenuChangeParent:=RegisterIDEMenuSection(DesignerMenuSectionMisc,
'Change parent');
DesignerMenuChangeParent.Caption:=lisChangeParent;
DesignerMenuViewLFM:=RegisterIDEMenuCommand(DesignerMenuSectionMisc,
'View LFM',lisViewSourceLfm);
DesignerMenuSaveAsXML:=RegisterIDEMenuCommand(DesignerMenuSectionMisc,
@ -2701,6 +2705,56 @@ var
CompsAreSelected: boolean;
OneControlSelected: Boolean;
SelectionVisible: Boolean;
procedure UpdateChangeParentMenu;
var
Candidates: TFPList;
i: Integer;
Candidate: TWinControl;
j: Integer;
CurSelected: TSelectedControl;
Item: TIDEMenuItem;
begin
Candidates:=TFPList.Create;
if ControlSelIsNotEmpty
and (not LookupRootIsSelected)
and (LookupRoot is TWinControl) then begin
//DebugLn(['UpdateChangeParentMenu ',LookupRoot.ComponentCount]);
for i:=0 to LookupRoot.ComponentCount-1 do begin
if not (LookupRoot.Components[i] is TWinControl) then continue;
Candidate:=TWinControl(LookupRoot.Components[i]);
if not (csAcceptsControls in Candidate.ControlStyle) then continue;
j:=ControlSelection.Count-1;
while j>=0 do begin
CurSelected:=ControlSelection[j];
//DebugLn(['UpdateChangeParentMenu ',CurSelected.IsTControl,' ',DbgSName(CurSelected.Persistent),' ',CurSelected.IsTWinControl]);
if not CurSelected.IsTControl then continue;
if CurSelected.Persistent=Candidate then break;
if CurSelected.IsTWinControl
and TWinControl(CurSelected.Persistent).IsParentOf(Candidate)
then
break;
dec(j);
end;
//DebugLn(['UpdateChangeParentMenu j=',j,' ',dbgsName(Candidate)]);
if j<0 then
Candidates.Add(Candidate);
end;
end;
DesignerMenuChangeParent.Visible:=Candidates.Count>0;
DebugLn(['UpdateChangeParentMenu ',DesignerMenuChangeParent.Visible]);
DesignerMenuChangeParent.Clear;
for i:=0 to DesignerMenuChangeParent.Count-1 do begin
Item:=TIDEMenuCommand.Create(DesignerMenuChangeParent.Name+'_'+IntToStr(i));
DesignerMenuChangeParent.AddLast(Item);
Item.Caption:=TWinControl(Candidates[i]).Name;
end;
Candidates.Free;
end;
begin
ControlSelIsNotEmpty:=(ControlSelection.Count>0)
and (ControlSelection.SelectionForm=Form);
@ -2733,6 +2787,7 @@ begin
DesignerMenuDeleteSelection.Enabled:= CompsAreSelected;
DesignerMenuChangeClass.Enabled:= CompsAreSelected and (ControlSelection.Count=1);
UpdateChangeParentMenu;
DesignerMenuSnapToGridOption.Checked:=EnvironmentOptions.SnapToGrid;
DesignerMenuSnapToGuideLinesOption.Checked:=EnvironmentOptions.SnapToGuideLines;

View File

@ -3356,6 +3356,7 @@ resourcestring
lisPListAll = '<All>';
lisPListNone = '<None>';
lisUIClearIncludedByReference = 'Clear include cache';
lisChangeParent = 'Change parent ...';
implementation
end.