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; function Execute(aText: TIDETextConverter): TModalResult; override;
end; end;
TH2PasFile = class;
{ TH2PasFileCInclude } { TH2PasFileCInclude }
TH2PasFileCInclude = class TH2PasFileCInclude = class
private private
FFilename: string; FFilename: string;
FH2PasFile: TH2PasFile;
FOwner: TH2PasFile;
FSrcFilename: string; FSrcFilename: string;
FSrcPos: TPoint; FSrcPos: TPoint;
procedure SetFilename(const AValue: string); procedure SetFilename(const AValue: string);
procedure SetH2PasFile(const AValue: TH2PasFile);
procedure SetSrcFilename(const AValue: string); procedure SetSrcFilename(const AValue: string);
procedure SetSrcPos(const AValue: TPoint); procedure SetSrcPos(const AValue: TPoint);
public public
constructor Create(TheOwner: TH2PasFile);
destructor Destroy; override;
property Owner: TH2PasFile read FOwner;
property SrcFilename: string read FSrcFilename write SetSrcFilename; property SrcFilename: string read FSrcFilename write SetSrcFilename;
property SrcPos: TPoint read FSrcPos write SetSrcPos; property SrcPos: TPoint read FSrcPos write SetSrcPos;
property Filename: string read FFilename write SetFilename; property Filename: string read FFilename write SetFilename;
property H2PasFile: TH2PasFile read FH2PasFile write SetH2PasFile;
end; end;
TH2PasProject = class; TH2PasProject = class;
@ -177,21 +186,30 @@ type
FCIncludes: TFPList; // list of TH2PasFileCInclude FCIncludes: TFPList; // list of TH2PasFileCInclude
FCIncludesValid: boolean; FCIncludesValid: boolean;
FCIncludesFileAge: TDateTime; FCIncludesFileAge: TDateTime;
FCIncludedBy: TFPList; // list of TH2PasFileCInclude
FEnabled: boolean; FEnabled: boolean;
FFilename: string; FFilename: string;
FMerge: boolean;
FModified: boolean; FModified: boolean;
FProject: TH2PasProject; FProject: TH2PasProject;
function GetCIncludeCount: integer; function GetCIncludeCount: integer;
function GetCIncludedBy(Index: integer): TH2PasFileCInclude;
function GetCIncludedByCount: integer;
function GetCIncludes(Index: integer): TH2PasFileCInclude; function GetCIncludes(Index: integer): TH2PasFileCInclude;
procedure SetEnabled(const AValue: boolean); procedure SetEnabled(const AValue: boolean);
procedure SetFilename(const AValue: string); procedure SetFilename(const AValue: string);
procedure SetMerge(const AValue: boolean);
procedure SetModified(const AValue: boolean); procedure SetModified(const AValue: boolean);
procedure SetProject(const AValue: TH2PasProject); procedure SetProject(const AValue: TH2PasProject);
procedure SearchCIncFilenames; procedure SearchCIncFilenames;
procedure InternalAddCIncludedBy(CIncludedBy: TH2PasFileCInclude);
procedure InternalRemoveCIncludedBy(CIncludedBy: TH2PasFileCInclude);
public public
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
procedure Clear; procedure Clear;
procedure ClearIncludedByReferences;
procedure ClearCIncludes;
procedure Assign(Source: TPersistent); override; procedure Assign(Source: TPersistent); override;
function IsEqual(AFile: TH2PasFile): boolean; function IsEqual(AFile: TH2PasFile): boolean;
procedure Load(Config: TConfigStorage); procedure Load(Config: TConfigStorage);
@ -202,6 +220,7 @@ type
function GetH2PasParameters(const InputFilename: string = ''): string; function GetH2PasParameters(const InputFilename: string = ''): string;
function ReadCIncludes(ForceUpdate: boolean): TModalResult; function ReadCIncludes(ForceUpdate: boolean): TModalResult;
function CIncludesValid: boolean; function CIncludesValid: boolean;
function FindCIncludedByWithOwner(ByOwner: TH2PasFile): TH2PasFileCInclude;
public public
property Project: TH2PasProject read FProject write SetProject; property Project: TH2PasProject read FProject write SetProject;
property Filename: string read FFilename write SetFilename; property Filename: string read FFilename write SetFilename;
@ -209,6 +228,9 @@ type
property Modified: boolean read FModified write SetModified; property Modified: boolean read FModified write SetModified;
property CIncludeCount: integer read GetCIncludeCount; property CIncludeCount: integer read GetCIncludeCount;
property CIncludes[Index: integer]: TH2PasFileCInclude read GetCIncludes; 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; end;
{ TH2PasProject } { TH2PasProject }
@ -291,6 +313,7 @@ type
procedure AddDefaultPostH2PasTools; procedure AddDefaultPostH2PasTools;
function SearchIncludedCHeaderFile(aFile: TH2PasFile; function SearchIncludedCHeaderFile(aFile: TH2PasFile;
const SrcFilename: string): string; const SrcFilename: string): string;
function ReadAllCIncludes(ForceUpdate: boolean): TModalResult;
public public
property CHeaderFileCount: integer read GetCHeaderFileCount; property CHeaderFileCount: integer read GetCHeaderFileCount;
property CHeaderFiles[Index: integer]: TH2PasFile read GetCHeaderFiles; property CHeaderFiles[Index: integer]: TH2PasFile read GetCHeaderFiles;
@ -369,6 +392,9 @@ type
procedure SaveProject(const Filename: string); procedure SaveProject(const Filename: string);
function Execute: TModalResult; function Execute: TModalResult;
function ConvertFile(AFile: TH2PasFile): TModalResult; function ConvertFile(AFile: TH2PasFile): TModalResult;
function CheckMergeDependencies: TModalResult;
function MergeIncludeFiles(AFile: TH2PasFile;
TextConverter: TIDETextConverter): TModalResult;
function GetH2PasFilename: string; function GetH2PasFilename: string;
function FindH2PasErrorMessage: integer; function FindH2PasErrorMessage: integer;
function GetH2PasErrorPostion(const Line: string; function GetH2PasErrorPostion(const Line: string;
@ -404,6 +430,13 @@ begin
Modified:=true; Modified:=true;
end; end;
procedure TH2PasFile.SetMerge(const AValue: boolean);
begin
if FMerge=AValue then exit;
FMerge:=AValue;
Modified:=true;
end;
procedure TH2PasFile.SetEnabled(const AValue: boolean); procedure TH2PasFile.SetEnabled(const AValue: boolean);
begin begin
if FEnabled=AValue then exit; if FEnabled=AValue then exit;
@ -419,6 +452,19 @@ begin
Result:=FCIncludes.Count; Result:=FCIncludes.Count;
end; 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; function TH2PasFile.GetCIncludes(Index: integer): TH2PasFileCInclude;
begin begin
Result:=TH2PasFileCInclude(FCIncludes[Index]); Result:=TH2PasFileCInclude(FCIncludes[Index]);
@ -456,10 +502,26 @@ begin
for i:=0 to FCIncludes.Count-1 do begin for i:=0 to FCIncludes.Count-1 do begin
IncFile:=CIncludes[i]; IncFile:=CIncludes[i];
IncFile.Filename:= IncFile.Filename:=
Project.SearchIncludedCHeaderFile(Self,IncFile.SrcFilename); Project.SearchIncludedCHeaderFile(Self,IncFile.SrcFilename);
IncFile.H2PasFile:=Project.CHeaderFileWithFilename(IncFile.Filename);
end; end;
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; constructor TH2PasFile.Create;
begin begin
Clear; Clear;
@ -471,6 +533,7 @@ begin
Project:=nil; Project:=nil;
end; end;
Clear; Clear;
ClearIncludedByReferences;
inherited Destroy; inherited Destroy;
end; end;
@ -479,8 +542,37 @@ begin
FEnabled:=true; FEnabled:=true;
FFilename:=''; FFilename:='';
FModified:=false; 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; 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; end;
procedure TH2PasFile.Assign(Source: TPersistent); procedure TH2PasFile.Assign(Source: TPersistent);
@ -509,6 +601,7 @@ end;
procedure TH2PasFile.Load(Config: TConfigStorage); procedure TH2PasFile.Load(Config: TConfigStorage);
begin begin
FEnabled:=Config.GetValue('Enabled/Value',true); FEnabled:=Config.GetValue('Enabled/Value',true);
FMerge:=Config.GetValue('Merge/Value',false);
FFilename:=Config.GetValue('Filename/Value',''); FFilename:=Config.GetValue('Filename/Value','');
if Project<>nil then if Project<>nil then
FFilename:=Project.NormalizeFilename(FFilename); FFilename:=Project.NormalizeFilename(FFilename);
@ -521,6 +614,7 @@ var
AFilename: String; AFilename: String;
begin begin
Config.SetDeleteValue('Enabled/Value',Enabled,true); Config.SetDeleteValue('Enabled/Value',Enabled,true);
Config.SetDeleteValue('Merge/Value',Merge,true);
AFilename:=FFilename; AFilename:=FFilename;
if Project<>nil then if Project<>nil then
AFilename:=Project.ShortenFilename(AFilename); AFilename:=Project.ShortenFilename(AFilename);
@ -590,9 +684,10 @@ begin
if (not ForceUpdate) and CIncludesValid then exit(mrOk); if (not ForceUpdate) and CIncludesValid then exit(mrOk);
Result:=mrCancel; Result:=mrCancel;
if not FileExistsCached(Filename) then exit; if not FileExistsCached(Filename) then exit;
ClearCIncludes;
FCIncludesFileAge:=FileAge(Filename); FCIncludesFileAge:=FileAge(Filename);
FCIncludesValid:=true; FCIncludesValid:=true;
DebugLn(['TH2PasFile.ReadCIncludes Filename="',Filename,'"']); //DebugLn(['TH2PasFile.ReadCIncludes Filename="',Filename,'"']);
try try
sl:=TStringList.Create; sl:=TStringList.Create;
try try
@ -603,9 +698,10 @@ begin
if SrcFilename='' then continue; if SrcFilename='' then continue;
// add new include // add new include
if FCIncludes=nil then FCIncludes:=TFPList.Create; if FCIncludes=nil then FCIncludes:=TFPList.Create;
Item:=TH2PasFileCInclude.Create; Item:=TH2PasFileCInclude.Create(Self);
Item.SrcFilename:=SrcFilename; Item.SrcFilename:=SrcFilename;
Item.SrcPos:=Point(1,i); Item.SrcPos:=Point(1,i);
//DebugLn(['TH2PasFile.ReadCIncludes Self=',Filename,' include=',SrcFilename,' ',dbgs(Item.SrcPos)]);
FCIncludes.Add(Item); FCIncludes.Add(Item);
end; end;
finally finally
@ -632,6 +728,20 @@ begin
Result:=true; Result:=true;
end; 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 } { TH2PasProject }
function TH2PasProject.GetCHeaderFileCount: integer; function TH2PasProject.GetCHeaderFileCount: integer;
@ -1261,6 +1371,17 @@ begin
Result:=''; Result:='';
end; 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 } { TH2PasConverter }
procedure TH2PasConverter.OnParseH2PasLine(Sender: TObject; procedure TH2PasConverter.OnParseH2PasLine(Sender: TObject;
@ -1480,10 +1601,18 @@ begin
FExecuting:=true; FExecuting:=true;
try try
FLastUsedFilename:=''; FLastUsedFilename:='';
CurResult:=CheckMergeDependencies;
if CurResult=mrAbort then begin
DebugLn(['TH2PasConverter.Execute aborted because merging not possible']);
exit(mrAbort);
end;
// convert every c header file // convert every c header file
for i:=0 to Project.CHeaderFileCount-1 do begin for i:=0 to Project.CHeaderFileCount-1 do begin
AFile:=Project.CHeaderFiles[i]; AFile:=Project.CHeaderFiles[i];
if not AFile.Enabled then continue; if not AFile.Enabled then continue;
if AFile.Merge then continue;
CurResult:=ConvertFile(AFile); CurResult:=ConvertFile(AFile);
if CurResult=mrAbort then begin if CurResult=mrAbort then begin
DebugLn(['TH2PasConverter.Execute aborted on file ',AFile.Filename]); DebugLn(['TH2PasConverter.Execute aborted on file ',AFile.Filename]);
@ -1532,8 +1661,15 @@ begin
FLastUsedFilename:=TextConverter.Filename; FLastUsedFilename:=TextConverter.Filename;
DebugLn(['TH2PasConverter.ConvertFile TempCHeaderFilename="',TempCHeaderFilename,'" CurrentType=',ord(TextConverter.CurrentType),' FileSize=',FileSize(TempCHeaderFilename)]); DebugLn(['TH2PasConverter.ConvertFile TempCHeaderFilename="',TempCHeaderFilename,'" CurrentType=',ord(TextConverter.CurrentType),' FileSize=',FileSize(TempCHeaderFilename)]);
// run converters for .h file to make it compatible for h2pas // merge files
TextConverter.LoadFromFile(InputFilename); 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
Result:=TextConverter.Execute(Project.PreH2PasTools); Result:=TextConverter.Execute(Project.PreH2PasTools);
if Result<>mrOk then begin if Result<>mrOk then begin
DebugLn(['TH2PasConverter.ConvertFile Failed running Project.PreH2PasTools on ',TempCHeaderFilename]); DebugLn(['TH2PasConverter.ConvertFile Failed running Project.PreH2PasTools on ',TempCHeaderFilename]);
@ -1587,6 +1723,141 @@ begin
Result:=mrOk; Result:=mrOk;
end; 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; function TH2PasConverter.GetH2PasFilename: string;
begin begin
Result:=FindDefaultExecutablePath(h2pasFilename); Result:=FindDefaultExecutablePath(h2pasFilename);
@ -2762,6 +3033,16 @@ begin
FFilename:=AValue; FFilename:=AValue;
end; 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); procedure TH2PasFileCInclude.SetSrcFilename(const AValue: string);
begin begin
if FSrcFilename=AValue then exit; if FSrcFilename=AValue then exit;
@ -2774,4 +3055,15 @@ begin
FSrcPos:=AValue; FSrcPos:=AValue;
end; end;
constructor TH2PasFileCInclude.Create(TheOwner: TH2PasFile);
begin
FOwner:=TheOwner;
end;
destructor TH2PasFileCInclude.Destroy;
begin
H2PasFile:=nil;
inherited Destroy;
end;
end. end.

View File

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

View File

@ -1,187 +1,196 @@
{ This is an automatically generated lazarus resource file } { This is an automatically generated lazarus resource file }
LazarusResources.Add('TH2PasDialog','FORMDATA',[ LazarusResources.Add('TH2PasDialog','FORMDATA',[
'TPF0'#12'TH2PasDialog'#11'H2PasDialog'#4'Left'#3#245#0#6'Height'#3#245#1#3'T' 'TPF0'#12'TH2PasDialog'#11'H2PasDialog'#4'Left'#3#245#0#6'Height'#3'%'#2#3'To'
+'op'#3#205#0#5'Width'#3#17#3#18'HorzScrollBar.Page'#3#16#3#18'VertScrollBar.' +'p'#3#205#0#5'Width'#3#17#3#18'HorzScrollBar.Page'#3#16#3#18'VertScrollBar.P'
+'Page'#3#244#1#13'ActiveControl'#7#13'ConvertButton'#7'Caption'#6#11'H2PasDi' +'age'#3'$'#2#13'ActiveControl'#7#13'ConvertButton'#7'Caption'#6#11'H2PasDial'
+'alog'#10'KeyPreview'#9#12'OnCloseQuery'#7#14'FormCloseQuery'#8'OnCreate'#7 +'og'#10'KeyPreview'#9#12'OnCloseQuery'#7#14'FormCloseQuery'#8'OnCreate'#7#10
+#10'FormCreate'#9'OnDestroy'#7#11'FormDestroy'#9'OnKeyDown'#7#11'FormKeyDown' +'FormCreate'#9'OnDestroy'#7#11'FormDestroy'#9'OnKeyDown'#7#11'FormKeyDown'#8
+#8'Position'#7#15'poDesktopCenter'#0#12'TPageControl'#15'MainPageControl'#24 +'Position'#7#15'poDesktopCenter'#0#12'TPageControl'#15'MainPageControl'#24'A'
+'AnchorSideBottom.Control'#7#18'OpenSettingsButton'#6'Height'#3#209#1#5'Widt' +'nchorSideBottom.Control'#7#18'OpenSettingsButton'#6'Height'#3#253#1#5'Width'
+'h'#3#17#3#7'TabStop'#9#10'ActivePage'#7#13'FilesTabSheet'#5'Align'#7#5'alTo' +#3#17#3#10'ActivePage'#7#13'FilesTabSheet'#5'Align'#7#5'alTop'#7'Anchors'#11
+'p'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'TabIndex'#2#0 +#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'TabIndex'#2#0#8'TabOrder'#2#4
+#8'TabOrder'#2#4#0#9'TTabSheet'#13'FilesTabSheet'#7'Caption'#6#13'FilesTabSh' +#0#9'TTabSheet'#13'FilesTabSheet'#7'Caption'#6#13'FilesTabSheet'#0#9'TTreeVi'
+'eet'#0#9'TTreeView'#25'CHeaderFilesCheckTreeView'#6'Height'#3#179#1#5'Width' +'ew'#25'CHeaderFilesCheckTreeView'#6'Height'#3#219#1#5'Width'#3#255#0#5'Alig'
+#3#255#0#5'Align'#7#6'alLeft'#17'DefaultItemHeight'#2#16#11'StateImages'#7#18 +'n'#7#6'alLeft'#17'DefaultItemHeight'#2#18#11'StateImages'#7#18'FileStateIma'
+'FileStateImageList'#8'TabOrder'#2#0#11'OnMouseDown'#7'"CHeaderFilesCheckTre' +'geList'#8'TabOrder'#2#0#10'OnDblClick'#7'!CHeaderFilesCheckTreeViewDblClick'
+'eViewMouseDown'#18'OnSelectionChanged'#7')CHeaderFilesCheckTreeViewSelectio' +#11'OnMouseDown'#7'"CHeaderFilesCheckTreeViewMouseDown'#18'OnSelectionChange'
+'nChanged'#7'Options'#11#19'tvoAllowMultiselect'#17'tvoAutoItemHeight'#16'tv' +'d'#7')CHeaderFilesCheckTreeViewSelectionChanged'#7'Options'#11#19'tvoAllowM'
+'oHideSelection'#21'tvoKeepCollapsedNodes'#14'tvoShowButtons'#12'tvoShowLine' +'ultiselect'#17'tvoAutoItemHeight'#16'tvoHideSelection'#21'tvoKeepCollapsedN'
+'s'#11'tvoShowRoot'#11'tvoToolTips'#0#0#0#7'TButton'#21'AddCHeaderFilesButto' +'odes'#14'tvoShowButtons'#12'tvoShowLines'#11'tvoShowRoot'#11'tvoToolTips'#0
+'n'#22'AnchorSideLeft.Control'#7#21'CHeaderFilesSplitter1'#19'AnchorSideLeft' +#0#0#7'TButton'#17'AddCHeadersButton'#22'AnchorSideLeft.Control'#7#21'CHeade'
+'.Side'#7#9'asrBottom'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#2#12#5'Width'#3 +'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' +#185#0#18'BorderSpacing.Left'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Captio'
+'n'#6#21'AddCHeaderFilesButton'#7'OnClick'#7#26'AddCHeaderFilesButtonClick'#8 +'n'#6#20'DeleteCHeadersButton'#7'OnClick'#7#25'DeleteCHeadersButtonClick'#8
+'TabOrder'#2#1#0#0#7'TButton'#24'DeleteCHeaderFilesButton'#22'AnchorSideLeft' +'TabOrder'#2#2#0#0#7'TButton'#23'EnableAllCHeadersButton'#22'AnchorSideLeft.'
+'.Control'#7#21'CHeaderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom' +'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' +#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#24'DeleteCHeaderF' +'.Left'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#23'EnableAllCHead'
+'ilesButton'#7'OnClick'#7#29'DeleteCHeaderFilesButtonClick'#8'TabOrder'#2#2#0 +'ersButton'#7'OnClick'#7#28'EnableAllCHeadersButtonClick'#8'TabOrder'#2#3#0#0
+#0#7'TButton'#27'EnableAllCHeaderFilesButton'#22'AnchorSideLeft.Control'#7#21 +#7'TButton'#24'DisableAllCHeadersButton'#22'AnchorSideLeft.Control'#7#21'CHe'
+'CHeaderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#4'Left'#3#10#1 +'aderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#4'Left'#3#10#1#6
+#6'Height'#2#25#3'Top'#2'H'#5'Width'#3#185#0#18'BorderSpacing.Left'#2#6#25'B' +'Height'#2#25#3'Top'#2'h'#5'Width'#3#185#0#18'BorderSpacing.Left'#2#6#25'Bor'
+'orderSpacing.InnerBorder'#2#4#7'Caption'#6#27'EnableAllCHeaderFilesButton'#7 +'derSpacing.InnerBorder'#2#4#7'Caption'#6#24'DisableAllCHeadersButton'#7'OnC'
+'OnClick'#7' EnableAllCHeaderFilesButtonClick'#8'TabOrder'#2#3#0#0#7'TButton' +'lick'#7#29'DisableAllCHeadersButtonClick'#8'TabOrder'#2#4#0#0#9'TSplitter'
+#28'DisableAllCHeaderFilesButton'#22'AnchorSideLeft.Control'#7#21'CHeaderFil' +#21'CHeaderFilesSplitter1'#4'Left'#3#255#0#6'Height'#3#219#1#5'Width'#2#5#7
+'esSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#4'Left'#3#10#1#6'Height' +'Beveled'#9#0#0#9'TGroupBox'#16'FileInfoGroupBox'#22'AnchorSideLeft.Control'
+#2#25#3'Top'#2'h'#5'Width'#3#185#0#18'BorderSpacing.Left'#2#6#25'BorderSpaci' +#7#21'CHeaderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#23'Ancho'
+'ng.InnerBorder'#2#4#7'Caption'#6#28'DisableAllCHeaderFilesButton'#7'OnClick' +'rSideRight.Control'#7#13'FilesTabSheet'#20'AnchorSideRight.Side'#7#9'asrBot'
+#7'!DisableAllCHeaderFilesButtonClick'#8'TabOrder'#2#4#0#0#9'TSplitter'#21'C' +'tom'#24'AnchorSideBottom.Control'#7#13'FilesTabSheet'#21'AnchorSideBottom.S'
+'HeaderFilesSplitter1'#4'Left'#3#255#0#6'Height'#3#179#1#5'Width'#2#5#7'Beve' +'ide'#7#9'asrBottom'#4'Left'#3#4#1#6'Height'#3#11#1#3'Top'#3#208#0#5'Width'#3
+'led'#9#0#0#9'TGroupBox'#16'FileInfoGroupBox'#22'AnchorSideLeft.Control'#7#21 +#9#2#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6
+'CHeaderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#23'AnchorSide' +#16'FileInfoGroupBox'#8'TabOrder'#2#5#0#7'TButton'#29'AddIncludedCHeaderFile'
+'Right.Control'#7#13'FilesTabSheet'#20'AnchorSideRight.Side'#7#9'asrBottom' +'sButton'#24'AnchorSideBottom.Control'#7#16'FileInfoGroupBox'#21'AnchorSideB'
+#24'AnchorSideBottom.Control'#7#13'FilesTabSheet'#21'AnchorSideBottom.Side'#7 +'ottom.Side'#7#9'asrBottom'#4'Left'#2#8#6'Height'#2#30#3'Top'#3#210#0#5'Widt'
+#9'asrBottom'#4'Left'#3#4#1#6'Height'#3#227#0#3'Top'#3#208#0#5'Width'#3#9#2#7 +'h'#3#249#0#7'Anchors'#11#6'akLeft'#8'akBottom'#0#8'AutoSize'#9#20'BorderSpa'
+'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6#16'Fil' +'cing.Around'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#29'AddInclu'
+'eInfoGroupBox'#8'TabOrder'#2#5#0#6'TLabel'#13'FileInfoLabel'#4'Left'#2#8#6 +'dedCHeaderFilesButton'#7'OnClick'#7'"AddIncludedCHeaderFilesButtonClick'#8
+'Height'#2#13#3'Top'#2#1#5'Width'#2'I'#7'Caption'#6#13'FileInfoLabel'#5'Colo' +'TabOrder'#2#0#0#0#5'TMemo'#12'FileInfoMemo'#22'AnchorSideLeft.Control'#7#16
+'r'#7#6'clNone'#11'ParentColor'#8#0#0#7'TButton'#29'AddIncludedCHeaderFilesB' +'FileInfoGroupBox'#21'AnchorSideTop.Control'#7#17'MergeFileCheckBox'#18'Anch'
+'utton'#24'AnchorSideBottom.Control'#7#16'FileInfoGroupBox'#21'AnchorSideBot' +'orSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#16'FileInfoGro'
+'tom.Side'#7#9'asrBottom'#4'Left'#2#8#6'Height'#2#26#3'Top'#3#178#0#5'Width' +'upBox'#20'AnchorSideRight.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'
+#3#197#0#7'Anchors'#11#6'akLeft'#8'akBottom'#0#8'AutoSize'#9#20'BorderSpacin' +#7#29'AddIncludedCHeaderFilesButton'#6'Height'#3#183#0#3'Top'#2#21#5'Width'#3
+'g.Around'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#29'AddIncluded' +#5#2#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#5'Color'#7#6
+'CHeaderFilesButton'#7'OnClick'#7'"AddIncludedCHeaderFilesButtonClick'#8'Tab' +'clNone'#8'ReadOnly'#9#8'TabOrder'#2#1#0#0#9'TCheckBox'#17'MergeFileCheckBox'
+'Order'#2#0#0#0#0#7'TButton'#16'MoveFileUpButton'#22'AnchorSideLeft.Control' +#4'Left'#2#8#6'Height'#2#24#3'Top'#2#253#5'Width'#3#168#0#7'Caption'#6#17'Me'
+#7#21'AddCHeaderFilesButton'#21'AnchorSideTop.Control'#7#28'DisableAllCHeade' +'rgeFileCheckBox'#8'TabOrder'#2#2#0#0#0#7'TButton'#16'MoveFileUpButton'#22'A'
+'rFilesButton'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Cont' +'nchorSideLeft.Control'#7#17'AddCHeadersButton'#21'AnchorSideTop.Control'#7
+'rol'#7#21'AddCHeaderFilesButton'#20'AnchorSideRight.Side'#7#9'asrBottom'#4 +#24'DisableAllCHeadersButton'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'Ancho'
+'Left'#3#10#1#6'Height'#2#25#3'Top'#3#135#0#5'Width'#3#185#0#7'Anchors'#11#5 +'rSideRight.Control'#7#17'AddCHeadersButton'#20'AnchorSideRight.Side'#7#9'as'
+'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#6#25'BorderSpacing.In' +'rBottom'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#3#135#0#5'Width'#3#185#0#7'An'
+'nerBorder'#2#4#7'Caption'#6#16'MoveFileUpButton'#7'OnClick'#7#21'MoveFileUp' +'chors'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#6#25'Bord'
+'ButtonClick'#8'TabOrder'#2#6#0#0#7'TButton'#18'MoveFileDownButton'#22'Ancho' +'erSpacing.InnerBorder'#2#4#7'Caption'#6#16'MoveFileUpButton'#7'OnClick'#7#21
+'rSideLeft.Control'#7#21'AddCHeaderFilesButton'#21'AnchorSideTop.Control'#7 ,'MoveFileUpButtonClick'#8'TabOrder'#2#6#0#0#7'TButton'#18'MoveFileDownButton'
+#16'MoveFileUpButton'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRig' +#22'AnchorSideLeft.Control'#7#17'AddCHeadersButton'#21'AnchorSideTop.Control'
+'ht.Control'#7#21'AddCHeaderFilesButton'#20'AnchorSideRight.Side'#7#9'asrBot' +#7#16'MoveFileUpButton'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideR'
+'tom'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#3#166#0#5'Width'#3#185#0#7'Anchor' +'ight.Control'#7#17'AddCHeadersButton'#20'AnchorSideRight.Side'#7#9'asrBotto'
+'s'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#6#25'BorderSp' +'m'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#3#166#0#5'Width'#3#185#0#7'Anchors'
,'acing.InnerBorder'#2#4#7'Caption'#6#18'MoveFileDownButton'#7'OnClick'#7#23 +#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#6#25'BorderSpaci'
+'MoveFileDownButtonClick'#8'TabOrder'#2#7#0#0#0#9'TTabSheet'#16'PreH2PasTabS' +'ng.InnerBorder'#2#4#7'Caption'#6#18'MoveFileDownButton'#7'OnClick'#7#23'Mov'
+'heet'#7'Caption'#6#16'PreH2PasTabSheet'#0#9'TGroupBox'#16'PreH2PasGroupBox' +'eFileDownButtonClick'#8'TabOrder'#2#7#0#0#7'TButton#MergeAllCHeadersExceptC'
+#6'Height'#3#179#1#5'Width'#3#13#3#5'Align'#7#8'alClient'#7'Caption'#6#16'Pr' +'urrentButton'#4'Left'#3#230#1#6'Height'#2#25#3'Top'#2#12#5'Width'#3#184#0#25
+'eH2PasGroupBox'#8'TabOrder'#2#0#0#0#0#9'TTabSheet'#20'h2pasOptionsTabSheet' +'BorderSpacing.InnerBorder'#2#4#7'Caption'#6'#MergeAllCHeadersExceptCurrentB'
+#7'Caption'#6#20'h2pasOptionsTabSheet'#0#6'TLabel'#12'LibNameLabel'#21'Ancho' +'utton'#7'OnClick'#7'(MergeAllCHeadersExceptCurrentButtonClick'#8'TabOrder'#2
+'rSideTop.Control'#7#11'LibnameEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4 +#8#0#0#0#9'TTabSheet'#16'PreH2PasTabSheet'#7'Caption'#6#16'PreH2PasTabSheet'
+'Left'#2#6#6'Height'#2#13#3'Top'#3#25#1#5'Width'#2'Q'#17'BorderSpacing.Top'#2 +#0#9'TGroupBox'#16'PreH2PasGroupBox'#6'Height'#3#219#1#5'Width'#3#13#3#5'Ali'
+#10#7'Caption'#6#12'LibNameLabel'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0 +'gn'#7#8'alClient'#7'Caption'#6#16'PreH2PasGroupBox'#8'TabOrder'#2#0#0#0#0#9
+#6'TLabel'#14'OutputExtLabel'#21'AnchorSideTop.Control'#7#13'OutputExtEdit' +'TTabSheet'#20'h2pasOptionsTabSheet'#7'Caption'#6#20'h2pasOptionsTabSheet'#0
+#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#2#6#6'Height'#2#13#3'Top'#3'9' +#6'TLabel'#12'LibNameLabel'#21'AnchorSideTop.Control'#7#11'LibnameEdit'#18'A'
+#1#5'Width'#2'V'#7'Caption'#6#14'OutputExtLabel'#5'Color'#7#6'clNone'#11'Par' +'nchorSideTop.Side'#7#9'asrCenter'#4'Left'#2#6#6'Height'#2#17#3'Top'#3#23#1#5
+'entColor'#8#0#0#6'TLabel'#14'OutputDirLabel'#21'AnchorSideTop.Control'#7#13 +'Width'#2'i'#17'BorderSpacing.Top'#2#10#7'Caption'#6#12'LibNameLabel'#5'Colo'
+'OutputDirEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#2#6#6'Height'#2 +'r'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#14'OutputExtLabel'#21'Anchor'
+#13#3'Top'#3'V'#1#5'Width'#2'U'#7'Caption'#6#14'OutputDirLabel'#5'Color'#7#6 +'SideTop.Control'#7#13'OutputExtEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4
+'clNone'#11'ParentColor'#8#0#0#5'TEdit'#11'LibnameEdit'#22'AnchorSideLeft.Co' +'Left'#2#6#6'Height'#2#17#3'Top'#3'7'#1#5'Width'#2'r'#7'Caption'#6#14'Output'
+'ntrol'#7#12'LibNameLabel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#18'AnchorS' +'ExtLabel'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#14'OutputDir'
+'ideTop.Side'#7#9'asrBottom'#4'Left'#2']'#6'Height'#2#23#3'Top'#3#20#1#5'Wid' +'Label'#21'AnchorSideTop.Control'#7#13'OutputDirEdit'#18'AnchorSideTop.Side'
+'th'#2'q'#18'BorderSpacing.Left'#2#6#17'BorderSpacing.Top'#2#6#13'OnEditingD' +#7#9'asrCenter'#4'Left'#2#6#6'Height'#2#17#3'Top'#3'T'#1#5'Width'#2'n'#7'Cap'
+'one'#7#22'LibnameEditEditingDone'#8'TabOrder'#2#0#4'Text'#6#11'LibnameEdit' +'tion'#6#14'OutputDirLabel'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#5'TEd'
+#0#0#5'TEdit'#13'OutputExtEdit'#22'AnchorSideLeft.Control'#7#14'OutputExtLab' +'it'#11'LibnameEdit'#22'AnchorSideLeft.Control'#7#12'LibNameLabel'#19'Anchor'
+'el'#19'AnchorSideLeft.Side'#7#9'asrBottom'#18'AnchorSideTop.Side'#7#9'asrBo' +'SideLeft.Side'#7#9'asrBottom'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'
+'ttom'#4'Left'#2'b'#6'Height'#2#23#3'Top'#3'4'#1#5'Width'#2'P'#18'BorderSpac' +#2'u'#6'Height'#2#23#3'Top'#3#20#1#5'Width'#2'q'#18'BorderSpacing.Left'#2#6
+'ing.Left'#2#6#17'BorderSpacing.Top'#2#6#13'OnEditingDone'#7#24'OutputExtEdi' +#17'BorderSpacing.Top'#2#6#13'OnEditingDone'#7#22'LibnameEditEditingDone'#8
+'tEditingDone'#8'TabOrder'#2#1#4'Text'#6#13'OutputExtEdit'#0#0#5'TEdit'#13'O' +'TabOrder'#2#0#4'Text'#6#11'LibnameEdit'#0#0#5'TEdit'#13'OutputExtEdit'#22'A'
+'utputDirEdit'#22'AnchorSideLeft.Control'#7#14'OutputDirLabel'#19'AnchorSide' +'nchorSideLeft.Control'#7#14'OutputExtLabel'#19'AnchorSideLeft.Side'#7#9'asr'
+'Left.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#13'OutputExtEdit'#18 +'Bottom'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2'~'#6'Height'#2#23#3
+'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2'a'#6'Height'#2#23#3'Top'#3'Q'#1 +'Top'#3'4'#1#5'Width'#2'P'#18'BorderSpacing.Left'#2#6#17'BorderSpacing.Top'#2
+#5'Width'#3#141#1#18'BorderSpacing.Left'#2#6#17'BorderSpacing.Top'#2#6#13'On' +#6#13'OnEditingDone'#7#24'OutputExtEditEditingDone'#8'TabOrder'#2#1#4'Text'#6
+'EditingDone'#7#24'OutputDirEditEditingDone'#8'TabOrder'#2#2#4'Text'#6#13'Ou' +#13'OutputExtEdit'#0#0#5'TEdit'#13'OutputDirEdit'#22'AnchorSideLeft.Control'
+'tputDirEdit'#0#0#7'TButton'#21'OutputDirBrowseButton'#22'AnchorSideLeft.Con' +#7#14'OutputDirLabel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTo'
+'trol'#7#13'OutputDirEdit'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorS' +'p.Control'#7#13'OutputExtEdit'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'
+'ideTop.Control'#7#13'OutputDirEdit'#24'AnchorSideBottom.Control'#7#13'Outpu' +#2'z'#6'Height'#2#23#3'Top'#3'Q'#1#5'Width'#3#141#1#18'BorderSpacing.Left'#2
+'tDirEdit'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3#238#1#6'Height' +#6#17'BorderSpacing.Top'#2#6#13'OnEditingDone'#7#24'OutputDirEditEditingDone'
+#2#23#3'Top'#3'Q'#1#5'Width'#2' '#7'Anchors'#11#5'akTop'#6'akLeft'#8'akBotto' +#8'TabOrder'#2#2#4'Text'#6#13'OutputDirEdit'#0#0#7'TButton'#21'OutputDirBrow'
+'m'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#3'...'#7'OnClick'#7#26 +'seButton'#22'AnchorSideLeft.Control'#7#13'OutputDirEdit'#19'AnchorSideLeft.'
+'OutputDirBrowseButtonClick'#8'TabOrder'#2#3#0#0#11'TCheckGroup'#22'h2pasOpt' +'Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#13'OutputDirEdit'#24'Ancho'
+'ionsCheckGroup'#4'Left'#2#6#6'Height'#3#8#1#3'Top'#2#4#5'Width'#3#0#3#8'Aut' +'rSideBottom.Control'#7#13'OutputDirEdit'#21'AnchorSideBottom.Side'#7#9'asrB'
+'oFill'#9#7'Caption'#6#22'h2pasOptionsCheckGroup'#28'ChildSizing.LeftRightSp' +'ottom'#4'Left'#3#7#2#6'Height'#2#23#3'Top'#3'Q'#1#5'Width'#2' '#7'Anchors'
+'acing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHoriz' +#11#5'akTop'#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Cap'
+'ontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24 +'tion'#6#3'...'#7'OnClick'#7#26'OutputDirBrowseButtonClick'#8'TabOrder'#2#3#0
+'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChi' +#0#11'TCheckGroup'#22'h2pasOptionsCheckGroup'#4'Left'#2#6#6'Height'#3#8#1#3
+'lds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Lay' +'Top'#2#4#5'Width'#3#0#3#8'AutoFill'#9#7'Caption'#6#22'h2pasOptionsCheckGrou'
+'out'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#2 +'p'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6
+#7'Columns'#2#2#11'OnItemClick'#7#31'h2pasOptionsCheckGroupItemClick'#8'TabO' +#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSi'
+'rder'#2#4#0#0#0#9'TTabSheet'#17'PostH2PasTabSheet'#7'Caption'#6#17'PostH2Pa' +'zing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkH'
+'sTabSheet'#0#9'TGroupBox'#17'PostH2PasGroupBox'#6'Height'#3#179#1#5'Width'#3 +'orizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScal'
+#13#3#5'Align'#7#8'alClient'#7'Caption'#6#17'PostH2PasGroupBox'#8'TabOrder'#2 +'eChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'Chil'
+#0#0#0#0#9'TTabSheet'#16'SettingsTabSheet'#7'Caption'#6#16'SettingsTabSheet' +'dSizing.ControlsPerLine'#2#2#7'Columns'#2#2#11'OnItemClick'#7#31'h2pasOptio'
+#0#6'TLabel'#18'H2PasFilenameLabel'#21'AnchorSideTop.Control'#7#17'H2PasFile' +'nsCheckGroupItemClick'#8'TabOrder'#2#4#0#0#0#9'TTabSheet'#17'PostH2PasTabSh'
+'nameEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#2#6#6'Height'#2#17#3 +'eet'#7'Caption'#6#17'PostH2PasTabSheet'#0#9'TGroupBox'#17'PostH2PasGroupBox'
+'Top'#2#7#5'Width'#3#155#0#7'Caption'#6#18'H2PasFilenameLabel'#5'Color'#7#6 +#6'Height'#3#219#1#5'Width'#3#13#3#5'Align'#7#8'alClient'#7'Caption'#6#17'Po'
+'clNone'#11'ParentColor'#8#0#0#9'TCheckBox'#30'OpenLastProjectOnStartCheckBo' +'stH2PasGroupBox'#8'TabOrder'#2#0#0#0#0#9'TTabSheet'#16'SettingsTabSheet'#7
+'x'#4'Left'#2#6#6'Height'#2#24#3'Top'#2'*'#5'Width'#3#21#1#7'Caption'#6#30'O' +'Caption'#6#16'SettingsTabSheet'#0#6'TLabel'#18'H2PasFilenameLabel'#21'Ancho'
+'penLastProjectOnStartCheckBox'#8'OnChange'#7'$OpenLastProjectOnStartCheckBo' +'rSideTop.Control'#7#17'H2PasFilenameEdit'#18'AnchorSideTop.Side'#7#9'asrCen'
+'xChange'#8'TabOrder'#2#0#0#0#7'TButton'#20'SaveSettingsAsButton'#4'Left'#2#6 +'ter'#4'Left'#2#6#6'Height'#2#17#3'Top'#2#7#5'Width'#3#155#0#7'Caption'#6#18
+#6'Height'#2#30#3'Top'#2'R'#5'Width'#3#177#0#8'AutoSize'#9#25'BorderSpacing.' +'H2PasFilenameLabel'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#9'TCheckBox'
+'InnerBorder'#2#4#7'Caption'#6#20'SaveSettingsAsButton'#7'OnClick'#7#25'Save' +#30'OpenLastProjectOnStartCheckBox'#4'Left'#2#6#6'Height'#2#24#3'Top'#2'*'#5
+'SettingsAsButtonClick'#8'TabOrder'#2#1#0#0#5'TEdit'#17'H2PasFilenameEdit'#22 +'Width'#3#21#1#7'Caption'#6#30'OpenLastProjectOnStartCheckBox'#8'OnChange'#7
+'AnchorSideLeft.Control'#7#18'H2PasFilenameLabel'#19'AnchorSideLeft.Side'#7#9 ,'$OpenLastProjectOnStartCheckBoxChange'#8'TabOrder'#2#0#0#0#7'TButton'#20'Sa'
+'asrBottom'#4'Left'#3#167#0#6'Height'#2#23#3'Top'#2#4#5'Width'#3'`'#1#18'Bor' +'veSettingsAsButton'#4'Left'#2#6#6'Height'#2#30#3'Top'#2'R'#5'Width'#3#177#0
+'derSpacing.Left'#2#6#17'BorderSpacing.Top'#2#6#13'OnEditingDone'#7#28'H2Pas' +#8'AutoSize'#9#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#20'SaveSetting'
+'FilenameEditEditingDone'#8'TabOrder'#2#2#4'Text'#6#17'H2PasFilenameEdit'#0#0 +'sAsButton'#7'OnClick'#7#25'SaveSettingsAsButtonClick'#8'TabOrder'#2#1#0#0#5
+#7'TButton'#25'h2pasFilenameBrowseButton'#22'AnchorSideLeft.Control'#7#17'H2' +'TEdit'#17'H2PasFilenameEdit'#22'AnchorSideLeft.Control'#7#18'H2PasFilenameL'
,'PasFilenameEdit'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Co' +'abel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#4'Left'#3#167#0#6'Height'#2#23
+'ntrol'#7#17'H2PasFilenameEdit'#24'AnchorSideBottom.Control'#7#17'H2PasFilen' +#3'Top'#2#4#5'Width'#3'`'#1#18'BorderSpacing.Left'#2#6#17'BorderSpacing.Top'
+'ameEdit'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3#7#2#6'Height'#2 +#2#6#13'OnEditingDone'#7#28'H2PasFilenameEditEditingDone'#8'TabOrder'#2#2#4
+#23#3'Top'#2#4#5'Width'#2'#'#7'Anchors'#11#5'akTop'#6'akLeft'#8'akBottom'#0 +'Text'#6#17'H2PasFilenameEdit'#0#0#7'TButton'#25'h2pasFilenameBrowseButton'
+#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#3'...'#7'OnClick'#7#30'h2pas' +#22'AnchorSideLeft.Control'#7#17'H2PasFilenameEdit'#19'AnchorSideLeft.Side'#7
+'FilenameBrowseButtonClick'#8'TabOrder'#2#3#0#0#7'TButton'#17'NewSettingsBut' +#9'asrBottom'#21'AnchorSideTop.Control'#7#17'H2PasFilenameEdit'#24'AnchorSid'
+'ton'#4'Left'#2#6#6'Height'#2#30#3'Top'#2'|'#5'Width'#3#154#0#8'AutoSize'#9 +'eBottom.Control'#7#17'H2PasFilenameEdit'#21'AnchorSideBottom.Side'#7#9'asrB'
+#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#17'NewSettingsButton'#7'OnCl' +'ottom'#4'Left'#3#7#2#6'Height'#2#23#3'Top'#2#4#5'Width'#2'#'#7'Anchors'#11#5
+'ick'#7#22'NewSettingsButtonClick'#8'TabOrder'#2#4#0#0#0#0#7'TButton'#18'Ope' +'akTop'#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'
+'nSettingsButton'#22'AnchorSideLeft.Control'#7#5'Owner'#24'AnchorSideBottom.' +#6#3'...'#7'OnClick'#7#30'h2pasFilenameBrowseButtonClick'#8'TabOrder'#2#3#0#0
+'Control'#7#5'Owner'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#2#5#6 +#7'TButton'#17'NewSettingsButton'#4'Left'#2#6#6'Height'#2#30#3'Top'#2'|'#5'W'
+'Height'#2#26#3'Top'#3#214#1#5'Width'#2'|'#7'Anchors'#11#6'akLeft'#8'akBotto' +'idth'#3#154#0#8'AutoSize'#9#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6
+'m'#0#8'AutoSize'#9#20'BorderSpacing.Around'#2#5#25'BorderSpacing.InnerBorde' +#17'NewSettingsButton'#7'OnClick'#7#22'NewSettingsButtonClick'#8'TabOrder'#2
+'r'#2#4#7'Caption'#6#18'OpenSettingsButton'#7'OnClick'#7#23'OpenSettingsButt' +#4#0#0#0#0#7'TButton'#18'OpenSettingsButton'#22'AnchorSideLeft.Control'#7#5
+'onClick'#8'TabOrder'#2#1#0#0#7'TButton'#18'SaveSettingsButton'#22'AnchorSid' +'Owner'#24'AnchorSideBottom.Control'#7#5'Owner'#21'AnchorSideBottom.Side'#7#9
+'eLeft.Control'#7#18'OpenSettingsButton'#19'AnchorSideLeft.Side'#7#9'asrBott' +'asrBottom'#4'Left'#2#5#6'Height'#2#30#3'Top'#3#2#2#5'Width'#3#161#0#7'Ancho'
+'om'#24'AnchorSideBottom.Control'#7#5'Owner'#21'AnchorSideBottom.Side'#7#9'a' +'rs'#11#6'akLeft'#8'akBottom'#0#8'AutoSize'#9#20'BorderSpacing.Around'#2#5#25
+'srBottom'#4'Left'#3#134#0#6'Height'#2#26#3'Top'#3#214#1#5'Width'#2'z'#7'Anc' +'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#18'OpenSettingsButton'#7'OnClic'
+'hors'#11#6'akLeft'#8'akBottom'#0#8'AutoSize'#9#20'BorderSpacing.Around'#2#5 +'k'#7#23'OpenSettingsButtonClick'#8'TabOrder'#2#1#0#0#7'TButton'#18'SaveSett'
+#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#18'SaveSettingsButton'#7'OnC' +'ingsButton'#22'AnchorSideLeft.Control'#7#18'OpenSettingsButton'#19'AnchorSi'
+'lick'#7#23'SaveSettingsButtonClick'#8'TabOrder'#2#2#0#0#7'TButton'#13'Conve' +'deLeft.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'#7#5'Owner'#21'Anch'
+'rtButton'#22'AnchorSideLeft.Control'#7#18'SaveSettingsButton'#19'AnchorSide' +'orSideBottom.Side'#7#9'asrBottom'#4'Left'#3#171#0#6'Height'#2#30#3'Top'#3#2
+'Left.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#18'OpenSettingsButton' +#2#5'Width'#3#158#0#7'Anchors'#11#6'akLeft'#8'akBottom'#0#8'AutoSize'#9#20'B'
+#4'Left'#3#15#1#6'Height'#2#26#3'Top'#3#214#1#5'Width'#2']'#8'AutoSize'#9#18 +'orderSpacing.Around'#2#5#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#18
+'BorderSpacing.Left'#2#15#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#13 +'SaveSettingsButton'#7'OnClick'#7#23'SaveSettingsButtonClick'#8'TabOrder'#2#2
+'ConvertButton'#7'OnClick'#7#18'ConvertButtonClick'#8'TabOrder'#2#0#0#0#7'TB' +#0#0#7'TButton'#13'ConvertButton'#22'AnchorSideLeft.Control'#7#18'SaveSettin'
+'utton'#11'CloseButton'#23'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSide' +'gsButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7
+'Right.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'#7#5'Owner'#21'Ancho' +#18'OpenSettingsButton'#4'Left'#3'X'#1#6'Height'#2#30#3'Top'#3#2#2#5'Width'#2
+'rSideBottom.Side'#7#9'asrBottom'#4'Left'#3#187#2#6'Height'#2#26#3'Top'#3#214 +'w'#8'AutoSize'#9#18'BorderSpacing.Left'#2#15#25'BorderSpacing.InnerBorder'#2
+#1#5'Width'#2'Q'#7'Anchors'#11#7'akRight'#8'akBottom'#0#8'AutoSize'#9#20'Bor' +#4#7'Caption'#6#13'ConvertButton'#7'OnClick'#7#18'ConvertButtonClick'#8'TabO'
+'derSpacing.Around'#2#5#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#11'Cl' +'rder'#2#0#0#0#7'TButton'#11'CloseButton'#23'AnchorSideRight.Control'#7#5'Ow'
+'oseButton'#7'OnClick'#7#16'CloseButtonClick'#8'TabOrder'#2#3#0#0#7'TButton' +'ner'#20'AnchorSideRight.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'#7
+#21'ConvertAndBuildButton'#22'AnchorSideLeft.Control'#7#13'ConvertButton'#19 +#5'Owner'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3#165#2#6'Height'
+'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#18'OpenSett' +#2#30#3'Top'#3#2#2#5'Width'#2'g'#7'Anchors'#11#7'akRight'#8'akBottom'#0#8'Au'
+'ingsButton'#4'Left'#3'r'#1#6'Height'#2#26#3'Top'#3#214#1#5'Width'#3#144#0#8 +'toSize'#9#20'BorderSpacing.Around'#2#5#25'BorderSpacing.InnerBorder'#2#4#7
+'AutoSize'#9#18'BorderSpacing.Left'#2#6#25'BorderSpacing.InnerBorder'#2#4#7 +'Caption'#6#11'CloseButton'#7'OnClick'#7#16'CloseButtonClick'#8'TabOrder'#2#3
+'Caption'#6#21'ConvertAndBuildButton'#7'OnClick'#7#26'ConvertAndBuildButtonC' +#0#0#7'TButton'#21'ConvertAndBuildButton'#22'AnchorSideLeft.Control'#7#13'Co'
+'lick'#8'TabOrder'#2#5#0#0#10'TImageList'#18'FileStateImageList'#4'left'#3 +'nvertButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Contro'
+#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 +'l'#7#18'OpenSettingsButton'#4'Left'#3#213#1#6'Height'#2#30#3'Top'#3#2#2#5'W'
+#0#0'/* XPM */'#10'static char * pkg_removedfiles_xpm[] = {'#10'"14 13 10 1"' +'idth'#3#183#0#8'AutoSize'#9#18'BorderSpacing.Left'#2#6#25'BorderSpacing.Inn'
+','#10'" '#9'c None",'#10'".'#9'c #000044",'#10'"+'#9'c #000055",'#10'"@'#9 +'erBorder'#2#4#7'Caption'#6#21'ConvertAndBuildButton'#7'OnClick'#7#26'Conver'
+'c #FF1414",'#10'"#'#9'c #000084",'#10'"$'#9'c #000033",'#10'"%'#9'c #FFFFFF' +'tAndBuildButtonClick'#8'TabOrder'#2#5#0#0#10'TImageList'#18'FileStateImageL'
+'",'#10'"&'#9'c #D5D5EF",'#10'"*'#9'c #CBCBCB",'#10'"='#9'c #000000",'#10'" ' +'ist'#4'left'#3#136#0#3'top'#2'^'#6'Bitmap'#10'}'#3#0#0'li'#2#0#0#0#16#0#0#0
+' ..++.... ",'#10'" .@@####. @@ ",'#10'" $%@@%%&.@@ ",'#10'" $*%@@..@' +#16#0#0#0#191#1#0#0'/* XPM */'#10'static char * pkg_removedfiles_xpm[] = {'
+'@.. ",'#10'" =%%.@@@@... ",'#10'"...++$%@@%%&=%",'#10'".....$@@@@&&=%",'#10 +#10'"14 13 10 1",'#10'" '#9'c None",'#10'".'#9'c #000044",'#10'"+'#9'c #0000'
+'".%*%%@@%%@@&=%",'#10'".*%%@@%&&&@@=%",'#10'".%%@@======@@%",'#10'".%@@&&&=' +'55",'#10'"@'#9'c #FF1414",'#10'"#'#9'c #000084",'#10'"$'#9'c #000033",'#10
+'%%%%@%",'#10'".@@=====% ",'#10'" %%%%%%%% "};'#10#168#1#0#0'/* XPM ' +'"%'#9'c #FFFFFF",'#10'"&'#9'c #D5D5EF",'#10'"*'#9'c #CBCBCB",'#10'"='#9'c #'
+'*/'#10'static char * pkg_files_xpm[] = {'#10'"14 13 9 1",'#10'" '#9'c None"' +'000000",'#10'" ..++.... ",'#10'" .@@####. @@ ",'#10'" $%@@%%&.@@ ",'
+','#10'".'#9'c #000044",'#10'"+'#9'c #000055",'#10'"@'#9'c #000084",'#10'"#' +#10'" $*%@@..@@.. ",'#10'" =%%.@@@@... ",'#10'"...++$%@@%%&=%",'#10'".....'
+#9'c #000033",'#10'"$'#9'c #FFFFFF",'#10'"%'#9'c #CBCBCB",'#10'"&'#9'c #D5D5' +'$@@@@&&=%",'#10'".%*%%@@%%@@&=%",'#10'".*%%@@%&&&@@=%",'#10'".%%@@======@@%'
+'EF",'#10'"*'#9'c #000000",'#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'".....#%$$$&&*$",'#10'".$%$$*$$$&$&*$",'#10'".%$$$*$&&&&&*$",' +#10'" '#9'c None",'#10'".'#9'c #000044",'#10'"+'#9'c #000055",'#10'"@'#9'c #'
+#10'".$$$$********$",'#10'".$&&&&&*$$$$$$",'#10'".*******$ ",'#10'" $$$$' +'000084",'#10'"#'#9'c #000033",'#10'"$'#9'c #FFFFFF",'#10'"%'#9'c #CBCBCB",'
+'$$$$ "};'#10#0#0#0 +#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 }
TH2PasDialog = class(TForm) TH2PasDialog = class(TForm)
MergeAllCHeadersExceptCurrentButton: TButton;
MergeFileCheckBox: TCheckBox;
FileInfoMemo: TMemo;
FileStateImageList: TImageList; FileStateImageList: TImageList;
MoveFileDownButton: TButton; MoveFileDownButton: TButton;
MoveFileUpButton: TButton; MoveFileUpButton: TButton;
ConvertAndBuildButton: TButton; ConvertAndBuildButton: TButton;
FileInfoGroupBox: TGroupBox; FileInfoGroupBox: TGroupBox;
FileInfoLabel: TLabel;
MainPageControl: TPageControl; MainPageControl: TPageControl;
AddIncludedCHeaderFilesButton: TButton; AddIncludedCHeaderFilesButton: TButton;
// c header files // c header files
FilesTabSheet: TTabSheet; FilesTabSheet: TTabSheet;
CHeaderFilesSplitter1: TSplitter; CHeaderFilesSplitter1: TSplitter;
AddCHeaderFilesButton: TButton; AddCHeadersButton: TButton;
DisableAllCHeaderFilesButton: TButton; DisableAllCHeadersButton: TButton;
EnableAllCHeaderFilesButton: TButton; EnableAllCHeadersButton: TButton;
DeleteCHeaderFilesButton: TButton; DeleteCHeadersButton: TButton;
CHeaderFilesCheckTreeView: TTreeView; CHeaderFilesCheckTreeView: TTreeView;
// pre h2pas // pre h2pas
@ -90,8 +92,9 @@ type
ConvertButton: TButton; ConvertButton: TButton;
CloseButton: TButton; CloseButton: TButton;
procedure AddCHeaderFilesButtonClick(Sender: TObject); procedure AddCHeadersButtonClick(Sender: TObject);
procedure AddIncludedCHeaderFilesButtonClick(Sender: TObject); procedure AddIncludedCHeaderFilesButtonClick(Sender: TObject);
procedure CHeaderFilesCheckTreeViewDblClick(Sender: TObject);
procedure CHeaderFilesCheckTreeViewMouseDown(Sender: TOBject; procedure CHeaderFilesCheckTreeViewMouseDown(Sender: TOBject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure CHeaderFilesCheckTreeViewSelectionChanged(Sender: TObject); procedure CHeaderFilesCheckTreeViewSelectionChanged(Sender: TObject);
@ -99,13 +102,14 @@ type
procedure ConstantsInsteadOfEnumsCheckBoxChange(Sender: TObject); procedure ConstantsInsteadOfEnumsCheckBoxChange(Sender: TObject);
procedure ConvertAndBuildButtonClick(Sender: TObject); procedure ConvertAndBuildButtonClick(Sender: TObject);
procedure ConvertButtonClick(Sender: TObject); procedure ConvertButtonClick(Sender: TObject);
procedure DeleteCHeaderFilesButtonClick(Sender: TObject); procedure DeleteCHeadersButtonClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject); procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure H2PasFilenameEditEditingDone(Sender: TObject); procedure H2PasFilenameEditEditingDone(Sender: TObject);
procedure LibnameEditEditingDone(Sender: TObject); procedure LibnameEditEditingDone(Sender: TObject);
procedure MergeAllCHeadersExceptCurrentButtonClick(Sender: TObject);
procedure MoveFileDownButtonClick(Sender: TObject); procedure MoveFileDownButtonClick(Sender: TObject);
procedure MoveFileUpButtonClick(Sender: TObject); procedure MoveFileUpButtonClick(Sender: TObject);
procedure NewSettingsButtonClick(Sender: TObject); procedure NewSettingsButtonClick(Sender: TObject);
@ -118,8 +122,8 @@ type
procedure PreH2PasEditModified(Sender: TObject); procedure PreH2PasEditModified(Sender: TObject);
procedure SaveSettingsAsButtonClick(Sender: TObject); procedure SaveSettingsAsButtonClick(Sender: TObject);
procedure SaveSettingsButtonClick(Sender: TObject); procedure SaveSettingsButtonClick(Sender: TObject);
procedure EnableAllCHeaderFilesButtonClick(Sender: TObject); procedure EnableAllCHeadersButtonClick(Sender: TObject);
procedure DisableAllCHeaderFilesButtonClick(Sender: TObject); procedure DisableAllCHeadersButtonClick(Sender: TObject);
procedure h2pasFilenameBrowseButtonClick(Sender: TObject); procedure h2pasFilenameBrowseButtonClick(Sender: TObject);
procedure h2pasOptionsCheckGroupItemClick(Sender: TObject; Index: LongInt); procedure h2pasOptionsCheckGroupItemClick(Sender: TObject; Index: LongInt);
procedure OnShowSrcEditSection(Sender: TObject); procedure OnShowSrcEditSection(Sender: TObject);
@ -131,18 +135,20 @@ type
function GetProject: TH2PasProject; function GetProject: TH2PasProject;
procedure UpdateAll; procedure UpdateAll(ScanIncludes: boolean);
procedure UpdateProjectChanged; // show project settings procedure UpdateProjectChanged(ScanIncludes: boolean); // show project settings
procedure UpdateCaption; procedure UpdateCaption;
procedure UpdateFileInfo; procedure UpdateFileInfo;
procedure ClearMessages; procedure ClearMessages;
procedure CreateLazarusMenuItems; procedure CreateLazarusMenuItems;
function GetNodeFilename(Node: TTreeNode): string;
function GetCurrentCHeaderFile: TH2PasFile; function GetCurrentCHeaderFile: TH2PasFile;
procedure MoveCurrentFile(Offset: integer); procedure MoveCurrentFile(Offset: integer);
function GetFileNodeStateIndex(aFile: TH2PasFile): Integer; function GetFileNodeStateIndex(aFile: TH2PasFile): Integer;
procedure MarkAllCHeadersExceptCurrentToMerge;
// project settings // project settings
procedure UpdateFilesPage; procedure UpdateFilesPage(ScanIncludes: boolean);
procedure UpdateH2PasPage; procedure UpdateH2PasPage;
procedure UpdateConvertPage; procedure UpdateConvertPage;
// global settings // global settings
@ -220,14 +226,16 @@ procedure TH2PasDialog.FormCreate(Sender: TObject);
begin begin
Caption:=h2pCHeaderFileConverter; Caption:=h2pCHeaderFileConverter;
FilesTabSheet.Caption:='C header files'; FilesTabSheet.Caption:='C header files';
AddCHeaderFilesButton.Caption:='Add .h files ...'; AddCHeadersButton.Caption:='Add .h files ...';
DeleteCHeaderFilesButton.Caption:='Delete selected .h files'; DeleteCHeadersButton.Caption:='Delete selected .h files';
EnableAllCHeaderFilesButton.Caption:='Enable all .h files'; EnableAllCHeadersButton.Caption:='Enable all .h files';
DisableAllCHeaderFilesButton.Caption:='Disable all .h files'; DisableAllCHeadersButton.Caption:='Disable all .h files';
MoveFileDownButton.Caption:='Move file down'; MoveFileDownButton.Caption:='Move file down';
MoveFileUpButton.Caption:='Move file up'; MoveFileUpButton.Caption:='Move file up';
FileInfoGroupBox.Caption:='File information'; FileInfoGroupBox.Caption:='File information';
AddIncludedCHeaderFilesButton.Caption:='Add included .h files'; AddIncludedCHeaderFilesButton.Caption:='Add included .h files';
MergeAllCHeadersExceptCurrentButton.Caption:='Merge all but this';
MergeFileCheckBox.Caption:='Merge file';
h2pasOptionsTabSheet.Caption:='h2pas Options'; h2pasOptionsTabSheet.Caption:='h2pas Options';
h2pasOptionsCheckGroup.Caption:='Options'; h2pasOptionsCheckGroup.Caption:='Options';
with h2pasOptionsCheckGroup.Items do begin with h2pasOptionsCheckGroup.Items do begin
@ -301,7 +309,7 @@ begin
PostH2PasEdit.ListOfTools:=Project.PostH2PasTools; PostH2PasEdit.ListOfTools:=Project.PostH2PasTools;
end; end;
UpdateAll; UpdateAll(false);
end; end;
procedure TH2PasDialog.FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure TH2PasDialog.FormCloseQuery(Sender: TObject; var CanClose: boolean);
@ -344,7 +352,7 @@ begin
Convert; Convert;
end; end;
procedure TH2PasDialog.DeleteCHeaderFilesButtonClick(Sender: TObject); procedure TH2PasDialog.DeleteCHeadersButtonClick(Sender: TObject);
var var
DeleteFiles: TStringList; DeleteFiles: TStringList;
Node: TTreeNode; Node: TTreeNode;
@ -354,7 +362,7 @@ begin
while Node<>nil do begin while Node<>nil do begin
if Node.Parent=nil then begin if Node.Parent=nil then begin
// top lvl node is a .h file // top lvl node is a .h file
DeleteFiles.Add(Project.LongenFilename(Node.Text)); DeleteFiles.Add(GetNodeFilename(Node));
end; end;
Node:=Node.GetNextMultiSelected; Node:=Node.GetNextMultiSelected;
end; end;
@ -367,12 +375,12 @@ begin
then begin then begin
Project.DeleteFiles(DeleteFiles); Project.DeleteFiles(DeleteFiles);
end; end;
UpdateFilesPage; UpdateFilesPage(true);
end; end;
DeleteFiles.Free; DeleteFiles.Free;
end; end;
procedure TH2PasDialog.AddCHeaderFilesButtonClick(Sender: TObject); procedure TH2PasDialog.AddCHeadersButtonClick(Sender: TObject);
var var
OpenDialog: TOpenDialog; OpenDialog: TOpenDialog;
begin begin
@ -384,7 +392,7 @@ begin
OpenDialog.Filter:='C header file (*.h)|*.h|All files (*.*)|'+FileMask; OpenDialog.Filter:='C header file (*.h)|*.h|All files (*.*)|'+FileMask;
if OpenDialog.Execute then begin if OpenDialog.Execute then begin
Project.AddFiles(OpenDialog.Files); Project.AddFiles(OpenDialog.Files);
UpdateFilesPage; UpdateFilesPage(true);
end; end;
finally finally
StoreIDEFileDialog(OpenDialog); StoreIDEFileDialog(OpenDialog);
@ -406,7 +414,7 @@ begin
StateIconLeft:=Node.DisplayStateIconLeft; StateIconLeft:=Node.DisplayStateIconLeft;
if (x>=StateIconLeft) and (x<StateIconLeft+FileStateImageList.Width) then if (x>=StateIconLeft) and (x<StateIconLeft+FileStateImageList.Width) then
begin begin
AFilename:=Project.LongenFilename(Node.Text); AFilename:=GetNodeFilename(Node);
CurFile:=Project.CHeaderFileWithFilename(AFilename); CurFile:=Project.CHeaderFileWithFilename(AFilename);
if CurFile=nil then exit; if CurFile=nil then exit;
CurFile.Enabled:=not CurFile.Enabled; CurFile.Enabled:=not CurFile.Enabled;
@ -449,12 +457,13 @@ begin
s:=s+#13+CurFilename; s:=s+#13+CurFilename;
end; end;
if QuestionDlg('Add .h files?', if QuestionDlg('Add .h files?',
'Add these .h files to h2pas project:'#13#13 'Add these .h files to h2pas project:'#13
+s+#13+'?', +s+#13+'?',
mtConfirmation,[mbYes,mbNo],0)=mrYes mtConfirmation,[mrYes,mrNo],0)=mrYes
then begin then begin
Project.AddFiles(sl); Project.AddFiles(sl);
UpdateFilesPage; Project.ReadAllCIncludes(true);
UpdateFilesPage(false);
end; end;
end; end;
finally finally
@ -462,6 +471,15 @@ begin
end; end;
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 procedure TH2PasDialog.CHeaderFilesCheckTreeViewSelectionChanged(Sender: TObject
); );
begin begin
@ -500,6 +518,12 @@ begin
Project.Libname:=LibnameEdit.Text; Project.Libname:=LibnameEdit.Text;
end; end;
procedure TH2PasDialog.MergeAllCHeadersExceptCurrentButtonClick(Sender: TObject
);
begin
MarkAllCHeadersExceptCurrentToMerge;
end;
procedure TH2PasDialog.MoveFileDownButtonClick(Sender: TObject); procedure TH2PasDialog.MoveFileDownButtonClick(Sender: TObject);
begin begin
MoveCurrentFile(1); MoveCurrentFile(1);
@ -514,7 +538,7 @@ procedure TH2PasDialog.NewSettingsButtonClick(Sender: TObject);
begin begin
Project.Filename:=''; Project.Filename:='';
Project.Clear(true); Project.Clear(true);
UpdateAll; UpdateAll(true);
end; end;
procedure TH2PasDialog.OpenLastProjectOnStartCheckBoxChange(Sender: TObject); procedure TH2PasDialog.OpenLastProjectOnStartCheckBoxChange(Sender: TObject);
@ -581,7 +605,7 @@ begin
SaveProject('',[]); SaveProject('',[]);
end; end;
procedure TH2PasDialog.EnableAllCHeaderFilesButtonClick(Sender: TObject); procedure TH2PasDialog.EnableAllCHeadersButtonClick(Sender: TObject);
var var
i: Integer; i: Integer;
begin begin
@ -594,7 +618,7 @@ begin
UpdateFileInfo; UpdateFileInfo;
end; end;
procedure TH2PasDialog.DisableAllCHeaderFilesButtonClick(Sender: TObject); procedure TH2PasDialog.DisableAllCHeadersButtonClick(Sender: TObject);
var var
i: Integer; i: Integer;
begin begin
@ -697,19 +721,19 @@ begin
Result:=Converter.Project; Result:=Converter.Project;
end; end;
procedure TH2PasDialog.UpdateAll; procedure TH2PasDialog.UpdateAll(ScanIncludes: boolean);
begin begin
UpdateCaption; UpdateCaption;
UpdateFilesPage; UpdateFilesPage(ScanIncludes);
UpdateH2PasPage; UpdateH2PasPage;
UpdateConvertPage; UpdateConvertPage;
UpdateSettingsPage; UpdateSettingsPage;
end; end;
procedure TH2PasDialog.UpdateProjectChanged; procedure TH2PasDialog.UpdateProjectChanged(ScanIncludes: boolean);
begin begin
UpdateCaption; UpdateCaption;
UpdateFilesPage; UpdateFilesPage(ScanIncludes);
UpdateH2PasPage; UpdateH2PasPage;
UpdateConvertPage; UpdateConvertPage;
end; end;
@ -747,17 +771,29 @@ begin
s:=s+#13#13+'Includes:'; s:=s+#13#13+'Includes:';
for i:=0 to AFile.CIncludeCount-1 do begin for i:=0 to AFile.CIncludeCount-1 do begin
IncFile:=AFile.CIncludes[i]; 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; end;
AddIncludedCHeaderFilesButton.Visible:=true; AddIncludedCHeaderFilesButton.Enabled:=true;
end else begin end else begin
AddIncludedCHeaderFilesButton.Visible:=false; AddIncludedCHeaderFilesButton.Enabled:=false;
end; 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 end else begin
FileInfoLabel.Caption:='No file selected.'; FileInfoMemo.Caption:='No file selected.';
AddIncludedCHeaderFilesButton.Visible:=false; MergeFileCheckBox.Enabled:=false;
AddIncludedCHeaderFilesButton.Enabled:=false;
end; end;
end; end;
@ -780,6 +816,17 @@ begin
@OnAddSearchAndReplaceBeforeH2PasClick); @OnAddSearchAndReplaceBeforeH2PasClick);
end; 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; function TH2PasDialog.GetCurrentCHeaderFile: TH2PasFile;
var var
AFilename: String; AFilename: String;
@ -788,7 +835,7 @@ begin
Result:=nil; Result:=nil;
Node:=CHeaderFilesCheckTreeView.Selected; Node:=CHeaderFilesCheckTreeView.Selected;
if (Node=nil) or (Node.Parent<>nil) then exit; if (Node=nil) or (Node.Parent<>nil) then exit;
AFilename:=Project.LongenFilename(Node.Text); AFilename:=GetNodeFilename(Node);
Result:=Project.CHeaderFileWithFilename(AFilename); Result:=Project.CHeaderFileWithFilename(AFilename);
end; end;
@ -805,7 +852,7 @@ begin
end; end;
Node:=CHeaderFilesCheckTreeView.Selected; Node:=CHeaderFilesCheckTreeView.Selected;
if (Node=nil) or (Node.Parent<>nil) then exit; if (Node=nil) or (Node.Parent<>nil) then exit;
AFilename:=Project.LongenFilename(Node.Text); AFilename:=GetNodeFilename(Node);
Index:=Project.CHeaderFileIndexWithFilename(AFilename); Index:=Project.CHeaderFileIndexWithFilename(AFilename);
if Index<0 then begin if Index<0 then begin
DebugLn(['TH2PasDialog.MoveCurrentFile not found: Filename=',AFilename]); DebugLn(['TH2PasDialog.MoveCurrentFile not found: Filename=',AFilename]);
@ -832,7 +879,23 @@ begin
Result:=0; Result:=0;
end; 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 var
i: Integer; i: Integer;
CurFile: TH2PasFile; CurFile: TH2PasFile;
@ -841,8 +904,10 @@ var
OldExpandedState: TTreeNodeExpandedState; OldExpandedState: TTreeNodeExpandedState;
Node: TTreeNode; Node: TTreeNode;
OldSelected: String; OldSelected: String;
j: Integer;
begin begin
CHeaderFilesCheckTreeView.ConsistencyCheck; if ScanIncludes and (Project<>nil) then
Project.ReadAllCIncludes(false);
CHeaderFilesCheckTreeView.BeginUpdate; CHeaderFilesCheckTreeView.BeginUpdate;
OldSelection:=nil; OldSelection:=nil;
OldExpandedState:=TTreeNodeExpandedState.Create(CHeaderFilesCheckTreeView); OldExpandedState:=TTreeNodeExpandedState.Create(CHeaderFilesCheckTreeView);
@ -866,10 +931,15 @@ begin
for i:=0 to Project.CHeaderFileCount-1 do begin for i:=0 to Project.CHeaderFileCount-1 do begin
CurFile:=Project.CHeaderFiles[i]; CurFile:=Project.CHeaderFiles[i];
s:=Project.ShortenFilename(CurFile.Filename); s:=Project.ShortenFilename(CurFile.Filename);
if CurFile.CIncludedByCount>0 then
s:=s+' (included by '+IntToStr(CurFile.CIncludedByCount)+')';
Node:=CHeaderFilesCheckTreeView.Items.Add(nil,s); Node:=CHeaderFilesCheckTreeView.Items.Add(nil,s);
Node.MultiSelected:=OldSelection.IndexOf(Node.GetTextPath)>=0; Node.MultiSelected:=OldSelection.IndexOf(Node.GetTextPath)>=0;
Node.Selected:=Node.Text=OldSelected; Node.Selected:=Node.Text=OldSelected;
Node.StateIndex:=GetFileNodeStateIndex(CurFile); Node.StateIndex:=GetFileNodeStateIndex(CurFile);
for j:=0 to CurFile.CIncludeCount-1 do begin
end;
end; end;
// restore expanded state // restore expanded state
@ -1196,7 +1266,7 @@ begin
Project.Filename:=NewFilename; Project.Filename:=NewFilename;
end; end;
UpdateProjectChanged; UpdateProjectChanged(true);
end; end;
initialization initialization

View File

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

View File

@ -339,6 +339,7 @@ var
DesignerMenuDeleteSelection: TIDEMenuCommand; DesignerMenuDeleteSelection: TIDEMenuCommand;
DesignerMenuChangeClass: TIDEMenuCommand; DesignerMenuChangeClass: TIDEMenuCommand;
DesignerMenuChangeParent: TIDEMenuSection;
DesignerMenuViewLFM: TIDEMenuCommand; DesignerMenuViewLFM: TIDEMenuCommand;
DesignerMenuSaveAsXML: TIDEMenuCommand; DesignerMenuSaveAsXML: TIDEMenuCommand;
@ -419,6 +420,9 @@ begin
'Miscellaneous section'); 'Miscellaneous section');
DesignerMenuChangeClass:=RegisterIDEMenuCommand(DesignerMenuSectionMisc, DesignerMenuChangeClass:=RegisterIDEMenuCommand(DesignerMenuSectionMisc,
'Change class',lisChangeClass); 'Change class',lisChangeClass);
DesignerMenuChangeParent:=RegisterIDEMenuSection(DesignerMenuSectionMisc,
'Change parent');
DesignerMenuChangeParent.Caption:=lisChangeParent;
DesignerMenuViewLFM:=RegisterIDEMenuCommand(DesignerMenuSectionMisc, DesignerMenuViewLFM:=RegisterIDEMenuCommand(DesignerMenuSectionMisc,
'View LFM',lisViewSourceLfm); 'View LFM',lisViewSourceLfm);
DesignerMenuSaveAsXML:=RegisterIDEMenuCommand(DesignerMenuSectionMisc, DesignerMenuSaveAsXML:=RegisterIDEMenuCommand(DesignerMenuSectionMisc,
@ -2701,6 +2705,56 @@ var
CompsAreSelected: boolean; CompsAreSelected: boolean;
OneControlSelected: Boolean; OneControlSelected: Boolean;
SelectionVisible: 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 begin
ControlSelIsNotEmpty:=(ControlSelection.Count>0) ControlSelIsNotEmpty:=(ControlSelection.Count>0)
and (ControlSelection.SelectionForm=Form); and (ControlSelection.SelectionForm=Form);
@ -2733,6 +2787,7 @@ begin
DesignerMenuDeleteSelection.Enabled:= CompsAreSelected; DesignerMenuDeleteSelection.Enabled:= CompsAreSelected;
DesignerMenuChangeClass.Enabled:= CompsAreSelected and (ControlSelection.Count=1); DesignerMenuChangeClass.Enabled:= CompsAreSelected and (ControlSelection.Count=1);
UpdateChangeParentMenu;
DesignerMenuSnapToGridOption.Checked:=EnvironmentOptions.SnapToGrid; DesignerMenuSnapToGridOption.Checked:=EnvironmentOptions.SnapToGrid;
DesignerMenuSnapToGuideLinesOption.Checked:=EnvironmentOptions.SnapToGuideLines; DesignerMenuSnapToGuideLinesOption.Checked:=EnvironmentOptions.SnapToGuideLines;

View File

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