diff --git a/ide/editormacrolistviewer.pas b/ide/editormacrolistviewer.pas index a13aa16a04..309af90430 100644 --- a/ide/editormacrolistviewer.pas +++ b/ide/editormacrolistviewer.pas @@ -18,7 +18,7 @@ uses LazIDEIntf, IDEDialogs, // IDE LazarusIDEStrConsts, ProjectDefs, LazConf, Project, KeyMapping, - KeyMapShortCutDlg, MainIntf; + KeyMapShortCutDlg, MainIntf, ToolBarIntf; type TSynEditorMacro = class(TSynMacroRecorder) @@ -245,6 +245,19 @@ type procedure UpdateDisplay; end; + { TMacrosToolButton } + + TMacrosToolButton = class(TIDEToolButton) + private + procedure AddList(AList: TEditorMacroList); + procedure AddMenuItem(AMacro: TEditorMacro); + procedure RefreshMenu(Sender: TObject); + procedure mnuPlayMacro(Sender: TObject); + public + procedure DoOnAdded; override; + end; + + function MacroListViewer: TMacroListView; procedure ShowMacroListViewer; procedure UpdateMacroListViewer; @@ -1642,6 +1655,60 @@ end; // itmMacroListView.enabled +{ TMacrosToolButton } + +procedure TMacrosToolButton.DoOnAdded; +begin + inherited DoOnAdded; + DropdownMenu := TPopupMenu.Create(Self); + DropdownMenu.OnPopup := @RefreshMenu; + Style := tbsDropDown; +end; + +procedure TMacrosToolButton.mnuPlayMacro(Sender: TObject); +var + M: TEditorMacro; + se: TSourceEditorInterface; +begin + se := SourceEditorManagerIntf.ActiveEditor; + if se = nil then + Exit; + M := TEditorMacro(TMenuItem(Sender).Tag); + M.PlaybackMacro(TCustomSynEdit(se.EditorControl)); +end; + +procedure TMacrosToolButton.AddMenuItem(AMacro: TEditorMacro); +var + MI: TMenuItem; +begin + MI := TMenuItem.Create(DropdownMenu); + DropdownMenu.Items.Add(MI); + MI.OnClick := @mnuPlayMacro; + MI.Caption := AMacro.MacroName+' '+AMacro.KeyBinding.ShortCutAsText; + MI.Tag := PtrInt(AMacro); +end; + +procedure TMacrosToolButton.AddList(AList: TEditorMacroList); +var + i: integer; +begin + if AList.Count = 0 then + Exit; + if DropdownMenu.Items.Count > 0 then + DropdownMenu.Items.AddSeparator; + for i := 0 to Pred(AList.Count) do + AddMenuItem(AList.Macros[i]); +end; + +procedure TMacrosToolButton.RefreshMenu(Sender: TObject); +begin + DropdownMenu.Items.Clear; + AddList(EditorMacroListGlob); + AddList(EditorMacroListProj); + AddList(EditorMacroListRec); +end; + + {$R *.lfm} initialization diff --git a/ide/main.pp b/ide/main.pp index 66b90e3954..b3c6be9d4c 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -2934,7 +2934,7 @@ begin itmViewCodeBrowser.Command:=GetIdeCmdRegToolBtn(ecToggleCodeBrowser); itmViewRestrictionBrowser.Command:=GetIdeCmdRegToolBtn(ecToggleRestrictionBrowser); itmViewComponents.Command:=GetIdeCmdRegToolBtn(ecViewComponents); - itmMacroListView.Command:=GetIdeCmdRegToolBtn(ecViewMacroList); + itmMacroListView.Command:=GetCommand(ecViewMacroList,nil,TMacrosToolButton); itmJumpHistory.Command:=GetIdeCmdRegToolBtn(ecViewJumpHistory); itmViewMessage.Command:=GetIdeCmdRegToolBtn(ecToggleMessages); itmViewSearchResults.Command:=GetIdeCmdRegToolBtn(ecToggleSearchResults);