IDE: Add a drop-down list with all macros to the "Macros..." toolbar button. Issue #38879, patch by DomingoGP.

This commit is contained in:
Juha 2022-03-05 11:52:10 +02:00
parent 71a560a97f
commit 7485ac827a
2 changed files with 69 additions and 2 deletions

View File

@ -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

View File

@ -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);