From e35dc827ab7dbe7098c7a52edfaf483e4417658f Mon Sep 17 00:00:00 2001 From: mattias Date: Wed, 7 Feb 2007 01:19:00 +0000 Subject: [PATCH] IDE: started code browser git-svn-id: trunk@10598 - --- .gitattributes | 19 +- components/codetools/customcodetool.pas | 23 +- components/h2pas/h2pasconvert.pas | 159 +++++ components/h2pas/h2pasdlg.lfm | 72 ++- components/h2pas/h2pasdlg.lrs | 336 +++++------ components/h2pas/h2pasdlg.pas | 67 +++ .../simpleideintf/examples/testh2pastool.lpi | 12 +- .../simpleideintf/examples/testh2pastool.lpr | 26 - ide/codebrowser.lfm | 164 ++++++ ide/codebrowser.lrs | 55 ++ ide/codebrowser.pas | 555 ++++++++++++++++++ ide/ideoptiondefs.pas | 6 +- ide/keymapping.pp | 3 + ide/lazarusidestrconsts.pas | 2 + ide/main.pp | 30 +- ide/mainbar.pas | 1 + ide/mainbase.pas | 4 +- ideintf/idecommands.pas | 5 +- images/README.txt | 2 +- images/{downarrow.ico => arrow_down.ico} | Bin images/{downarrow.xpm => arrow_down.xpm} | 0 images/{leftarrow.ico => arrow_left.ico} | Bin images/{leftarrow.xpm => arrow_left.xpm} | 0 images/{rightarrow.ico => arrow_right.ico} | Bin images/{rightarrow.xpm => arrow_right.xpm} | 0 images/{uparrow.ico => arrow_up.ico} | Bin images/{uparrow.xpm => arrow_up.xpm} | 0 images/laz_images.lrs | 235 ++++++++ 28 files changed, 1532 insertions(+), 244 deletions(-) create mode 100644 ide/codebrowser.lfm create mode 100644 ide/codebrowser.lrs create mode 100644 ide/codebrowser.pas rename images/{downarrow.ico => arrow_down.ico} (100%) rename images/{downarrow.xpm => arrow_down.xpm} (100%) rename images/{leftarrow.ico => arrow_left.ico} (100%) rename images/{leftarrow.xpm => arrow_left.xpm} (100%) rename images/{rightarrow.ico => arrow_right.ico} (100%) rename images/{rightarrow.xpm => arrow_right.xpm} (100%) rename images/{uparrow.ico => arrow_up.ico} (100%) rename images/{uparrow.xpm => arrow_up.xpm} (100%) diff --git a/.gitattributes b/.gitattributes index 652d292b91..0d7aab1d93 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1331,6 +1331,9 @@ ide/cleandirdlg.lfm svneol=native#text/plain ide/cleandirdlg.lrs svneol=native#text/pascal ide/cleandirdlg.pas svneol=native#text/pascal ide/clipboardhistory.pas svneol=native#text/pascal +ide/codebrowser.lfm svneol=native#text/plain +ide/codebrowser.lrs svneol=native#text/plain +ide/codebrowser.pas svneol=native#text/plain ide/codecontextform.pas svneol=native#text/plain ide/codeexplopts.lfm svneol=native#text/plain ide/codeexplopts.lrs svneol=native#text/pascal @@ -1723,6 +1726,14 @@ images/LazarusProject.ico -text svneol=unset#image/x-icon images/LazarusSource.bmp -text svneol=unset#image/bmp images/LazarusSource.ico -text svneol=unset#image/x-icon images/README.txt svneol=native#text/plain +images/arrow_down.ico -text svneol=unset#image/x-icon +images/arrow_down.xpm -text svneol=native#image/x-xpixmap +images/arrow_left.ico -text svneol=unset#image/x-icon +images/arrow_left.xpm -text svneol=native#image/x-xpixmap +images/arrow_right.ico -text svneol=unset#image/x-icon +images/arrow_right.xpm -text svneol=native#image/x-xpixmap +images/arrow_up.ico -text svneol=unset#image/x-icon +images/arrow_up.xpm -text svneol=native#image/x-xpixmap images/bookmark.lrs svneol=native#text/pascal images/btn_downarrow.ico -text svneol=unset#image/x-icon images/btn_downarrow.xpm -text svneol=native#image/x-xpixmap @@ -1949,8 +1960,6 @@ images/designer/anchorrightright.xpm -text svneol=native#image/x-xpixmap images/designer/anchortopbottom.xpm -text svneol=native#image/x-xpixmap images/designer/anchortoptop.xpm -text svneol=native#image/x-xpixmap images/down.xpm svneol=native#text/plain -images/downarrow.ico -text svneol=unset#image/x-icon -images/downarrow.xpm -text svneol=native#image/x-xpixmap images/fonts.ico -text svneol=unset#image/x-icon images/fonts.xpm -text svneol=native#image/x-xpixmap images/formatbold.bmp -text @@ -1971,8 +1980,6 @@ images/lazarus64.ico -text svneol=unset#image/x-icon images/lazarus64.xpm -text svneol=native#image/x-xpixmap images/lazarus_about_logo.xpm -text svneol=native#image/x-xpixmap images/lazaruspackage.ico -text svneol=unset#image/x-icon -images/leftarrow.ico -text svneol=unset#image/x-icon -images/leftarrow.xpm -text svneol=native#image/x-xpixmap images/lprfile.ico -text svneol=unset#image/x-icon images/mainicon.ico -text svneol=unset#image/x-icon images/mainicon.lrs svneol=native#text/pascal @@ -2037,8 +2044,6 @@ images/pkg_removedrequired.xpm -text svneol=native#image/x-xpixmap images/pkg_required.xpm -text svneol=native#image/x-xpixmap images/pkg_text.xpm -text svneol=native#image/x-xpixmap images/pkg_unit.xpm -text svneol=native#image/x-xpixmap -images/rightarrow.ico -text svneol=unset#image/x-icon -images/rightarrow.xpm -text svneol=native#image/x-xpixmap images/sourceeditor/ActiveBreakPoint.ico -text svneol=unset#image/x-icon images/sourceeditor/ActiveBreakPoint.xpm -text svneol=native#image/x-xpixmap images/sourceeditor/InactiveBreakPoint.ico -text svneol=unset#image/x-icon @@ -2083,8 +2088,6 @@ images/unitdependencies/srctype_program_22x22.xpm -text svneol=native#image/x-xp images/unitdependencies/srctype_unit_22x22.xpm -text svneol=native#image/x-xpixmap images/unitdependencies/srctype_unknown_22x22.xpm -text svneol=native#image/x-xpixmap images/up.xpm svneol=native#text/plain -images/uparrow.ico -text svneol=unset#image/x-icon -images/uparrow.xpm -text svneol=native#image/x-xpixmap images/vase_trans.xpm -text svneol=native#image/x-xpixmap install/lazarus.desktop svneol=native#text/plain languages/README.txt svneol=native#text/plain diff --git a/components/codetools/customcodetool.pas b/components/codetools/customcodetool.pas index 5c9f830ec1..1423420f85 100644 --- a/components/codetools/customcodetool.pas +++ b/components/codetools/customcodetool.pas @@ -120,10 +120,11 @@ type private FLastProgressPos: integer; FLastScannerChangeStep: integer; - FScanner: TLinkScanner; FOnGetGlobalWriteLockInfo: TOnGetWriteLockInfo; FOnParserProgress: TOnParserProgress; FOnSetGlobalWriteLock: TOnSetWriteLock; + FScanner: TLinkScanner; + FTreeChangeStep: integer; protected FIgnoreErrorAfter: TCodePosition; KeyWordFuncList: TKeyWordFunctionList; @@ -138,6 +139,7 @@ type procedure RaiseBracketCloseExpectedButAtomFound; procedure RaiseUndoImpossible; procedure SetIgnoreErrorAfter(const AValue: TCodePosition); virtual; + procedure IncreaseTreeChangeStep; protected LastErrorMessage: string; LastErrorCurPos: TAtomPosition; @@ -176,6 +178,7 @@ type property Scanner: TLinkScanner read FScanner write SetScanner; function MainFilename: string; + property TreeChangeStep: integer read FTreeChangeStep; function FindDeepestNodeAtPos(P: integer; ExceptionOnNotFound: boolean): TCodeTreeNode; inline; @@ -339,11 +342,10 @@ end; destructor TCustomCodeTool.Destroy; begin Clear; - LastAtoms.Free; - Tree.Free; - KeyWordFuncList.Free; - DirtySrc.Free; - DirtySrc:=nil; + FreeAndNil(LastAtoms); + FreeAndNil(Tree); + FreeAndNil(KeyWordFuncList); + FreeAndNil(DirtySrc); inherited Destroy; end; @@ -1899,6 +1901,14 @@ begin Scanner.SetIgnoreErrorAfter(IgnoreErrorAfter.P,IgnoreErrorAfter.Code); end; +procedure TCustomCodeTool.IncreaseTreeChangeStep; +begin + if FTreeChangeStep=High(integer) then + FTreeChangeStep:=Low(integer) + else + inc(FTreeChangeStep); +end; + procedure TCustomCodeTool.RaiseExceptionInstance(TheException: ECodeToolError); var CaretXY: TCodeXYPosition; CursorPos: integer; @@ -2384,6 +2394,7 @@ end; procedure TCustomCodeTool.DoDeleteNodes; begin Tree.Clear; + IncreaseTreeChangeStep; end; procedure TCustomCodeTool.RaiseIdentExpectedButAtomFound; diff --git a/components/h2pas/h2pasconvert.pas b/components/h2pas/h2pasconvert.pas index 936e1c502d..b4ee70f9f9 100644 --- a/components/h2pas/h2pasconvert.pas +++ b/components/h2pas/h2pasconvert.pas @@ -151,6 +151,22 @@ type function Execute(aText: TIDETextConverter): TModalResult; override; end; + { TH2PasFileCInclude } + + TH2PasFileCInclude = class + private + FFilename: string; + FSrcFilename: string; + FSrcPos: TPoint; + procedure SetFilename(const AValue: string); + procedure SetSrcFilename(const AValue: string); + procedure SetSrcPos(const AValue: TPoint); + public + property SrcFilename: string read FSrcFilename write SetSrcFilename; + property SrcPos: TPoint read FSrcPos write SetSrcPos; + property Filename: string read FFilename write SetFilename; + end; + TH2PasProject = class; TH2PasConverter = class; @@ -158,14 +174,20 @@ type TH2PasFile = class(TPersistent) private + FCIncludes: TFPList; // list of TH2PasFileCInclude + FCIncludesValid: boolean; + FCIncludesFileAge: TDateTime; FEnabled: boolean; FFilename: string; FModified: boolean; FProject: TH2PasProject; + function GetCIncludeCount: integer; + function GetCIncludes(Index: integer): TH2PasFileCInclude; procedure SetEnabled(const AValue: boolean); procedure SetFilename(const AValue: string); procedure SetModified(const AValue: boolean); procedure SetProject(const AValue: TH2PasProject); + procedure SearchCIncFilenames; public constructor Create; destructor Destroy; override; @@ -178,11 +200,15 @@ type function GetOutputDirectory: string; function GetOutputExtension: string; function GetH2PasParameters(const InputFilename: string = ''): string; + function ReadCIncludes(ForceUpdate: boolean): TModalResult; + function CIncludesValid: boolean; public property Project: TH2PasProject read FProject write SetProject; property Filename: string read FFilename write SetFilename; property Enabled: boolean read FEnabled write SetEnabled; property Modified: boolean read FModified write SetModified; + property CIncludeCount: integer read GetCIncludeCount; + property CIncludes[Index: integer]: TH2PasFileCInclude read GetCIncludes; end; { TH2PasProject } @@ -263,6 +289,8 @@ type function HasEnabledFiles: boolean; procedure AddDefaultPreH2PasTools; procedure AddDefaultPostH2PasTools; + function SearchIncludedCHeaderFile(aFile: TH2PasFile; + const SrcFilename: string): string; public property CHeaderFileCount: integer read GetCHeaderFileCount; property CHeaderFiles[Index: integer]: TH2PasFile read GetCHeaderFiles; @@ -372,6 +400,7 @@ begin NewValue:=TrimFilename(AValue); if FFilename=NewValue then exit; FFilename:=NewValue; + FCIncludesValid:=false; Modified:=true; end; @@ -382,6 +411,19 @@ begin Modified:=true; end; +function TH2PasFile.GetCIncludeCount: integer; +begin + if (FCIncludes=nil) or (not FCIncludesValid) then + Result:=0 + else + Result:=FCIncludes.Count; +end; + +function TH2PasFile.GetCIncludes(Index: integer): TH2PasFileCInclude; +begin + Result:=TH2PasFileCInclude(FCIncludes[Index]); +end; + procedure TH2PasFile.SetModified(const AValue: boolean); begin if FModified=AValue then exit; @@ -393,6 +435,7 @@ end; procedure TH2PasFile.SetProject(const AValue: TH2PasProject); begin if FProject=AValue then exit; + FCIncludesValid:=false; if FProject<>nil then begin FProject.InternalRemoveCHeaderFile(Self); end; @@ -403,6 +446,20 @@ begin Modified:=true; end; +procedure TH2PasFile.SearchCIncFilenames; +var + i: Integer; + IncFile: TH2PasFileCInclude; +begin + if FCIncludes=nil then exit; + if Project=nil then exit; + for i:=0 to FCIncludes.Count-1 do begin + IncFile:=CIncludes[i]; + IncFile.Filename:= + Project.SearchIncludedCHeaderFile(Self,IncFile.SrcFilename); + end; +end; + constructor TH2PasFile.Create; begin Clear; @@ -422,6 +479,8 @@ begin FEnabled:=true; FFilename:=''; FModified:=false; + FCIncludesValid:=false; + FreeAndNil(FCIncludes); end; procedure TH2PasFile.Assign(Source: TPersistent); @@ -433,6 +492,7 @@ begin if not IsEqual(Src) then begin FEnabled:=Src.FEnabled; FFilename:=Src.FFilename; + FCIncludesValid:=false; Modified:=true; end; end else begin @@ -452,6 +512,7 @@ begin FFilename:=Config.GetValue('Filename/Value',''); if Project<>nil then FFilename:=Project.NormalizeFilename(FFilename); + FCIncludesValid:=false; FModified:=false; end; @@ -519,6 +580,58 @@ begin Add(Filename); end; +function TH2PasFile.ReadCIncludes(ForceUpdate: boolean): TModalResult; +var + sl: TStringList; + i: Integer; + SrcFilename: String; + Item: TH2PasFileCInclude; +begin + if (not ForceUpdate) and CIncludesValid then exit(mrOk); + Result:=mrCancel; + if not FileExistsCached(Filename) then exit; + FCIncludesFileAge:=FileAge(Filename); + FCIncludesValid:=true; + DebugLn(['TH2PasFile.ReadCIncludes Filename="',Filename,'"']); + try + sl:=TStringList.Create; + try + sl.LoadFromFile(Filename); + for i:=0 to sl.Count-1 do begin + if not REMatches(sl[i],'^#include "(.+)"') then continue; + SrcFilename:=Trim(REVar(1)); + if SrcFilename='' then continue; + // add new include + if FCIncludes=nil then FCIncludes:=TFPList.Create; + Item:=TH2PasFileCInclude.Create; + Item.SrcFilename:=SrcFilename; + Item.SrcPos:=Point(1,i); + FCIncludes.Add(Item); + end; + finally + sl.Free; + end; + SearchCIncFilenames; + Result:=mrOk; + except + on e: Exception do begin + DebugLn(['TH2PasFile.ReadCIncludes File="',Filename,'" Msg=',E.Message]); + end; + end; +end; + +function TH2PasFile.CIncludesValid: boolean; +begin + Result:=false; + if not FCIncludesValid then exit; + FCIncludesValid:=false; + if Project=nil then exit; + if (not FileExistsCached(Filename)) then exit; + if FileAge(Filename)>FCIncludesFileAge then exit; + FCIncludesValid:=true; + Result:=true; +end; + { TH2PasProject } function TH2PasProject.GetCHeaderFileCount: integer; @@ -1122,6 +1235,32 @@ begin AddNewTextConverterTool(FPostH2PasTools,TFixArrayOfParameterType); end; +function TH2PasProject.SearchIncludedCHeaderFile(aFile: TH2PasFile; + const SrcFilename: string): string; +var + AFilename: String; + i: Integer; + CurFile: TH2PasFile; +begin + AFilename:=SetDirSeparators(SrcFilename); + if System.Pos(PathDelim,AFilename)>0 then begin + // with sub path -> only search relative to AFile + Result:=TrimFilename(ExtractFilePath(aFile.Filename)+AFilename); + if FileExistsCached(Result) then exit; + end else begin + // search relative to AFile + Result:=TrimFilename(ExtractFilePath(aFile.Filename)+AFilename); + if FileExistsCached(Result) then exit; + // search relative to all other .h files + for i:=0 to CHeaderFileCount-1 do begin + CurFile:=CHeaderFiles[i]; + Result:=TrimFilename(ExtractFilePath(CurFile.Filename)+AFilename); + if FileExistsCached(Result) then exit; + end; + end; + Result:=''; +end; + { TH2PasConverter } procedure TH2PasConverter.OnParseH2PasLine(Sender: TObject; @@ -2615,4 +2754,24 @@ begin Result:=mrOk; end; +{ TH2PasFileCInclude } + +procedure TH2PasFileCInclude.SetFilename(const AValue: string); +begin + if FFilename=AValue then exit; + FFilename:=AValue; +end; + +procedure TH2PasFileCInclude.SetSrcFilename(const AValue: string); +begin + if FSrcFilename=AValue then exit; + FSrcFilename:=AValue; + FFilename:=''; +end; + +procedure TH2PasFileCInclude.SetSrcPos(const AValue: TPoint); +begin + FSrcPos:=AValue; +end; + end. diff --git a/components/h2pas/h2pasdlg.lfm b/components/h2pas/h2pasdlg.lfm index dee6b421c2..109f447d13 100644 --- a/components/h2pas/h2pasdlg.lfm +++ b/components/h2pas/h2pasdlg.lfm @@ -15,8 +15,9 @@ object H2PasDialog: TH2PasDialog Position = poDesktopCenter object MainPageControl: TPageControl AnchorSideBottom.Control = OpenSettingsButton - Height = 461 + Height = 465 Width = 785 + TabStop = True ActivePage = FilesTabSheet Align = alTop Anchors = [akTop, akLeft, akRight, akBottom] @@ -25,10 +26,10 @@ object H2PasDialog: TH2PasDialog object FilesTabSheet: TTabSheet Caption = 'FilesTabSheet' object CHeaderFilesCheckTreeView: TTreeView - Height = 427 + Height = 435 Width = 255 Align = alLeft - DefaultItemHeight = 18 + DefaultItemHeight = 16 StateImages = FileStateImageList TabOrder = 0 OnMouseDown = CHeaderFilesCheckTreeViewMouseDown @@ -89,7 +90,7 @@ object H2PasDialog: TH2PasDialog end object CHeaderFilesSplitter1: TSplitter Left = 255 - Height = 427 + Height = 435 Width = 5 Beveled = True end @@ -101,7 +102,7 @@ object H2PasDialog: TH2PasDialog AnchorSideBottom.Control = FilesTabSheet AnchorSideBottom.Side = asrBottom Left = 260 - Height = 219 + Height = 227 Top = 208 Width = 521 Anchors = [akTop, akLeft, akRight, akBottom] @@ -109,13 +110,28 @@ object H2PasDialog: TH2PasDialog TabOrder = 5 object FileInfoLabel: TLabel Left = 8 - Height = 17 + Height = 13 Top = 1 - Width = 92 + 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 + Anchors = [akLeft, akBottom] + AutoSize = True + BorderSpacing.Around = 6 + BorderSpacing.InnerBorder = 4 + Caption = 'AddIncludedCHeaderFilesButton' + OnClick = AddIncludedCHeaderFilesButtonClick + TabOrder = 0 + end end object MoveFileUpButton: TButton AnchorSideLeft.Control = AddCHeaderFilesButton @@ -155,7 +171,7 @@ object H2PasDialog: TH2PasDialog object PreH2PasTabSheet: TTabSheet Caption = 'PreH2PasTabSheet' object PreH2PasGroupBox: TGroupBox - Height = 427 + Height = 435 Width = 781 Align = alClient Caption = 'PreH2PasGroupBox' @@ -280,7 +296,7 @@ object H2PasDialog: TH2PasDialog object PostH2PasTabSheet: TTabSheet Caption = 'PostH2PasTabSheet' object PostH2PasGroupBox: TGroupBox - Height = 427 + Height = 435 Width = 781 Align = alClient Caption = 'PostH2PasGroupBox' @@ -367,9 +383,9 @@ object H2PasDialog: TH2PasDialog AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 5 - Height = 30 - Top = 466 - Width = 161 + Height = 26 + Top = 470 + Width = 124 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Around = 5 @@ -383,10 +399,10 @@ object H2PasDialog: TH2PasDialog AnchorSideLeft.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 171 - Height = 30 - Top = 466 - Width = 158 + Left = 134 + Height = 26 + Top = 470 + Width = 122 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Around = 5 @@ -399,10 +415,10 @@ object H2PasDialog: TH2PasDialog AnchorSideLeft.Control = SaveSettingsButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = OpenSettingsButton - Left = 344 - Height = 30 - Top = 466 - Width = 119 + Left = 271 + Height = 26 + Top = 470 + Width = 93 AutoSize = True BorderSpacing.Left = 15 BorderSpacing.InnerBorder = 4 @@ -415,10 +431,10 @@ object H2PasDialog: TH2PasDialog AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 677 - Height = 30 - Top = 466 - Width = 103 + Left = 699 + Height = 26 + Top = 470 + Width = 81 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Around = 5 @@ -431,10 +447,10 @@ object H2PasDialog: TH2PasDialog AnchorSideLeft.Control = ConvertButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = OpenSettingsButton - Left = 469 - Height = 30 - Top = 466 - Width = 183 + Left = 370 + Height = 26 + Top = 470 + Width = 144 AutoSize = True BorderSpacing.Left = 6 BorderSpacing.InnerBorder = 4 diff --git a/components/h2pas/h2pasdlg.lrs b/components/h2pas/h2pasdlg.lrs index 6af9efd745..7de708b760 100644 --- a/components/h2pas/h2pasdlg.lrs +++ b/components/h2pas/h2pasdlg.lrs @@ -7,175 +7,181 @@ LazarusResources.Add('TH2PasDialog','FORMDATA',[ +'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#205#1#5'Widt' - +'h'#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'TTree' - +'View'#25'CHeaderFilesCheckTreeView'#6'Height'#3#171#1#5'Width'#3#255#0#5'Al' - +'ign'#7#6'alLeft'#17'DefaultItemHeight'#2#18#11'StateImages'#7#18'FileStateI' - +'mageList'#8'TabOrder'#2#0#11'OnMouseDown'#7'"CHeaderFilesCheckTreeViewMouse' - +'Down'#18'OnSelectionChanged'#7')CHeaderFilesCheckTreeViewSelectionChanged'#7 - +'Options'#11#19'tvoAllowMultiselect'#17'tvoAutoItemHeight'#16'tvoHideSelecti' - +'on'#21'tvoKeepCollapsedNodes'#14'tvoShowButtons'#12'tvoShowLines'#11'tvoSho' - +'wRoot'#11'tvoToolTips'#0#0#0#7'TButton'#21'AddCHeaderFilesButton'#22'Anchor' - +'SideLeft.Control'#7#21'CHeaderFilesSplitter1'#19'AnchorSideLeft.Side'#7#9'a' - +'srBottom'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#2#12#5'Width'#3#185#0#18'Bor' - +'derSpacing.Left'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#21'AddC' - +'HeaderFilesButton'#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'DeleteCHeaderFilesButton' - +#7'OnClick'#7#29'DeleteCHeaderFilesButtonClick'#8'TabOrder'#2#2#0#0#7'TButto' - +'n'#27'EnableAllCHeaderFilesButton'#22'AnchorSideLeft.Control'#7#21'CHeaderF' - +'ilesSplitter1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#4'Left'#3#10#1#6'Heig' - +'ht'#2#25#3'Top'#2'H'#5'Width'#3#185#0#18'BorderSpacing.Left'#2#6#25'BorderS' - +'pacing.InnerBorder'#2#4#7'Caption'#6#27'EnableAllCHeaderFilesButton'#7'OnCl' - +'ick'#7' EnableAllCHeaderFilesButtonClick'#8'TabOrder'#2#3#0#0#7'TButton'#28 - +'DisableAllCHeaderFilesButton'#22'AnchorSideLeft.Control'#7#21'CHeaderFilesS' - +'plitter1'#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#28'DisableAllCHeaderFilesButton'#7'OnClick'#7 - +'!DisableAllCHeaderFilesButtonClick'#8'TabOrder'#2#4#0#0#9'TSplitter'#21'CHe' - +'aderFilesSplitter1'#4'Left'#3#255#0#6'Height'#3#171#1#5'Width'#2#5#7'Bevele' - +'d'#9#0#0#9'TGroupBox'#16'FileInfoGroupBox'#22'AnchorSideLeft.Control'#7#21 + +'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 + +#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#219#0#3'Top'#3#208#0#5'Width'#3#9#2#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#17#3'Top'#2#1#5'Width'#2'\'#7'Caption'#6#13'FileInfoLabel'#5'Colo' - +'r'#7#6'clNone'#11'ParentColor'#8#0#0#0#7'TButton'#16'MoveFileUpButton'#22'A' - +'nchorSideLeft.Control'#7#21'AddCHeaderFilesButton'#21'AnchorSideTop.Control' - +#7#28'DisableAllCHeaderFilesButton'#18'AnchorSideTop.Side'#7#9'asrBottom'#23 - +'AnchorSideRight.Control'#7#21'AddCHeaderFilesButton'#20'AnchorSideRight.Sid' - +'e'#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.InnerBorder'#2#4#7'Caption'#6#16'MoveFileUpButton'#7'OnC' - +'lick'#7#21'MoveFileUpButtonClick'#8'TabOrder'#2#6#0#0#7'TButton'#18'MoveFil' - +'eDownButton'#22'AnchorSideLeft.Control'#7#21'AddCHeaderFilesButton'#21'Anch' - +'orSideTop.Control'#7#16'MoveFileUpButton'#18'AnchorSideTop.Side'#7#9'asrBot' - +'tom'#23'AnchorSideRight.Control'#7#21'AddCHeaderFilesButton'#20'AnchorSideR' - +'ight.Side'#7#9'asrBottom'#4'Left'#3#10#1#6'Height'#2#25#3'Top'#3#166#0#5'Wi' - +'dth'#3#185#0#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing' - +'.Top'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#18'MoveFileDownBut' - +'ton'#7'OnClick'#7#23'MoveFileDownButtonClick'#8'TabOrder'#2#7#0#0#0#9'TTabS' - +'heet'#16'PreH2PasTabSheet'#7'Caption'#6#16'PreH2PasTabSheet'#0#9'TGroupBox' - +#16'PreH2PasGroupBox'#6'Height'#3#171#1#5'Width'#3#13#3#5'Align'#7#8'alClien' - +'t'#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'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'clNon' - +'e'#11'ParentColor'#8#0#0#6'TLabel'#14'OutputExtLabel'#21'AnchorSideTop.Cont' - +'rol'#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'ParentColor'#8#0#0#6'TLabel'#14'OutputDirLabel'#21'An' - +'chorSideTop.Control'#7#13'OutputDirEdit'#18'AnchorSideTop.Side'#7#9'asrCent' - +'er'#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'Libn' - +'ameEdit'#22'AnchorSideLeft.Control'#7#12'LibNameLabel'#19'AnchorSideLeft.Si' - +'de'#7#9'asrBottom'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2']'#6'Hei' - +'ght'#2#23#3'Top'#3#20#1#5'Width'#2'q'#18'BorderSpacing.Left'#2#6#17'BorderS' - +'pacing.Top'#2#6#13'OnEditingDone'#7#22'LibnameEditEditingDone'#8'TabOrder'#2 - +#0#4'Text'#6#11'LibnameEdit'#0#0#5'TEdit'#13'OutputExtEdit'#22'AnchorSideLef' - +'t.Control'#7#14'OutputExtLabel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#18'A' - +'nchorSideTop.Side'#7#9'asrBottom'#4'Left'#2'b'#6'Height'#2#23#3'Top'#3'4'#1 - +#5'Width'#2'P'#18'BorderSpacing.Left'#2#6#17'BorderSpacing.Top'#2#6#13'OnEdi' - +'tingDone'#7#24'OutputExtEditEditingDone'#8'TabOrder'#2#1#4'Text'#6#13'Outpu' - +'tExtEdit'#0#0#5'TEdit'#13'OutputDirEdit'#22'AnchorSideLeft.Control'#7#14'Ou' - +'tputDirLabel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Contr' - +'ol'#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'B' - +'orderSpacing.Top'#2#6#13'OnEditingDone'#7#24'OutputDirEditEditingDone'#8'Ta' - +'bOrder'#2#2#4'Text'#6#13'OutputDirEdit'#0#0#7'TButton'#21'OutputDirBrowseBu' - +'tton'#22'AnchorSideLeft.Control'#7#13'OutputDirEdit'#19'AnchorSideLeft.Side' - +#7#9'asrBottom'#21'AnchorSideTop.Control'#7#13'OutputDirEdit'#24'AnchorSideB' - +'ottom.Control'#7#13'OutputDirEdit'#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'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption' - +#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'h2pasOptionsCheckGroup'#28'C' - +'hildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'Ch' - +'ildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.' - +'EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizo' - +'ntal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChil' - +'ds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizi' - +'ng.ControlsPerLine'#2#2#7'Columns'#2#2#11'OnItemClick'#7#31'h2pasOptionsChe' - +'ckGroupItemClick'#8'TabOrder'#2#4#0#0#0#9'TTabSheet'#17'PostH2PasTabSheet'#7 - +'Caption'#6#17'PostH2PasTabSheet'#0#9'TGroupBox'#17'PostH2PasGroupBox'#6'Hei' - +'ght'#3#171#1#5'Width'#3#13#3#5'Align'#7#8'alClient'#7'Caption'#6#17'PostH2P' - +'asGroupBox'#8'TabOrder'#2#0#0#0#0#9'TTabSheet'#16'SettingsTabSheet'#7'Capti' - +'on'#6#16'SettingsTabSheet'#0#6'TLabel'#18'H2PasFilenameLabel'#21'AnchorSide' - +'Top.Control'#7#17'H2PasFilenameEdit'#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'H2PasF' - +'ilenameLabel'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#9'TCheckBox'#30'Op' - +'enLastProjectOnStartCheckBox'#4'Left'#2#6#6'Height'#2#24#3'Top'#2'*'#5'Widt' - +'h'#3#21#1#7'Caption'#6#30'OpenLastProjectOnStartCheckBox'#8'OnChange'#7'$Op' - +'enLastProjectOnStartCheckBoxChange'#8'TabOrder'#2#0#0#0#7'TButton'#20'SaveS' - +'ettingsAsButton'#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'SaveSettingsA' - +'sButton'#7'OnClick'#7#25'SaveSettingsAsButtonClick'#8'TabOrder'#2#1#0#0#5'T' - +'Edit'#17'H2PasFilenameEdit'#22'AnchorSideLeft.Control'#7#18'H2PasFilenameLa' - +'bel'#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'Te' - +'xt'#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'AnchorSideB' - +'ottom.Control'#7#17'H2PasFilenameEdit'#21'AnchorSideBottom.Side'#7#9'asrBot' - +'tom'#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#210#1#5'Width'#3#161#0#7'Anc' + +'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'OpenSettingsButton'#7'OnC' - +'lick'#7#23'OpenSettingsButtonClick'#8'TabOrder'#2#1#0#0#7'TButton'#18'SaveS' - +'ettingsButton'#22'AnchorSideLeft.Control'#7#18'OpenSettingsButton'#19'Ancho' - +'rSideLeft.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'#7#5'Owner'#21'A' - +'nchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3#171#0#6'Height'#2#30#3'Top'#3 - +#210#1#5'Width'#3#158#0#7'Anchors'#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'OnClick'#7#23'SaveSettingsButtonClick'#8'TabOrder' - +#2#2#0#0#7'TButton'#13'ConvertButton'#22'AnchorSideLeft.Control'#7#18'SaveSe' - +'ttingsButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Contr' - +'ol'#7#18'OpenSettingsButton'#4'Left'#3'X'#1#6'Height'#2#30#3'Top'#3#210#1#5 - +'Width'#2'w'#8'AutoSize'#9#18'BorderSpacing.Left'#2#15#25'BorderSpacing.Inne' - +'rBorder'#2#4#7'Caption'#6#13'ConvertButton'#7'OnClick'#7#18'ConvertButtonCl' - +'ick'#8'TabOrder'#2#0#0#0#7'TButton'#11'CloseButton'#23'AnchorSideRight.Cont' - +'rol'#7#5'Owner'#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#210#1#5'Width'#2'g'#7'Anchors'#11#7'akRight'#8'ak' - +'Bottom'#0#8'AutoSize'#9#20'BorderSpacing.Around'#2#5#25'BorderSpacing.Inner' - +'Border'#2#4#7'Caption'#6#11'CloseButton'#7'OnClick'#7#16'CloseButtonClick'#8 - +'TabOrder'#2#3#0#0#7'TButton'#21'ConvertAndBuildButton'#22'AnchorSideLeft.Co' - +'ntrol'#7#13'ConvertButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'Anchor' - +'SideTop.Control'#7#18'OpenSettingsButton'#4'Left'#3#213#1#6'Height'#2#30#3 - +'Top'#3#210#1#5'Width'#3#183#0#8'AutoSize'#9#18'BorderSpacing.Left'#2#6#25'B' - +'orderSpacing.InnerBorder'#2#4#7'Caption'#6#21'ConvertAndBuildButton'#7'OnCl' - +'ick'#7#26'ConvertAndBuildButtonClick'#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_removedfi' - +'les_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 #D5D5EF",'#10'"*'#9'c #000000",'#10'" ..++.... ' - +'",'#10'" .@@@@@@. ",'#10'" #$%$$$&.$ ",'#10'" #%$........ ",'#10'" ' - +' *$$........ ",'#10'"...++#$%$$$&*$",'#10'".....#%$$$&&*$",'#10'".$%$$*$$$&' - +'$&*$",'#10'".%$$$*$&&&&&*$",'#10'".$$$$********$",'#10'".$&&&&&*$$$$$$",'#10 - +'".*******$ ",'#10'" $$$$$$$$ "};'#10#0#0#0 + +#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 ]); diff --git a/components/h2pas/h2pasdlg.pas b/components/h2pas/h2pasdlg.pas index 154f583845..5a11f47067 100644 --- a/components/h2pas/h2pasdlg.pas +++ b/components/h2pas/h2pasdlg.pas @@ -43,6 +43,7 @@ type FileInfoGroupBox: TGroupBox; FileInfoLabel: TLabel; MainPageControl: TPageControl; + AddIncludedCHeaderFilesButton: TButton; // c header files FilesTabSheet: TTabSheet; @@ -90,6 +91,7 @@ type CloseButton: TButton; procedure AddCHeaderFilesButtonClick(Sender: TObject); + procedure AddIncludedCHeaderFilesButtonClick(Sender: TObject); procedure CHeaderFilesCheckTreeViewMouseDown(Sender: TOBject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure CHeaderFilesCheckTreeViewSelectionChanged(Sender: TObject); @@ -225,6 +227,7 @@ begin MoveFileDownButton.Caption:='Move file down'; MoveFileUpButton.Caption:='Move file up'; FileInfoGroupBox.Caption:='File information'; + AddIncludedCHeaderFilesButton.Caption:='Add included .h files'; h2pasOptionsTabSheet.Caption:='h2pas Options'; h2pasOptionsCheckGroup.Caption:='Options'; with h2pasOptionsCheckGroup.Items do begin @@ -410,6 +413,54 @@ begin end; end; +procedure TH2PasDialog.AddIncludedCHeaderFilesButtonClick(Sender: TObject); +var + AFile: TH2PasFile; + sl: TStringList; + i: Integer; + IncFile: TH2PasFileCInclude; + CurFilename: String; + j: Integer; + s: String; +begin + AFile:=GetCurrentCHeaderFile; + if AFile=nil then exit; + AFile.ReadCIncludes(false); + sl:=TStringList.Create; + try + for i:=0 to AFile.CIncludeCount-1 do begin + IncFile:=AFile.CIncludes[i]; + CurFilename:=IncFile.Filename; + if CurFilename='' then continue; + // .h file found in include directories + if Project.CHeaderFileWithFilename(CurFilename)<>nil then continue; + // .h file not yet in project + j:=sl.Count-1; + while (j>=0) and (CompareFilenames(CurFilename,sl[j])<>0) do dec(j); + if j>=0 then continue; + // .h file not yet in list + sl.Add(CurFilename); + end; + if sl.Count>0 then begin + s:=''; + for i:=0 to sl.Count-1 do begin + CurFilename:=Project.ShortenFilename(sl[i]); + s:=s+#13+CurFilename; + end; + if QuestionDlg('Add .h files?', + 'Add these .h files to h2pas project:'#13#13 + +s+#13+'?', + mtConfirmation,[mbYes,mbNo],0)=mrYes + then begin + Project.AddFiles(sl); + UpdateFilesPage; + end; + end; + finally + sl.Free; + end; +end; + procedure TH2PasDialog.CHeaderFilesCheckTreeViewSelectionChanged(Sender: TObject ); begin @@ -678,6 +729,8 @@ var s: String; Filename: String; OutputFilename: String; + i: Integer; + IncFile: TH2PasFileCInclude; begin AFile:=GetCurrentCHeaderFile; if AFile<>nil then begin @@ -687,9 +740,23 @@ begin s:=s+#13+'ERROR: file not found'; OutputFilename:=AFile.GetOutputFilename; s:=s+#13+'Output: '+OutputFilename; + + AFile.ReadCIncludes(false); + if AFile.CIncludeCount>0 then 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); + end; + AddIncludedCHeaderFilesButton.Visible:=true; + end else begin + AddIncludedCHeaderFilesButton.Visible:=false; + end; + FileInfoLabel.Caption:=s; end else begin FileInfoLabel.Caption:='No file selected.'; + AddIncludedCHeaderFilesButton.Visible:=false; end; end; diff --git a/components/simpleideintf/examples/testh2pastool.lpi b/components/simpleideintf/examples/testh2pastool.lpi index fe12aa1a14..76f4daee61 100644 --- a/components/simpleideintf/examples/testh2pastool.lpi +++ b/components/simpleideintf/examples/testh2pastool.lpi @@ -23,18 +23,22 @@ - + - - + + - + + + + + diff --git a/components/simpleideintf/examples/testh2pastool.lpr b/components/simpleideintf/examples/testh2pastool.lpr index 83a86a1d64..5f79866d40 100644 --- a/components/simpleideintf/examples/testh2pastool.lpr +++ b/components/simpleideintf/examples/testh2pastool.lpr @@ -53,32 +53,6 @@ begin end; end; -procedure TestTFixArrayOfParameterType(Converter: TIDETextConverter); -var - Tool: TFixArrayOfParameterType; -begin - Tool:=nil; - try - Tool:=TFixArrayOfParameterType.Create(nil); - Tool.Execute(Converter); - finally - Tool.Free; - end; -end; - -procedure TestTFixArrayOfParameterType(Converter: TIDETextConverter); -var - Tool: TFixArrayOfParameterType; -begin - Tool:=nil; - try - Tool:=TFixArrayOfParameterType.Create(nil); - Tool.Execute(Converter); - finally - Tool.Free; - end; -end; - var Filename: String; Converter: TIDETextConverter; diff --git a/ide/codebrowser.lfm b/ide/codebrowser.lfm new file mode 100644 index 0000000000..08a628d5d2 --- /dev/null +++ b/ide/codebrowser.lfm @@ -0,0 +1,164 @@ +object CodeBrowserView: TCodeBrowserView + Left = 290 + Height = 564 + Top = 189 + Width = 634 + HorzScrollBar.Page = 633 + VertScrollBar.Page = 563 + ActiveControl = ScopeComboBox + Caption = 'CodeBrowserView' + OnClose = FormClose + OnCreate = FormCreate + OnDestroy = FormDestroy + object ScopeGroupBox: TGroupBox + Left = 6 + Height = 50 + Top = 6 + Width = 622 + Align = alTop + BorderSpacing.Around = 6 + Caption = 'ScopeGroupBox' + TabOrder = 0 + object ScopeComboBox: TComboBox + Left = 3 + Height = 25 + Width = 315 + AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending] + MaxLength = 0 + OnDropDown = ScopeComboBoxDropDown + TabOrder = 0 + Text = 'ScopeComboBox' + end + object ScopeWithRequiredPackagesCheckBox: TCheckBox + Left = 328 + Height = 20 + Top = 3 + Width = 249 + Caption = 'ScopeWithRequiredPackagesCheckBox' + TabOrder = 1 + end + end + object LevelsCheckGroup: TCheckGroup + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ScopeGroupBox + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 135 + Top = 62 + Width = 185 + AutoFill = True + BorderSpacing.Around = 6 + Caption = 'LevelsCheckGroup' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + Items.Strings = ( + 'Packages' + 'Units' + 'Classes' + 'Sections' + ) + TabOrder = 1 + Data = { + 0400000002020202 + } + end + object SortGroupBox: TGroupBox + AnchorSideLeft.Control = LevelsCheckGroup + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ScopeGroupBox + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 197 + Height = 135 + Top = 62 + Width = 431 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + Caption = 'SortGroupBox' + TabOrder = 2 + object SortUpSpeedButton: TSpeedButton + Left = 168 + Height = 22 + Top = 55 + Width = 23 + Color = clBtnFace + NumGlyphs = 0 + OnClick = SortUpSpeedButtonClick + ShowHint = True + ParentShowHint = False + end + object SortDownSpeedButton: TSpeedButton + Left = 168 + Height = 22 + Top = 80 + Width = 23 + Color = clBtnFace + NumGlyphs = 0 + OnClick = SortDownSpeedButtonClick + ShowHint = True + ParentShowHint = False + end + object SortAddSpeedButton: TSpeedButton + Left = 193 + Height = 22 + Top = 14 + Width = 23 + Color = clBtnFace + NumGlyphs = 0 + OnClick = SortAddSpeedButtonClick + ShowHint = True + ParentShowHint = False + end + object SortRemoveSpeedButton: TSpeedButton + Left = 223 + Height = 22 + Top = 14 + Width = 23 + Color = clBtnFace + NumGlyphs = 0 + OnClick = SortRemoveSpeedButtonClick + ShowHint = True + ParentShowHint = False + end + object SortListBox: TListBox + Height = 118 + Width = 163 + Align = alLeft + TabOrder = 0 + TopIndex = -1 + end + object SortAddsListBox: TListBox + Left = 258 + Height = 118 + Width = 169 + Align = alRight + Anchors = [akTop, akLeft, akRight, akBottom] + TabOrder = 1 + TopIndex = -1 + end + end + object BrowseTreeView: TTreeView + AnchorSideTop.Control = LevelsCheckGroup + AnchorSideTop.Side = asrBottom + Height = 341 + Top = 203 + Width = 634 + Align = alBottom + Anchors = [akTop, akLeft, akRight, akBottom] + DefaultItemHeight = 14 + TabOrder = 3 + end + object StatusBar1: TStatusBar + Height = 20 + Top = 544 + Width = 634 + Panels = <> + end +end diff --git a/ide/codebrowser.lrs b/ide/codebrowser.lrs new file mode 100644 index 0000000000..d9ad1f7b04 --- /dev/null +++ b/ide/codebrowser.lrs @@ -0,0 +1,55 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TCodeBrowserView','FORMDATA',[ + 'TPF0'#16'TCodeBrowserView'#15'CodeBrowserView'#4'Left'#3'"'#1#6'Height'#3'4' + +#2#3'Top'#3#189#0#5'Width'#3'z'#2#18'HorzScrollBar.Page'#3'y'#2#18'VertScrol' + +'lBar.Page'#3'3'#2#13'ActiveControl'#7#13'ScopeComboBox'#7'Caption'#6#15'Cod' + +'eBrowserView'#7'OnClose'#7#9'FormClose'#8'OnCreate'#7#10'FormCreate'#9'OnDe' + +'stroy'#7#11'FormDestroy'#0#9'TGroupBox'#13'ScopeGroupBox'#4'Left'#2#6#6'Hei' + +'ght'#2'2'#3'Top'#2#6#5'Width'#3'n'#2#5'Align'#7#5'alTop'#20'BorderSpacing.A' + +'round'#2#6#7'Caption'#6#13'ScopeGroupBox'#8'TabOrder'#2#0#0#9'TComboBox'#13 + +'ScopeComboBox'#4'Left'#2#3#6'Height'#2#25#5'Width'#3';'#1#16'AutoCompleteTe' + +'xt'#11#22'cbactEndOfLineComplete'#20'cbactSearchAscending'#0#9'MaxLength'#2 + +#0#10'OnDropDown'#7#21'ScopeComboBoxDropDown'#8'TabOrder'#2#0#4'Text'#6#13'S' + +'copeComboBox'#0#0#9'TCheckBox!ScopeWithRequiredPackagesCheckBox'#4'Left'#3 + +'H'#1#6'Height'#2#20#3'Top'#2#3#5'Width'#3#249#0#7'Caption'#6'!ScopeWithRequ' + +'iredPackagesCheckBox'#8'TabOrder'#2#1#0#0#0#11'TCheckGroup'#16'LevelsCheckG' + +'roup'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#13 + +'ScopeGroupBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#6#6'Height'#3 + +#135#0#3'Top'#2'>'#5'Width'#3#185#0#8'AutoFill'#9#20'BorderSpacing.Around'#2 + +#6#7'Caption'#6#16'LevelsCheckGroup'#28'ChildSizing.LeftRightSpacing'#2#6#28 + +'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'cr' + +'sHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousC' + +'hildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildS' + +'izing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclL' + +'eftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#13'Items.Str' + +'ings'#1#6#8'Packages'#6#5'Units'#6#7'Classes'#6#8'Sections'#0#8'TabOrder'#2 + +#1#4'Data'#10#8#0#0#0#4#0#0#0#2#2#2#2#0#0#9'TGroupBox'#12'SortGroupBox'#22'A' + +'nchorSideLeft.Control'#7#16'LevelsCheckGroup'#19'AnchorSideLeft.Side'#7#9'a' + +'srBottom'#21'AnchorSideTop.Control'#7#13'ScopeGroupBox'#18'AnchorSideTop.Si' + +'de'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSideRigh' + +'t.Side'#7#9'asrBottom'#4'Left'#3#197#0#6'Height'#3#135#0#3'Top'#2'>'#5'Widt' + +'h'#3#175#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#20'BorderSpacing.A' + +'round'#2#6#7'Caption'#6#12'SortGroupBox'#8'TabOrder'#2#2#0#12'TSpeedButton' + +#17'SortUpSpeedButton'#4'Left'#3#168#0#6'Height'#2#22#3'Top'#2'7'#5'Width'#2 + +#23#5'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#22'SortUpSpeedButt' + +'onClick'#8'ShowHint'#9#14'ParentShowHint'#8#0#0#12'TSpeedButton'#19'SortDow' + +'nSpeedButton'#4'Left'#3#168#0#6'Height'#2#22#3'Top'#2'P'#5'Width'#2#23#5'Co' + +'lor'#7#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#24'SortDownSpeedButtonCli' + +'ck'#8'ShowHint'#9#14'ParentShowHint'#8#0#0#12'TSpeedButton'#18'SortAddSpeed' + +'Button'#4'Left'#3#193#0#6'Height'#2#22#3'Top'#2#14#5'Width'#2#23#5'Color'#7 + +#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#23'SortAddSpeedButtonClick'#8'Sh' + +'owHint'#9#14'ParentShowHint'#8#0#0#12'TSpeedButton'#21'SortRemoveSpeedButto' + +'n'#4'Left'#3#223#0#6'Height'#2#22#3'Top'#2#14#5'Width'#2#23#5'Color'#7#9'cl' + +'BtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#26'SortRemoveSpeedButtonClick'#8'Sho' + +'wHint'#9#14'ParentShowHint'#8#0#0#8'TListBox'#11'SortListBox'#6'Height'#2'v' + +#5'Width'#3#163#0#5'Align'#7#6'alLeft'#8'TabOrder'#2#0#8'TopIndex'#2#255#0#0 + +#8'TListBox'#15'SortAddsListBox'#4'Left'#3#2#1#6'Height'#2'v'#5'Width'#3#169 + +#0#5'Align'#7#7'alRight'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBot' + +'tom'#0#8'TabOrder'#2#1#8'TopIndex'#2#255#0#0#0#9'TTreeView'#14'BrowseTreeVi' + +'ew'#21'AnchorSideTop.Control'#7#16'LevelsCheckGroup'#18'AnchorSideTop.Side' + +#7#9'asrBottom'#6'Height'#3'U'#1#3'Top'#3#203#0#5'Width'#3'z'#2#5'Align'#7#8 + +'alBottom'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#17'Defa' + +'ultItemHeight'#2#14#8'TabOrder'#2#3#0#0#10'TStatusBar'#10'StatusBar1'#6'Hei' + +'ght'#2#20#3'Top'#3' '#2#5'Width'#3'z'#2#6'Panels'#14#0#0#0#0 +]); diff --git a/ide/codebrowser.pas b/ide/codebrowser.pas new file mode 100644 index 0000000000..b10d27e482 --- /dev/null +++ b/ide/codebrowser.pas @@ -0,0 +1,555 @@ +{ + *************************************************************************** + * * + * This source is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This code is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * General Public License for more details. * + * * + * A copy of the GNU General Public License is available on the World * + * Wide Web at . You can also * + * obtain it by writing to the Free Software Foundation, * + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * * + *************************************************************************** + + Author: Mattias Gaertner + + Abstract: + Browser for packages, classes, methods, functions. + Scope: + Browse units of IDE, or a project or a package. + Browse with required packages or without. + Sort: + Owner, unit, class, visibility, type (procedure, var, const, ...), identifier + + Notes: + The codetools provides TCodeTree of every unit. + +} +unit CodeBrowser; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LCLProc, LResources, Forms, Controls, Graphics, Dialogs, + AvgLvlTree, StdCtrls, + CodeTree, CodeCache, CodeToolManager, LazConfigStorage, PackageSystem, + LazarusIDEStrConsts, IDEOptionDefs, EnvironmentOpts, ExtCtrls, ComCtrls, + Buttons; + +type + TCodeBrowserUnit = class; + TCodeBrowserUnitList = class; + + { TCodeBrowserNode } + + TCodeBrowserNode = class + private + FCBUnit: TCodeBrowserUnit; + FChildNodes: TAvgLvlTree; + FNode: TCodeTreeNode; + FParentNode: TCodeBrowserNode; + public + constructor Create(TheUnit: TCodeBrowserUnit; TheNode: TCodeTreeNode; + TheParent: TCodeBrowserNode); + destructor Destroy; override; + procedure Clear; + property CBUnit: TCodeBrowserUnit read FCBUnit; + property Node: TCodeTreeNode read FNode; + property ParentNode: TCodeBrowserNode read FParentNode; + property ChildNodes: TAvgLvlTree read FChildNodes; + end; + + + { TCodeBrowserUnit } + + TCodeBrowserUnit = class + private + FChildNodes: TAvgLvlTree; + FCodeTool: TCodeTool; + FCodeTreeChangeStep: integer; + FFilename: string; + FUnitList: TCodeBrowserUnitList; + public + constructor Create(const TheFilename: string); + destructor Destroy; override; + procedure Clear; + property Filename: string read FFilename; + property CodeTool: TCodeTool read FCodeTool; + property CodeTreeChangeStep: integer read FCodeTreeChangeStep; + property UnitList: TCodeBrowserUnitList read FUnitList; + property ChildNodes: TAvgLvlTree read FChildNodes; + end; + + + { TCodeBrowserUnitList } + + TCodeBrowserUnitList = class + private + FOwner: TObject; + FParentList: TCodeBrowserUnitList; + FUnits: TAvgLvlTree; + public + constructor Create(TheOwner: TObject; TheParent: TCodeBrowserUnitList); + destructor Destroy; override; + procedure Clear; + property Owner: TObject read FOwner;// IDE, project, package + property ParentList: TCodeBrowserUnitList read FParentList; + property Units: TAvgLvlTree read FUnits; + end; + + + { TCodeBrowserViewOptions } + + TCodeBrowserViewOptions = class + private + FModified: boolean; + FScope: string; + FLevels: TStrings; + FSortItems: TStrings; + FWithRequiredPackages: boolean; + procedure SetModified(const AValue: boolean); + procedure SetScope(const AValue: string); + procedure SetLevels(const AValue: TStrings); + procedure SetSortItems(const AValue: TStrings); + procedure SetWithRequiredPackages(const AValue: boolean); + public + constructor Create; + destructor Destroy; override; + procedure Clear; + procedure LoadFromConfig(ConfigStore: TConfigStorage; const Path: string); + procedure SaveToConfig(ConfigStore: TConfigStorage; const Path: string); + property Scope: string read FScope write SetScope; + property WithRequiredPackages: boolean read FWithRequiredPackages write SetWithRequiredPackages; + property Levels: TStrings read FLevels write SetLevels; + property SortItems: TStrings read FSortItems write SetSortItems; + property Modified: boolean read FModified write SetModified; + end; + + + { TCodeBrowserView } + + TCodeBrowserView = class(TForm) + SortAddsListBox: TListBox; + SortListBox: TListBox; + SortGroupBox: TGroupBox; + LevelsCheckGroup: TCheckGroup; + ScopeWithRequiredPackagesCheckBox: TCheckBox; + ScopeComboBox: TComboBox; + ScopeGroupBox: TGroupBox; + SortUpSpeedButton: TSpeedButton; + SortDownSpeedButton: TSpeedButton; + SortAddSpeedButton: TSpeedButton; + SortRemoveSpeedButton: TSpeedButton; + BrowseTreeView: TTreeView; + StatusBar1: TStatusBar; + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure ScopeComboBoxDropDown(Sender: TObject); + procedure SortAddSpeedButtonClick(Sender: TObject); + procedure SortDownSpeedButtonClick(Sender: TObject); + procedure SortRemoveSpeedButtonClick(Sender: TObject); + procedure SortUpSpeedButtonClick(Sender: TObject); + private + FIDEAlias: string; + fLocalizedSortItems: TStrings; + FOptions: TCodeBrowserViewOptions; + FProjectAlias: string; + FUnitList: TCodeBrowserUnitList; + fUpdateCount: integer; + procedure LoadOptions; + procedure LoadLevelsCheckGroup; + procedure LoadSortListBoxes; + procedure MoveSortItem(Offset: integer); + procedure AddSortItem; + procedure RemoveSortItem; + procedure FillScopeComboBox; + public + procedure BeginUpdate; + procedure EndUpdate; + property UnitList: TCodeBrowserUnitList read FUnitList; + property Options: TCodeBrowserViewOptions read FOptions; + property IDEAlias: string read FIDEAlias; + property ProjectAlias: string read FProjectAlias; + end; + +var + CodeBrowserView: TCodeBrowserView = nil; + + +implementation + + +{ TCodeBrowserView } + +procedure TCodeBrowserView.FormCreate(Sender: TObject); +begin + FOptions:=TCodeBrowserViewOptions.Create; + + FIDEAlias:='Lazarus IDE'; + FProjectAlias:='Project'; + + fLocalizedSortItems:=TStringList.Create; + fLocalizedSortItems.Values['Packages']:='Packages'; + fLocalizedSortItems.Values['Units']:='Units'; + fLocalizedSortItems.Values['Classes']:='Classes'; + fLocalizedSortItems.Values['Sections']:='Sections'; + fLocalizedSortItems.Values['Alphabetically']:='Alphabetically'; + + Name:=NonModalIDEWindowNames[nmiwCodeBrowser]; + Caption := 'Code browser'; + EnvironmentOptions.IDEWindowLayoutList.Apply(Self,Name); + + ScopeGroupBox.Caption:='Scope'; + ScopeWithRequiredPackagesCheckBox.Caption:='With required packages'; + LevelsCheckGroup.Caption:='Levels'; + LevelsCheckGroup.Items[0]:='Packages'; + LevelsCheckGroup.Items[1]:='Units'; + LevelsCheckGroup.Items[2]:='Classes'; + LevelsCheckGroup.Items[3]:='Sections'; + + SortGroupBox.Caption:='Sort'; + SortUpSpeedButton.Hint:='Move up'; + DebugLn(['TCodeBrowserView.FormCreate ',LazarusResources.Find('arrow_up')<>nil]); + SortUpSpeedButton.Glyph.LoadFromLazarusResource('arrow_up'); + SortDownSpeedButton.Hint:='Move down'; + SortDownSpeedButton.Glyph.LoadFromLazarusResource('arrow_down'); + SortAddSpeedButton.Hint:='Add'; + SortAddSpeedButton.Glyph.LoadFromLazarusResource('arrow_left'); + SortRemoveSpeedButton.Hint:='Remove'; + SortRemoveSpeedButton.Glyph.LoadFromLazarusResource('arrow_right'); + + LoadOptions; +end; + +procedure TCodeBrowserView.FormDestroy(Sender: TObject); +begin + FreeAndNil(FOptions); +end; + +procedure TCodeBrowserView.ScopeComboBoxDropDown(Sender: TObject); +begin + FillScopeComboBox; +end; + +procedure TCodeBrowserView.SortAddSpeedButtonClick(Sender: TObject); +begin + AddSortItem; +end; + +procedure TCodeBrowserView.SortDownSpeedButtonClick(Sender: TObject); +begin + MoveSortItem(+1); +end; + +procedure TCodeBrowserView.SortRemoveSpeedButtonClick(Sender: TObject); +begin + RemoveSortItem; +end; + +procedure TCodeBrowserView.SortUpSpeedButtonClick(Sender: TObject); +begin + MoveSortItem(-1); +end; + +procedure TCodeBrowserView.LoadOptions; +begin + BeginUpdate; + ScopeWithRequiredPackagesCheckBox.Checked:=Options.WithRequiredPackages; + ScopeComboBox.Text:=Options.Scope; + LoadLevelsCheckGroup; + LoadSortListBoxes; + EndUpdate; +end; + +procedure TCodeBrowserView.LoadLevelsCheckGroup; +begin + LevelsCheckGroup.Checked[0]:=Options.Levels.IndexOf('Packages')>=0; + LevelsCheckGroup.Checked[1]:=Options.Levels.IndexOf('Units')>=0; + LevelsCheckGroup.Checked[2]:=Options.Levels.IndexOf('Classes')>=0; + LevelsCheckGroup.Checked[3]:=Options.Levels.IndexOf('Sections')>=0; +end; + +procedure TCodeBrowserView.LoadSortListBoxes; +var + i: Integer; + sl: TStringList; + CurItem: string; +begin + BeginUpdate; + sl:=TStringList.Create; + + // SortListBox + for i:=0 to Options.SortItems.Count-1 do begin + CurItem:=fLocalizedSortItems.Values[Options.SortItems[i]]; + if CurItem='' then continue; + sl.Add(CurItem); + end; + if SortListBox.ItemIndex>=0 then + CurItem:=SortListBox.Items[SortListBox.ItemIndex] + else + CurItem:=''; + SortListBox.Items.Assign(sl); + if CurItem<>'' then + SortListBox.ItemIndex:=sl.IndexOf(CurItem); + + // SortAddsListBox + sl.Clear; + for i:=0 to fLocalizedSortItems.Count-1 do begin + CurItem:=fLocalizedSortItems.Names[i]; + if Options.SortItems.IndexOf(CurItem)<0 then + sl.Add(fLocalizedSortItems.ValueFromIndex[i]); + end; + if SortAddsListBox.ItemIndex>=0 then + CurItem:=SortAddsListBox.Items[SortAddsListBox.ItemIndex] + else + CurItem:=''; + SortAddsListBox.Items.Assign(sl); + if CurItem<>'' then + SortAddsListBox.ItemIndex:=sl.IndexOf(CurItem); + + sl.Free; + EndUpdate; +end; + +procedure TCodeBrowserView.MoveSortItem(Offset: integer); +var + i: LongInt; +begin + if Offset=0 then exit; + i:=SortListBox.ItemIndex; + if i<0 then exit; + if (i+Offset)<0 then exit; + if (i+Offset)>=SortListBox.Items.Count then exit; + SortListBox.Items.Move(i,i+Offset); +end; + +procedure TCodeBrowserView.AddSortItem; +var + i: LongInt; + NewItem: string; +begin + i:=SortAddsListBox.ItemIndex; + if i<0 then exit; + NewItem:=SortAddsListBox.Items[i]; + SortAddsListBox.Items.Delete(i); + i:=SortListBox.ItemIndex; + if i<0 then i:=SortListBox.Items.Count; + SortListBox.Items.Insert(i,NewItem); +end; + +procedure TCodeBrowserView.RemoveSortItem; +var + i: LongInt; + NewItem: string; +begin + i:=SortListBox.ItemIndex; + if i<0 then exit; + NewItem:=SortListBox.Items[i]; + SortListBox.Items.Delete(i); + i:=SortAddsListBox.ItemIndex; + if i<0 then i:=SortAddsListBox.Items.Count; + SortAddsListBox.Items.Insert(i,NewItem); +end; + +procedure TCodeBrowserView.FillScopeComboBox; +var + sl: TStringList; + i: Integer; +begin + sl:=TStringList.Create; + if PackageGraph<>nil then begin + for i:=0 to PackageGraph.Count-1 do + sl.Add(PackageGraph.Packages[i].Name); + end; + sl.Sort; + sl.Insert(0,IDEAlias); + sl.Insert(1,ProjectAlias); + ScopeComboBox.Items.Assign(sl); + sl.Free; +end; + +procedure TCodeBrowserView.BeginUpdate; +begin + inc(fUpdateCount); +end; + +procedure TCodeBrowserView.EndUpdate; +begin + dec(fUpdateCount); +end; + +procedure TCodeBrowserView.FormClose(Sender: TObject; + var CloseAction: TCloseAction); +begin + +end; + +{ TCodeBrowserNode } + +constructor TCodeBrowserNode.Create(TheUnit: TCodeBrowserUnit; + TheNode: TCodeTreeNode; TheParent: TCodeBrowserNode); +begin + FCBUnit:=TheUnit; + FNode:=TheNode; + FParentNode:=TheParent; +end; + +destructor TCodeBrowserNode.Destroy; +begin + Clear; + inherited Destroy; +end; + +procedure TCodeBrowserNode.Clear; +begin + if FChildNodes<>nil then + FChildNodes.FreeAndClear; + FreeAndNil(FChildNodes); +end; + +{ TCodeBrowserUnit } + +constructor TCodeBrowserUnit.Create(const TheFilename: string); +begin + FFilename:=TheFilename; +end; + +destructor TCodeBrowserUnit.Destroy; +begin + Clear; + inherited Destroy; +end; + +procedure TCodeBrowserUnit.Clear; +begin + if FChildNodes<>nil then + FChildNodes.FreeAndClear; + FreeAndNil(FChildNodes); +end; + +{ TCodeBrowserUnitList } + +constructor TCodeBrowserUnitList.Create(TheOwner: TObject; + TheParent: TCodeBrowserUnitList); +begin + FOwner:=TheOwner; + FParentList:=TheParent; +end; + +destructor TCodeBrowserUnitList.Destroy; +begin + Clear; + inherited Destroy; +end; + +procedure TCodeBrowserUnitList.Clear; +begin + if FUnits<>nil then + FUnits.FreeAndClear; + FreeAndNil(FUnits); +end; + +{ TCodeBrowserViewOptions } + +procedure TCodeBrowserViewOptions.SetModified(const AValue: boolean); +begin + if FModified=AValue then exit; + FModified:=AValue; +end; + +procedure TCodeBrowserViewOptions.SetScope(const AValue: string); +begin + if FScope=AValue then exit; + FScope:=AValue; + Modified:=true; +end; + +procedure TCodeBrowserViewOptions.SetLevels(const AValue: TStrings); +begin + if FLevels=AValue then exit; + if FLevels.Text=AValue.Text then exit; + FLevels.Assign(AValue); + Modified:=true; +end; + +procedure TCodeBrowserViewOptions.SetSortItems(const AValue: TStrings); +begin + if FSortItems=AValue then exit; + if FSortItems.Text=AValue.Text then exit; + FSortItems.Assign(AValue); + Modified:=true; +end; + +procedure TCodeBrowserViewOptions.SetWithRequiredPackages(const AValue: boolean + ); +begin + if FWithRequiredPackages=AValue then exit; + FWithRequiredPackages:=AValue; + Modified:=true; +end; + +constructor TCodeBrowserViewOptions.Create; +begin + FSortItems:=TStringList.Create; + FLevels:=TStringList.Create; + Clear; +end; + +destructor TCodeBrowserViewOptions.Destroy; +begin + FreeAndNil(FSortItems); + FreeAndNil(FLevels); + inherited Destroy; +end; + +procedure TCodeBrowserViewOptions.Clear; +begin + FLevels.Clear; + FSortItems.Text:='Alphabetically'; + FLevels.Text:='Packages'#13 + +'Units'#13 + +'Classes'#13 + +'Sections'; + WithRequiredPackages:=false; + Scope:='Project'; + Modified:=false; +end; + +procedure TCodeBrowserViewOptions.LoadFromConfig(ConfigStore: TConfigStorage; + const Path: string); +begin + Clear; + WithRequiredPackages:= + ConfigStore.GetValue(Path+'WithRequiredPackages/Value',false); + Scope:=ConfigStore.GetValue(Path+'Scope/Value','Project'); + ConfigStore.GetValue(Path+'SortItems/',fSortItems); + ConfigStore.GetValue(Path+'Levels/',FLevels); + Modified:=false; +end; + +procedure TCodeBrowserViewOptions.SaveToConfig(ConfigStore: TConfigStorage; + const Path: string); +begin + ConfigStore.SetDeleteValue(Path+'WithRequiredPackages/Value', + WithRequiredPackages,false); + ConfigStore.SetDeleteValue(Path+'Scope/Value',Scope,'Project'); + ConfigStore.SetValue(Path+'SortItems/',fSortItems); + ConfigStore.SetValue(Path+'Levels/',FLevels); + Modified:=false; +end; + +initialization + {$I codebrowser.lrs} + +end. + diff --git a/ide/ideoptiondefs.pas b/ide/ideoptiondefs.pas index 9947aaeea0..694c971100 100644 --- a/ide/ideoptiondefs.pas +++ b/ide/ideoptiondefs.pas @@ -91,7 +91,8 @@ type nmiwEvaluate, // extra nmiwSearchResultsViewName, - nmiwAnchorEditor + nmiwAnchorEditor, + nmiwCodeBrowser ); const @@ -128,7 +129,8 @@ const 'EvaluateModify', // extra 'SearchResults', - 'AnchorEditor' + 'AnchorEditor', + 'CodeBrowser' ); type diff --git a/ide/keymapping.pp b/ide/keymapping.pp index 369f45231a..4b06ff2f08 100644 --- a/ide/keymapping.pp +++ b/ide/keymapping.pp @@ -471,6 +471,7 @@ begin ecJumpToEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); ecToggleFormUnit: SetResult(VK_F12,[],VK_UNKNOWN,[]); ecViewAnchorEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); + ecToggleCodeBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); ecToggleCompPalette: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); ecToggleIDESpeedBtns: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); @@ -789,6 +790,7 @@ begin ecJumpToEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]); ecToggleFormUnit: SetResult(VK_F12,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]); ecViewAnchorEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]); + ecToggleCodeBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]); ecToggleCompPalette: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]); ecToggleIDESpeedBtns: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]); @@ -1343,6 +1345,7 @@ begin ecViewUnitDependencies : Result:= srkmecViewUnitDependencies; ecViewUnitInfo : Result:= srkmecViewUnitInfo; ecViewAnchorEditor : Result:= srkmecViewAnchorEditor; + ecToggleCodeBrowser : Result:= srkmecToggleCodeBrowser; ecToggleCompPalette : Result:= srkmecToggleCompPalette; ecToggleIDESpeedBtns : Result:= srkmecToggleIDESpeedBtns; diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 8de683e424..e7f511cf17 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -246,6 +246,7 @@ resourcestring lisMenuViewObjectInspector = 'Object Inspector'; lisMenuViewSourceEditor = 'Source Editor'; lisMenuViewCodeExplorer = 'Code Explorer'; + lisMenuViewCodeBrowser = 'Code Browser'; lisMenuJumpTo = 'Jump to'; lisMenuViewUnits = 'Units...'; lisMenuViewForms = 'Forms...'; @@ -1657,6 +1658,7 @@ resourcestring srkmecViewUnitDependencies = 'View unit dependencies'; srkmecViewUnitInfo = 'View unit information'; srkmecViewAnchorEditor = 'View anchor editor'; + srkmecToggleCodeBrowser = 'View code browser'; srkmecToggleCompPalette = 'View component palette'; srkmecToggleIDESpeedBtns = 'View IDE speed buttons'; diff --git a/ide/main.pp b/ide/main.pp index 4b0e9dea54..6e02139ee7 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -119,7 +119,7 @@ uses DelphiUnit2Laz, DelphiProject2Laz, LazXMLForms, // rest of the ide Splash, IDEDefs, LazarusIDEStrConsts, LazConf, MsgView, SearchResultView, - CodeTemplatesDlg, + CodeTemplatesDlg, CodeBrowser, PublishModule, EnvironmentOpts, TransferMacros, KeyMapping, IDETranslations, IDEProcs, ExtToolDialog, ExtToolEditDlg, OutputFilter, BuildLazDialog, MiscOptions, InputHistory, UnitDependencies, ClipBoardHistory, @@ -229,6 +229,7 @@ type procedure mnuViewUnitInfoClicked(Sender: TObject); procedure mnuViewLazDocClicked(Sender: TObject); procedure mnuViewCodeExplorerClick(Sender: TObject); + procedure mnuViewCodeBrowserClick(Sender: TObject); procedure mnuViewMessagesClick(Sender: TObject); procedure mnuViewSearchResultsClick(Sender: TObject); procedure mnuToggleFormUnitClicked(Sender: TObject); @@ -665,6 +666,7 @@ type procedure DoViewUnitDependencies; procedure DoViewUnitInfo; procedure DoShowCodeExplorer; + procedure DoShowCodeBrowser; procedure DoShowLazDoc; function CreateNewUniqueFilename(const Prefix, Ext: string; NewOwner: TObject; Flags: TSearchIDEFileFlags; TryWithoutNumber: boolean @@ -1158,6 +1160,7 @@ begin FreeThenNil(ProjInspector); FreeThenNil(CodeExplorerView); + FreeThenNil(CodeBrowserView); FreeAndNil(LazFindReplaceDialog); FreeAndNil(MessagesView); FreeThenNil(AnchorDesigner); @@ -1749,6 +1752,8 @@ begin DoViewUnitDependencies; nmiwProjectInspector: DoShowProjectInspector; + nmiwCodeBrowser: + DoShowCodeBrowser; nmiwCodeExplorerName: DoShowCodeExplorer; nmiwLazDocName: @@ -1976,6 +1981,8 @@ begin itmViewInspector.OnClick := @mnuViewInspectorClicked; itmViewSourceEditor.OnClick := @mnuViewSourceEditorClicked; itmViewCodeExplorer.OnClick := @mnuViewCodeExplorerClick; + itmViewCodeBrowser.OnClick := @mnuViewCodeBrowserClick; + itmViewCodeBrowser.Visible:=false; itmViewLazDoc.OnClick := @mnuViewLazDocClicked; //DBlaszijk 5-sep-05 itmViewUnits.OnClick := @mnuViewUnitsClicked; itmViewForms.OnClick := @mnuViewFormsClicked; @@ -2490,6 +2497,9 @@ begin ecToggleCodeExpl: DoShowCodeExplorer; + ecToggleCodeBrowser: + DoShowCodeBrowser; + ecToggleLazDoc: DoShowLazDoc; @@ -2996,6 +3006,11 @@ begin DoShowCodeExplorer; end; +Procedure TMainIDE.mnuViewCodeBrowserClick(Sender: TObject); +begin + DoShowCodeBrowser; +end; + Procedure TMainIDE.mnuViewMessagesClick(Sender: TObject); begin // it was already visible, but user does not see it, try to move in view @@ -6801,6 +6816,15 @@ begin CodeExplorerView.Refresh; end; +procedure TMainIDE.DoShowCodeBrowser; +begin + if CodeBrowserView=nil then begin + CodeBrowserView:=TCodeBrowserView.Create(OwningComponent); + end; + + CodeBrowserView.ShowOnTop; +end; + procedure TMainIDE.DoShowLazDoc; begin SourceNotebook.ShowLazDoc; @@ -13100,6 +13124,10 @@ begin begin ALayout.Form.SetBounds(Screen.Width-200,130,170,Max(50,Screen.Height-230)); end; + nmiwCodeBrowser: + begin + ALayout.Form.SetBounds(200,100,650,500); + end; nmiwClipbrdHistoryName: ALayout.Form.SetBounds(250,Screen.Height-400,400,300); nmiwPkgGraphExplorer: diff --git a/ide/mainbar.pas b/ide/mainbar.pas index 7669018aa6..48fc9591fb 100644 --- a/ide/mainbar.pas +++ b/ide/mainbar.pas @@ -179,6 +179,7 @@ type itmViewSourceEditor: TIDEMenuCommand; itmViewCodeExplorer: TIDEMenuCommand; itmViewLazDoc: TIDEMenuCommand; + itmViewCodeBrowser: TIDEMenuCommand; //itmViewUnitWindows: TIDEMenuSection; itmViewUnits: TIDEMenuCommand; itmViewForms: TIDEMenuCommand; diff --git a/ide/mainbase.pas b/ide/mainbase.pas index 8e07211074..bc367c4072 100644 --- a/ide/mainbase.pas +++ b/ide/mainbase.pas @@ -497,6 +497,7 @@ begin CreateMenuItem(ParentMI,itmViewSourceEditor,'itmViewSourceEditor',lisMenuViewSourceEditor); CreateMenuItem(ParentMI,itmViewCodeExplorer,'itmViewCodeExplorer',lisMenuViewCodeExplorer); CreateMenuItem(ParentMI,itmViewLazDoc,'itmViewLazDoc',lisMenuLazDoc); //DBlaszijk 5-sep-05 + CreateMenuItem(ParentMI,itmViewCodeBrowser,'itmViewCodeBrowser',lisMenuViewCodeBrowser); CreateMenuSeparatorSection(mnuView,itmViewUnitWindows,'itmViewUnitWindows'); ParentMI:=itmViewUnitWindows; @@ -846,7 +847,8 @@ begin itmViewSourceEditor.Command:=GetCommand(ecToggleSourceEditor); itmViewUnits.Command:=GetCommand(ecViewUnits); itmViewCodeExplorer.Command:=GetCommand(ecToggleCodeExpl); - //itmViewLazDoc.Command:=GetCommand(ecLazDoc); //DBlaszijk 5-sep-05 + itmViewLazDoc.Command:=GetCommand(ecToggleLazDoc); + itmViewCodeBrowser.Command:=GetCommand(ecToggleCodeBrowser); itmViewUnitDependencies.Command:=GetCommand(ecViewUnitDependencies); itmViewUnitInfo.Command:=GetCommand(ecViewUnitInfo); itmViewForms.Command:=GetCommand(ecViewForms); diff --git a/ideintf/idecommands.pas b/ideintf/idecommands.pas index 97c0c92c15..cc0968c767 100644 --- a/ideintf/idecommands.pas +++ b/ideintf/idecommands.pas @@ -175,8 +175,9 @@ const ecToggleCallStack = ecFirstLazarus + 315; ecToggleSearchResults = ecFirstLazarus + 316; ecViewAnchorEditor = ecFirstLazarus + 317; - ecToggleCompPalette = ecFirstLazarus + 318; - ecToggleIDESpeedBtns = ecFirstLazarus + 319; + ecToggleCodeBrowser = ecFirstLazarus + 318; + ecToggleCompPalette = ecFirstLazarus + 319; + ecToggleIDESpeedBtns = ecFirstLazarus + 320; // sourcenotebook commands ecNextEditor = ecFirstLazarus + 330; diff --git a/images/README.txt b/images/README.txt index 77f34814b7..c6a6f37a76 100644 --- a/images/README.txt +++ b/images/README.txt @@ -52,7 +52,7 @@ cd /images/ 6. laz_images.lrs cd /images/ -../tools/lazres laz_images.lrs btn_*.xpm pkg_*.xpm menu/menu_*.xpm codeexplorer/*.xpm designer/*.xpm +../tools/lazres laz_images.lrs btn_*.xpm pkg_*.xpm arrow_*.xpm menu/menu_*.xpm codeexplorer/*.xpm designer/*.xpm rm ../main.ppu diff --git a/images/downarrow.ico b/images/arrow_down.ico similarity index 100% rename from images/downarrow.ico rename to images/arrow_down.ico diff --git a/images/downarrow.xpm b/images/arrow_down.xpm similarity index 100% rename from images/downarrow.xpm rename to images/arrow_down.xpm diff --git a/images/leftarrow.ico b/images/arrow_left.ico similarity index 100% rename from images/leftarrow.ico rename to images/arrow_left.ico diff --git a/images/leftarrow.xpm b/images/arrow_left.xpm similarity index 100% rename from images/leftarrow.xpm rename to images/arrow_left.xpm diff --git a/images/rightarrow.ico b/images/arrow_right.ico similarity index 100% rename from images/rightarrow.ico rename to images/arrow_right.ico diff --git a/images/rightarrow.xpm b/images/arrow_right.xpm similarity index 100% rename from images/rightarrow.xpm rename to images/arrow_right.xpm diff --git a/images/uparrow.ico b/images/arrow_up.ico similarity index 100% rename from images/uparrow.ico rename to images/arrow_up.ico diff --git a/images/uparrow.xpm b/images/arrow_up.xpm similarity index 100% rename from images/uparrow.xpm rename to images/arrow_up.xpm diff --git a/images/laz_images.lrs b/images/laz_images.lrs index f76a6b487c..c1c483ebd0 100644 --- a/images/laz_images.lrs +++ b/images/laz_images.lrs @@ -1161,6 +1161,241 @@ LazarusResources.Add('pkg_unit','XPM',[ +'; ",'#10'" .%%%%%%%%%%%; ",'#10'" .;;;;;;;;;;;, ",'#10'" ' +'"};'#10 ]); +LazarusResources.Add('arrow_down','XPM',[ + '/* XPM */'#10'static char * unten_xpm[] = {'#10'"25 25 128 2",'#10'" '#9'c ' + +'None",'#10'". '#9'c #FFFFFF",'#10'"+ '#9'c #E5E5E5",'#10'"@ '#9'c #E3E3E3",' + +#10'"# '#9'c #BBBBBB",'#10'"$ '#9'c #B2B2B2",'#10'"% '#9'c #D3D3D3",'#10'"& ' + +#9'c #5F5F5F",'#10'"* '#9'c #888888",'#10'"= '#9'c #F1F1F1",'#10'"- '#9'c #E' + +'8E8E8",'#10'"; '#9'c #ECECEC",'#10'"> '#9'c #E9E9E9",'#10'", '#9'c #EBEBEB"' + +','#10'"'' '#9'c #E4E4E4",'#10'") '#9'c #E2E2E2",'#10'"! '#9'c #EDEDED",'#10 + +'"~ '#9'c #EAEAEA",'#10'"{ '#9'c #F0F0F0",'#10'"] '#9'c #EFEFEF",'#10'"^ '#9 + +'c #F9F9F9",'#10'"/ '#9'c #F4F4F4",'#10'"( '#9'c #F8F8F8",'#10'"_ '#9'c #303' + +'030",'#10'": '#9'c #8D8D8D",'#10'"< '#9'c #DFDFDF",'#10'"[ '#9'c #DDDDDD",' + +#10'"} '#9'c #EEEEEE",'#10'"| '#9'c #FAFAFA",'#10'"1 '#9'c #F3F3F3",'#10'"2 ' + +#9'c #898989",'#10'"3 '#9'c #2F2F2F",'#10'"4 '#9'c #E6E6E6",'#10'"5 '#9'c #E' + +'1E1E1",'#10'"6 '#9'c #D4D4D4",'#10'"7 '#9'c #ADADAD",'#10'"8 '#9'c #AFAFAF"' + +','#10'"9 '#9'c #AAAAAA",'#10'"0 '#9'c #ABABAB",'#10'"a '#9'c #A6A6A6",'#10 + +'"b '#9'c #A1A1A1",'#10'"c '#9'c #A2A2A2",'#10'"d '#9'c #A7A7A7",'#10'"e '#9 + +'c #B4B4B4",'#10'"f '#9'c #DCDCDC",'#10'"g '#9'c #F5F5F5",'#10'"h '#9'c #848' + +'484",'#10'"i '#9'c #CFCFCF",'#10'"j '#9'c #747474",'#10'"k '#9'c #535353",' + +#10'"l '#9'c #4A4A4A",'#10'"m '#9'c #494949",'#10'"n '#9'c #454545",'#10'"o ' + +#9'c #484848",'#10'"p '#9'c #444444",'#10'"q '#9'c #464646",'#10'"r '#9'c #4' + +'74747",'#10'"s '#9'c #9C9C9C",'#10'"t '#9'c #E0E0E0",'#10'"u '#9'c #313131"' + +','#10'"v '#9'c #818181",'#10'"w '#9'c #DADADA",'#10'"x '#9'c #777777",'#10 + +'"y '#9'c #4D4D4D",'#10'"z '#9'c #666666",'#10'"A '#9'c #686868",'#10'"B '#9 + +'c #616161",'#10'"C '#9'c #656565",'#10'"D '#9'c #646464",'#10'"E '#9'c #9B9' + +'B9B",'#10'"F '#9'c #323232",'#10'"G '#9'c #8A8A8A",'#10'"H '#9'c #9F9F9F",' + +#10'"I '#9'c #565656",'#10'"J '#9'c #959595",'#10'"K '#9'c #A0A0A0",'#10'"L ' + +#9'c #A5A5A5",'#10'"M '#9'c #A4A4A4",'#10'"N '#9'c #B5B5B5",'#10'"O '#9'c #F' + +'6F6F6",'#10'"P '#9'c #8B8B8B",'#10'"Q '#9'c #D0D0D0",'#10'"R '#9'c #676767"' + +','#10'"S '#9'c #7D7D7D",'#10'"T '#9'c #ACACAC",'#10'"U '#9'c #C0C0C0",'#10 + +'"V '#9'c #868686",'#10'"W '#9'c #696969",'#10'"X '#9'c #B0B0B0",'#10'"Y '#9 + +'c #A9A9A9",'#10'"Z '#9'c #909090",'#10'"` '#9'c #D8D8D8",'#10'" .'#9'c #7B7' + +'B7B",'#10'"..'#9'c #B1B1B1",'#10'"+.'#9'c #AEAEAE",'#10'"@.'#9'c #5C5C5C",' + +#10'"#.'#9'c #B3B3B3",'#10'"$.'#9'c #DEDEDE",'#10'"%.'#9'c #E7E7E7",'#10'"&.' + +#9'c #C5C5C5",'#10'"*.'#9'c #878787",'#10'"=.'#9'c #B6B6B6",'#10'"-.'#9'c #C' + +'7C7C7",'#10'";.'#9'c #858585",'#10'">.'#9'c #8C8C8C",'#10'",.'#9'c #9D9D9D"' + +','#10'"''.'#9'c #828282",'#10'").'#9'c #8E8E8E",'#10'"!.'#9'c #BFBFBF",'#10 + +'"~.'#9'c #595959",'#10'"{.'#9'c #CECECE",'#10'"].'#9'c #FDFDFD",'#10'"^.'#9 + +'c #838383",'#10'"/.'#9'c #F7F7F7",'#10'"(.'#9'c #707070",'#10'"_.'#9'c #939' + +'393",'#10'":.'#9'c #8F8F8F",'#10'"<.'#9'c #B7B7B7",'#10'"[.'#9'c #FBFBFB",' + +#10'"}.'#9'c #7F7F7F",'#10'"|.'#9'c #2D2D2D",'#10'"1.'#9'c #CACACA",'#10'"2.' + +#9'c #6B6B6B",'#10'"3.'#9'c #585858",'#10'"4.'#9'c #2E2E2E",'#10'"5.'#9'c #3' + +'33333",'#10'"6.'#9'c #383838",'#10'"7.'#9'c #919191",'#10'". . . . . . . . ' + +'. . . . . . . . . . . . . . . + @ ",'#10'". . . . . . . . . . . . . . . . .' + +' . . . . . . # $ ",'#10'". . . . . . . . . . . . . . . . . . . . . . % & * ' + +'",'#10'". . . = - ; > , ; '' ) ! ~ = , ; ; { ] ^ / ( * _ : ",'#10'". . . < ' + +'{ [ ! - , ! - } - = { , ! ~ = ] | 1 2 3 * ",'#10'". . . 4 5 6 7 8 9 0 a 0 b' + +' c d 0 7 e f 4 g ; 2 3 h ",'#10'". . . < ; i j k l m n o p p q r k s t g } ' + +'! 2 u v ",'#10'". . . 4 > w x y z A B C D z z B E ( . . ~ 1 * F G ",'#10'".' + +' . . 4 , { H I J d K K L L M N @ . . O @ } G u P ",'#10'". . . + > ] Q R S ' + +'T T 0 T 0 0 U ( . . ~ t > V _ : ",'#10'". . . 4 , = ! E W E X 8 T Y # f . .' + +' ] { 4 ! * u Z ",'#10'". . . @ > = { ` D .X ..7 +.U ( . . '' , + ; V u : "' + +','#10'". . . f ) , ; { 2 @.s #...U @ . . - $.4 %.} V _ * ",'#10'". . . [ 5 ' + +'~ ~ } &.B *.#.=.-.. . . %.t %.~ = ;._ >.",'#10'". . . 5 4 } ; } ~ * A ,.U @' + +' . . ) 4 $.@ + ~ ''.3 ).",'#10'". . . 5 - { ; ! ! !.~.h {.. . ].'' , @ %.%.' + +'; ^.u * ",'#10'". . . %.4 + , 1 /.4 (._.= . . 5 > w w t - ; V F :.",'#10'".' + +' . . 4 + '' - } > ( <.-.. . . ~ '' %.; @ < %.*.F h ",'#10'". . . + ) '' - ,' + +' ] O ) - . . ] ) + '' %.< $.4 ^._ h ",'#10'". . . @ < @ ~ } 1 { ; { [.g - >' + +' - f [ ) + @ }.3 * ",'#10'". . . ) $.) , { ( { } 1 ] + '' ! 4 5 ~ ! ~ @ }.3' + +' h ",'#10'". . . ) t ) - ; 1 = { { } > + + > ~ { ; , ! ''.|.^.",'#10'". | 1' + +'.''.^.^.^.h ^.2 ).P V ''.^.;.*.;.V ;.*.2 2.u h ",'#10'"= =.3.4._ _ 3 4.u _ ' + +'_ u 5.F _ 4._ 3 u u _ 3 F 6.V ",'#10'"t # G 2 V ;.v *.;.P V V ;.h P * P P :' + +' Z 7.: 2 ).X "};'#10 +]); +LazarusResources.Add('arrow_left','XPM',[ + '/* XPM */'#10'static char * links_xpm[] = {'#10'"25 25 114 2",'#10'" '#9'c ' + +'None",'#10'". '#9'c #FFFFFF",'#10'"+ '#9'c #E5E5E5",'#10'"@ '#9'c #E3E3E3",' + +#10'"# '#9'c #BBBBBB",'#10'"$ '#9'c #B2B2B2",'#10'"% '#9'c #D3D3D3",'#10'"& ' + +#9'c #5F5F5F",'#10'"* '#9'c #888888",'#10'"= '#9'c #F1F1F1",'#10'"- '#9'c #E' + +'8E8E8",'#10'"; '#9'c #ECECEC",'#10'"> '#9'c #E9E9E9",'#10'", '#9'c #EBEBEB"' + +','#10'"'' '#9'c #E4E4E4",'#10'") '#9'c #E2E2E2",'#10'"! '#9'c #EDEDED",'#10 + +'"~ '#9'c #EAEAEA",'#10'"{ '#9'c #F0F0F0",'#10'"] '#9'c #EFEFEF",'#10'"^ '#9 + +'c #F9F9F9",'#10'"/ '#9'c #F4F4F4",'#10'"( '#9'c #F8F8F8",'#10'"_ '#9'c #303' + +'030",'#10'": '#9'c #8D8D8D",'#10'"< '#9'c #DFDFDF",'#10'"[ '#9'c #DDDDDD",' + +#10'"} '#9'c #EEEEEE",'#10'"| '#9'c #FAFAFA",'#10'"1 '#9'c #F3F3F3",'#10'"2 ' + +#9'c #898989",'#10'"3 '#9'c #2F2F2F",'#10'"4 '#9'c #E6E6E6",'#10'"5 '#9'c #E' + +'1E1E1",'#10'"6 '#9'c #E0E0E0",'#10'"7 '#9'c #B3B3B3",'#10'"8 '#9'c #D6D6D6"' + +','#10'"9 '#9'c #F5F5F5",'#10'"0 '#9'c #848484",'#10'"a '#9'c #DBDBDB",'#10 + +'"b '#9'c #CACACA",'#10'"c '#9'c #949494",'#10'"d '#9'c #525252",'#10'"e '#9 + +'c #585858",'#10'"f '#9'c #B7B7B7",'#10'"g '#9'c #313131",'#10'"h '#9'c #818' + +'181",'#10'"i '#9'c #E7E7E7",'#10'"j '#9'c #CBCBCB",'#10'"k '#9'c #868686",' + +#10'"l '#9'c #414141",'#10'"m '#9'c #1C1C1C",'#10'"n '#9'c #141414",'#10'"o ' + +#9'c #6C6C6C",'#10'"p '#9'c #323232",'#10'"q '#9'c #8A8A8A",'#10'"r '#9'c #B' + +'1B1B1",'#10'"s '#9'c #757575",'#10'"t '#9'c #3C3C3C",'#10'"u '#9'c #161616"' + +','#10'"v '#9'c #2A2A2A",'#10'"w '#9'c #575757",'#10'"x '#9'c #8B8B8B",'#10 + +'"y '#9'c #C4C4C4",'#10'"z '#9'c #717171",'#10'"A '#9'c #2E2E2E",'#10'"B '#9 + +'c #151515",'#10'"C '#9'c #191919",'#10'"D '#9'c #2D2D2D",'#10'"E '#9'c #8E8' + +'E8E",'#10'"F '#9'c #AAAAAA",'#10'"G '#9'c #A7A7A7",'#10'"H '#9'c #626262",' + +#10'"I '#9'c #3A3A3A",'#10'"J '#9'c #656565",'#10'"K '#9'c #8F8F8F",'#10'"L ' + +#9'c #A6A6A6",'#10'"M '#9'c #ADADAD",'#10'"N '#9'c #B0B0B0",'#10'"O '#9'c #9' + +'09090",'#10'"P '#9'c #393939",'#10'"Q '#9'c #282828",'#10'"R '#9'c #6D6D6D"' + +','#10'"S '#9'c #9D9D9D",'#10'"T '#9'c #ABABAB",'#10'"U '#9'c #DCDCDC",'#10 + +'"V '#9'c #C5C5C5",'#10'"W '#9'c #A8A8A8",'#10'"X '#9'c #B5B5B5",'#10'"Y '#9 + +'c #AEAEAE",'#10'"Z '#9'c #ACACAC",'#10'"` '#9'c #A9A9A9",'#10'" .'#9'c #D2D' + +'2D2",'#10'"..'#9'c #AFAFAF",'#10'"+.'#9'c #858585",'#10'"@.'#9'c #8C8C8C",' + +#10'"#.'#9'c #C0C0C0",'#10'"$.'#9'c #828282",'#10'"%.'#9'c #DADADA",'#10'"&.' + +#9'c #C1C1C1",'#10'"*.'#9'c #838383",'#10'"=.'#9'c #F7F7F7",'#10'"-.'#9'c #D' + +'1D1D1",'#10'";.'#9'c #FDFDFD",'#10'">.'#9'c #878787",'#10'",.'#9'c #F6F6F6"' + +','#10'"''.'#9'c #F2F2F2",'#10'").'#9'c #DEDEDE",'#10'"!.'#9'c #7F7F7F",'#10 + +'"~.'#9'c #6B6B6B",'#10'"{.'#9'c #B6B6B6",'#10'"].'#9'c #333333",'#10'"^.'#9 + +'c #383838",'#10'"/.'#9'c #919191",'#10'". . . . . . . . . . . . . . . . . .' + +' . . . . . + @ ",'#10'". . . . . . . . . . . . . . . . . . . . . . . # $ ",' + +#10'". . . . . . . . . . . . . . . . . . . . . . % & * ",'#10'". . . = - ; >' + +' , ; '' ) ! ~ = , ; ; { ] ^ / ( * _ : ",'#10'". . . < { [ ! - , ! - } - = {' + +' , ! ~ = ] | 1 2 3 * ",'#10'". . . 4 5 ] 6 = ; ! 4 ! < 6 - ! ) 7 8 @ 9 ; 2 ' + +'3 0 ",'#10'". . . < ; > 4 = ; , < > [ a b c d e f = } ! 2 g h ",'#10'". . .' + +' 4 > @ > , ! ! [ i j k l m n o '' . ~ 1 * p q ",'#10'". . . 4 , = ! ] { < r' + +' s t u n v w } . . @ } q g x ",'#10'". . . + > ] ~ 4 y z A B C D w E F . . ' + +'. 6 > k _ : ",'#10'". . . 4 , '' G H A B C I J K L M N . . . 4 ! * g O ",' + +#10'". . . @ > [ k P Q t R S M F T M F . . . + ; k g : ",'#10'". . . U ) @ V' + +' 7 $ W X $ r Y Z M ` . . . i } k _ * ",'#10'". . . [ 5 > i i , ! .f $ ..Y ' + +'Y M . . . ~ = +._ @.",'#10'". . . 5 4 } ; ! , > ! i #.L Z ..F . . . + ~ $.3' + +' E ",'#10'". . . 5 - { ; ! } ~ '' < %.% &.Z T . . . i ; *.g * ",'#10'". . .' + +' i 4 + , 1 =.} ~ , @ [ < -.7 . . . - ; k p K ",'#10'". . . 4 + '' - } > ^ ;' + +'.] 5 @ 4 '' U . . . < i >.p 0 ",'#10'". . . + ) '' - , ] ,.= + 4 ''.} 6 U .' + +' . . ).4 *._ 0 ",'#10'". . . @ < @ ~ } 1 { ! , ~ > - > i U ( . + @ !.3 * ",' + +#10'". . . ) ).) , { ( { } 1 ] + '' ! 4 5 ~ ! ~ @ !.3 0 ",'#10'". . . ) 6 ) ' + +'- ; 1 = { { } > + + > ~ { ; , ! $.D *.",'#10'". | b $.*.*.*.0 *.2 E x k $.*' + +'.+.>.+.k +.>.2 ~.g 0 ",'#10'"= {.e A _ _ 3 A g _ _ g ].p _ A _ 3 g g _ 3 p ' + +'^.k ",'#10'"6 # q 2 k +.h >.+.x k k +.0 x * x x : O /.: 2 E N "};'#10 +]); +LazarusResources.Add('arrow_right','XPM',[ + '/* XPM */'#10'static char * rechts_xpm[] = {'#10'"25 25 109 2",'#10'" '#9'c' + +' None",'#10'". '#9'c #FFFFFF",'#10'"+ '#9'c #E5E5E5",'#10'"@ '#9'c #E3E3E3"' + +','#10'"# '#9'c #BBBBBB",'#10'"$ '#9'c #B2B2B2",'#10'"% '#9'c #D3D3D3",'#10 + +'"& '#9'c #5F5F5F",'#10'"* '#9'c #888888",'#10'"= '#9'c #F1F1F1",'#10'"- '#9 + +'c #E8E8E8",'#10'"; '#9'c #ECECEC",'#10'"> '#9'c #E9E9E9",'#10'", '#9'c #EBE' + +'BEB",'#10'"'' '#9'c #E4E4E4",'#10'") '#9'c #E2E2E2",'#10'"! '#9'c #EDEDED",' + +#10'"~ '#9'c #EAEAEA",'#10'"{ '#9'c #F0F0F0",'#10'"] '#9'c #EFEFEF",'#10'"^ ' + +#9'c #F9F9F9",'#10'"/ '#9'c #F4F4F4",'#10'"( '#9'c #F8F8F8",'#10'"_ '#9'c #3' + +'03030",'#10'": '#9'c #8D8D8D",'#10'"< '#9'c #DFDFDF",'#10'"[ '#9'c #DDDDDD"' + +','#10'"} '#9'c #EEEEEE",'#10'"| '#9'c #FAFAFA",'#10'"1 '#9'c #F3F3F3",'#10 + +'"2 '#9'c #898989",'#10'"3 '#9'c #2F2F2F",'#10'"4 '#9'c #E6E6E6",'#10'"5 '#9 + +'c #E1E1E1",'#10'"6 '#9'c #BFBFBF",'#10'"7 '#9'c #BDBDBD",'#10'"8 '#9'c #E0E' + +'0E0",'#10'"9 '#9'c #E7E7E7",'#10'"0 '#9'c #F5F5F5",'#10'"a '#9'c #848484",' + +#10'"b '#9'c #939393",'#10'"c '#9'c #575757",'#10'"d '#9'c #747474",'#10'"e ' + +#9'c #999999",'#10'"f '#9'c #D1D1D1",'#10'"g '#9'c #DEDEDE",'#10'"h '#9'c #D' + +'BDBDB",'#10'"i '#9'c #313131",'#10'"j '#9'c #818181",'#10'"k '#9'c #363636"' + +','#10'"l '#9'c #5B5B5B",'#10'"m '#9'c #585858",'#10'"n '#9'c #686868",'#10 + +'"o '#9'c #8E8E8E",'#10'"p '#9'c #CCCCCC",'#10'"q '#9'c #DCDCDC",'#10'"r '#9 + +'c #F2F2F2",'#10'"s '#9'c #323232",'#10'"t '#9'c #8A8A8A",'#10'"u '#9'c #989' + +'898",'#10'"v '#9'c #757575",'#10'"w '#9'c #5E5E5E",'#10'"x '#9'c #808080",' + +#10'"y '#9'c #B8B8B8",'#10'"z '#9'c #8B8B8B",'#10'"A '#9'c #B6B6B6",'#10'"B ' + +#9'c #ACACAC",'#10'"C '#9'c #5C5C5C",'#10'"D '#9'c #828282",'#10'"E '#9'c #8' + +'68686",'#10'"F '#9'c #B9B9B9",'#10'"G '#9'c #B5B5B5",'#10'"H '#9'c #B0B0B0"' + +','#10'"I '#9'c #ABABAB",'#10'"J '#9'c #949494",'#10'"K '#9'c #7F7F7F",'#10 + +'"L '#9'c #646464",'#10'"M '#9'c #707070",'#10'"N '#9'c #AAAAAA",'#10'"O '#9 + +'c #909090",'#10'"P '#9'c #B4B4B4",'#10'"Q '#9'c #B1B1B1",'#10'"R '#9'c #ADA' + +'DAD",'#10'"S '#9'c #A9A9A9",'#10'"T '#9'c #8C8C8C",'#10'"U '#9'c #B3B3B3",' + +#10'"V '#9'c #C0C0C0",'#10'"W '#9'c #CECECE",'#10'"X '#9'c #F7F7F7",'#10'"Y ' + +#9'c #C7C7C7",'#10'"Z '#9'c #858585",'#10'"` '#9'c #FCFCFC",'#10'" .'#9'c #F' + +'DFDFD",'#10'"..'#9'c #838383",'#10'"+.'#9'c #393939",'#10'"@.'#9'c #D0D0D0"' + +','#10'"#.'#9'c #DADADA",'#10'"$.'#9'c #8F8F8F",'#10'"%.'#9'c #878787",'#10 + +'"&.'#9'c #C3C3C3",'#10'"*.'#9'c #F6F6F6",'#10'"=.'#9'c #FBFBFB",'#10'"-.'#9 + +'c #2D2D2D",'#10'";.'#9'c #CACACA",'#10'">.'#9'c #6B6B6B",'#10'",.'#9'c #2E2' + +'E2E",'#10'"''.'#9'c #333333",'#10'").'#9'c #383838",'#10'"!.'#9'c #919191",' + +#10'". . . . . . . . . . . . . . . . . . . . . . . + @ ",'#10'". . . . . . .' + +' . . . . . . . . . . . . . . . . # $ ",'#10'". . . . . . . . . . . . . . . ' + +'. . . . . . . % & * ",'#10'". . . = - ; > , ; '' ) ! ~ = , ; ; { ] ^ / ( * ' + +'_ : ",'#10'". . . < { [ ! - , ! - } - = { , ! ~ = ] | 1 2 3 * ",'#10'". . .' + +' 4 5 6 7 + , ! 4 ! < 8 - ! ] - ] 9 0 ; 2 3 a ",'#10'". . . < ; b c d e f g ' + +'> [ h @ 4 - 9 ~ ~ } ! 2 i j ",'#10'". . . 4 > a k l m n o p @ > ~ [ q + 4 r' + +' ~ 1 * s t ",'#10'". . . 4 , t s 2 u v w l x y h [ ~ + @ ~ @ } t i z ",'#10 + +'". . . + > 2 _ * A B b d c C D y 8 + '' ~ 8 > E _ : ",'#10'". . . 4 , t i z' + +' F G H I J K L m M N q ] 4 ! * i O ",'#10'". . . @ > t i : y A P Q R S u a ' + +'T 6 9 { + ; E i : ",'#10'". . . q ) E _ z y A G U Q $ V W = . . X 9 } E _ *' + +' ",'#10'". . . [ 5 E _ 2 y G P y V Y @ . . . . 1 ~ = Z _ T ",'#10'". . . 5 ' + +'4 * _ 2 A U V V @ . . . . ` g @ + ~ D 3 o ",'#10'". . . 5 - 2 _ 2 V V q ( .' + +' . . .'' , @ 9 9 ; ..i * ",'#10'". . . 9 4 ..+.@.W ( . . . . g 5 > #.#.8 -' + +' ; E s $.",'#10'". . . 4 + O o . . . . . 9 '' > ~ '' 9 ; @ < 9 %.s a ",'#10 + +'". . . + ) &.h . . . *.+ 4 r ] ) + '' 9 < g 4 .._ a ",'#10'". . . @ < < =..' + +' . { ! , ~ > - > - q [ ) + @ K 3 * ",'#10'". . . ) g ) , { ( { } 1 ] + '' !' + +' 4 5 ~ ! ~ @ K 3 a ",'#10'". . . ) 8 ) - ; 1 = { { } > + + > ~ { ; , ! D -.' + +'..",'#10'". | ;.D ......a ..2 o z E D ..Z %.Z E Z %.2 >.i a ",'#10'"= A m ,' + +'._ _ 3 ,.i _ _ i ''.s _ ,._ 3 i i _ 3 s ).E ",'#10'"8 # t 2 E Z j %.Z z E E' + +' Z a z * z z : O !.: 2 o H "};'#10 +]); +LazarusResources.Add('arrow_up','XPM',[ + '/* XPM */'#10'static char * oben_xpm[] = {'#10'"25 25 121 2",'#10'" '#9'c N' + +'one",'#10'". '#9'c #FFFFFF",'#10'"+ '#9'c #E5E5E5",'#10'"@ '#9'c #E3E3E3",' + +#10'"# '#9'c #BBBBBB",'#10'"$ '#9'c #B2B2B2",'#10'"% '#9'c #D3D3D3",'#10'"& ' + +#9'c #5F5F5F",'#10'"* '#9'c #888888",'#10'"= '#9'c #F1F1F1",'#10'"- '#9'c #E' + +'8E8E8",'#10'"; '#9'c #ECECEC",'#10'"> '#9'c #E9E9E9",'#10'", '#9'c #EBEBEB"' + +','#10'"'' '#9'c #E4E4E4",'#10'") '#9'c #E2E2E2",'#10'"! '#9'c #EDEDED",'#10 + +'"~ '#9'c #EAEAEA",'#10'"{ '#9'c #F0F0F0",'#10'"] '#9'c #EFEFEF",'#10'"^ '#9 + +'c #F9F9F9",'#10'"/ '#9'c #F4F4F4",'#10'"( '#9'c #F8F8F8",'#10'"_ '#9'c #303' + +'030",'#10'": '#9'c #8D8D8D",'#10'"< '#9'c #DFDFDF",'#10'"[ '#9'c #DDDDDD",' + +#10'"} '#9'c #EEEEEE",'#10'"| '#9'c #FAFAFA",'#10'"1 '#9'c #F3F3F3",'#10'"2 ' + +#9'c #898989",'#10'"3 '#9'c #2F2F2F",'#10'"4 '#9'c #E6E6E6",'#10'"5 '#9'c #E' + +'1E1E1",'#10'"6 '#9'c #E0E0E0",'#10'"7 '#9'c #D9D9D9",'#10'"8 '#9'c #D8D8D8"' + +','#10'"9 '#9'c #E7E7E7",'#10'"0 '#9'c #F5F5F5",'#10'"a '#9'c #848484",'#10 + +'"b '#9'c #9C9C9C",'#10'"c '#9'c #838383",'#10'"d '#9'c #B8B8B8",'#10'"e '#9 + +'c #313131",'#10'"f '#9'c #818181",'#10'"g '#9'c #5B5B5B",'#10'"h '#9'c #363' + +'636",'#10'"i '#9'c #AAAAAA",'#10'"j '#9'c #DCDCDC",'#10'"k '#9'c #F2F2F2",' + +#10'"l '#9'c #323232",'#10'"m '#9'c #8A8A8A",'#10'"n '#9'c #292929",'#10'"o ' + +#9'c #242424",'#10'"p '#9'c #A6A6A6",'#10'"q '#9'c #DEDEDE",'#10'"r '#9'c #8' + +'B8B8B",'#10'"s '#9'c #717171",'#10'"t '#9'c #141414",'#10'"u '#9'c #393939"' + +','#10'"v '#9'c #9E9E9E",'#10'"w '#9'c #868686",'#10'"x '#9'c #C6C6C6",'#10 + +'"y '#9'c #191919",'#10'"z '#9'c #696969",'#10'"A '#9'c #ACACAC",'#10'"B '#9 + +'c #C7C7C7",'#10'"C '#9'c #909090",'#10'"D '#9'c #161616",'#10'"E '#9'c #3C3' + +'C3C",'#10'"F '#9'c #9D9D9D",'#10'"G '#9'c #ADADAD",'#10'"H '#9'c #D6D6D6",' + +#10'"I '#9'c #414141",'#10'"J '#9'c #1A1A1A",'#10'"K '#9'c #6A6A6A",'#10'"L ' + +#9'c #B3B3B3",'#10'"M '#9'c #B1B1B1",'#10'"N '#9'c #AEAEAE",'#10'"O '#9'c #B' + +'EBEBE",'#10'"P '#9'c #181818",'#10'"Q '#9'c #989898",'#10'"R '#9'c #B4B4B4"' + +','#10'"S '#9'c #AFAFAF",'#10'"T '#9'c #A8A8A8",'#10'"U '#9'c #858585",'#10 + +'"V '#9'c #8C8C8C",'#10'"W '#9'c #D2D2D2",'#10'"X '#9'c #424242",'#10'"Y '#9 + +'c #151515",'#10'"Z '#9'c #B0B0B0",'#10'"` '#9'c #828282",'#10'" .'#9'c #8E8' + +'E8E",'#10'"..'#9'c #1E1E1E",'#10'"+.'#9'c #2E2E2E",'#10'"@.'#9'c #939393",' + +#10'"#.'#9'c #A9A9A9",'#10'"$.'#9'c #A7A7A7",'#10'"%.'#9'c #D4D4D4",'#10'"&.' + +#9'c #535353",'#10'"*.'#9'c #171717",'#10'"=.'#9'c #5C5C5C",'#10'"-.'#9'c #8' + +'F8F8F",'#10'";.'#9'c #484848",'#10'">.'#9'c #575757",'#10'",.'#9'c #CECECE"' + +','#10'"''.'#9'c #878787",'#10'").'#9'c #D5D5D5",'#10'"!.'#9'c #7F7F7F",'#10 + +'"~.'#9'c #FCFCFC",'#10'"{.'#9'c #FBFBFB",'#10'"].'#9'c #FDFDFD",'#10'"^.'#9 + +'c #FEFEFE",'#10'"/.'#9'c #2D2D2D",'#10'"(.'#9'c #CACACA",'#10'"_.'#9'c #6B6' + +'B6B",'#10'":.'#9'c #B6B6B6",'#10'"<.'#9'c #585858",'#10'"[.'#9'c #333333",' + +#10'"}.'#9'c #383838",'#10'"|.'#9'c #919191",'#10'". . . . . . . . . . . . .' + +' . . . . . . . . . . + @ ",'#10'". . . . . . . . . . . . . . . . . . . . . ' + +'. . # $ ",'#10'". . . . . . . . . . . . . . . . . . . . . . % & * ",'#10'".' + +' . . = - ; > , ; '' ) ! ~ = , ; ; { ] ^ / ( * _ : ",'#10'". . . < { [ ! - ,' + +' ! - } - = { , ! ~ = ] | 1 2 3 * ",'#10'". . . 4 5 ] 6 = ; ! 7 7 8 < - ! ] ' + +'- ] 9 0 ; 2 3 a ",'#10'". . . < ; > 4 = ; , b c d 7 @ 4 - 9 ~ ~ } ! 2 e f "' + +','#10'". . . 4 > @ > , ! 4 g h i @ > [ j + 4 k ~ 1 * l m ",'#10'". . . 4 , ' + +'= ! ] { d n o p j j q ~ + @ ~ @ } m e r ",'#10'". . . + > ] ~ ; ; s t u v <' + +' q ) - 4 '' ~ 6 > w _ : ",'#10'". . . 4 , = } { x e y z A B '' ) ~ , ~ { 4 ' + +'! * e C ",'#10'". . . @ > = { / f D E F A G 5 6 6 + '' , + ; w e : ",'#10'"' + +'. . . j ) , ; H I J K L M N O 6 8 ) q 4 9 } w _ * ",'#10'". . . [ 5 ~ ~ 2 P' + +' 3 Q R $ S T j 5 4 6 9 ~ = U _ V ",'#10'". . . 5 4 } W X Y g G Z S A A B @ ' + +''' [ @ + ~ ` 3 .",'#10'". . . 5 - { Q ..+.@.S A #.$.#.A %.+ 5 9 9 ; c e * ' + +'",'#10'". . . 9 4 8 &.*.=.N Z L $ i $.#.L % W < - ; w l -.",'#10'". . . 4 +' + +' Z ;.>.,.~ ~ ~ ~ ~ ~ ~ ~ . . @ < 9 ''.l a ",'#10'". . . + ) d @.).. . . . .' + +' . . . . . . ( q 4 c _ a ",'#10'". . . @ < %.6 . . . . . . . . . . . . . + ' + +'@ !.3 * ",'#10'". . . ) q 5 k . . . . . . ~.{.. ].( . ^.~ @ !.3 a ",'#10'".' + +' . . ) 6 ) - ; 1 = { { } > + + > ~ { ; , ! ` /.c ",'#10'". | (.` c c c a c ' + +'2 .r w ` c U ''.U w U ''.2 _.e a ",'#10'"= :.<.+._ _ 3 +.e _ _ e [.l _ +._' + +' 3 e e _ 3 l }.w ",'#10'"6 # m 2 w U f ''.U r w w U a r * r r : C |.: 2 .Z' + +' "};'#10 +]); LazarusResources.Add('menu_breakpoints','XPM',[ '/* XPM */'#10'static char * breakpoints_xpm[] = {'#10'"16 16 232 2",'#10'" ' +#9'c None",'#10'". '#9'c #FFFFFF",'#10'"+ '#9'c #FFFFCC",'#10'"@ '#9'c #FFFF'