IDE: Turn MacroListViewer into a proper IDE window. Prevent crash when switching to a project with less macros.

This commit is contained in:
Juha 2023-05-17 11:38:15 +03:00
parent 49aae25741
commit 6a69340a83
6 changed files with 109 additions and 120 deletions

View File

@ -412,9 +412,10 @@ type
FOnChange: TNotifyEvent; FOnChange: TNotifyEvent;
FOnStateChange: TNotifyEvent; FOnStateChange: TNotifyEvent;
procedure SetMacroNameFull(AValue: String); procedure SetMacroNameFull(AValue: String);
procedure SetOnChange(AValue: TNotifyEvent);
protected protected
procedure DoChanged; procedure DoChanged;
procedure DoStateChanged; procedure DoStateChanged;
// (Un)setActivated: Must be called, whenever the state changes // (Un)setActivated: Must be called, whenever the state changes
procedure SetActivated; procedure SetActivated;
@ -704,6 +705,12 @@ begin
KeyBinding.MacroNameChanged; KeyBinding.MacroNameChanged;
end; end;
procedure TEditorMacro.SetOnChange(AValue: TNotifyEvent);
begin
if FOnChange=AValue then Exit;
FOnChange:=AValue;
end;
function TEditorMacro.GetErrorMsg: String; function TEditorMacro.GetErrorMsg: String;
begin begin
Result := ''; Result := '';

View File

@ -1,9 +1,9 @@
object MacroListView: TMacroListView object MacroListViewer: TMacroListViewer
Left = 390 Left = 390
Height = 609 Height = 609
Top = 249 Top = 249
Width = 569 Width = 569
Caption = 'MacroListView' Caption = 'MacroListViewer'
ClientHeight = 609 ClientHeight = 609
ClientWidth = 569 ClientWidth = 569
Constraints.MinHeight = 562 Constraints.MinHeight = 562

View File

@ -189,9 +189,9 @@ type
property OnRemove: TMacroAddedEvent read FOnRemove write FOnRemove; property OnRemove: TMacroAddedEvent read FOnRemove write FOnRemove;
end; end;
{ TMacroListView } { TMacroListViewer }
TMacroListView = class(TForm) TMacroListViewer = class(TForm)
btnDelete: TBitBtn; btnDelete: TBitBtn;
btnEdit: TBitBtn; btnEdit: TBitBtn;
btnPlay: TBitBtn; btnPlay: TBitBtn;
@ -260,11 +260,8 @@ type
procedure DoMacroContentChanged(Sender: TObject); procedure DoMacroContentChanged(Sender: TObject);
procedure DoMacroStateChanged(Sender: TObject); procedure DoMacroStateChanged(Sender: TObject);
procedure UpdateButtons; procedure UpdateButtons;
protected
procedure DoEditorMacroStateChanged;
public public
constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
function MacroByFullName(AName: String): TEditorMacro; function MacroByFullName(AName: String): TEditorMacro;
procedure UpdateDisplay; procedure UpdateDisplay;
end; end;
@ -281,18 +278,8 @@ type
procedure DoOnAdded; override; procedure DoOnAdded; override;
end; end;
function MacroListViewer: TMacroListView;
procedure ShowMacroListViewer;
procedure UpdateMacroListViewer;
procedure DoEditorMacroStateChanged;
procedure LoadProjectSpecificInfo(XMLConfig: TXMLConfig);
procedure SaveProjectSpecificInfo(XMLConfig: TXMLConfig; Flags: TProjectWriteFlags);
procedure LoadGlobalInfo;
procedure SaveGlobalInfo;
var var
MacroListViewer: TMacroListViewer = nil;
OnKeyMapReloaded: procedure of object; OnKeyMapReloaded: procedure of object;
OnEditorMacroStateChange: TNotifyEvent; OnEditorMacroStateChange: TNotifyEvent;
// SelectedEditorMacro: Selected, for playing with default shortcut // SelectedEditorMacro: Selected, for playing with default shortcut
@ -301,11 +288,20 @@ var
const const
EditorMacroVirtualDrive = '%Macro:|'; // do not use \ or /, they can be converted by the IDE EditorMacroVirtualDrive = '%Macro:|'; // do not use \ or /, they can be converted by the IDE
procedure ShowMacroListViewer(State: TIWGetFormState = iwgfShowOnTop);
procedure DoEditorMacroStateChanged;
procedure LoadProjectSpecificInfo(XMLConfig: TXMLConfig);
procedure SaveProjectSpecificInfo(XMLConfig: TXMLConfig; Flags: TProjectWriteFlags);
procedure LoadGlobalInfo;
procedure SaveGlobalInfo;
implementation implementation
var {$R *.lfm}
MacroListView: TMacroListView = nil;
var
CurrentEditorMacroList: TEditorMacroList = nil; CurrentEditorMacroList: TEditorMacroList = nil;
EditorMacroListRec, EditorMacroListProj, EditorMacroListGlob: TEditorMacroList; EditorMacroListRec, EditorMacroListProj, EditorMacroListGlob: TEditorMacroList;
@ -319,30 +315,22 @@ var
const const
GlobalConfFileName = 'EditorMacros.xml'; GlobalConfFileName = 'EditorMacros.xml';
procedure ShowMacroListViewer(State: TIWGetFormState);
begin
if MacroListViewer = Nil then
IDEWindowCreators.CreateForm(MacroListViewer,TMacroListViewer,
State=iwgfDisabled,LazarusIDE.OwningComponent)
else if State=iwgfDisabled then
MacroListViewer.DisableAlign;
if State>=iwgfShow then
IDEWindowCreators.ShowForm(MacroListViewer,State=iwgfShowOnTop);
end;
procedure DoMacroListViewerWarningChanged({%H-}Sender: TObject); procedure DoMacroListViewerWarningChanged({%H-}Sender: TObject);
begin begin
if MacroListView = nil then exit; if MacroListViewer = nil then exit;
MacroListView.LabelWarning.Caption := MacroListViewerWarningText; MacroListViewer.LabelWarning.Caption := MacroListViewerWarningText;
MacroListView.PanelWarnings.Visible := MacroListViewerWarningText <> ''; MacroListViewer.PanelWarnings.Visible := MacroListViewerWarningText <> '';
end;
function MacroListViewer: TMacroListView;
begin
if MacroListView = nil then
MacroListView := TMacroListView.Create(Application);
Result := MacroListView;
DoMacroListViewerWarningChanged(nil);
end;
procedure ShowMacroListViewer;
begin
IDEWindowCreators.ShowForm(MacroListViewer, True);
end;
procedure UpdateMacroListViewer;
begin
if MacroListView <> nil then
MacroListView.UpdateDisplay;
end; end;
function MacroListToName(AList: TEditorMacroList): string; function MacroListToName(AList: TEditorMacroList): string;
@ -381,35 +369,35 @@ begin
if (EditorMacroForRecording.State = emRecording) and (CurrentRecordingMacro = nil) then begin if (EditorMacroForRecording.State = emRecording) and (CurrentRecordingMacro = nil) then begin
CurrentRecordingMacro := EditorMacroPlayerClass.Create(nil); CurrentRecordingMacro := EditorMacroPlayerClass.Create(nil);
CurrentRecordingMacro.OnStateChange := @MacroListViewer.DoMacroStateChanged;
CurrentRecordingMacro.OnChange := @MacroListViewer.DoMacroContentChanged; CurrentRecordingMacro.OnChange := @MacroListViewer.DoMacroContentChanged;
CurrentRecordingMacro.OnStateChange := @MacroListViewer.DoMacroStateChanged;
CurrentRecordingMacro.MacroName := Format(lisNewMacroName, [MacroRecCounter]); CurrentRecordingMacro.MacroName := Format(lisNewMacroName, [MacroRecCounter]);
inc(MacroRecCounter); inc(MacroRecCounter);
EditorMacroListRec.Add(CurrentRecordingMacro); EditorMacroListRec.Add(CurrentRecordingMacro);
end; end;
if MacroListView <> nil then if MacroListViewer <> nil then
MacroListView.DoEditorMacroStateChanged; MacroListViewer.UpdateDisplay;
end; end;
procedure LoadProjectSpecificInfo(XMLConfig: TXMLConfig); procedure LoadProjectSpecificInfo(XMLConfig: TXMLConfig);
begin begin
if MacroListView<>nil then if MacroListViewer<>nil then
MacroListView.FIgnoreMacroChanges := True; MacroListViewer.FIgnoreMacroChanges := True;
try try
EditorMacroListProj.ReadFromXmlConf(XMLConfig, ''); EditorMacroListProj.ReadFromXmlConf(XMLConfig, '');
finally finally
if MacroListView<>nil then if MacroListViewer<>nil then begin
MacroListView.FIgnoreMacroChanges := False; MacroListViewer.FIgnoreMacroChanges := False;
MacroListViewer.UpdateDisplay;
end;
end; end;
end; end;
procedure SaveProjectSpecificInfo(XMLConfig: TXMLConfig; Flags: TProjectWriteFlags); procedure SaveProjectSpecificInfo(XMLConfig: TXMLConfig; Flags: TProjectWriteFlags);
begin begin
if not (pwfSkipSeparateSessionInfo in Flags) then if not (pwfSkipSeparateSessionInfo in Flags) then
begin
EditorMacroListProj.WriteToXmlConf(XMLConfig, ''); EditorMacroListProj.WriteToXmlConf(XMLConfig, '');
end;
end; end;
procedure LoadGlobalInfo; procedure LoadGlobalInfo;
@ -417,8 +405,8 @@ var
Filename: String; Filename: String;
XMLConfig: TXMLConfig; XMLConfig: TXMLConfig;
begin begin
if MacroListView<>nil then if MacroListViewer<>nil then
MacroListView.FIgnoreMacroChanges := True; MacroListViewer.FIgnoreMacroChanges := True;
Filename := TrimFilename(AppendPathDelim(GetPrimaryConfigPath)+GlobalConfFileName); Filename := TrimFilename(AppendPathDelim(GetPrimaryConfigPath)+GlobalConfFileName);
try try
XMLConfig := TXMLConfig.Create(Filename); XMLConfig := TXMLConfig.Create(Filename);
@ -432,8 +420,8 @@ begin
DebugLn('[EditorMacroListViewer.LoadGlobalInfo] error reading "',Filename,'": ',E.Message); DebugLn('[EditorMacroListViewer.LoadGlobalInfo] error reading "',Filename,'": ',E.Message);
end; end;
end; end;
if MacroListView<>nil then if MacroListViewer<>nil then
MacroListView.FIgnoreMacroChanges := False; MacroListViewer.FIgnoreMacroChanges := False;
end; end;
procedure SaveGlobalInfo; procedure SaveGlobalInfo;
@ -499,7 +487,6 @@ begin
end end
else else
FIdeCmd.LocalizedName := FOwner.MacroName; FIdeCmd.LocalizedName := FOwner.MacroName;
end; end;
destructor TIdeEditorMacroKeyBinding.Destroy; destructor TIdeEditorMacroKeyBinding.Destroy;
@ -512,6 +499,7 @@ begin
end; end;
procedure TIdeEditorMacroKeyBinding.WriteToXmlConf(AConf: TXMLConfig; const APath: String); procedure TIdeEditorMacroKeyBinding.WriteToXmlConf(AConf: TXMLConfig; const APath: String);
procedure ClearKey(const SubPath: string); procedure ClearKey(const SubPath: string);
begin begin
AConf.DeleteValue(SubPath+'Key1'); AConf.DeleteValue(SubPath+'Key1');
@ -519,6 +507,7 @@ procedure TIdeEditorMacroKeyBinding.WriteToXmlConf(AConf: TXMLConfig; const APat
AConf.DeleteValue(SubPath+'Key2'); AConf.DeleteValue(SubPath+'Key2');
AConf.DeleteValue(SubPath+'Shift2'); AConf.DeleteValue(SubPath+'Shift2');
end; end;
procedure Store(const SubPath: string; Key: TIDEShortCut); procedure Store(const SubPath: string; Key: TIDEShortCut);
var var
s: TShiftState; s: TShiftState;
@ -548,6 +537,7 @@ begin
end; end;
procedure TIdeEditorMacroKeyBinding.ReadFromXmlConf(AConf: TXMLConfig; const APath: String); procedure TIdeEditorMacroKeyBinding.ReadFromXmlConf(AConf: TXMLConfig; const APath: String);
procedure Load(SubPath: string; out Key: TIDEShortCut); procedure Load(SubPath: string; out Key: TIDEShortCut);
begin begin
key.Key1 := AConf.GetValue(SubPath+'Key1',VK_UNKNOWN); key.Key1 := AConf.GetValue(SubPath+'Key1',VK_UNKNOWN);
@ -555,6 +545,7 @@ procedure TIdeEditorMacroKeyBinding.ReadFromXmlConf(AConf: TXMLConfig; const APa
key.Key2 := AConf.GetValue(SubPath+'Key2',VK_UNKNOWN); key.Key2 := AConf.GetValue(SubPath+'Key2',VK_UNKNOWN);
key.Shift2 := CfgStrToShiftState(AConf.GetValue(SubPath+'Shift2','')); key.Shift2 := CfgStrToShiftState(AConf.GetValue(SubPath+'Shift2',''));
end; end;
var var
SCut: TIDEShortCut; SCut: TIDEShortCut;
begin begin
@ -1102,9 +1093,9 @@ begin
FParams := FParams + IntToStr(AParam); FParams := FParams + IntToStr(AParam);
end; end;
{ TMacroListView } { TMacroListViewer }
procedure TMacroListView.btnRenameClick(Sender: TObject); procedure TMacroListViewer.btnRenameClick(Sender: TObject);
var var
s: String; s: String;
M: TEditorMacro; M: TEditorMacro;
@ -1124,14 +1115,13 @@ begin
s := ''; s := '';
end; end;
end; end;
if s <> '' then if s <> '' then
M.MacroName := s; M.MacroName := s;
UpdateDisplay; UpdateDisplay;
end; end;
end; end;
procedure TMacroListView.btnPlayClick(Sender: TObject); procedure TMacroListViewer.btnPlayClick(Sender: TObject);
var var
i: Integer; i: Integer;
M: TEditorMacro; M: TEditorMacro;
@ -1163,7 +1153,7 @@ begin
end; end;
procedure TMacroListView.btnDeleteClick(Sender: TObject); procedure TMacroListViewer.btnDeleteClick(Sender: TObject);
var var
m: TEditorMacro; m: TEditorMacro;
begin begin
@ -1182,7 +1172,7 @@ begin
end; end;
end; end;
procedure TMacroListView.btnEditClick(Sender: TObject); procedure TMacroListViewer.btnEditClick(Sender: TObject);
var var
M: TEditorMacro; M: TEditorMacro;
begin begin
@ -1194,7 +1184,7 @@ begin
-1, -1, [ofVirtualFile, ofInternalFile]); -1, -1, [ofVirtualFile, ofInternalFile]);
end; end;
procedure TMacroListView.btnRecordClick(Sender: TObject); procedure TMacroListViewer.btnRecordClick(Sender: TObject);
var var
se: TSourceEditorInterface; se: TSourceEditorInterface;
begin begin
@ -1217,21 +1207,21 @@ begin
se.EditorControl.SetFocus; se.EditorControl.SetFocus;
end; end;
procedure TMacroListView.btnRecordStopClick(Sender: TObject); procedure TMacroListViewer.btnRecordStopClick(Sender: TObject);
begin begin
FIsPlaying := False; FIsPlaying := False;
EditorMacroForRecording.Stop; EditorMacroForRecording.Stop;
UpdateButtons; UpdateButtons;
end; end;
procedure TMacroListView.btnAddEditNewClick(Sender: TObject); procedure TMacroListViewer.btnAddEditNewClick(Sender: TObject);
var var
se: TSourceEditorInterface; se: TSourceEditorInterface;
M: TEditorMacro; M: TEditorMacro;
begin begin
se := SourceEditorManagerIntf.ActiveEditor; se := SourceEditorManagerIntf.ActiveEditor;
Assert(Assigned(se) and (ActiveEditorMacro=nil) and (EditorMacroForRecording.State=emStopped), Assert(Assigned(se) and (ActiveEditorMacro=nil) and (EditorMacroForRecording.State=emStopped),
'TMacroListView.btnAddEditNewClick: Problem'); 'TMacroListViewer.btnAddEditNewClick: Problem');
lbMacroView.ItemIndex := -1; lbMacroView.ItemIndex := -1;
M := TIdeEditorMacro.Create(nil); M := TIdeEditorMacro.Create(nil);
M.OnStateChange := @MacroListViewer.DoMacroStateChanged; M.OnStateChange := @MacroListViewer.DoMacroStateChanged;
@ -1239,7 +1229,7 @@ begin
M.MacroName := Format(lisNewMacroName, [MacroRecCounter]); M.MacroName := Format(lisNewMacroName, [MacroRecCounter]);
inc(MacroRecCounter); inc(MacroRecCounter);
CurrentEditorMacroList.Add(M); CurrentEditorMacroList.Add(M);
Assert(not FIsPlaying, 'TMacroListView.btnAddEditNewClick: IsPlaying'); Assert(not FIsPlaying, 'TMacroListViewer.btnAddEditNewClick: IsPlaying');
LazarusIDE.DoOpenEditorFile( LazarusIDE.DoOpenEditorFile(
EditorMacroVirtualDrive+MacroListToName(CurrentEditorMacroList)+'|'+M.MacroName, EditorMacroVirtualDrive+MacroListToName(CurrentEditorMacroList)+'|'+M.MacroName,
-1, -1, [ofVirtualFile, ofInternalFile]); -1, -1, [ofVirtualFile, ofInternalFile]);
@ -1247,7 +1237,7 @@ begin
UpdateDisplay; UpdateDisplay;
end; end;
procedure TMacroListView.btnSelectClick(Sender: TObject); procedure TMacroListViewer.btnSelectClick(Sender: TObject);
begin begin
if ActiveEditorMacro <> nil then exit; if ActiveEditorMacro <> nil then exit;
if lbMacroView.ItemIndex >= 0 then if lbMacroView.ItemIndex >= 0 then
@ -1257,7 +1247,7 @@ begin
UpdateDisplay; UpdateDisplay;
end; end;
procedure TMacroListView.btnSetKeysClick(Sender: TObject); procedure TMacroListViewer.btnSetKeysClick(Sender: TObject);
var var
i: integer; i: integer;
M: TEditorMacro; M: TEditorMacro;
@ -1280,36 +1270,36 @@ begin
if OnKeyMapReloaded <> nil then OnKeyMapReloaded(); if OnKeyMapReloaded <> nil then OnKeyMapReloaded();
end; end;
procedure TMacroListView.BtnWarnCloseClick(Sender: TObject); procedure TMacroListViewer.BtnWarnCloseClick(Sender: TObject);
begin begin
PanelWarnings.Visible := False; PanelWarnings.Visible := False;
end; end;
procedure TMacroListView.DoMacroStateChanged(Sender: TObject); procedure TMacroListViewer.DoMacroStateChanged(Sender: TObject);
begin begin
if OnEditorMacroStateChange <> nil then if OnEditorMacroStateChange <> nil then
OnEditorMacroStateChange(Sender); OnEditorMacroStateChange(Sender);
end; end;
procedure TMacroListView.FormActivate(Sender: TObject); procedure TMacroListViewer.FormActivate(Sender: TObject);
begin begin
DebugLn(['TMacroListView.FormActivate: Active=', Active]); DebugLn(['TMacroListViewer.FormActivate: Active=', Active]);
lbMacroView.HideSelection := Active; // Active = False always ? lbMacroView.HideSelection := Active; // Active = False always ?
UpdateButtons; UpdateButtons;
end; end;
procedure TMacroListView.HelpButtonClick(Sender: TObject); procedure TMacroListViewer.HelpButtonClick(Sender: TObject);
begin begin
LazarusHelp.ShowHelpForIDEControl(Self); LazarusHelp.ShowHelpForIDEControl(Self);
end; end;
procedure TMacroListView.lbMacroViewSelectItem(Sender: TObject; Item: TListItem; procedure TMacroListViewer.lbMacroViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean); Selected: Boolean);
begin begin
UpdateButtons; UpdateButtons;
end; end;
procedure TMacroListView.mnExportClick(Sender: TObject); procedure TMacroListViewer.mnExportClick(Sender: TObject);
var var
Conf: TXMLConfig; Conf: TXMLConfig;
begin begin
@ -1327,7 +1317,7 @@ begin
end; end;
end; end;
procedure TMacroListView.mnImportClick(Sender: TObject); procedure TMacroListViewer.mnImportClick(Sender: TObject);
var var
Conf: TXMLConfig; Conf: TXMLConfig;
NewMacro: TEditorMacro; NewMacro: TEditorMacro;
@ -1336,8 +1326,8 @@ begin
Conf := TXMLConfig.Create(OpenDialog1.FileName); Conf := TXMLConfig.Create(OpenDialog1.FileName);
try try
NewMacro := EditorMacroPlayerClass.Create(nil); NewMacro := EditorMacroPlayerClass.Create(nil);
NewMacro.OnStateChange := @DoMacroStateChanged; NewMacro.OnStateChange := @MacroListViewer.DoMacroStateChanged;
NewMacro.OnChange := @DoMacroContentChanged; NewMacro.OnChange := @MacroListViewer.DoMacroContentChanged;
NewMacro.ReadFromXmlConf(Conf, 'EditorMacros/Macro1/'); NewMacro.ReadFromXmlConf(Conf, 'EditorMacros/Macro1/');
if not NewMacro.IsEmpty then begin if not NewMacro.IsEmpty then begin
CurrentEditorMacroList.Add(NewMacro); CurrentEditorMacroList.Add(NewMacro);
@ -1352,13 +1342,13 @@ begin
end; end;
end; end;
procedure TMacroListView.tbIDEClick(Sender: TObject); procedure TMacroListViewer.tbIDEClick(Sender: TObject);
begin begin
CurrentEditorMacroList := EditorMacroListGlob; CurrentEditorMacroList := EditorMacroListGlob;
UpdateDisplay; UpdateDisplay;
end; end;
procedure TMacroListView.tbMoveIDEClick(Sender: TObject); procedure TMacroListViewer.tbMoveIDEClick(Sender: TObject);
var var
i: Integer; i: Integer;
begin begin
@ -1371,7 +1361,7 @@ begin
UpdateDisplay; UpdateDisplay;
end; end;
procedure TMacroListView.tbMoveProjectClick(Sender: TObject); procedure TMacroListViewer.tbMoveProjectClick(Sender: TObject);
var var
i: Integer; i: Integer;
begin begin
@ -1384,28 +1374,28 @@ begin
UpdateDisplay; UpdateDisplay;
end; end;
procedure TMacroListView.tbProjectClick(Sender: TObject); procedure TMacroListViewer.tbProjectClick(Sender: TObject);
begin begin
CurrentEditorMacroList := EditorMacroListProj; CurrentEditorMacroList := EditorMacroListProj;
UpdateDisplay; UpdateDisplay;
end; end;
procedure TMacroListView.tbRecordedClick(Sender: TObject); procedure TMacroListViewer.tbRecordedClick(Sender: TObject);
begin begin
CurrentEditorMacroList := EditorMacroListRec; CurrentEditorMacroList := EditorMacroListRec;
UpdateDisplay; UpdateDisplay;
end; end;
procedure TMacroListView.DoOnMacroListChange(Sender: TObject); procedure TMacroListViewer.DoOnMacroListChange(Sender: TObject);
begin begin
UpdateDisplay; UpdateDisplay;
if Sender = EditorMacroListProj then if Sender = EditorMacroListProj then
Project1.SessionModified := True; Project1.SessionModified := True;
end; end;
procedure TMacroListView.DoMacroContentChanged(Sender: TObject); procedure TMacroListViewer.DoMacroContentChanged(Sender: TObject);
begin begin
if FIgnoreMacroChanges then exit; if Assigned(Self) and Self.FIgnoreMacroChanges then exit;
if EditorMacroListProj.IndexOf(Sender as TEditorMacro) >= 0 then if EditorMacroListProj.IndexOf(Sender as TEditorMacro) >= 0 then
Project1.Modified := True; Project1.Modified := True;
@ -1413,7 +1403,7 @@ begin
MainIDEInterface.SaveEnvironment(False); MainIDEInterface.SaveEnvironment(False);
end; end;
procedure TMacroListView.UpdateDisplay; procedure TMacroListViewer.UpdateDisplay;
var var
NewItem: TListItem; NewItem: TListItem;
i, idx: Integer; i, idx: Integer;
@ -1455,7 +1445,7 @@ begin
UpdateButtons; UpdateButtons;
end; end;
procedure TMacroListView.UpdateButtons; procedure TMacroListViewer.UpdateButtons;
var var
IsSel, IsErr, IsStopped: Boolean; IsSel, IsErr, IsStopped: Boolean;
M: TEditorMacro; M: TEditorMacro;
@ -1513,7 +1503,7 @@ begin
Update; Update;
end; end;
function TMacroListView.MacroByFullName(AName: String): TEditorMacro; function TMacroListViewer.MacroByFullName(AName: String): TEditorMacro;
const const
FolderStart = length(EditorMacroVirtualDrive)+1; FolderStart = length(EditorMacroVirtualDrive)+1;
NameStart = FolderStart+length('PRJ|'); NameStart = FolderStart+length('PRJ|');
@ -1532,12 +1522,7 @@ begin
Result := Alist.Macros[i]; Result := Alist.Macros[i];
end; end;
procedure TMacroListView.DoEditorMacroStateChanged; constructor TMacroListViewer.Create(TheOwner: TComponent);
begin
UpdateDisplay;
end;
constructor TMacroListView.Create(TheOwner: TComponent);
begin begin
inherited Create(TheOwner); inherited Create(TheOwner);
FIgnoreMacroChanges := False; FIgnoreMacroChanges := False;
@ -1617,11 +1602,6 @@ begin
mnExport.Caption := lisDlgExport; mnExport.Caption := lisDlgExport;
end; end;
destructor TMacroListView.Destroy;
begin
inherited Destroy;
end;
{ TEditorMacroList } { TEditorMacroList }
function TEditorMacroList.GetMacros(Index: Integer): TEditorMacro; function TEditorMacroList.GetMacros(Index: Integer): TEditorMacro;
@ -1806,8 +1786,6 @@ begin
end; end;
{$R *.lfm}
initialization initialization
if EditorMacroPlayerClass = nil then if EditorMacroPlayerClass = nil then
EditorMacroPlayerClass := TIdeEditorMacro; EditorMacroPlayerClass := TIdeEditorMacro;

View File

@ -628,7 +628,7 @@
<Unit> <Unit>
<Filename Value="editormacrolistviewer.pas"/> <Filename Value="editormacrolistviewer.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<ComponentName Value="MacroListView"/> <ComponentName Value="MacroListViewer"/>
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="EditorMacroListViewer"/> <UnitName Value="EditorMacroListViewer"/>

View File

@ -5162,7 +5162,8 @@ begin
UpdateHighlighters(True); UpdateHighlighters(True);
SourceEditorManager.ReloadEditorOptions; SourceEditorManager.ReloadEditorOptions;
ReloadMenuShortCuts; ReloadMenuShortCuts;
UpdateMacroListViewer; if MacroListViewer <> nil then
MacroListViewer.UpdateDisplay;
finally finally
SourceEditorManager.EndGlobalUpdate; SourceEditorManager.EndGlobalUpdate;
end; end;
@ -5699,11 +5700,9 @@ end;
procedure TMainIDE.OnLoadProjectInfoFromXMLConfig(TheProject: TProject; procedure TMainIDE.OnLoadProjectInfoFromXMLConfig(TheProject: TProject;
XMLConfig: TXMLConfig; Merge: boolean); XMLConfig: TXMLConfig; Merge: boolean);
begin begin
if TheProject=Project1 then if TheProject<>Project1 then exit;
DebugBossMgr.LoadProjectSpecificInfo(XMLConfig,Merge); DebugBossMgr.LoadProjectSpecificInfo(XMLConfig,Merge);
EditorMacroListViewer.LoadProjectSpecificInfo(XMLConfig);
if (TheProject=Project1) then
EditorMacroListViewer.LoadProjectSpecificInfo(XMLConfig);
end; end;
procedure TMainIDE.OnLoadSaveCustomData(Sender: TObject; Load: boolean; procedure TMainIDE.OnLoadSaveCustomData(Sender: TObject; Load: boolean;
@ -5714,19 +5713,17 @@ var
begin begin
Handler:=FLazarusIDEHandlers[lihtLoadSafeCustomData]; Handler:=FLazarusIDEHandlers[lihtLoadSafeCustomData];
i := Handler.Count; i := Handler.Count;
while Handler.NextDownIndex(i) do begin while Handler.NextDownIndex(i) do
TLazLoadSaveCustomDataEvent(Handler[i])(Sender,Load,Data,PathDelimChanged); TLazLoadSaveCustomDataEvent(Handler[i])(Sender,Load,Data,PathDelimChanged);
end;
end; end;
procedure TMainIDE.OnSaveProjectInfoToXMLConfig(TheProject: TProject; procedure TMainIDE.OnSaveProjectInfoToXMLConfig(TheProject: TProject;
XMLConfig: TXMLConfig; WriteFlags: TProjectWriteFlags); XMLConfig: TXMLConfig; WriteFlags: TProjectWriteFlags);
begin begin
if (TheProject=Project1) and (not (pwfSkipDebuggerSettings in WriteFlags)) then if TheProject<>Project1 then exit;
if not (pwfSkipDebuggerSettings in WriteFlags) then
DebugBossMgr.SaveProjectSpecificInfo(XMLConfig,WriteFlags); DebugBossMgr.SaveProjectSpecificInfo(XMLConfig,WriteFlags);
EditorMacroListViewer.SaveProjectSpecificInfo(XMLConfig, WriteFlags);
if (TheProject=Project1) then
EditorMacroListViewer.SaveProjectSpecificInfo(XMLConfig, WriteFlags);
end; end;
procedure TMainIDE.OnProjectChangeInfoFile(TheProject: TProject); procedure TMainIDE.OnProjectChangeInfoFile(TheProject: TProject);
@ -6195,6 +6192,11 @@ begin
DoShowComponentList(State); DoShowComponentList(State);
AForm:=ComponentListForm; AForm:=ComponentListForm;
end end
else if ItIs(NonModalIDEWindowNames[nmiwMacroListViewer]) then
begin
ShowMacroListViewer(State);
AForm:=MacroListViewer;
end
else if ItIs(NonModalIDEWindowNames[nmiwEditorFileManager]) then else if ItIs(NonModalIDEWindowNames[nmiwEditorFileManager]) then
begin begin
ShowEditorFileManagerForm(State); ShowEditorFileManagerForm(State);

View File

@ -94,7 +94,8 @@ type
nmiwCodeBrowser, nmiwCodeBrowser,
nmiwIssueBrowser, nmiwIssueBrowser,
nmiwJumpHistory, nmiwJumpHistory,
nmiwComponentList nmiwComponentList,
nmiwMacroListViewer
); );
const const
@ -130,7 +131,8 @@ const
'CodeBrowser', 'CodeBrowser',
'IssueBrowser', 'IssueBrowser',
'JumpHistory', 'JumpHistory',
'ComponentList' 'ComponentList',
'MacroListViewer'
); );
type type