mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-28 19:02:31 +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,
|
LazIDEIntf, IDEDialogs,
|
||||||
// IDE
|
// IDE
|
||||||
LazarusIDEStrConsts, ProjectDefs, LazConf, Project, KeyMapping,
|
LazarusIDEStrConsts, ProjectDefs, LazConf, Project, KeyMapping,
|
||||||
KeyMapShortCutDlg, MainIntf;
|
KeyMapShortCutDlg, MainIntf, ToolBarIntf;
|
||||||
|
|
||||||
type
|
type
|
||||||
TSynEditorMacro = class(TSynMacroRecorder)
|
TSynEditorMacro = class(TSynMacroRecorder)
|
||||||
@ -245,6 +245,19 @@ type
|
|||||||
procedure UpdateDisplay;
|
procedure UpdateDisplay;
|
||||||
end;
|
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;
|
function MacroListViewer: TMacroListView;
|
||||||
procedure ShowMacroListViewer;
|
procedure ShowMacroListViewer;
|
||||||
procedure UpdateMacroListViewer;
|
procedure UpdateMacroListViewer;
|
||||||
@ -1642,6 +1655,60 @@ end;
|
|||||||
|
|
||||||
// itmMacroListView.enabled
|
// 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}
|
{$R *.lfm}
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
|
@ -2934,7 +2934,7 @@ begin
|
|||||||
itmViewCodeBrowser.Command:=GetIdeCmdRegToolBtn(ecToggleCodeBrowser);
|
itmViewCodeBrowser.Command:=GetIdeCmdRegToolBtn(ecToggleCodeBrowser);
|
||||||
itmViewRestrictionBrowser.Command:=GetIdeCmdRegToolBtn(ecToggleRestrictionBrowser);
|
itmViewRestrictionBrowser.Command:=GetIdeCmdRegToolBtn(ecToggleRestrictionBrowser);
|
||||||
itmViewComponents.Command:=GetIdeCmdRegToolBtn(ecViewComponents);
|
itmViewComponents.Command:=GetIdeCmdRegToolBtn(ecViewComponents);
|
||||||
itmMacroListView.Command:=GetIdeCmdRegToolBtn(ecViewMacroList);
|
itmMacroListView.Command:=GetCommand(ecViewMacroList,nil,TMacrosToolButton);
|
||||||
itmJumpHistory.Command:=GetIdeCmdRegToolBtn(ecViewJumpHistory);
|
itmJumpHistory.Command:=GetIdeCmdRegToolBtn(ecViewJumpHistory);
|
||||||
itmViewMessage.Command:=GetIdeCmdRegToolBtn(ecToggleMessages);
|
itmViewMessage.Command:=GetIdeCmdRegToolBtn(ecToggleMessages);
|
||||||
itmViewSearchResults.Command:=GetIdeCmdRegToolBtn(ecToggleSearchResults);
|
itmViewSearchResults.Command:=GetIdeCmdRegToolBtn(ecToggleSearchResults);
|
||||||
|
Loading…
Reference in New Issue
Block a user