{ $Id$ } { /*************************************************************************** mainbase.pas - the "integrated" in IDE ---------------------------------------- TMainIDEBase is the ancestor of TMainIDE. The various top level parts of the IDE (called bosses/managers) access the TMainIDE via TMainIDEBase. main.pp - TMainIDE = class(TMainIDEBase) The highest manager/boss of the IDE. Only lazarus.pp uses this unit. mainbase.pas - TMainIDEBase = class(TMainIDEInterface) The ancestor class used by (and only by) the other bosses/managers like debugmanager, pkgmanager. mainintf.pas - TMainIDEInterface = class(TLazIDEInterface) The interface class of the top level functions of the IDE. TMainIDEInterface is used by functions/units, that uses several different parts of the IDE (designer, source editor, codetools), so they can't be added to a specific boss and which are yet too small to become a boss of their own. lazideintf.pas - TLazIDEInterface = class(TComponent) For designtime packages, this is the interface class of the top level functions of the IDE. ***************************************************************************/ *************************************************************************** * * * 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. * * * *************************************************************************** } unit MainBase; {$mode objfpc}{$H+} interface {$I ide.inc} uses {$IFDEF IDE_MEM_CHECK} MemCheck, {$ENDIF} Classes, LCLType, LCLProc, LCLIntf, StdCtrls, Buttons, Menus, ComCtrls, SysUtils, Controls, Graphics, ExtCtrls, Dialogs, FileUtil, Forms, CodeToolManager, CodeCache, AVL_Tree, SynEditKeyCmds, // IDEIntf LazConf, LazarusIDEStrConsts, SrcEditorIntf, LazIDEIntf, MenuIntf, IDECommands, IDEMsgIntf, // IDE ProjectDefs, Project, PublishModule, BuildLazDialog, Compiler, ComponentReg, OutputFilter, TransferMacros, ObjectInspector, PropEdits, IDEDefs, MsgView, EnvironmentOpts, EditorOptions, CompilerOptions, KeyMapping, IDEProcs, Debugger, IDEOptionDefs, CodeToolsDefines, Splash, Designer, SourceEditor, BuildManager, MainBar, MainIntf; type TResetToolFlag = ( rfInteractive, rfCloseOnDone ); TResetToolFlags = set of TResetToolFlag; { TMainIDEBase } TMainIDEBase = class(TMainIDEInterface) private FToolStatus: TIDEToolStatus; protected FNeedUpdateHighlighters: boolean; function CreateMenuSeparator : TMenuItem; procedure CreateMenuItem(Section: TIDEMenuSection; var MenuItem: TIDEMenuCommand; const MenuItemName, MenuItemCaption: String; const bmpName: String = ''; mnuEnabled: Boolean = true; mnuChecked: Boolean = false); procedure CreateMenuSeparatorSection(ParentSection: TIDEMenuSection; var Section: TIDEMenuSection; const AName: String); procedure CreateMenuSubSection(ParentSection: TIDEMenuSection; var Section: TIDEMenuSection; const AName, ACaption: String; const bmpName: String = ''); procedure CreateMainMenuItem(var Section: TIDEMenuSection; const MenuItemName, MenuItemCaption: String); procedure SetupMainMenu; virtual; procedure SetupFileMenu; virtual; procedure SetupEditMenu; virtual; procedure SetupSearchMenu; virtual; procedure SetupViewMenu; virtual; procedure SetupProjectMenu; virtual; procedure SetupRunMenu; virtual; procedure SetupComponentsMenu; virtual; procedure SetupToolsMenu; virtual; procedure SetupEnvironmentMenu; virtual; procedure SetupWindowsMenu; virtual; procedure SetupHelpMenu; virtual; procedure LoadMenuShortCuts; virtual; function GetToolStatus: TIDEToolStatus; override; procedure SetToolStatus(const AValue: TIDEToolStatus); virtual; procedure mnuWindowItemClick(Sender: TObject); virtual; procedure mnuWindowSourceItemClick(Sender: TObject); virtual; procedure OnMainBarDestroy(Sender: TObject); virtual; procedure ConnectOutputFilter; public property ToolStatus: TIDEToolStatus read FToolStatus write SetToolStatus; function DoResetToolStatus(AFlags: TResetToolFlags): boolean; virtual; abstract; constructor Create(TheOwner: TComponent); override; procedure StartIDE; virtual; abstract; destructor Destroy; override; procedure CreateOftenUsedForms; virtual; abstract; function GetMainBar: TComponent; override; procedure GetUnitInfoForDesigner(ADesigner: TIDesigner; out ActiveSourceEditor: TSourceEditorInterface; out ActiveUnitInfo: TUnitInfo); override; procedure GetCurrentUnitInfo(out ActiveSourceEditor: TSourceEditorInterface; out ActiveUnitInfo: TUnitInfo); override; procedure GetCurrentUnit(out ActiveSourceEditor: TSourceEditor; out ActiveUnitInfo: TUnitInfo); virtual; abstract; procedure GetUnitWithPageIndex(PageIndex: integer; var ActiveSourceEditor: TSourceEditor; var ActiveUnitInfo: TUnitInfo); virtual; abstract; procedure GetDesignerUnit(ADesigner: TDesigner; var ActiveSourceEditor: TSourceEditor; var ActiveUnitInfo: TUnitInfo); virtual; abstract; procedure GetObjectInspectorUnit( var ActiveSourceEditor: TSourceEditor; var ActiveUnitInfo: TUnitInfo); virtual; abstract; procedure GetUnitWithForm(AForm: TCustomForm; var ActiveSourceEditor: TSourceEditor; var ActiveUnitInfo: TUnitInfo); virtual; abstract; procedure GetUnitWithPersistent(APersistent: TPersistent; var ActiveSourceEditor: TSourceEditor; var ActiveUnitInfo: TUnitInfo); virtual; abstract; function GetSourceEditorForUnitInfo(AnUnitInfo: TUnitInfo): TSourceEditor; virtual; abstract; function DoOpenMacroFile(Sender: TObject; const AFilename: string ): TModalResult; override; procedure UpdateWindowMenu; override; procedure SetRecentSubMenu(Section: TIDEMenuSection; FileList: TStringList; OnClickEvent: TNotifyEvent); override; procedure UpdateHighlighters(Immediately: boolean = false); override; function DoJumpToCodePosition( ActiveSrcEdit: TSourceEditorInterface; ActiveUnitInfo: TUnitInfo; NewSource: TCodeBuffer; NewX, NewY, NewTopLine: integer; AddJumpPoint: boolean; MarkLine: Boolean = False): TModalResult; override; function DoJumpToCodePos( ActiveSrcEdit: TSourceEditor; ActiveUnitInfo: TUnitInfo; NewSource: TCodeBuffer; NewX, NewY, NewTopLine: integer; AddJumpPoint: boolean; FocusEditor: Boolean = True; MarkLine: Boolean = False): TModalResult; virtual; abstract; procedure FindInFilesPerDialog(AProject: TProject); override; procedure FindInFiles(AProject: TProject; const FindText: string); override; end; var MainIDE: TMainIDEBase = nil; { Normally the IDE builds itself with packages named in config files. When the IDE should keep the packages installed in the current executable set KeepInstalledPackages to true. } var KeepInstalledPackages: boolean = false; implementation uses IDEImagesIntf; {$IFDEF LCLCarbon} var mnuApple: TIDEMenuSection = nil; {$ENDIF} { TMainIDEBase } procedure TMainIDEBase.mnuWindowItemClick(Sender: TObject); var i: Integer; begin i:=Screen.CustomFormCount-1; while (i>=0) do begin if Screen.CustomForms[i].Caption=(Sender as TIDEMenuCommand).Caption then begin Screen.CustomForms[i].BringToFront; break; end; dec(i); end; end; procedure TMainIDEBase.mnuWindowSourceItemClick(Sender: TObject); var page: longint; begin page:=(sender as TIDEMenuCommand).tag; if (SourceNotebook = nil) or (page<0) or (page>=SourceNotebook.Count) then exit; SourceEditorWindow.BringToFront; SourceNotebook.ActiveEditor:=SourceNotebook.Editors[page]; end; procedure TMainIDEBase.OnMainBarDestroy(Sender: TObject); begin //writeln('TMainIDEBase.OnMainBarDestroy'); end; procedure TMainIDEBase.ConnectOutputFilter; begin TheOutputFilter.OnAddFilteredLine:=@MessagesView.AddMsg; TheOutputFilter.OnReadLine:=@MessagesView.AddProgress; TheOutputFilter.OnEndReading:=@MessagesView.CollectLineParts; TheOutputFilter.OnBeginUpdate:=@MessagesView.BeginUpdateNotification; TheOutputFilter.OnEndUpdate:=@MessagesView.EndUpdateNotification; end; procedure TMainIDEBase.SetToolStatus(const AValue: TIDEToolStatus); begin if FToolStatus=AValue then exit; FToolStatus:=AValue; UpdateCaption; end; constructor TMainIDEBase.Create(TheOwner: TComponent); begin MainIDE:=Self; // Do not own everything in one big component hierachy. Otherwise the // notifications slow down everything fOwningComponent:=TComponent.Create(nil); inherited Create(TheOwner); end; destructor TMainIDEBase.Destroy; begin FreeThenNil(fOwningComponent); inherited Destroy; MainIDE:=nil; end; procedure TMainIDEBase.GetUnitInfoForDesigner(ADesigner: TIDesigner; out ActiveSourceEditor: TSourceEditorInterface; out ActiveUnitInfo: TUnitInfo ); var SrcEdit: TSourceEditor; begin ActiveSourceEditor:=nil; ActiveUnitInfo:=nil; if ADesigner is TDesigner then begin GetDesignerUnit(TDesigner(ADesigner),SrcEdit,ActiveUnitInfo); ActiveSourceEditor:=SrcEdit; end; end; procedure TMainIDEBase.GetCurrentUnitInfo( out ActiveSourceEditor: TSourceEditorInterface; out ActiveUnitInfo: TUnitInfo ); var ASrcEdit: TSourceEditor; AnUnitInfo: TUnitInfo; begin GetCurrentUnit(ASrcEdit, AnUnitInfo); ActiveSourceEditor:=ASrcEdit; ActiveUnitInfo:=AnUnitInfo; end; function TMainIDEBase.GetMainBar: TComponent; begin Result:=MainIDEBar; end; function TMainIDEBase.CreateMenuSeparator : TMenuItem; begin Result := TMenuItem.Create(MainIDEBar); Result.Caption := '-'; end; procedure TMainIDEBase.CreateMenuItem(Section: TIDEMenuSection; var MenuItem: TIDEMenuCommand; const MenuItemName, MenuItemCaption: String; const bmpName: String; mnuEnabled: Boolean; mnuChecked: Boolean); begin MenuItem:=RegisterIDEMenuCommand(Section,MenuItemName,MenuItemCaption); MenuItem.Enabled:=mnuEnabled; MenuItem.Checked:=mnuChecked; if bmpName<>'' then MenuItem.ImageIndex := IDEImages.LoadImage(16, bmpName); end; procedure TMainIDEBase.CreateMenuSeparatorSection( ParentSection: TIDEMenuSection; var Section: TIDEMenuSection; const AName: String); begin Section:=RegisterIDEMenuSection(ParentSection,AName); Section.ChildsAsSubMenu := false; end; procedure TMainIDEBase.CreateMenuSubSection(ParentSection: TIDEMenuSection; var Section: TIDEMenuSection; const AName, ACaption: String; const bmpName: String = ''); begin Section:=RegisterIDESubMenu(ParentSection,AName,ACaption); if bmpName<>'' then Section.ImageIndex := IDEImages.LoadImage(16, bmpName); end; procedure TMainIDEBase.CreateMainMenuItem(var Section: TIDEMenuSection; const MenuItemName, MenuItemCaption: String); begin Section:=RegisterIDESubMenu(mnuMain,MenuItemName,MenuItemCaption); end; procedure TMainIDEBase.SetupMainMenu; begin MainIDEBar.mnuMainMenu := TMainMenu.Create(MainIDEBar); MainIDEBar.mnuMainMenu.Images := IDEImages.Images_16; with MainIDEBar do begin mnuMain:=RegisterIDEMenuRoot('IDEMainMenu',nil); {$ifdef LCLCarbon} // Under Apple there is a special policy: every application should create // a special Apple menu and put Quit, About there. // See issue: http://bugs.freepascal.org/view.php?id=12294 // See http://lists.apple.com/archives/carbon-development/2002/Apr/msg01183.html, for details CreateMainMenuItem(mnuApple,'AppleApplication',''); {$endif} CreateMainMenuItem(mnuFile,'File',lisMenuFile); CreateMainMenuItem(mnuEdit,'Edit',lisMenuEdit); CreateMainMenuItem(mnuSearch,'Search',lisMenuSearch); CreateMainMenuItem(mnuView,'View',lisMenuView); CreateMainMenuItem(mnuProject,'Project',lisMenuProject); CreateMainMenuItem(mnuRun,'Run',lisMenuRun); CreateMainMenuItem(mnuPackage,'Package',lisMenuPackage); mnuComponent:=mnuPackage; CreateMainMenuItem(mnuTools,'Tools',lisMenuTools); CreateMainMenuItem(mnuEnvironment,'Environment',lisMenuEnvironent); CreateMainMenuItem(mnuWindow,'Window',lisMenuWindow); CreateMainMenuItem(mnuHelp,'Help',lisMenuHelp); end; end; procedure TMainIDEBase.SetupFileMenu; var ParentMI: TIDEMenuSection; begin with MainIDEBar do begin CreateMenuSeparatorSection(mnuFile,itmFileNew,'itmFileNew'); ParentMI:=itmFileNew; CreateMenuItem(ParentMI,itmFileNewUnit,'itmFileNewUnit',lisMenuNewUnit,'item_unit'); CreateMenuItem(ParentMI,itmFileNewForm,'itmFileNewForm',lisMenuNewForm,'item_form'); CreateMenuItem(ParentMI,itmFileNewOther,'itmFileNewOther',lisMenuNewOther,'menu_new'); CreateMenuSeparatorSection(mnuFile,itmFileOpenSave,'itmFileOpenSave'); ParentMI:=itmFileOpenSave; CreateMenuItem(ParentMI, itmFileOpen, 'itmFileOpen', lisMenuOpen, 'laz_open'); CreateMenuItem(ParentMI,itmFileRevert,'itmFileRevert',lisMenuRevert, 'menu_file_revert'); CreateMenuSubSection(ParentMI,itmFileRecentOpen,'itmFileRecentOpen',lisMenuOpenRecent); CreateMenuItem(ParentMI,itmFileSave,'itmFileSave',lisMenuSave,'laz_save'); CreateMenuItem(ParentMI,itmFileSaveAs,'itmFileSaveAs',lisMenuSaveAs,'menu_saveas'); CreateMenuItem(ParentMI,itmFileSaveAll,'itmFileSaveAll',lisMenuSaveAll,'menu_save_all'); CreateMenuItem(ParentMI,itmFileClose,'itmFileClose',lisMenuClose,'menu_close',false); CreateMenuItem(ParentMI,itmFileCloseAll,'itmFileCloseAll',lisMenuCloseAll,'menu_close_all',false); CreateMenuSeparatorSection(mnuFile,itmFileDirectories,'itmFileDirectories'); ParentMI:=itmFileDirectories; CreateMenuItem(ParentMI,itmFileCleanDirectory,'itmFileCleanDirectory',lisMenuCleanDirectory, 'menu_clean'); CreateMenuSeparatorSection(mnuFile,itmFileIDEStart,'itmFileIDEStart'); ParentMI:=itmFileIDEStart; CreateMenuItem(ParentMI,itmFileRestart,'itmFileRestart',lisMenuRestart, 'laz_refresh'); CreateMenuItem(ParentMI,itmFileQuit,'itmFileQuit',lisMenuQuit, 'menu_exit'); end; end; procedure TMainIDEBase.SetupEditMenu; var ParentMI: TIDEMenuSection; SubParentMI: TIDEMenuSection; SubSubParentMI: TIDEMenuSection; begin with MainIDEBar do begin CreateMenuSeparatorSection(mnuEdit,itmEditReUndo,'itmEditReUndo'); ParentMI:=itmEditReUndo; CreateMenuItem(ParentMI,itmEditUndo,'itmEditUndo',lisMenuUndo,'menu_undo'); CreateMenuItem(ParentMI,itmEditRedo,'itmEditRedo',lisMenuRedo,'menu_redo'); CreateMenuSeparatorSection(mnuEdit,itmEditClipboard,'itmEditClipboard'); ParentMI:=itmEditClipboard; CreateMenuItem(ParentMI,itmEditCut,'itmEditCut',lisMenuCut,'laz_cut'); CreateMenuItem(ParentMI,itmEditCopy,'itmEditCopy',lisMenuCopy,'laz_copy'); CreateMenuItem(ParentMI,itmEditPaste,'itmEditPaste',lisMenuPaste,'laz_paste'); CreateMenuSeparatorSection(mnuEdit,itmEditBlockIndentation,'itmEditBlockIndentation'); ParentMI:=itmEditBlockIndentation; CreateMenuItem(ParentMI,itmEditIndentBlock,'itmEditIndentBlock',lisMenuIndentSelection,'menu_indent'); CreateMenuItem(ParentMI,itmEditUnindentBlock,'itmEditUnindentBlock',lisMenuUnindentSelection,'menu_unindent'); CreateMenuItem(ParentMI,itmEditEncloseBlock,'itmEditEncloseBlock',lisMenuEncloseSelection); CreateMenuItem(ParentMI,itmEditCommentBlock,'itmEditCommentBlock',lisMenuCommentSelection, 'menu_comment'); CreateMenuItem(ParentMI,itmEditUncommentBlock,'itmEditUncommentBlock',lisMenuUncommentSelection, 'menu_uncomment'); CreateMenuItem(ParentMI,itmEditToggleComment,'itmEditToggleComment',lisMenuToggleComment, 'menu_comment'); CreateMenuItem(ParentMI,itmEditConditionalBlock,'itmEditConditionalBlock',lisMenuConditionalSelection); CreateMenuItem(ParentMI,itmEditSortBlock,'itmEditSortBlock',lisMenuSortSelection, 'menu_edit_sort'); CreateMenuSeparatorSection(mnuEdit,itmEditBlockCharConversion,'itmEditBlockCharConversion'); ParentMI:=itmEditBlockCharConversion; CreateMenuItem(ParentMI,itmEditUpperCaseBlock,'itmEditUpperCaseBlock',lisMenuUpperCaseSelection, 'menu_edit_uppercase'); CreateMenuItem(ParentMI,itmEditLowerCaseBlock,'itmEditLowerCaseBlock',lisMenuLowerCaseSelection, 'menu_edit_lowercase'); CreateMenuItem(ParentMI,itmEditTabsToSpacesBlock,'itmEditTabsToSpacesBlock',lisMenuTabsToSpacesSelection); CreateMenuItem(ParentMI,itmEditSelectionBreakLines,'itmEditSelectionBreakLines',lisMenuBeakLinesInSelection); CreateMenuSubSection(mnuEdit,itmEditSelect,'itmEditSelect',lisMenuSelect); begin // select sub menu items SubParentMI:=itmEditSelect; CreateMenuItem(SubParentMI,itmEditSelectAll,'itmEditSelectAll',lisMenuSelectAll, 'menu_select_all'); CreateMenuItem(SubParentMI,itmEditSelectToBrace,'itmEditSelectToBrace',lisMenuSelectToBrace); CreateMenuItem(SubParentMI,itmEditSelectCodeBlock,'itmEditSelectCodeBlock',lisMenuSelectCodeBlock); CreateMenuItem(SubParentMI,itmEditSelectLine,'itmEditSelectLine',lisMenuSelectLine); CreateMenuItem(SubParentMI,itmEditSelectParagraph,'itmEditSelectParagraph',lisMenuSelectParagraph); end; CreateMenuSeparatorSection(mnuEdit,itmEditInsertions,'itmEditInsertions'); ParentMI:=itmEditInsertions; CreateMenuItem(ParentMI,itmEditInsertCharacter,'itmEditInsertCharacter',lisMenuInsertCharacter); CreateMenuSubSection(ParentMI,itmEditInsertText,'itmEditInsertText',lisMenuInsertText); begin // insert text sub menu items SubParentMI:=itmEditInsertText; CreateMenuSubSection(SubParentMI,itmEditInsertCVSKeyWord,'itmEditInsertCVSKeyWord',lisMenuInsertCVSKeyword); begin // insert CVS keyword sub menu items SubSubParentMI:=itmEditInsertCVSKeyWord; CreateMenuItem(SubSubParentMI,itmEditInsertCVSAuthor,'itmEditInsertCVSAuthor','Author'); CreateMenuItem(SubSubParentMI,itmEditInsertCVSDate,'itmEditInsertCVSDate','Date'); CreateMenuItem(SubSubParentMI,itmEditInsertCVSHeader,'itmEditInsertCVSHeader','Header'); CreateMenuItem(SubSubParentMI,itmEditInsertCVSID,'itmEditInsertCVSID','ID'); CreateMenuItem(SubSubParentMI,itmEditInsertCVSLog,'itmEditInsertCVSLog','Log'); CreateMenuItem(SubSubParentMI,itmEditInsertCVSName,'itmEditInsertCVSName','Name'); CreateMenuItem(SubSubParentMI,itmEditInsertCVSRevision,'itmEditInsertCVSRevision','Revision'); CreateMenuItem(SubSubParentMI,itmEditInsertCVSSource,'itmEditInsertCVSSource','Source'); end; CreateMenuSubSection(SubParentMI,itmEditInsertGeneral,'itmEditInsertGeneral',lisMenuInsertGeneral); begin // insert general text sub menu items SubSubParentMI:=itmEditInsertGeneral; CreateMenuItem(SubSubParentMI,itmEditInsertGPLNotice,'itmEditInsertGPLNotice',lisMenuInsertGPLNotice); CreateMenuItem(SubSubParentMI,itmEditInsertLGPLNotice,'itmEditInsertLGPLNotice',lisMenuInsertLGPLNotice); CreateMenuItem(SubSubParentMI,itmEditInsertModifiedLGPLNotice,'itmEditInsertModifiedLGPLNotice',lisMenuInsertModifiedLGPLNotice); CreateMenuItem(SubSubParentMI,itmEditInsertUsername,'itmEditInsertUsername',lisMenuInsertUsername); CreateMenuItem(SubSubParentMI,itmEditInsertDateTime,'itmEditInsertDateTime',lisMenuInsertDateTime); CreateMenuItem(SubSubParentMI,itmEditInsertChangeLogEntry,'itmEditInsertChangeLogEntry',lisMenuInsertChangeLogEntry); CreateMenuItem(SubSubParentMI,itmEditInsertGUID,'itmEditInsertGUID',srkmecInsertGUID); CreateMenuItem(SubSubParentMI,itmEditInsertTodo,'itmEditInsertTodo',uemInsertTodo); end; end; CreateMenuSeparatorSection(mnuEdit,itmEditMenuCodeTools,'itmEditMenuCodeTools'); ParentMI:=itmEditMenuCodeTools; CreateMenuItem(ParentMI,itmEditCompleteCode,'itmEditCompleteCode',lisMenuCompleteCode); CreateMenuItem(ParentMI,itmEditExtractProc,'itmEditExtractProc',lisMenuExtractProc); end; end; procedure TMainIDEBase.SetupSearchMenu; var ParentMI: TIDEMenuSection; begin with MainIDEBar do begin CreateMenuSeparatorSection(mnuSearch,itmSearchFindReplace,'itmSearchFindReplace'); ParentMI:=itmSearchFindReplace; CreateMenuItem(ParentMI, itmSearchFind, 'itmSearchFind', lisMenuFind2, 'menu_search_find'); CreateMenuItem(ParentMI,itmSearchFindNext,'itmSearchFindNext',lisMenuFindNext, 'menu_search_find_next'); CreateMenuItem(ParentMI,itmSearchFindPrevious,'itmSearchFindPrevious',lisMenuFindPrevious, 'menu_search_find_previous'); CreateMenuItem(ParentMI,itmSearchFindInFiles,'itmSearchFindInFiles',lisMenuFindInFiles, 'menu_search_files'); CreateMenuItem(ParentMI, itmSearchReplace, 'itmSearchReplace', lisMenuReplace2, 'menu_search_replace'); CreateMenuItem(ParentMI,itmIncrementalFind,'itmIncrementalFind',lisMenuIncrementalFind, 'menu_search_incremental'); CreateMenuSeparatorSection(mnuSearch,itmJumpings,'itmJumpings'); ParentMI:=itmJumpings; CreateMenuItem(ParentMI,itmGotoLine,'itmGotoLine',lisMenuGotoLine, 'menu_goto_line'); CreateMenuItem(ParentMI,itmJumpBack,'itmJumpBack',lisMenuJumpBack, 'menu_search_jumpback'); CreateMenuItem(ParentMI,itmJumpForward,'itmJumpForward',lisMenuJumpForward, 'menu_search_jumpforward'); CreateMenuItem(ParentMI,itmAddJumpPoint,'itmAddJumpPoint',lisMenuAddJumpPointToHistory); CreateMenuItem(ParentMI,itmJumpToNextError,'itmJumpToNextError',lisMenuJumpToNextError); CreateMenuItem(ParentMI,itmJumpToPrevError,'itmJumpToPrevError',lisMenuJumpToPrevError); CreateMenuSeparatorSection(mnuSearch,itmBookmarks,'itmBookmarks'); ParentMI:=itmBookmarks; CreateMenuItem(ParentMI,itmSetFreeBookmark,'itmSetFreeBookmark',lisMenuSetFreeBookmark); CreateMenuItem(ParentMI,itmJumpToNextBookmark,'itmJumpToNextBookmark',lisMenuJumpToNextBookmark, 'menu_search_next_bookmark'); CreateMenuItem(ParentMI,itmJumpToPrevBookmark,'itmJumpToPrevBookmark',lisMenuJumpToPrevBookmark, 'menu_search_previous_bookmark'); CreateMenuSeparatorSection(mnuSearch,itmCodeToolSearches,'itmCodeToolSearches'); ParentMI:=itmCodeToolSearches; CreateMenuItem(ParentMI,itmFindBlockOtherEnd,'itmFindBlockOtherEnd',lisMenuFindBlockOtherEndOfCodeBlock); CreateMenuItem(ParentMI,itmFindBlockStart,'itmFindBlockStart',lisMenuFindCodeBlockStart); CreateMenuItem(ParentMI,itmFindDeclaration,'itmFindDeclaration',lisMenuFindDeclarationAtCursor); CreateMenuItem(ParentMI,itmOpenFileAtCursor,'itmOpenFileAtCursor',lisMenuOpenFilenameAtCursor,'menu_search_openfile_atcursor'); CreateMenuItem(ParentMI,itmGotoIncludeDirective,'itmGotoIncludeDirective',lisMenuGotoIncludeDirective); CreateMenuItem(ParentMI,itmSearchFindIdentifierRefs,'itmSearchFindIdentifierRefs',lisMenuFindIdentifierRefs); CreateMenuItem(ParentMI,itmSearchRenameIdentifier,'itmSearchRenameIdentifier',lisMenuRenameIdentifier); CreateMenuItem(ParentMI,itmSearchProcedureList,'itmSearchProcedureList',srkmecProcedureList); end; end; procedure TMainIDEBase.SetupViewMenu; var ParentMI: TIDEMenuSection; begin with MainIDEBar do begin CreateMenuSeparatorSection(mnuView,itmViewMainWindows,'itmViewMainWindows'); ParentMI:=itmViewMainWindows; CreateMenuItem(ParentMI,itmViewInspector,'itmViewInspector',lisMenuViewObjectInspector, 'menu_view_inspector'); CreateMenuItem(ParentMI,itmViewSourceEditor,'itmViewSourceEditor',lisMenuViewSourceEditor, 'menu_view_source_editor'); CreateMenuItem(ParentMI,itmViewMessage,'itmViewMessage',lisMenuViewMessages); CreateMenuItem(ParentMI,itmViewCodeExplorer,'itmViewCodeExplorer',lisMenuViewCodeExplorer, 'menu_view_code_explorer'); CreateMenuItem(ParentMI,itmViewFPDocEditor,'itmViewFPDocEditor',lisMenuFPDocEditor); CreateMenuItem(ParentMI,itmViewCodeBrowser,'itmViewCodeBrowser',lisMenuViewCodeBrowser, 'menu_view_code_browser'); CreateMenuItem(ParentMI,itmViewRestrictionBrowser,'itmViewRestrictionBrowser',lisMenuViewRestrictionBrowser, 'menu_view_rectriction_browser'); CreateMenuItem(ParentMI,itmViewComponents,'itmViewComponents',lisMenuViewComponents); CreateMenuItem(ParentMI,itmViewToDoList,'itmViewToDoList',lisMenuViewTodoList, 'menu_view_todo'); CreateMenuItem(ParentMI,itmJumpHistory,'itmJumpHistory',lisMenuViewJumpHistory); CreateMenuSeparatorSection(mnuView,itmViewUnitWindows,'itmViewUnitWindows'); ParentMI:=itmViewUnitWindows; CreateMenuItem(ParentMI,itmViewUnits,'itmViewUnits',lisMenuViewUnits, 'menu_view_units'); CreateMenuItem(ParentMI,itmViewForms,'itmViewForms',lisMenuViewForms, 'menu_view_forms'); CreateMenuItem(ParentMI,itmViewUnitDependencies,'itmViewUnitDependencies',lisMenuViewUnitDependencies); CreateMenuItem(ParentMI,itmViewUnitInfo,'itmViewUnitInfo',lisMenuViewUnitInfo, 'menu_view_unit_info'); CreateMenuItem(ParentMI,itmViewToggleFormUnit,'itmViewToggleFormUnit',lisMenuViewToggleFormUnit, 'menu_view_toggle_form_unit'); CreateMenuSeparatorSection(mnuView,itmViewSecondaryWindows,'itmViewSecondaryWindows'); ParentMI:=itmViewSecondaryWindows; CreateMenuItem(ParentMI,itmViewSearchResults,'itmViewSearchResults',lisMenuViewSearchResults); CreateMenuItem(ParentMI,itmViewAnchorEditor,'itmViewAnchorEditor',lisMenuViewAnchorEditor,'menu_view_anchor_editor'); CreateMenuItem(ParentMI,itmViewComponentPalette,'itmViewComponentPalette',lisMenuViewComponentPalette, '', true, EnvironmentOptions.ComponentPaletteVisible); CreateMenuItem(ParentMI,itmViewIDESpeedButtons,'itmViewIDESpeedButtons',lisMenuViewIDESpeedButtons, '', true, EnvironmentOptions.IDESpeedButtonsVisible); CreateMenuSubSection(ParentMI,itmViewDebugWindows,'itmViewDebugWindows',lisMenuDebugWindows,'debugger'); begin CreateMenuItem(itmViewDebugWindows,itmViewWatches,'itmViewWatches',lisMenuViewWatches,'debugger_watches'); CreateMenuItem(itmViewDebugWindows,itmViewBreakPoints,'itmViewBreakPoints',lisMenuViewBreakPoints,'debugger_breakpoints'); CreateMenuItem(itmViewDebugWindows,itmViewLocals,'itmViewLocals',lisMenuViewLocalVariables,''); CreateMenuItem(itmViewDebugWindows,itmViewRegisters,'itmViewRegisters',lisMenuViewRegisters,''); CreateMenuItem(itmViewDebugWindows,itmViewCallStack,'itmViewCallStack',lisMenuViewCallStack,'debugger_call_stack'); CreateMenuItem(itmViewDebugWindows,itmViewAssembler,'itmViewAssembler',lisMenuViewAssembler,''); CreateMenuItem(itmViewDebugWindows,itmViewDebugOutput,'itmViewDebugOutput',lisMenuViewDebugOutput,'debugger_output'); end; CreateMenuSubSection(ParentMI, itmViewIDEInternalsWindows, 'itmViewIDEInternalsWindows', lisMenuIDEInternals, ''); begin CreateMenuItem(itmViewIDEInternalsWindows, itmViewPackageLinks, 'itmViewPackageLinks', lisMenuPackageLinks, ''); end; end; end; procedure TMainIDEBase.SetupProjectMenu; var ParentMI: TIDEMenuSection; begin with MainIDEBar do begin CreateMenuSeparatorSection(mnuProject,itmProjectNewSection,'itmProjectNewSection'); ParentMI:=itmProjectNewSection; CreateMenuItem(ParentMI,itmProjectNew,'itmProjectNew',lisMenuNewProject, 'item_project'); CreateMenuItem(ParentMI,itmProjectNewFromFile,'itmProjectNewFromFile',lisMenuNewProjectFromFile, 'menu_project_from_file'); CreateMenuSeparatorSection(mnuProject,itmProjectOpenSection,'itmProjectOpenSection'); ParentMI:=itmProjectOpenSection; CreateMenuItem(ParentMI,itmProjectOpen,'itmProjectOpen',lisMenuOpenProject,'menu_project_open'); CreateMenuSubSection(ParentMI,itmProjectRecentOpen,'itmProjectRecentOpen',lisMenuOpenRecentProject); CreateMenuItem(ParentMI,itmProjectClose,'itmProjectClose',lisMenuCloseProject, 'menu_project_close'); CreateMenuSeparatorSection(mnuProject,itmProjectSaveSection,'itmProjectSaveSection'); ParentMI:=itmProjectSaveSection; CreateMenuItem(ParentMI,itmProjectSave,'itmProjectSave',lisMenuSaveProject, 'menu_project_save'); CreateMenuItem(ParentMI,itmProjectSaveAs,'itmProjectSaveAs',lisMenuSaveProjectAs, 'menu_project_saveas'); CreateMenuItem(ParentMI,itmProjectPublish,'itmProjectPublish',lisMenuPublishProject); CreateMenuSeparatorSection(mnuProject,itmProjectWindowSection,'itmProjectWindowSection'); ParentMI:=itmProjectWindowSection; CreateMenuItem(ParentMI,itmProjectInspector,'itmProjectInspector',lisMenuProjectInspector,'menu_project_inspector'); CreateMenuItem(ParentMI,itmProjectOptions,'itmProjectOptions',lisMenuProjectOptions,'menu_project_options'); CreateMenuItem(ParentMI,itmProjectCompilerOptions,'itmProjectCompilerOptions',lisMenuCompilerOptions,'menu_compiler_options'); CreateMenuSeparatorSection(mnuProject,itmProjectAddRemoveSection,'itmProjectAddRemoveSection'); ParentMI:=itmProjectAddRemoveSection; CreateMenuItem(ParentMI,itmProjectAddTo,'itmProjectAddTo',lisMenuAddToProject, 'menu_project_add'); CreateMenuItem(ParentMI,itmProjectRemoveFrom,'itmProjectRemoveFrom',lisMenuRemoveFromProject, 'menu_project_remove'); CreateMenuItem(ParentMI,itmProjectViewSource,'itmProjectViewSource',lisMenuViewSource, 'menu_project_viewsource'); end; end; procedure TMainIDEBase.SetupRunMenu; var ParentMI: TIDEMenuSection; begin with MainIDEBar do begin CreateMenuSeparatorSection(mnuRun,itmRunBuilding,'itmRunBuilding'); ParentMI:=itmRunBuilding; CreateMenuItem(ParentMI,itmRunMenuBuild,'itmRunMenuBuild',lisMenuBuild,'menu_build'); CreateMenuItem(ParentMI,itmRunMenuBuildAll,'itmRunMenuBuildAll',lisMenuBuildAll,'menu_build_all'); CreateMenuItem(ParentMI,itmRunMenuQuickCompile,'itmRunMenuQuickCompile',lisMenuQuickCompile,'menu_quick_compile'); CreateMenuItem(ParentMI,itmRunMenuAbortBuild,'itmRunMenuAbortBuild',lisMenuAbortBuild,'menu_abort_build'); CreateMenuSeparatorSection(mnuRun,itmRunnning,'itmRunnning'); ParentMI:=itmRunnning; CreateMenuItem(ParentMI,itmRunMenuRun,'itmRunMenuRun',lisMenuProjectRun,'menu_run'); CreateMenuItem(ParentMI,itmRunMenuPause,'itmRunMenuPause',lisMenuPause,'menu_pause'); CreateMenuItem(ParentMI,itmRunMenuStepInto,'itmRunMenuStepInto',lisMenuStepInto,'menu_stepinto'); CreateMenuItem(ParentMI,itmRunMenuStepOver,'itmRunMenuStepOver',lisMenuStepOver,'menu_stepover'); CreateMenuItem(ParentMI,itmRunMenuRunToCursor,'itmRunMenuRunToCursor',lisMenuRunToCursor,'menu_run_cursor'); CreateMenuItem(ParentMI,itmRunMenuStop,'itmRunMenuStop',lisMenuStop,'menu_stop'); CreateMenuItem(ParentMI,itmRunMenuRunParameters,'itmRunMenuRunParameters',lisMenuRunParameters, 'menu_run_parameters'); CreateMenuItem(ParentMI,itmRunMenuResetDebugger,'itmRunMenuResetDebugger',lisMenuResetDebugger, 'menu_reset_debugger'); CreateMenuSeparatorSection(mnuRun,itmRunBuildingFile,'itmRunBuildingFile'); ParentMI:=itmRunBuildingFile; CreateMenuItem(ParentMI,itmRunMenuBuildFile,'itmRunMenuBuildFile',lisMenuBuildFile, 'menu_build_file'); CreateMenuItem(ParentMI,itmRunMenuRunFile,'itmRunMenuRunFile',lisMenuRunFile,'menu_run_file'); CreateMenuItem(ParentMI,itmRunMenuConfigBuildFile,'itmRunMenuConfigBuildFile',lisMenuConfigBuildFile, 'menu_build_run_file'); CreateMenuSeparatorSection(mnuRun,itmRunDebugging,'itmRunDebugging'); ParentMI:=itmRunDebugging; CreateMenuItem(ParentMI,itmRunMenuInspect,'itmRunMenuInspect',lisMenuInspect, '', False); CreateMenuItem(ParentMI,itmRunMenuEvaluate,'itmRunMenuEvaluate',lisMenuEvaluate, 'debugger_modify', False); CreateMenuItem(ParentMI,itmRunMenuAddWatch,'itmRunMenuAddWatch',lisMenuAddWatch, '', False); CreateMenuSubSection(ParentMI,itmRunMenuAddBreakpoint,'itmRunMenuAddBreakpoint',lisMenuAddBreakpoint, ''); CreateMenuItem(itmRunMenuAddBreakpoint,itmRunMenuAddBPSource,'itmRunMenuAdddBPSource',lisMenuAddBPSource, '', False); end; end; procedure TMainIDEBase.SetupComponentsMenu; var ParentMI: TIDEMenuSection; begin with MainIDEBar do begin CreateMenuSeparatorSection(mnuComponent,itmPkgOpening,'itmPkgOpening'); ParentMI:=itmPkgOpening; CreateMenuItem(ParentMI,itmPkgNewPackage,'itmPkgNewPackage',lisMenuNewPackage); CreateMenuItem(ParentMI,itmPkgOpenPackage,'itmPkgOpenPackage',lisMenuOpenPackage,'pkg_installed'); CreateMenuItem(ParentMI,itmPkgOpenPackageFile,'itmPkgOpenPackageFile',lisMenuOpenPackageFile,'pkg_open'); CreateMenuItem(ParentMI,itmPkgOpenPackageOfCurUnit,'itmPkgOpenPackageOfCurUnit',lisMenuOpenPackageOfCurUnit); CreateMenuSubSection(ParentMI,itmPkgOpenRecent,'itmPkgOpenRecent',lisMenuOpenRecentPkg); CreateMenuSeparatorSection(mnuComponent,itmPkgUnits,'itmPkgUnits'); ParentMI:=itmPkgUnits; CreateMenuItem(ParentMI,itmPkgAddCurUnitToPkg,'itmPkgAddCurUnitToPkg',lisMenuAddCurUnitToPkg,'pkg_add'); CreateMenuSeparatorSection(mnuComponent,itmPkgGraphSection,'itmPkgGraphSection'); ParentMI:=itmPkgGraphSection; CreateMenuItem(ParentMI,itmPkgPkgGraph,'itmPkgPkgGraph',lisMenuPackageGraph,'pkg_graph'); CreateMenuItem(ParentMI,itmPkgEditInstallPkgs,'itmPkgEditInstallPkgs',lisMenuEditInstallPkgs,'pkg_properties'); {$IFDEF CustomIDEComps} CreateMenuItem(ParentMI,itmCompsConfigCustomComps,'itmCompsConfigCustomComps',lisMenuConfigCustomComps); {$ENDIF} end; end; procedure TMainIDEBase.SetupToolsMenu; var ParentMI: TIDEMenuSection; begin with MainIDEBar do begin CreateMenuSeparatorSection(mnuTools,itmCustomTools,'itmCustomTools'); ParentMI:=itmCustomTools; CreateMenuItem(ParentMI,itmToolConfigure,'itmToolConfigure',lisMenuConfigExternalTools); CreateMenuSeparatorSection(mnuTools,itmCodeToolChecks,'itmCodeToolChecks'); ParentMI:=itmCodeToolChecks; CreateMenuItem(ParentMI,itmToolSyntaxCheck,'itmToolSyntaxCheck',lisMenuQuickSyntaxCheck, 'menu_tool_syntax_check'); CreateMenuItem(ParentMI,itmToolGuessUnclosedBlock,'itmToolGuessUnclosedBlock',lisMenuGuessUnclosedBlock); CreateMenuItem(ParentMI,itmToolGuessMisplacedIFDEF,'itmToolGuessMisplacedIFDEF',lisMenuGuessMisplacedIFDEF); CreateMenuSeparatorSection(mnuTools,itmSecondaryTools,'itmSecondaryTools'); ParentMI:=itmSecondaryTools; CreateMenuItem(ParentMI,itmToolMakeResourceString,'itmToolMakeResourceString',lisMenuMakeResourceString, 'menu_tool_make_resourcestring'); CreateMenuItem(ParentMI,itmToolDiff,'itmToolDiff',lisMenuDiff, 'menu_tool_diff'); CreateMenuSeparatorSection(mnuTools,itmDelphiConversion,'itmDelphiConversion'); ParentMI:=itmDelphiConversion; CreateMenuItem(ParentMI,itmToolCheckLFM,'itmToolCheckLFM',lisMenuCheckLFM, 'menu_tool_check_lfm'); CreateMenuItem(ParentMI,itmToolConvertDelphiUnit,'itmToolConvertDelphiUnit',lisMenuConvertDelphiUnit); CreateMenuItem(ParentMI,itmToolConvertDelphiProject,'itmToolConvertDelphiProject',lisMenuConvertDelphiProject); CreateMenuItem(ParentMI,itmToolConvertDelphiPackage,'itmToolConvertDelphiPackage',lisMenuConvertDelphiPackage); CreateMenuItem(ParentMI,itmToolConvertDFMtoLFM,'itmToolConvertDFMtoLFM',lisMenuConvertDFMtoLFM,'menu_tool_dfm_to_lfm'); CreateMenuItem(ParentMI,itmToolConvertEncoding,'itmToolConvertEncoding',lisMenuConvertEncoding); CreateMenuSeparatorSection(mnuTools,itmBuildingLazarus,'itmBuildingLazarus'); ParentMI:=itmBuildingLazarus; CreateMenuItem(ParentMI,itmToolBuildLazarus,'itmToolBuildLazarus',lisMenuBuildLazarus,'menu_build_lazarus'); CreateMenuItem(ParentMI,itmToolConfigureBuildLazarus,'itmToolConfigureBuildLazarus',lisMenuConfigureBuildLazarus, 'menu_configure_build_lazarus'); end; end; procedure TMainIDEBase.SetupEnvironmentMenu; var ParentMI: TIDEMenuSection; begin with MainIDEBar do begin CreateMenuSeparatorSection(mnuEnvironment,itmOptionsDialogs,'itmOptionsDialogs'); ParentMI:=itmOptionsDialogs; CreateMenuItem(ParentMI,itmEnvGeneralOptions,'itmEnvGeneralOptions', lisMenuGeneralOptions,'menu_environment_options'); CreateMenuItem(ParentMI,itmEnvCodeTemplates,'itmEnvCodeTemplates', lisMenuEditCodeTemplates,''); CreateMenuItem(ParentMI,itmEnvCodeToolsDefinesEditor, 'itmEnvCodeToolsDefinesEditor',lisMenuCodeToolsDefinesEditor, 'menu_codetoolsdefineseditor'); CreateMenuSeparatorSection(mnuEnvironment,itmIDECacheSection,'itmIDECacheSection'); ParentMI:=itmIDECacheSection; CreateMenuItem(ParentMI,itmEnvRescanFPCSrcDir,'itmEnvRescanFPCSrcDir', lisMenuRescanFPCSourceDirectory); end; end; procedure TMainIDEBase.SetupWindowsMenu; begin end; procedure TMainIDEBase.SetupHelpMenu; var ParentMI: TIDEMenuSection; begin with MainIDEBar do begin CreateMenuSeparatorSection(mnuHelp,itmOnlineHelps,'itmOnlineHelps'); ParentMI:=itmOnlineHelps; CreateMenuItem(ParentMI,itmHelpOnlineHelp,'itmHelpOnlineHelp', lisMenuOnlineHelp, 'menu_help'); CreateMenuItem(ParentMI,itmHelpReportingBug,'itmHelpReportingBug', lisMenuReportingBug, 'menu_reportingbug'); {$ifdef LCLCarbon} // under Carbon: add About item to the Apple menu CreateMenuItem(mnuApple, itmHelpAboutLazarus,'itmHelpAboutLazarus', lisAboutLazarus, 'menu_information'); {$else} // otherwise: add About item to the Help menu CreateMenuSeparatorSection(mnuHelp,itmInfoHelps,'itmInfoHelps'); ParentMI:=itmInfoHelps; CreateMenuItem(ParentMI,itmHelpAboutLazarus,'itmHelpAboutLazarus', lisAboutLazarus, 'menu_information'); {$endif} CreateMenuSeparatorSection(mnuHelp,itmHelpTools,'itmHelpTools'); ParentMI:=itmHelpTools; end; end; procedure TMainIDEBase.LoadMenuShortCuts; function GetCommand(ACommand: word): TIDECommand; begin Result:=IDECommandList.FindIDECommand(ACommand); end; begin with MainIDEBar do begin // file menu itmFileNewUnit.Command:=GetCommand(ecNewUnit); itmFileNewForm.Command:=GetCommand(ecNewForm); itmFileNewOther.Command:=GetCommand(ecNew); itmFileOpen.Command:=GetCommand(ecOpen); itmFileRevert.Command:=GetCommand(ecRevert); itmFileSave.Command:=GetCommand(ecSave); itmFileSaveAs.Command:=GetCommand(ecSaveAs); itmFileSaveAll.Command:=GetCommand(ecSaveAll); itmFileClose.Command:=GetCommand(ecClose); itmFileCloseAll.Command:=GetCommand(ecCloseAll); itmFileCleanDirectory.Command:=GetCommand(ecCleanDirectory); itmFileQuit.Command:=GetCommand(ecQuit); itmFileQuit.Command:=GetCommand(ecQuit); // edit menu itmEditUndo.Command:=GetCommand(ecUndo); itmEditRedo.Command:=GetCommand(ecRedo); itmEditCut.Command:=GetCommand(ecCut); itmEditCopy.Command:=GetCommand(ecCopy); itmEditPaste.Command:=GetCommand(ecPaste); itmEditIndentBlock.Command:=GetCommand(ecBlockIndent); itmEditUnindentBlock.Command:=GetCommand(ecBlockUnindent); itmEditEncloseBlock.Command:=GetCommand(ecSelectionEnclose); itmEditUpperCaseBlock.Command:=GetCommand(ecSelectionUpperCase); itmEditLowerCaseBlock.Command:=GetCommand(ecSelectionLowerCase); itmEditTabsToSpacesBlock.Command:=GetCommand(ecSelectionTabs2Spaces); itmEditCommentBlock.Command:=GetCommand(ecSelectionComment); itmEditUncommentBlock.Command:=GetCommand(ecSelectionUncomment); itmEditToggleComment.Command:=GetCommand(ecToggleComment); itmEditConditionalBlock.Command:=GetCommand(ecSelectionConditional); itmEditSortBlock.Command:=GetCommand(ecSelectionSort); itmEditSelectionBreakLines.Command:=GetCommand(ecSelectionBreakLines); itmEditSelectAll.Command:=GetCommand(ecSelectAll); itmEditSelectToBrace.Command:=GetCommand(ecSelectToBrace); itmEditSelectCodeBlock.Command:=GetCommand(ecSelectCodeBlock); itmEditSelectLine.Command:=GetCommand(ecSelectLine); itmEditSelectParagraph.Command:=GetCommand(ecSelectParagraph); itmEditCompleteCode.Command:=GetCommand(ecCompleteCode); itmEditExtractProc.Command:=GetCommand(ecExtractProc); itmEditInsertCVSAuthor.Command:=GetCommand(ecInsertCVSAuthor); itmEditInsertCVSDate.Command:=GetCommand(ecInsertCVSDate); itmEditInsertCVSHeader.Command:=GetCommand(ecInsertCVSHeader); itmEditInsertCVSID.Command:=GetCommand(ecInsertCVSID); itmEditInsertCVSLog.Command:=GetCommand(ecInsertCVSLog); itmEditInsertCVSName.Command:=GetCommand(ecInsertCVSName); itmEditInsertCVSRevision.Command:=GetCommand(ecInsertCVSRevision); itmEditInsertCVSSource.Command:=GetCommand(ecInsertCVSSource); itmEditInsertGPLNotice.Command:=GetCommand(ecInsertGPLNotice); itmEditInsertLGPLNotice.Command:=GetCommand(ecInsertLGPLNotice); itmEditInsertModifiedLGPLNotice.Command:=GetCommand(ecInsertModifiedLGPLNotice); itmEditInsertUsername.Command:=GetCommand(ecInsertUserName); itmEditInsertDateTime.Command:=GetCommand(ecInsertDateTime); itmEditInsertChangeLogEntry.Command:=GetCommand(ecInsertChangeLogEntry); itmEditInsertGUID.Command:=GetCommand(ecInsertGUID); itmEditInsertTodo.Command:=GetCommand(ecInsertTodo); // search menu itmSearchFind.Command:=GetCommand(ecFind); itmSearchFindNext.Command:=GetCommand(ecFindNext); itmSearchFindPrevious.Command:=GetCommand(ecFindPrevious); itmSearchFindInFiles.Command:=GetCommand(ecFindInFiles); itmSearchFindIdentifierRefs.Command:=GetCommand(ecFindIdentifierRefs); itmSearchReplace.Command:=GetCommand(ecReplace); itmSearchRenameIdentifier.Command:=GetCommand(ecRenameIdentifier); itmIncrementalFind.Command:=GetCommand(ecIncrementalFind); itmGotoLine.Command:=GetCommand(ecGotoLineNumber); itmJumpBack.Command:=GetCommand(ecJumpBack); itmJumpForward.Command:=GetCommand(ecJumpForward); itmAddJumpPoint.Command:=GetCommand(ecAddJumpPoint); itmJumpToNextError.Command:=GetCommand(ecJumpToNextError); itmJumpToPrevError.Command:=GetCommand(ecJumpToPrevError); itmSetFreeBookmark.Command:=GetCommand(ecSetFreeBookmark); itmJumpToNextBookmark.Command:=GetCommand(ecNextBookmark); itmJumpToPrevBookmark.Command:=GetCommand(ecPrevBookmark); itmFindBlockOtherEnd.Command:=GetCommand(ecFindBlockOtherEnd); itmFindBlockStart.Command:=GetCommand(ecFindBlockStart); itmFindDeclaration.Command:=GetCommand(ecFindDeclaration); itmOpenFileAtCursor.Command:=GetCommand(ecOpenFileAtCursor); itmGotoIncludeDirective.Command:=GetCommand(ecGotoIncludeDirective); itmSearchProcedureList.Command:=GetCommand(ecProcedureList); // view menu itmViewInspector.Command:=GetCommand(ecToggleObjectInsp); itmViewSourceEditor.Command:=GetCommand(ecToggleSourceEditor); itmViewUnits.Command:=GetCommand(ecViewUnits); itmViewCodeExplorer.Command:=GetCommand(ecToggleCodeExpl); itmViewFPDocEditor.Command:=GetCommand(ecToggleFPDocEditor); itmViewCodeBrowser.Command:=GetCommand(ecToggleCodeBrowser); itmViewRestrictionBrowser.Command:=GetCommand(ecToggleRestrictionBrowser); itmViewComponents.Command:=GetCommand(ecViewComponents); itmViewToDoList.Command:=GetCommand(ecViewTodoList); itmViewUnitDependencies.Command:=GetCommand(ecViewUnitDependencies); itmViewUnitInfo.Command:=GetCommand(ecViewUnitInfo); itmViewForms.Command:=GetCommand(ecViewForms); itmViewToggleFormUnit.Command:=GetCommand(ecToggleFormUnit); itmViewMessage.Command:=GetCommand(ecToggleMessages); itmViewSearchResults.Command:=GetCommand(ecToggleSearchResults); itmViewAnchorEditor.Command:=GetCommand(ecViewAnchorEditor); itmViewComponentPalette.Command:=GetCommand(ecToggleCompPalette); itmViewIDESpeedButtons.Command:=GetCommand(ecToggleIDESpeedBtns); itmJumpHistory.Command:=GetCommand(ecViewJumpHistory); //itmViewPackageLinks.Command:=GetCommand(ec?); // project menu itmProjectNew.Command:=GetCommand(ecNewProject); itmProjectNewFromFile.Command:=GetCommand(ecNewProjectFromFile); itmProjectOpen.Command:=GetCommand(ecOpenProject); itmProjectClose.Command:=GetCommand(ecCloseProject); itmProjectSave.Command:=GetCommand(ecSaveProject); itmProjectSaveAs.Command:=GetCommand(ecSaveProjectAs); itmProjectPublish.Command:=GetCommand(ecPublishProject); itmProjectInspector.Command:=GetCommand(ecProjectInspector); itmProjectOptions.Command:=GetCommand(ecProjectOptions); itmProjectCompilerOptions.Command:=GetCommand(ecCompilerOptions); itmProjectAddTo.Command:=GetCommand(ecAddCurUnitToProj); itmProjectRemoveFrom.Command:=GetCommand(ecRemoveFromProj); itmProjectViewSource.Command:=GetCommand(ecViewProjectSource); // run menu itmRunMenuBuild.Command:=GetCommand(ecBuild); itmRunMenuBuildAll.Command:=GetCommand(ecBuildAll); itmRunMenuQuickCompile.Command:=GetCommand(ecQuickCompile); itmRunMenuAbortBuild.Command:=GetCommand(ecAbortBuild); itmRunMenuRun.Command:=GetCommand(ecRun); itmRunMenuPause.Command:=GetCommand(ecPause); itmRunMenuStepInto.Command:=GetCommand(ecStepInto); itmRunMenuStepOver.Command:=GetCommand(ecStepOver); itmRunMenuRunToCursor.Command:=GetCommand(ecRunToCursor); itmRunMenuStop.Command:=GetCommand(ecStopProgram); itmRunMenuResetDebugger.Command:=GetCommand(ecResetDebugger); itmRunMenuRunParameters.Command:=GetCommand(ecRunParameters); itmRunMenuBuildFile.Command:=GetCommand(ecBuildFile); itmRunMenuRunFile.Command:=GetCommand(ecRunFile); itmRunMenuConfigBuildFile.Command:=GetCommand(ecConfigBuildFile); // components menu itmPkgNewPackage.Command:=GetCommand(ecNewPackage); itmPkgOpenPackage.Command:=GetCommand(ecOpenPackage); itmPkgOpenPackageFile.Command:=GetCommand(ecOpenPackageFile); itmPkgOpenPackageOfCurUnit.Command:=GetCommand(ecOpenPackageOfCurUnit); itmPkgAddCurUnitToPkg.Command:=GetCommand(ecAddCurUnitToPkg); itmPkgPkgGraph.Command:=GetCommand(ecPackageGraph); itmPkgEditInstallPkgs.Command:=GetCommand(ecEditInstallPkgs); {$IFDEF CustomIDEComps} itmCompsConfigCustomComps.Command:=GetCommand(ecConfigCustomComps); {$ENDIF} // tools menu itmToolConfigure.Command:=GetCommand(ecExtToolSettings); itmToolSyntaxCheck.Command:=GetCommand(ecSyntaxCheck); itmToolGuessUnclosedBlock.Command:=GetCommand(ecGuessUnclosedBlock); itmToolGuessMisplacedIFDEF.Command:=GetCommand(ecGuessMisplacedIFDEF); itmToolMakeResourceString.Command:=GetCommand(ecMakeResourceString); itmToolDiff.Command:=GetCommand(ecDiff); itmToolConvertDFMtoLFM.Command:=GetCommand(ecConvertDFM2LFM); itmToolCheckLFM.Command:=GetCommand(ecCheckLFM); itmToolConvertDelphiUnit.Command:=GetCommand(ecConvertDelphiUnit); itmToolConvertDelphiProject.Command:=GetCommand(ecConvertDelphiProject); itmToolConvertDelphiPackage.Command:=GetCommand(ecConvertDelphiPackage); itmToolConvertEncoding.Command:=GetCommand(ecConvertEncoding); itmToolBuildLazarus.Command:=GetCommand(ecBuildLazarus); itmToolConfigureBuildLazarus.Command:=GetCommand(ecConfigBuildLazarus); // environment menu itmEnvGeneralOptions.Command:=GetCommand(ecEnvironmentOptions); itmEnvCodeTemplates.Command:=GetCommand(ecEditCodeTemplates); itmEnvCodeToolsDefinesEditor.Command:=GetCommand(ecCodeToolsDefinesEd); itmEnvRescanFPCSrcDir.Command:=GetCommand(ecRescanFPCSrcDir); // help menu itmHelpAboutLazarus.Command:=GetCommand(ecAboutLazarus); itmHelpOnlineHelp.Command:=GetCommand(ecOnlineHelp); itmHelpReportingBug.Command:=GetCommand(ecReportingBug); end; end; function TMainIDEBase.GetToolStatus: TIDEToolStatus; begin Result:=FToolStatus; end; function TMainIDEBase.DoOpenMacroFile(Sender: TObject; const AFilename: string ): TModalResult; begin Result:=DoOpenEditorFile(AFilename,-1, [ofOnlyIfExists,ofAddToRecent,ofRegularFile,ofConvertMacros]); end; procedure TMainIDEBase.UpdateWindowMenu; function GetMenuItem(Index: Integer): TIDEMenuItem; inline; begin if mnuWindow.Count > Index then Result := mnuWindow.Items[Index] else Result := RegisterIDEMenuCommand(mnuWindow.GetPath, 'Window'+IntToStr(Index),''); end; var WindowsList: TFPList; i, ItemCount: Integer; CurMenuItem: TIDEMenuItem; AForm: TForm; begin WindowsList:=TFPList.Create; // add typical IDE windows at the start of the list if (SourceNotebook<>nil) and (SourceNotebook.Visible) then WindowsList.Add(SourceNotebook); if (ObjectInspector1<>nil) and (ObjectInspector1.Visible) then WindowsList.Add(ObjectInspector1); // add special IDE windows for i:=0 to Screen.FormCount-1 do begin AForm:=Screen.Forms[i]; if (AForm.Parent=nil) and (AForm<>MainIDEBar) and (AForm<>SplashForm) and (AForm.Designer=nil) and (AForm.Visible) and (WindowsList.IndexOf(AForm)<0) then WindowsList.Add(AForm); end; // add designer forms and datamodule forms for i:=0 to Screen.FormCount-1 do begin AForm:=Screen.Forms[i]; if (AForm.Designer<>nil) and (WindowsList.IndexOf(AForm)<0) then WindowsList.Add(AForm); end; // create menuitems ItemCount := WindowsList.Count; for i:=0 to WindowsList.Count-1 do begin CurMenuItem := GetMenuItem(i); CurMenuItem.Caption:=TCustomForm(WindowsList[i]).Caption; CurMenuItem.MenuItem.Checked := Screen.ActiveCustomForm = TCustomForm(WindowsList[i]); CurMenuItem.OnClick:=@mnuWindowItemClick; end; //create source page menuitems if (SourceNotebook<>nil) and (SourceNotebook.Notebook<>nil) and not (nbcPageListPopup in SourceNotebook.Notebook.GetCapabilities) then begin CurMenuItem := GetMenuItem(ItemCount); CurMenuItem.OnClick:=nil; CurMenuItem.Caption:='-'; inc(ItemCount); for i := 0 to SourceNotebook.EditorCount-1 do begin CurMenuItem := GetMenuItem(ItemCount); CurMenuItem.Caption:=SourceNotebook.Editors[i].PageName; CurMenuItem.MenuItem.Checked := SourceNotebook.ActiveEditor = SourceNotebook.Editors[i] ; CurMenuItem.OnClick:=@mnuWindowSourceItemClick; CurMenuItem.Tag := i; inc(ItemCount); end; end; // remove unused menuitems while mnuWindow.Count > ItemCount do mnuWindow.Items[mnuWindow.Count-1].Free; // clean up WindowsList.Free; end; procedure TMainIDEBase.SetRecentSubMenu(Section: TIDEMenuSection; FileList: TStringList; OnClickEvent: TNotifyEvent); var i: integer; AMenuItem: TIDEMenuItem; begin // create enough menuitems while Section.CountFileList.Count do Section.Items[Section.Count-1].Free; Section.Enabled:=(Section.Count>0); // set captions and event for i:=0 to FileList.Count-1 do begin AMenuItem:=Section.Items[i]; AMenuItem.Caption := FileList[i]; AMenuItem.OnClick := OnClickEvent; end; end; procedure TMainIDEBase.UpdateHighlighters(Immediately: boolean = false); begin if Immediately then begin FNeedUpdateHighlighters:=false; Project1.UpdateAllSyntaxHighlighter; SourceNotebook.ReloadHighlighters; end else begin FNeedUpdateHighlighters:=true; end; end; function TMainIDEBase.DoJumpToCodePosition( ActiveSrcEdit: TSourceEditorInterface; ActiveUnitInfo: TUnitInfo; NewSource: TCodeBuffer; NewX, NewY, NewTopLine: integer; AddJumpPoint: boolean; MarkLine: Boolean): TModalResult; var SrcEdit: TSourceEditor; begin if ActiveSrcEdit = nil then SrcEdit := nil else SrcEdit := ActiveSrcEdit as TSourceEditor; Result := DoJumpToCodePos(SrcEdit as TSourceEditor, ActiveUnitInfo, NewSource, NewX, NewY, NewTopLine, AddJumpPoint, MarkLine); end; procedure TMainIDEBase.FindInFilesPerDialog(AProject: TProject); begin SourceNotebook.FindInFilesPerDialog(AProject); end; procedure TMainIDEBase.FindInFiles(AProject: TProject; const FindText: string); begin SourceNotebook.FindInFiles(AProject, FindText); end; end.