mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-10 01:28:16 +02:00
IDE: Add a drop-down list with all macros to the "Macros..." toolbar button. Issue #38879, patch by DomingoGP.
This commit is contained in:
parent
71a560a97f
commit
7485ac827a
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user