/ide/mainbase.pas
http://github.com/graemeg/lazarus · Pascal · 1967 lines · 1588 code · 217 blank · 162 comment · 105 complexity · f84a116ee812e1a9e5af3dc0acd87103 MD5 · raw file
Large files are truncated click here to view the full file
- {
- /***************************************************************************
- 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 <http://www.gnu.org/copyleft/gpl.html>. 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}
- Math, Classes, LCLType, LCLProc, LCLIntf, Buttons, Menus, ComCtrls,
- SysUtils, types, Controls, Graphics, ExtCtrls, Dialogs, LazFileUtils, Forms,
- CodeToolManager, AVL_Tree, SynEditKeyCmds, PackageIntf,
- // IDEIntf
- IDEImagesIntf, SrcEditorIntf, LazIDEIntf, MenuIntf, NewItemIntf,
- IDECommands, IDEWindowIntf, ProjectIntf, ToolBarIntf,
- // IDE
- LazConf, LazarusIDEStrConsts, ProjectDefs, Project, IDEDialogs,
- TransferMacros, ObjectInspector, PropEdits, BuildManager,
- EnvironmentOpts, EditorOptions, CompilerOptions, KeyMapping, IDEProcs,
- Debugger, IDEOptionDefs, Splash, Designer,
- SourceEditor, FindInFilesDlg,
- MainBar, MainIntf, SourceSynEditor, PseudoTerminalDlg,
- DesktopManager, ImgList;
- type
- TResetToolFlag = (
- rfInteractive,
- rfCloseOnDone,
- rfSuccessOnTrigger
- );
- TResetToolFlags = set of TResetToolFlag;
- { TMainIDEBase }
- TMainIDEBase = class(TMainIDEInterface)
- private
- FWindowMenuActiveForm: TCustomForm;
- FDisplayState: TDisplayState;
- procedure SetDisplayState(AValue: TDisplayState);
- protected
- FNeedUpdateHighlighters: boolean;
- function CreateMenuSeparator : TMenuItem;
- procedure CreateMenuItem(Section: TIDEMenuSection;
- var MenuCommand: TIDEMenuCommand;
- const MenuItemName, MenuItemCaption: String;
- const bmpName: String = '';
- mnuEnabled: Boolean = true;
- mnuChecked: Boolean = false;
- mnuVisible: Boolean = true);
- 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 SetupSourceMenu; virtual;
- procedure SetupProjectMenu; virtual;
- procedure SetupRunMenu; virtual;
- procedure SetupPackageMenu; virtual;
- procedure SetupToolsMenu; virtual;
- procedure SetupWindowsMenu; virtual;
- procedure SetupHelpMenu; virtual;
- procedure LoadMenuShortCuts; virtual;
- procedure SetToolStatus(const AValue: TIDEToolStatus); override;
- procedure DoMnuWindowClicked(Sender: TObject);
- procedure mnuOpenProjectClicked(Sender: TObject); virtual; abstract;
- procedure mnuOpenRecentClicked(Sender: TObject); virtual; abstract;
- procedure mnuWindowItemClick(Sender: TObject); virtual;
- procedure mnuCenterWindowItemClick(Sender: TObject); virtual;
- procedure mnuWindowSourceItemClick(Sender: TObject); virtual;
- procedure mnuBuildModeClicked(Sender: TObject); virtual; abstract;
- procedure UpdateWindowMenu;
- public
- 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: TForm; override;
- procedure SetRecentProjectFilesMenu;
- procedure SetRecentFilesMenu;
- function BeginCodeTool(var ActiveSrcEdit: TSourceEditor;
- out ActiveUnitInfo: TUnitInfo;
- Flags: TCodeToolsFlags): boolean;
- function BeginCodeTool(ADesigner: TDesigner;
- var ActiveSrcEdit: TSourceEditor;
- out ActiveUnitInfo: TUnitInfo;
- Flags: TCodeToolsFlags): boolean;
- procedure ActivateCodeToolAbortableMode;
- function OnCodeToolBossCheckAbort: boolean;
- procedure DoShowDesignerFormOfCurrentSrc(AComponentPaletteClassSelected: Boolean); virtual; abstract;
- function CreateDesignerForComponent(AnUnitInfo: TUnitInfo;
- AComponent: TComponent): TCustomForm; virtual; abstract;
- procedure UpdateSaveMenuItemsAndButtons(UpdateSaveAll: boolean); virtual; abstract;
- procedure DoMergeDefaultProjectOptions(AProject: TProject);
- procedure DoSwitchToFormSrc(var ActiveSourceEditor:TSourceEditor;
- var ActiveUnitInfo:TUnitInfo);
- procedure DoSwitchToFormSrc(ADesigner: TIDesigner;
- var ActiveSourceEditor:TSourceEditor; var ActiveUnitInfo:TUnitInfo);
- 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 GetDesignerUnit(ADesigner: TDesigner;
- out ActiveSourceEditor: TSourceEditor; out ActiveUnitInfo: TUnitInfo); virtual; abstract;
- procedure GetObjectInspectorUnit(
- out ActiveSourceEditor: TSourceEditor; out ActiveUnitInfo: TUnitInfo); virtual; abstract;
- procedure GetUnitWithForm(AForm: TCustomForm;
- out ActiveSourceEditor: TSourceEditor; out ActiveUnitInfo: TUnitInfo); virtual; abstract;
- procedure GetUnitWithPersistent(APersistent: TPersistent;
- out ActiveSourceEditor: TSourceEditor; out ActiveUnitInfo: TUnitInfo); virtual; abstract;
- procedure DoShowComponentList(State: TIWGetFormState = iwgfShowOnTop); virtual; abstract;
- function DoOpenMacroFile(Sender: TObject; const AFilename: string): TModalResult; override;
- procedure SetRecentSubMenu(Section: TIDEMenuSection; FileList: TStringList;
- OnClickEvent: TNotifyEvent); override;
- procedure UpdateHighlighters(Immediately: boolean = false); override;
- procedure FindInFilesPerDialog(AProject: TProject); override;
- procedure FindInFiles(AProject: TProject; const FindText: string); override;
- procedure SelComponentPageButtonMouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; abstract;
- procedure SelComponentPageButtonClick(Sender: TObject); virtual; abstract;
- public
- property WindowMenuActiveForm: TCustomForm read FWindowMenuActiveForm write FWindowMenuActiveForm;
- property DisplayState: TDisplayState read FDisplayState write SetDisplayState;
- end;
- { TJumpToSectionToolButton }
- TJumpToSectionToolButton = class(TIDEToolButton)
- private
- procedure AddMenuItem(aCmd: TIDEMenuCommand);
- public
- procedure DoOnAdded; override;
- procedure RefreshMenu;
- end;
- { TSetBuildModeToolButton }
- TSetBuildModeToolButton = class(TIDEToolButton)
- private
- procedure RefreshMenu(Sender: TObject);
- procedure mnuSetBuildModeClick(Sender: TObject);
- public
- procedure DoOnAdded; override;
- end;
- { TOpenFileToolButton }
- TOpenFileToolButton = class(TIDEToolButton)
- private
- FIndex: TStringList;
- procedure RefreshMenu(Sender: TObject);
- procedure mnuOpenFile(Sender: TObject);
- procedure mnuProjectFile(Sender: TObject);
- public
- constructor Create(aOwner: TComponent); override;
- destructor Destroy; override;
- procedure DoOnAdded; override;
- end;
- { TOpenFileMenuItem }
- TOpenFileMenuItem = class(TMenuItem)
- public
- FileName: string;
- end;
- { TNewFormUnitToolButton }
- TNewFormUnitToolButton = class(TIDEToolButton)
- private
- SetDefaultMenuItem: TMenuItem;
- procedure RefreshMenu(Sender: TObject);
- procedure mnuSetFormUnitTemplate(Sender: TObject);
- protected
- class function FindDefaultTemplateName(Category: TNewIDEItemCategory): string; virtual; abstract;
- class procedure SetTemplateName(const TemplateName: string); virtual; abstract;
- class procedure UpdateHint(const AHint: string); virtual; abstract;
- public
- procedure DoOnAdded; override;
- class procedure UpdateHints;
- end;
- { TNewUnitToolButton }
- TNewUnitToolButton = class(TNewFormUnitToolButton)
- protected
- class function FindDefaultTemplateName(Category: TNewIDEItemCategory): string; override;
- class procedure SetTemplateName(const TemplateName: string); override;
- class procedure UpdateHint(const AHint: string); override;
- end;
- { TNewFormToolButton }
- TNewFormToolButton = class(TNewFormUnitToolButton)
- protected
- class function FindDefaultTemplateName(Category: TNewIDEItemCategory): string; override;
- class procedure SetTemplateName(const TemplateName: string); override;
- class procedure UpdateHint(const AHint: string); override;
- end;
- { TNewFormUnitMenuItem }
- TNewFormUnitMenuItem = class(TMenuItem)
- public
- TemplateName: string;
- end;
- function GetMainIde: TMainIDEBase;
- property MainIDE: TMainIDEBase read GetMainIde;
- { 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
- function GetMainIde: TMainIDEBase;
- begin
- Result := TMainIDEBase(MainIDEInterface)
- end;
- { TNewFormUnitToolButton }
- procedure TNewFormUnitToolButton.DoOnAdded;
- begin
- inherited DoOnAdded;
- PopupMenu := TPopupMenu.Create(Self);
- PopupMenu.OnPopup := @RefreshMenu;
- SetDefaultMenuItem:=TMenuItem.Create(PopupMenu);
- SetDefaultMenuItem.Caption:=lisSetDefault;
- PopupMenu.Items.Add(SetDefaultMenuItem);
- UpdateHints;
- end;
- procedure TNewFormUnitToolButton.mnuSetFormUnitTemplate(Sender: TObject);
- begin
- SetTemplateName((Sender as TNewFormUnitMenuItem).TemplateName);
- EnvironmentOptions.Save(False);
- UpdateHints;
- end;
- procedure TNewFormUnitToolButton.RefreshMenu(Sender: TObject);
- var
- TemplateName: String;
- Category: TNewIDEItemCategory;
- i: Integer;
- CurTemplate: TNewIDEItemTemplate;
- TheIndex: Integer;
- xItem: TNewFormUnitMenuItem;
- begin
- Category:=NewIDEItems.FindCategoryByPath(FileDescGroupName,true);
- TemplateName:=FindDefaultTemplateName(Category);
- // create menu items
- TheIndex:=0;
- for i:=0 to Category.Count-1 do begin
- CurTemplate:=Category[i];
- if not CurTemplate.VisibleInNewDialog then continue;
- if TheIndex<SetDefaultMenuItem.Count then
- xItem:=SetDefaultMenuItem[TheIndex] as TNewFormUnitMenuItem
- else begin
- xItem:=TNewFormUnitMenuItem.Create(SetDefaultMenuItem);
- SetDefaultMenuItem.Add(xItem);
- end;
- xItem.OnClick:=@mnuSetFormUnitTemplate;
- xItem.Caption:=CurTemplate.LocalizedName;
- xItem.TemplateName:=CurTemplate.Name;
- xItem.ShowAlwaysCheckable:=true;
- xItem.Checked:=CompareText(TemplateName,CurTemplate.Name)=0;
- inc(TheIndex);
- end;
- // remove unneeded items
- while SetDefaultMenuItem.Count>TheIndex do
- SetDefaultMenuItem.Items[SetDefaultMenuItem.Count-1].Free;
- end;
- class procedure TNewFormUnitToolButton.UpdateHints;
- var
- Category: TNewIDEItemCategory;
- TemplateName: String;
- Template: TNewIDEItemTemplate;
- begin
- if not Assigned(NewIDEItems) then
- Exit;
- Category:=NewIDEItems.FindCategoryByPath(FileDescGroupName,true);
- TemplateName:=FindDefaultTemplateName(Category);
- if TemplateName<>'' then //try to get the LocalizedName
- begin
- Template:=Category.FindTemplateByName(TemplateName);
- if Assigned(Template) then
- TemplateName := Template.LocalizedName;
- end;
- UpdateHint(Format(lisMenuNewCustom, [TemplateName]));
- end;
- { TNewFormToolButton }
- class function TNewFormToolButton.FindDefaultTemplateName(
- Category: TNewIDEItemCategory): string;
- begin
- Result:=EnvironmentOptions.NewFormTemplate;
- if (Result='') or (Category.FindTemplateByName(Result)=nil) then
- Result:=FileDescNameLCLForm;
- end;
- class procedure TNewFormToolButton.SetTemplateName(const TemplateName: string);
- begin
- EnvironmentOptions.NewFormTemplate:=TemplateName;
- end;
- class procedure TNewFormToolButton.UpdateHint(const AHint: string);
- begin
- MainIDEBar.itmFileNewForm.Hint := AHint;
- end;
- { TNewUnitToolButton }
- class function TNewUnitToolButton.FindDefaultTemplateName(
- Category: TNewIDEItemCategory): string;
- begin
- Result:=EnvironmentOptions.NewUnitTemplate;
- if (Result='') or (Category.FindTemplateByName(Result)=nil) then
- Result:=FileDescNamePascalUnit;
- end;
- class procedure TNewUnitToolButton.SetTemplateName(const TemplateName: string);
- begin
- EnvironmentOptions.NewUnitTemplate:=TemplateName;
- end;
- class procedure TNewUnitToolButton.UpdateHint(const AHint: string);
- begin
- MainIDEBar.itmFileNewUnit.Hint := AHint;
- end;
- { TOpenFileToolButton }
- constructor TOpenFileToolButton.Create(aOwner: TComponent);
- begin
- inherited Create(aOwner);
- FIndex := TStringList.Create;
- end;
- destructor TOpenFileToolButton.Destroy;
- begin
- FIndex.Free;
- inherited Destroy;
- end;
- procedure TOpenFileToolButton.DoOnAdded;
- begin
- inherited DoOnAdded;
- DropdownMenu := TPopupMenu.Create(Self);
- DropdownMenu.OnPopup := @RefreshMenu;
- DropdownMenu.Images := TCustomImageList.Create(Self);
- DropdownMenu.Images.Width := 16;
- DropdownMenu.Images.Height := 16;
- Style := tbsDropDown;
- end;
- procedure TOpenFileToolButton.mnuOpenFile(Sender: TObject);
- begin
- if MainIDE.DoOpenEditorFile((Sender as TOpenFileMenuItem).FileName,-1,-1,
- [ofAddToRecent])=mrOk then
- begin
- MainIDE.SetRecentFilesMenu;
- MainIDE.SaveEnvironment;
- end;
- end;
- procedure TOpenFileToolButton.mnuProjectFile(Sender: TObject);
- begin
- MainIDE.DoOpenProjectFile((Sender as TOpenFileMenuItem).FileName,[ofAddToRecent]);
- end;
- procedure TOpenFileToolButton.RefreshMenu(Sender: TObject);
- procedure AddFile(const AFileName: string; const AOnClick: TNotifyEvent);
- var
- AMenuItem: TOpenFileMenuItem;
- xExt: string;
- begin
- AMenuItem := TOpenFileMenuItem.Create(DropdownMenu);
- DropdownMenu.Items.Add(AMenuItem);
- AMenuItem.OnClick := AOnClick;
- AMenuItem.FileName := AFileName;
- AMenuItem.Caption := AFilename;
- xExt := ExtractFileExt(AFileName);
- if SameFileName(xExt, '.lpi') or SameFileName(xExt, '.lpr') then
- AMenuItem.ImageIndex := LoadProjectIconIntoImages(AFileName, DropdownMenu.Images, FIndex);
- end;
- procedure AddFiles(List: TStringList; MaxCount: integer; const AOnClick: TNotifyEvent);
- var
- i: integer;
- begin
- i := 0;
- while (i < List.Count) and (i < MaxCount) do
- begin
- AddFile(List[i], AOnClick);
- inc(i);
- end;
- end;
- begin
- DropdownMenu.Items.Clear;
- // first add recent projects
- AddFiles(EnvironmentOptions.RecentProjectFiles, EnvironmentOptions.MaxRecentProjectFiles, @mnuProjectFile);
- // add a separator
- DropdownMenu.Items.AddSeparator;
- // then add recent files
- AddFiles(EnvironmentOptions.RecentOpenFiles, EnvironmentOptions.MaxRecentOpenFiles, @mnuOpenFile);
- end;
- { TSetBuildModeToolButton }
- procedure TSetBuildModeToolButton.DoOnAdded;
- begin
- inherited DoOnAdded;
- DropdownMenu := TPopupMenu.Create(Self);
- DropdownMenu.OnPopup := @RefreshMenu;
- Style := tbsDropDown;
- end;
- procedure TSetBuildModeToolButton.mnuSetBuildModeClick(Sender: TObject);
- var
- TheMenuItem: TMenuItem;
- TheIndex: LongInt;
- NewMode: TProjectBuildMode;
- begin
- TheMenuItem := (Sender as TMenuItem);
- if TheMenuItem.Caption = '-' then exit;
- TheIndex := TheMenuItem.MenuIndex;
- if (TheIndex < 0) or (TheIndex >= Project1.BuildModes.Count) then exit;
- NewMode := Project1.BuildModes[TheIndex];
- if NewMode = Project1.ActiveBuildMode then exit;
- if not (MainIDE.ToolStatus in [itNone,itDebugger]) then begin
- IDEMessageDialog('Error','You can not change the build mode while compiling.',
- mtError,[mbOk]);
- exit;
- end;
- Project1.ActiveBuildMode := NewMode;
- MainBuildBoss.SetBuildTargetProject1(false);
- MainIDE.UpdateCaption;
- end;
- procedure TSetBuildModeToolButton.RefreshMenu(Sender: TObject);
- var
- aMenu: TPopupMenu;
- CurIndex: Integer;
- i: Integer;
- procedure AddMode(CurMode: TProjectBuildMode);
- var
- AMenuItem: TMenuItem;
- begin
- if aMenu.Items.Count > CurIndex then
- AMenuItem := aMenu.Items[CurIndex]
- else
- begin
- AMenuItem := TMenuItem.Create(DropdownMenu);
- AMenuItem.Name := aMenu.Name + 'Mode' + IntToStr(CurIndex);
- AMenuItem.OnClick := @mnuSetBuildModeClick;
- aMenu.Items.Add(AMenuItem);
- end;
- AMenuItem.Caption := CurMode.GetCaption;
- AMenuItem.Checked := (Project1<>nil) and (Project1.ActiveBuildMode=CurMode);
- AMenuItem.ShowAlwaysCheckable:=true;
- inc(CurIndex);
- end;
- begin
- // fill the PopupMenu:
- CurIndex := 0;
- aMenu := DropdownMenu;
- if Project1<>nil then
- for i:=0 to Project1.BuildModes.Count-1 do
- AddMode(Project1.BuildModes[i]);
- // remove unused menuitems
- while aMenu.Items.Count > CurIndex do
- aMenu.Items[aMenu.Items.Count - 1].Free;
- end;
- { TJumpToSectionToolButton }
- procedure TJumpToSectionToolButton.DoOnAdded;
- begin
- inherited DoOnAdded;
- RefreshMenu;
- end;
- procedure TJumpToSectionToolButton.AddMenuItem(aCmd: TIDEMenuCommand);
- var
- xItem: TMenuItem;
- begin
- xItem := TMenuItem.Create(DropdownMenu);
- DropdownMenu.Items.Add(xItem);
- xItem.Caption := aCmd.Caption;
- xItem.OnClick := aCmd.OnClick;
- xItem.ImageIndex := aCmd.ImageIndex;
- end;
- procedure TJumpToSectionToolButton.RefreshMenu;
- begin
- if DropdownMenu = nil then
- begin
- DropdownMenu := TPopupMenu.Create(Self);
- if Assigned(FToolBar) then
- DropdownMenu.Images := FToolBar.Images;
- Style := tbsDropDown;
- end;
- DropdownMenu.Items.Clear;
- AddMenuItem(MainIDEBar.itmJumpToInterface);
- AddMenuItem(MainIDEBar.itmJumpToInterfaceUses);
- AddMenuItem(MainIDEBar.itmJumpToImplementation);
- AddMenuItem(MainIDEBar.itmJumpToImplementationUses);
- AddMenuItem(MainIDEBar.itmJumpToInitialization);
- end;
- //{$IFDEF LCLCarbon}
- //var
- // mnuApple: TIDEMenuSection = nil;
- //{$ENDIF}
- { TMainIDEBase }
- procedure TMainIDEBase.mnuWindowItemClick(Sender: TObject);
- var
- i: Integer;
- Form: TCustomForm;
- nfd: Boolean;
- begin
- i:=Screen.CustomFormCount-1;
- while (i>=0) do begin
- Form:=Screen.CustomForms[i];
- nfd := EnvironmentOptions.Desktop.IDENameForDesignedFormList;
- if (nfd and (Form.Name=(Sender as TIDEMenuCommand).Caption))
- or ((not nfd) and (Form.Caption=(Sender as TIDEMenuCommand).Caption)) then
- begin
- IDEWindowCreators.ShowForm(Form,true);
- break;
- end;
- dec(i);
- end;
- end;
- procedure TMainIDEBase.mnuCenterWindowItemClick(Sender: TObject);
- var
- i: Integer;
- Form: TCustomForm;
- r, NewBounds: TRect;
- nfd: Boolean;
- begin
- i:=Screen.CustomFormCount-1;
- while (i>=0) do begin
- Form:=Screen.CustomForms[i];
- nfd := EnvironmentOptions.Desktop.IDENameForDesignedFormList;
- if (nfd and (Form.Name=(Sender as TIDEMenuCommand).Caption))
- or ((not nfd) and (Form.Caption=(Sender as TIDEMenuCommand).Caption)) then
- begin
- // show
- if not Form.IsVisible then
- IDEWindowCreators.ShowForm(Form,true);
- // move to monitor of main IDE bar
- Form:=GetParentForm(Form);
- if Form<>MainIDEBar then begin
- // center on main IDE
- Form.MakeFullyVisible(MainIDEBar.Monitor,true);
- debugln(['TMainIDEBase.mnuCenterWindowItemClick ',DbgSName(Form),' ',dbgs(Form.BoundsRect)]);
- r:=MainIDEBar.BoundsRect;
- if Form.Width<MainIDEBar.Width then
- NewBounds.Left:=(r.Left+r.Right-Form.Width) div 2
- else
- NewBounds.Left:=r.Left+50;
- if Form.Height<MainIDEBar.Height then
- NewBounds.Top:=(r.Top+r.Bottom-Form.Height) div 2
- else
- NewBounds.Top:=r.Top+50;
- NewBounds.Right:=NewBounds.Left+Max(70,Form.Width);
- NewBounds.Bottom:=NewBounds.Top+Max(70,Form.Height);
- debugln(['TMainIDEBase.mnuCenterWindowItemClick New=',dbgs(NewBounds)]);
- Form.BoundsRect:=NewBounds;
- Form.WindowState:=wsNormal;
- Form.BringToFront;
- end;
- break;
- end;
- dec(i);
- end;
- end;
- procedure TMainIDEBase.mnuWindowSourceItemClick(Sender: TObject);
- var
- i: LongInt;
- begin
- if SourceEditorManager = nil then exit;
- i:=(sender as TIDEMenuCommand).tag;
- if (i<0) or (i>=SourceEditorManager.SourceEditorCount) then exit;
- SourceEditorManager.ActiveEditor := SourceEditorManager.SourceEditors[i];
- SourceEditorManager.ShowActiveWindowOnTop(True);
- end;
- procedure TMainIDEBase.SetToolStatus(const AValue: TIDEToolStatus);
- begin
- if ToolStatus=AValue then exit;
- inherited SetToolStatus(AValue);
- UpdateCaption;
- end;
- constructor TMainIDEBase.Create(TheOwner: TComponent);
- begin
- // 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;
- 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: TForm;
- begin
- Result:=MainIDEBar;
- end;
- procedure TMainIDEBase.SetRecentProjectFilesMenu;
- begin
- SetRecentSubMenu(itmProjectRecentOpen,
- EnvironmentOptions.RecentProjectFiles,
- @mnuOpenProjectClicked);
- end;
- procedure TMainIDEBase.SetRecentFilesMenu;
- begin
- SetRecentSubMenu(itmFileRecentOpen,
- EnvironmentOptions.RecentOpenFiles,
- @mnuOpenRecentClicked);
- end;
- function TMainIDEBase.BeginCodeTool(var ActiveSrcEdit: TSourceEditor;
- out ActiveUnitInfo: TUnitInfo; Flags: TCodeToolsFlags): boolean;
- begin
- Result:=BeginCodeTool(nil,ActiveSrcEdit,ActiveUnitInfo,Flags);
- end;
- function TMainIDEBase.BeginCodeTool(ADesigner: TDesigner;
- var ActiveSrcEdit: TSourceEditor; out ActiveUnitInfo: TUnitInfo;
- Flags: TCodeToolsFlags): boolean;
- var
- Edit: TIDESynEditor;
- begin
- Result:=false;
- if (ctfUseGivenSourceEditor in Flags) and (Project1<>nil)
- and (ActiveSrcEdit<>nil) then begin
- ActiveUnitInfo := Project1.EditorInfoWithEditorComponent(ActiveSrcEdit).UnitInfo;
- end
- else begin
- ActiveSrcEdit:=nil;
- ActiveUnitInfo:=nil;
- end;
- // check global stati
- if (ToolStatus in [itCodeTools,itCodeToolAborting]) then begin
- debugln('TMainIDEBase.BeginCodeTool impossible ',dbgs(ord(ToolStatus)));
- exit;
- end;
- if (not (ctfSourceEditorNotNeeded in Flags)) and (SourceEditorManager.SourceEditorCount=0)
- then begin
- //DebugLn('TMainIDEBase.BeginCodeTool no source editor');
- exit;
- end;
- // check source editor
- if not (ctfUseGivenSourceEditor in Flags) then begin
- if ctfSwitchToFormSource in Flags then
- DoSwitchToFormSrc(ADesigner,ActiveSrcEdit,ActiveUnitInfo)
- else if ADesigner<>nil then
- GetDesignerUnit(ADesigner,ActiveSrcEdit,ActiveUnitInfo)
- else
- GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo);
- end;
- if (not (ctfSourceEditorNotNeeded in Flags)) and
- ((ActiveSrcEdit=nil) or (ActiveUnitInfo=nil))
- then exit;
- // init codetools
- SaveSourceEditorChangesToCodeCache(nil);
- if ActiveSrcEdit<>nil then begin
- Edit:=ActiveSrcEdit.EditorComponent;
- CodeToolBoss.VisibleEditorLines:=Edit.LinesInWindow;
- CodeToolBoss.TabWidth:=Edit.TabWidth;
- CodeToolBoss.IndentSize:=Edit.BlockIndent+Edit.BlockTabIndent*Edit.TabWidth;
- CodeToolBoss.UseTabs:=Edit.BlockTabIndent>0;
- end else begin
- CodeToolBoss.VisibleEditorLines:=25;
- CodeToolBoss.TabWidth:=EditorOpts.TabWidth;
- CodeToolBoss.IndentSize:=EditorOpts.BlockIndent+EditorOpts.BlockTabIndent*EditorOpts.TabWidth;
- CodeToolBoss.UseTabs:=EditorOpts.BlockTabIndent>0;
- end;
- if ctfActivateAbortMode in Flags then
- ActivateCodeToolAbortableMode;
- Result:=true;
- end;
- procedure TMainIDEBase.ActivateCodeToolAbortableMode;
- begin
- if ToolStatus=itNone then
- RaiseException('TMainIDEBase.ActivateCodeToolAbortableMode Error 1');
- ToolStatus:=itCodeTools;
- CodeToolBoss.OnCheckAbort:=@OnCodeToolBossCheckAbort;
- CodeToolBoss.Abortable:=true;
- end;
- function TMainIDEBase.OnCodeToolBossCheckAbort: boolean;
- begin
- Result:=true;
- if ToolStatus<>itCodeTools then exit;
- Application.ProcessMessages;
- Result:=ToolStatus<>itCodeTools;
- end;
- procedure TMainIDEBase.DoMergeDefaultProjectOptions(AProject: TProject);
- var
- AFilename: String;
- ShortFilename: String;
- begin
- // load default project options if exists
- AFilename:=AppendPathDelim(GetPrimaryConfigPath)+DefaultProjectOptionsFilename;
- if not FileExistsUTF8(AFilename) then
- CopySecondaryConfigFile(DefaultProjectOptionsFilename);
- if FileExistsUTF8(AFilename) then
- if AProject.ReadProject(AFilename,nil,False)<>mrOk then
- DebugLn(['TMainIDEBase.DoLoadDefaultCompilerOptions failed']);
- // change target file name
- AFilename:=ExtractFileName(AProject.CompilerOptions.TargetFilename);
- if AFilename='' then
- exit; // using default -> ok
- if CompareFilenames(AFilename,ExtractFilename(AProject.ProjectInfoFile))=0
- then exit; // target file name and project name fit -> ok
- // change target file to project name
- ShortFilename:=ExtractFileNameOnly(AProject.ProjectInfoFile);
- if ShortFilename<>'' then
- AProject.CompilerOptions.TargetFilename:=
- ExtractFilePath(AProject.CompilerOptions.TargetFilename)
- +ShortFilename+ExtractFileExt(AFilename);
- AProject.CompilerOptions.Modified:=false;
- end;
- procedure TMainIDEBase.DoSwitchToFormSrc(var ActiveSourceEditor: TSourceEditor;
- var ActiveUnitInfo: TUnitInfo);
- begin
- DoSwitchToFormSrc(nil,ActiveSourceEditor,ActiveUnitInfo);
- end;
- procedure TMainIDEBase.DoSwitchToFormSrc(ADesigner: TIDesigner;
- var ActiveSourceEditor: TSourceEditor; var ActiveUnitInfo: TUnitInfo);
- begin
- if (ADesigner<>nil) then
- ActiveUnitInfo:=Project1.UnitWithComponent(ADesigner.LookupRoot)
- else if (GlobalDesignHook.LookupRoot<>nil)
- and (GlobalDesignHook.LookupRoot is TComponent) then
- ActiveUnitInfo:=Project1.UnitWithComponent(TComponent(GlobalDesignHook.LookupRoot))
- else
- ActiveUnitInfo:=nil;
- if (ActiveUnitInfo<>nil) and (ActiveUnitInfo.OpenEditorInfoCount > 0) then begin
- ActiveSourceEditor := TSourceEditor(ActiveUnitInfo.OpenEditorInfo[0].EditorComponent);
- SourceEditorManagerIntf.ActiveEditor := ActiveSourceEditor;
- end
- else
- ActiveSourceEditor:=nil;
- end;
- procedure TMainIDEBase.DoMnuWindowClicked(Sender: TObject);
- begin
- UpdateWindowMenu;
- end;
- procedure TMainIDEBase.SetDisplayState(AValue: TDisplayState);
- begin
- if FDisplayState=AValue then Exit;
- FDisplayState:=AValue;
- {$IFDEF VerboseIDEDisplayState}
- debugln(['TMainIDEBase.SetDisplayState ',dbgs(DisplayState)]);
- {$ENDIF}
- end;
- function TMainIDEBase.CreateMenuSeparator : TMenuItem;
- begin
- Result := TMenuItem.Create(MainIDEBar);
- Result.Caption := '-';
- end;
- procedure TMainIDEBase.CreateMenuItem(Section: TIDEMenuSection;
- var MenuCommand: TIDEMenuCommand; const MenuItemName, MenuItemCaption: String;
- const bmpName: String; mnuEnabled: Boolean; mnuChecked: Boolean;
- mnuVisible: Boolean);
- begin
- MenuCommand:=RegisterIDEMenuCommand(Section,MenuItemName,MenuItemCaption);
- MenuCommand.Enabled:=mnuEnabled;
- MenuCommand.Checked:=mnuChecked;
- MenuCommand.Visible:=mnuVisible;
- if bmpName<>'' then
- MenuCommand.ImageIndex := IDEImages.LoadImage(16, bmpName);
- end;
- procedure TMainIDEBase.CreateMenuSeparatorSection(
- ParentSection: TIDEMenuSection; var Section: TIDEMenuSection;
- const AName: String);
- begin
- Section:=RegisterIDEMenuSection(ParentSection,AName);
- Section.ChildrenAsSubMenu := 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(mnuSource,'Source',lisMenuSource);
- CreateMainMenuItem(mnuProject,'Project',lisMenuProject);
- CreateMainMenuItem(mnuRun,'Run',lisMenuRun);
- CreateMainMenuItem(mnuPackage,'Package',lisMenuPackage);
- mnuComponent:=mnuPackage;
- CreateMainMenuItem(mnuTools,'Tools',lisMenuTools);
- CreateMainMenuItem(mnuWindow,'Window',lisMenuWindow);
- mnuWindow.OnClick := @DoMnuWindowClicked;
- 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');
- CreateMenuItem(ParentMI, itmFileOpenUnit, 'itmFileOpenUnit', lisMenuOpenUnit, 'laz_openunit');
- CreateMenuSubSection(ParentMI,itmFileRecentOpen,'itmFileRecentOpen',lisMenuOpenRecent);
- CreateMenuItem(ParentMI,itmFileSave,'itmFileSave',lisMenuSave,'laz_save');
- CreateMenuItem(ParentMI,itmFileSaveAs,'itmFileSaveAs',lisMenuSaveAs,'menu_saveas');
- CreateMenuItem(ParentMI,itmFileSaveAll,'itmFileSaveAll',lisSaveAll,'menu_save_all');
- CreateMenuItem(ParentMI,itmFileExportHtml,'itmFileExportHtml',lisExportHtml);
- CreateMenuItem(ParentMI,itmFileClose,'itmFileClose',lisMenuCloseEditorFile,'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',lisRestart, 'laz_refresh');
- CreateMenuItem(ParentMI,itmFileQuit,'itmFileQuit',lisBtnQuit, 'menu_exit');
- end;
- end;
- procedure TMainIDEBase.SetupEditMenu;
- var
- ParentMI: TIDEMenuSection;
- begin
- with MainIDEBar do begin
- CreateMenuSeparatorSection(mnuEdit,itmEditReUndo,'itmEditReUndo');
- ParentMI:=itmEditReUndo;
- CreateMenuItem(ParentMI,itmEditUndo,'itmEditUndo',lisUndo,'menu_undo');
- CreateMenuItem(ParentMI,itmEditRedo,'itmEditRedo',lisRedo,'menu_redo');
- CreateMenuSeparatorSection(mnuEdit,itmEditClipboard,'itmEditClipboard');
- ParentMI:=itmEditClipboard;
- CreateMenuItem(ParentMI,itmEditCut,'itmEditCut',lisCut,'laz_cut');
- CreateMenuItem(ParentMI,itmEditCopy,'itmEditCopy',lisCopy,'laz_copy');
- CreateMenuItem(ParentMI,itmEditPaste,'itmEditPaste',lisPaste,'laz_paste');
- // "Select" menu items
- CreateMenuSeparatorSection(mnuEdit,itmEditSelect,'itmEditSelect');
- ParentMI:=itmEditSelect;
- CreateMenuItem(ParentMI,itmEditSelectAll,'itmEditSelectAll',lisMenuSelectAll, 'menu_select_all');
- CreateMenuItem(ParentMI,itmEditSelectToBrace,'itmEditSelectToBrace',lisMenuSelectToBrace);
- CreateMenuItem(ParentMI,itmEditSelectCodeBlock,'itmEditSelectCodeBlock',lisMenuSelectCodeBlock);
- CreateMenuItem(ParentMI,itmEditSelectWord,'itmEditSelectWord',lisMenuSelectWord);
- CreateMenuItem(ParentMI,itmEditSelectLine,'itmEditSelectLine',lisMenuSelectLine);
- CreateMenuItem(ParentMI,itmEditSelectParagraph,'itmEditSelectParagraph',lisMenuSelectParagraph);
- // "Char Conversion" menu items
- CreateMenuSeparatorSection(mnuEdit,itmEditBlockActions,'itmEditBlockActions');
- ParentMI:=itmEditBlockActions;
- CreateMenuItem(ParentMI,itmEditIndentBlock,'itmEditIndentBlock',lisMenuIndentSelection,'menu_indent');
- CreateMenuItem(ParentMI,itmEditUnindentBlock,'itmEditUnindentBlock',lisMenuUnindentSelection,'menu_unindent');
- CreateMenuItem(ParentMI,itmEditUpperCaseBlock,'itmEditUpperCaseBlock',lisMenuUpperCaseSelection, 'menu_edit_uppercase');
- CreateMenuItem(ParentMI,itmEditLowerCaseBlock,'itmEditLowerCaseBlock',lisMenuLowerCaseSelection, 'menu_edit_lowercase');
- CreateMenuItem(ParentMI,itmEditSwapCaseBlock,'itmEditSwapCaseBlock',lisMenuSwapCaseSelection, 'menu_edit_uppercase');
- CreateMenuItem(ParentMI,itmEditSortBlock,'itmEditSortBlock',lisMenuSortSelection, 'menu_edit_sort');
- CreateMenuItem(ParentMI,itmEditTabsToSpacesBlock,'itmEditTabsToSpacesBlock',lisMenuTabsToSpacesSelection);
- CreateMenuItem(ParentMI,itmEditSelectionBreakLines,'itmEditSelectionBreakLines',lisMenuBeakLinesInSelection);
- // *** insert text ***:
- CreateMenuSeparatorSection(mnuEdit,itmEditInsertions,'itmEditInsertions');
- ParentMI:=itmEditInsertions;
- CreateMenuItem(ParentMI,itmEditInsertCharacter,'itmEditInsertCharacter',lisMenuInsertCharacter);
- 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', lisBtnDlgReplace, '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);
- CreateMenuSubSection(ParentMI,itmJumpToSection,'itmJumpToSection',lisMenuJumpTo);
- ParentMI:=itmJumpToSection;
- CreateMenuItem(ParentMI,itmJumpToInterface,'itmJumpToInterface',lisMenuJumpToInterface, 'menu_jumpto_interface');
- CreateMenuItem(ParentMI,itmJumpToInterfaceUses,'itmJumpToInterfaceUses',lisMenuJumpToInterfaceUses, 'menu_jumpto_interfaceuses');
- CreateMenuItem(ParentMI,itmJumpToImplementation,'itmJumpToImplementation',lisMenuJumpToImplementation, 'menu_jumpto_implementation');
- CreateMenuItem(ParentMI,itmJumpToImplementationUses,'itmJumpToImplementationUses',lisMenuJumpToImplementationUses, 'menu_jumpto_implementationuses');
- CreateMenuItem(ParentMI,itmJumpToInitialization,'itmJumpToInitialization',lisMenuJumpToInitialization, 'menu_jumpto_initialization');
- CreateMenuSeparatorSection(mnuSearch,itmBookmarks,'itmBookmarks');
- ParentMI:=itmBookmarks;
- CreateMenuItem(ParentMI,itmSetFreeBookmark,'itmSetFreeBookmark',lisMenuSetFreeBookmark, 'menu_search_set_bookmark');
- 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,itmSearchProcedureList,'itmSearchProcedureList',lisMenuProcedureList);
- end;
- end;
- procedure TMainIDEBase.SetupViewMenu;
- var
- ParentMI: TIDEMenuSection;
- begin
- with MainIDEBar do begin
- CreateMenuSeparatorSection(mnuView,itmViewMainWindows,'itmViewMainWindows');
- ParentMI:=itmViewMainWindows;
- CreateMenuItem(ParentMI,itmViewToggleFormUnit,'itmViewToggleFormUnit',lisMenuViewToggleFormUnit, 'menu_view_toggle_form_unit');
- 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',lisFPDocEditor);
- CreateMenuItem(ParentMI,itmViewCodeBrowser,'itmViewCodeBrowser',lisMenuViewCodeBrowser, 'menu_view_code_browser');
- CreateMenuItem(ParentMI,itmSourceUnitDependencies,'itmSourceUnitDependencies',lisMenuViewUnitDependencies);
- CreateMenuItem(ParentMI,itmViewRestrictionBrowser,'itmViewRestrictionBrowser',lisMenuViewRestrictionBrowser, 'menu_view_rectriction_browser');
- CreateMenuItem(ParentMI,itmViewComponents,'itmViewComponents',lisMenuViewComponents);
- CreateMenuItem(ParentMI,itmJumpHistory,'itmJumpHistory',lisMenuViewJumpHistory);
- CreateMenuItem(ParentMI,itmMacroListView,'itmMacroListView',lisMenuMacroListView);
- CreateMenuSeparatorSection(mnuView,itmViewDesignerWindows,'itmViewDesignerWindows');
- ParentMI:=itmViewDesignerWindows;
- CreateMenuItem(ParentMI,itmViewAnchorEditor,'itmViewAnchorEditor',lisMenuViewAnchorEditor,'menu_view_anchor_editor');
- CreateMenuItem(ParentMI,itmViewTabOrder,'itmViewTabOrder',lisMenuViewTabOrder,'tab_order');
- CreateMenuSeparatorSection(mnuView,itmViewSecondaryWindows,'itmViewSecondaryWindows');
- ParentMI:=itmViewSecondaryWindows;
- CreateMenuItem(ParentMI,itmViewSearchResults,'itmViewSearchResults',lisMenuViewSearchResults);
- 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);
- if HasConsoleSupport then
- CreateMenuItem(itmViewDebugWindows,itmViewPseudoTerminal,'itmViewPseudoTerminal',lisMenuViewPseudoTerminal)
- else
- itmViewPseudoTerminal := nil;
- CreateMenuItem(itmViewDebugWindows,itmViewRegisters,'itmViewRegisters',lisMenuViewRegisters);
- CreateMenuItem(itmViewDebugWindows,itmViewCallStack,'itmViewCallStack',lisMenuViewCallStack,'debugger_call_stack');
- CreateMenuItem(itmViewDebugWindows,itmViewThreads,'itmViewThreads',lisMenuViewThreads);
- CreateMenuItem(itmViewDebugWindows,itmViewAssembler,'itmViewAssembler',lisMenuViewAssembler);
- CreateMenuItem(itmViewDebugWindows,itmViewDebugEvents,'itmViewDebugEvents',lisMenuViewDebugEvents,'debugger_event_log');
- CreateMenuItem(itmViewDebugWindows,itmViewDebugOutput,'itmViewDebugOutput',lisMenuViewDebugOutput,'debugger_output');
- CreateMenuItem(itmViewDebugWindows,itmViewDbgHistory,'itmViewDbgHistory',lisMenuViewHistory);
- end;
- CreateMenuSubSection(ParentMI, itmViewIDEInternalsWindows, 'itmViewIDEInternalsWindows', lisMenuIDEInternals);
- begin
- CreateMenuItem(itmViewIDEInternalsWindows, itmViewFPCInfo, 'itmViewFPCInfo', lisMenuAboutFPC);
- CreateMenuItem(itmViewIDEInternalsWindows, itmViewIDEInfo, 'itmViewIDEInfo', lisAboutIDE);
- CreateMenuItem(itmViewIDEInternalsWindows, itmViewNeedBuild, 'itmViewNeedBuild', lisMenuWhatNeedsBuilding);
- {$IFDEF EnableFPDocSearch}
- CreateMenuItem(itmViewIDEInternalsWindows, itmSearchInFPDocFiles,'itmSearchInFPDocFiles','Search in FPDoc files');
- {$ENDIF}
- end;
- end;
- end;
- procedure TMainIDEBase.SetupSourceMenu;
- var
- ParentMI, SubParentMI: TIDEMenuSection;
- begin
- with MainIDEBar do begin
- CreateMenuSeparatorSection(mnuSource,itmSourceBlockActions,'itmSourceBlockActions');
- ParentMI:=itmSourceBlockActions;
- CreateMenuItem(ParentMI,itmSourceCommentBlock,'itmSourceCommentBlock',lisMenuCommentSelection, 'menu_comment');
- CreateMenuItem(ParentMI,itmSourceUncommentBlock,'itmSourceUncommentBlock',lisMenuUncommentSelection, 'menu_uncomment');
- CreateMenuItem(ParentMI,itmSourceToggleComment,'itmSourceToggleComment',lisMenuToggleComment, 'menu_comment');
- CreateMenuItem(ParentMI,itmSourceEncloseBlock,'itmSourceEncloseBlock',lisMenuEncloseSelection);
- CreateMenuItem(ParentMI,itmSourceEncloseInIFDEF,'itmSourceEncloseInIFDEF',lisMenuEncloseInIFDEF);
- CreateMenuItem(ParentMI,itmSourceCompleteCodeInteractive,'itmSourceCompleteCodeInteractive',lisMenuCompleteCodeInteractive);
- CreateMenuItem(ParentMI,itmRefactorInvertAssignment,'itmInvertAssignment',uemInvertAssignment);
- CreateMenuItem(ParentMI,itmSourceUseUnit,'itmSourceUseUnit',lisMenuUseUnit);
- // Refactor
- CreateMenuSeparatorSection(mnuSource,itmSourceRefactor,'itmSourceRefactor');
- CreateMenuSubSection(ParentMI,itmSourceRefactor,'itmSourceRefactor',uemRefactor);
- SubParentMI:=itmSourceRefactor;
- CreateMenuSeparatorSection(SubParentMI,itmRefactorCodeTools,'itmRefactorCodeTools');
- ParentMI:=itmRefactorCodeTools;
- CreateMenuItem(ParentMI,itmRefactorRenameIdentifier,'itmRefactorRenameIdentifier',lisMenuRenameIdentifier);
- CreateMenuItem(ParentMI,itmRefactorExtractProc,'itmRefactorExtractProc',lisMenuExtractProc);
- CreateMenuSeparatorSection(SubParentMI,itmRefactorAdvanced,'itmRefactorAdvanced');
- ParentMI:=itmRefactorAdvanced;
- CreateMenuItem(ParentMI,itmRefactorShowAbstractMethods,'itmShowAbstractMethods',srkmecAbstractMethods);
- CreateMenuItem(ParentMI,itmRefactorShowEmptyMethods,'itmShowEmptyMethods',srkmecEmptyMethods);
- CreateMenuItem(ParentMI,itmRefactorShowUnusedUnits,'itmShowUnusedUnits',srkmecUnusedUnits);
- {$IFDEF EnableFindOverloads}
- CreateMenuItem(ParentMI,itmRefactorFindOverloads,'itmFindOverloads',srkmecFindOverloadsCapt);
- {$ENDIF}
- CreateMenuSeparatorSection(SubParentMI,itmRefactorTools,'itmRefactorTools');
- ParentMI:=itmRefactorTools;
- CreateMenuItem(ParentMI,itmRefactorMakeResourceString,'itmRefactorMakeResourceString',
- lisMenuMakeResourceString,'menu_tool_make_resourcestring');
- // CodeToolChecks
- CreateMenuSeparatorSection(mnuSource,itmSourceCodeToolChecks,'itmSourceCodeToolChecks');
- ParentMI:=itmSourceCodeToolChecks;
- CreateMenuItem(ParentMI,itmSourceSyntaxCheck,'itmSourceSyntaxCheck',lisMenuQuickSyntaxCheck, 'menu_tool_syntax_check');
- CreateMenuItem(ParentMI,itmSourceGuessUnclosedBlock,'itmSourceGuessUnclosedBlock',lisMenuGuessUnclosedBlock);
- CreateMenuItem(ParentMI,itmSourceGuessMisplacedIFDEF,'itmSourceGuessMisplacedIFDEF',lisMenuGuessMisplacedIFDEF);
- CreateMenuSeparatorSection(mnuSource,itmSourceInsertions,'itmSourceInsertions');
- ParentMI:=itmSourceInsertions;
- // *** insert text ***:
- CreateMenuSubSection(ParentMI,itmSourceInsertCVSKeyWord,'itmSourceInsertCVSKeyWord',lisMenuInsertCVSKeyword);
- SubParentMI:=itmSourceInsertCVSKeyWord;
- // insert CVS keyword sub menu items
- CreateMenuItem(SubParentMI,itmSourceInsertCVSAuthor,'itmSourceInsertCVSAuthor','Author');
- CreateMenuItem(SubParentMI,itmSourceInsertCVSDate,'itmSourceInsertCVSDate','Date');
- CreateMenuItem(SubParentMI,itmSourceInsertCVSHeader,'itmSourceInsertCVSHeader','Header');
- CreateMenuItem(SubParentMI,itmSourceInsertCVSID,'itmSourceInsertCVSID','ID');
- CreateMenuItem(SubParentMI,itmSourceInsertCVSLog,'itmSourceInsertCVSLog','Log');
- CreateMenuItem(SubParentMI,itmSourceInsertCVSName,'itmSourceInsertCVSName','Name');
- CreateMenuItem(SubParentMI,itmSourceInsertCVSRevision,'itmSourceInsertCVSRevision','Revision');
- CreateMenuItem(SubParentMI,itmSourceInsertCVSSource,'itmSourceInsertCVSSource','Source');
- CreateMenuSubSection(ParentMI,itmSourceInsertGeneral,'itmSourceInsertGeneral'…