From b1ae15362fc8a3f1b8b1865c9cbaa559dbec5b58 Mon Sep 17 00:00:00 2001 From: ondrej Date: Fri, 20 Nov 2015 14:04:24 +0000 Subject: [PATCH] IDE: IDECommands refactoring; deleted menu item Project -> Change Build Mode git-svn-id: trunk@50441 - --- components/ideintf/idecommands.pas | 18 +++++++++++++ ide/frames/editor_keymapping_options.pas | 19 +------------- ide/idecoolbardata.pas | 32 ++++++++++++------------ ide/keymapping.pp | 31 +++++++++++++++++++++++ ide/main.pp | 14 ++++++++--- ide/mainbar.pas | 1 - ide/mainbase.pas | 20 ++++----------- ide/sourcefilemanager.pas | 6 +++++ 8 files changed, 88 insertions(+), 53 deletions(-) diff --git a/components/ideintf/idecommands.pas b/components/ideintf/idecommands.pas index ebe3d86088..35dd80dd6e 100644 --- a/components/ideintf/idecommands.pas +++ b/components/ideintf/idecommands.pas @@ -551,6 +551,7 @@ type procedure SetEnabled(const AEnabled: Boolean); procedure SetVisible(const AVisible: Boolean); procedure SetCaption(const ACaption: string); + procedure SetHint(const AHint: string); protected function GetLocalizedName: string; virtual; procedure SetLocalizedName(const AValue: string); virtual; @@ -586,6 +587,7 @@ type property Enabled: Boolean write SetEnabled; property Visible: Boolean write SetVisible; property Caption: string write SetCaption; + property Hint: string write SetHint; public property Name: String read FName; property Command: word read FCommand;// see the ecXXX constants above @@ -815,6 +817,7 @@ function CompareIDEShortCuts(Data1, Data2: Pointer): integer; function CompareIDEShortCutKey1s(Data1, Data2: Pointer): integer; function IdentToIDECommand(const Ident: string; var Cmd: longint): boolean; function IDECommandToIdent(Cmd: longint; var Ident: string): boolean; +function IDECommandToIdent(Cmd: longint): string; procedure GetIDEEditorCommandValues(Proc: TGetStrProc); implementation @@ -1324,6 +1327,14 @@ begin xUser.Enabled := AEnabled; end; +procedure TIDECommand.SetHint(const AHint: string); +var + xUser: TIDESpecialCommand; +begin + for xUser in FUsers do + xUser.Hint := AHint; +end; + function TIDECommand.AsShortCut: TShortCut; var CurKey: TIDEShortCut; @@ -2189,6 +2200,13 @@ begin Result := IntToIdent(Cmd, Ident, IDEEditorCommandStrs); end; +function IDECommandToIdent(Cmd: longint): string; +begin + Result := ''; + if not IDECommandToIdent(Cmd, Result) then + raise Exception.CreateFmt('IDECommandToIdent: command %d not found', [Cmd]); +end; + procedure GetIDEEditorCommandValues(Proc: TGetStrProc); var i: integer; diff --git a/ide/frames/editor_keymapping_options.pas b/ide/frames/editor_keymapping_options.pas index 822073ec39..559505d267 100644 --- a/ide/frames/editor_keymapping_options.pas +++ b/ide/frames/editor_keymapping_options.pas @@ -488,12 +488,6 @@ function TEditorKeymappingOptionsFrame.KeyMappingRelationToCaption( KeyRelation: TKeyCommandRelation): String; const MaxLength = 60; - - function AddBrakets(S: String): String; - begin - Result := '[' + S + ']'; - end; - begin with KeyRelation do begin @@ -502,18 +496,7 @@ begin Result := UTF8Copy(LocalizedName, 1, MaxLength)+'...'; if Result <> '' then Result := Result + ' '; - if (ShortcutA.Key1 = VK_UNKNOWN) and (ShortcutB.Key1 = VK_UNKNOWN) then - Result := Result{ + lisNone2 } - else - if (ShortcutA.Key1 = VK_UNKNOWN) then - Result := Result + AddBrakets(KeyAndShiftStateToEditorKeyString(ShortcutB)) - else - if (ShortcutB.Key1 = VK_UNKNOWN) then - Result := Result + AddBrakets(KeyAndShiftStateToEditorKeyString(ShortcutA)) - else - Result := Result + AddBrakets(KeyAndShiftStateToEditorKeyString(ShortcutA)) - + ' '+lisOr+' ' + - AddBrakets(KeyAndShiftStateToEditorKeyString(ShortcutB)); + Result := Result + KeyValuesToCaptionStr(ShortcutA, ShortcutB, '['); end; end; diff --git a/ide/idecoolbardata.pas b/ide/idecoolbardata.pas index 39dec6c7ae..d2f202d217 100644 --- a/ide/idecoolbardata.pas +++ b/ide/idecoolbardata.pas @@ -273,16 +273,16 @@ begin ToolBarOpts.Break := False; with ToolBarOpts.ButtonNames do begin - Add('IDEMainMenu/File/itmFileNew/itmFileNewForm'); - Add('IDEMainMenu/File/itmFileNew/itmFileNewUnit'); + Add('NewForm'); + Add('NewUnit'); Add(cIDEToolbarDivider); - Add('IDEMainMenu/File/itmFileOpenSave/itmFileOpen'); - Add('IDEMainMenu/File/itmFileOpenSave/itmFileSave'); - Add('IDEMainMenu/File/itmFileOpenSave/itmFileSaveAll'); + Add('Open'); + Add('Save'); + Add('SaveAll'); Add(cIDEToolbarDivider); - Add('IDEMainMenu/View/itmViewMainWindows/itmViewToggleFormUnit'); + Add('Toggle between Unit and Form'); Add(cIDEToolbarDivider); - Add('IDEMainMenu/Tools/itmSecondaryTools/itmToolManageDesktops'); + Add('Manage desktops'); end; FToolBars.Add(ToolBarOpts); @@ -292,16 +292,16 @@ begin ToolBarOpts.Break := True; with ToolBarOpts.ButtonNames do begin - Add('IDEMainMenu/Project/itmProjectAddRemoveSection/itmProjectViewUnits'); - Add('IDEMainMenu/Project/itmProjectAddRemoveSection/itmProjectViewForms'); + Add('View Units'); + Add('View Forms'); Add(cIDEToolbarDivider); - Add('IDEMainMenu/Project/itmProjectAddRemoveSection/itmProjectBuildMode'); - Add('IDEMainMenu/Run/itmRunnning/itmRunMenuRun'); - Add('IDEMainMenu/Run/itmRunnning/itmRunMenuPause'); - Add('IDEMainMenu/Run/itmRunnning/itmRunMenuStop'); - Add('IDEMainMenu/Run/itmRunnning/itmRunMenuStepOver'); - Add('IDEMainMenu/Run/itmRunnning/itmRunMenuStepInto'); - Add('IDEMainMenu/Run/itmRunnning/itmRunMenuStepOut'); + Add('Change build mode'); + Add('Run program'); + Add('Pause program'); + Add('Stop program'); + Add('Step over'); + Add('Step into'); + Add('Step out'); end; FToolBars.Add(ToolBarOpts); end; diff --git a/ide/keymapping.pp b/ide/keymapping.pp index ea3cdb4c73..77f9c239a2 100644 --- a/ide/keymapping.pp +++ b/ide/keymapping.pp @@ -218,6 +218,8 @@ function KeySchemeNameToSchemeType(const SchemeName: string): TKeyMapScheme; function ShiftStateToCfgStr(Shift: TShiftState): string; function KeyValuesToCfgStr(const ShortcutA, ShortcutB: TIDEShortCut): string; +function KeyValuesToCaptionStr(const ShortcutA, ShortcutB: TIDEShortCut; + Brackets: Char = '['): String; function CfgStrToShiftState(const s: string): TShiftState; function CompareLoadedKeyCommands(Data1, Data2: Pointer): integer; @@ -801,6 +803,35 @@ begin end; end; +function KeyValuesToCaptionStr(const ShortcutA, ShortcutB: TIDEShortCut; + Brackets: Char): String; + function AddBrakets(S: String): String; + begin + if Brackets = '[' then + Result := '[' + S + ']' + else if Brackets = '(' then + Result := '(' + S + ')' + else if Brackets > #0 then + Result := Brackets + S + Brackets + else + Result := S; + end; +begin + Result := ''; + if (ShortcutA.Key1 = VK_UNKNOWN) and (ShortcutB.Key1 = VK_UNKNOWN) then + Result := Result{ + lisNone2 } + else + if (ShortcutA.Key1 = VK_UNKNOWN) then + Result := Result + AddBrakets(KeyAndShiftStateToEditorKeyString(ShortcutB)) + else + if (ShortcutB.Key1 = VK_UNKNOWN) then + Result := Result + AddBrakets(KeyAndShiftStateToEditorKeyString(ShortcutA)) + else + Result := Result + AddBrakets(KeyAndShiftStateToEditorKeyString(ShortcutA)) + + ' '+lisOr+' ' + + AddBrakets(KeyAndShiftStateToEditorKeyString(ShortcutB)); +end; + function IDEShortCutEmpty(const Key: TIDEShortCut): boolean; begin Result:=(Key.Key1=VK_UNKNOWN) and (Key.Key2=VK_UNKNOWN); diff --git a/ide/main.pp b/ide/main.pp index e07199650c..877f1a3a47 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -322,7 +322,7 @@ type procedure mnuViewFormsClicked(Sender: TObject); procedure mnuViewProjectSourceClicked(Sender: TObject); procedure mnuProjectOptionsClicked(Sender: TObject); - procedure mnuBuildModeClicked(Sender: TObject); + procedure mnuBuildModeClicked(Sender: TObject); override; // run menu procedure mnuCompileProjectClicked(Sender: TObject); @@ -2698,7 +2698,6 @@ begin itmProjectViewUnits.OnClick := @mnuViewUnitsClicked; itmProjectViewForms.OnClick := @mnuViewFormsClicked; itmProjectViewSource.OnClick := @mnuViewProjectSourceClicked; - itmProjectBuildMode.OnClick := @mnuBuildModeClicked; end; end; @@ -3785,6 +3784,7 @@ procedure TMainIDE.UpdateProjectCommands(Sender: TObject); var ASrcEdit: TSourceEditor; AUnitInfo: TUnitInfo; + xCmd: TIDECommand; begin GetCurrentUnit(ASrcEdit,AUnitInfo); if not UpdateProjectCommandsStamp.Changed(AUnitInfo) then @@ -3792,6 +3792,15 @@ begin IDECommandList.FindIDECommand(ecAddCurUnitToProj).Enabled:=Assigned(AUnitInfo) and not AUnitInfo.IsPartOfProject; IDECommandList.FindIDECommand(ecBuildManyModes).Enabled:=(Project1<>nil) and (Project1.BuildModes.Count>1); + + xCmd := IDECommandList.FindIDECommand(ecProjectChangeBuildMode); + if Assigned(Project1) then + xCmd.Hint := + Trim(lisChangeBuildMode + ' ' + KeyValuesToCaptionStr(xCmd.ShortcutA, xCmd.ShortcutB, '(')) + sLineBreak + + Format('[%s]', [Project1.ActiveBuildMode.GetCaption]) + else + xCmd.Hint := + Trim(lisChangeBuildMode + ' ' + KeyValuesToCaptionStr(xCmd.ShortcutA, xCmd.ShortcutB, '(')); end; procedure TMainIDE.UpdatePackageCommands(Sender: TObject); @@ -7885,7 +7894,6 @@ begin end; MainIDEBar.Caption := NewCaption; Application.Title := NewTitle; - TSetBuildModeToolButton.UpdateHints; end; procedure TMainIDE.HideIDE; diff --git a/ide/mainbar.pas b/ide/mainbar.pas index 8e9276eca5..a88ff10b5f 100644 --- a/ide/mainbar.pas +++ b/ide/mainbar.pas @@ -274,7 +274,6 @@ type itmProjectViewUnits: TIDEMenuCommand; itmProjectViewForms: TIDEMenuCommand; itmProjectViewSource: TIDEMenuCommand; - itmProjectBuildMode: TIDEMenuCommand; // run menu //mnuRun: TIDEMenuSection; diff --git a/ide/mainbase.pas b/ide/mainbase.pas index 5b49fae043..e477b73f0a 100644 --- a/ide/mainbase.pas +++ b/ide/mainbase.pas @@ -126,6 +126,7 @@ type procedure mnuWindowItemClick(Sender: TObject); virtual; procedure mnuCenterWindowItemClick(Sender: TObject); virtual; procedure mnuWindowSourceItemClick(Sender: TObject); virtual; + procedure mnuBuildModeClicked(Sender: TObject); virtual; abstract; procedure UpdateWindowMenu; @@ -211,8 +212,6 @@ type procedure mnuSetBuildModeClick(Sender: TObject); public procedure DoOnAdded; override; - - class procedure UpdateHints; end; { TOpenFileToolButton } @@ -480,7 +479,6 @@ begin DropdownMenu := TPopupMenu.Create(Self); DropdownMenu.OnPopup := @RefreshMenu; Style := tbsDropDown; - UpdateHints; end; procedure TSetBuildModeToolButton.mnuSetBuildModeClick(Sender: TObject); @@ -543,16 +541,6 @@ begin aMenu.Items[aMenu.Items.Count - 1].Free; end; -class procedure TSetBuildModeToolButton.UpdateHints; -const - cActiveBuildMode = '[%s]'; -begin - if Assigned(Project1) then - MainIDEBar.itmProjectBuildMode.Hint := - lisChangeBuildMode + MainIDEBar.itmProjectBuildMode.GetShortcut + sLineBreak + - Format(cActiveBuildMode, [Project1.ActiveBuildMode.GetCaption]); -end; - { TJumpToSectionToolButton } procedure TJumpToSectionToolButton.DoOnAdded; @@ -1275,7 +1263,6 @@ begin CreateMenuItem(ParentMI,itmProjectViewUnits,'itmProjectViewUnits',lisMenuViewUnits, 'menu_view_units'); CreateMenuItem(ParentMI,itmProjectViewForms,'itmProjectViewForms',lisMenuViewForms, 'menu_view_forms'); CreateMenuItem(ParentMI,itmProjectViewSource,'itmProjectViewSource',lisMenuViewProjectSource, 'menu_project_viewsource'); - CreateMenuItem(ParentMI,itmProjectBuildMode,'itmProjectBuildMode',lisChangeBuildMode+' ...', 'menu_compiler_options'); end; end; @@ -1648,7 +1635,10 @@ begin itmProjectViewUnits.Command:=GetCommand(ecViewProjectUnits); itmProjectViewForms.Command:=GetCommand(ecViewProjectForms); itmProjectViewSource.Command:=GetCommand(ecViewProjectSource); - itmProjectBuildMode.Command:=GetCommand(ecProjectChangeBuildMode,TSetBuildModeToolButton); + GetCmdAndBtn(ecProjectChangeBuildMode, xBtnItem); + xBtnItem.ToolButtonClass:=TSetBuildModeToolButton; + xBtnItem.ImageIndex := IDEImages.LoadImage(16, 'menu_compiler_options'); + xBtnItem.OnClick := @mnuBuildModeClicked; // run menu itmRunMenuCompile.Command:=GetCommand(ecCompile); diff --git a/ide/sourcefilemanager.pas b/ide/sourcefilemanager.pas index 7d2955dc35..669eaff09b 100644 --- a/ide/sourcefilemanager.pas +++ b/ide/sourcefilemanager.pas @@ -69,6 +69,8 @@ type private FUnitInfo: TUnitInfo; FProjectChangeStamp: Int64; + FCompilerParseStamp: integer; + FBuildMacroChangeStamp: integer; public function Changed(AUnitInfo: TUnitInfo): Boolean; end; @@ -477,12 +479,16 @@ begin Result := not( (FUnitInfo = AUnitInfo) and (FProjectChangeStamp = CurProjectChangeStamp) + and (FCompilerParseStamp = CompilerParseStamp) + and (FBuildMacroChangeStamp = BuildMacroChangeStamp) ); if not Result then Exit; FUnitInfo := AUnitInfo; FProjectChangeStamp := CurProjectChangeStamp; + FCompilerParseStamp := CompilerParseStamp; + FBuildMacroChangeStamp := BuildMacroChangeStamp; end; { TPackageCommandsStamp }