Skip to content

Commit 0137a29

Browse files
authored
Merge pull request #11 from Embarcadero/lang
Changing ToolsMenu item discoery approach by looping through menu ite…
2 parents 83a9a82 + 0f40ded commit 0137a29

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

Source/Menu/PythonTools.Menu.pas

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,19 @@ TToolsMenuEventHook = class;
1515
TPythonToolsMenu = class
1616
private
1717
class var FInstance: TPythonToolsMenu;
18-
class procedure Initialize();
19-
class procedure Finalize();
2018
private
2119
FToolsMenuItems: TObjectList<TMenuItem>;
2220
FToolsMenuHook: TToolsMenuEventHook;
2321
function GetINTAServices(): INTAServices;
22+
function GetToolsMenu(): TMenuItem;
2423
function LoadPythonToolMenuImage(): integer;
2524

2625
procedure DoCreateMenuHooked(Sender: TObject);
2726
procedure DoDestroyMenu();
2827
public
28+
class constructor Create();
29+
class destructor Destroy();
30+
2931
constructor Create();
3032
destructor Destroy(); override;
3133

@@ -79,11 +81,20 @@ TPythonToolsMenuItem = class(TMenuItem)
7981

8082
{ TPythonToolsMenu }
8183

84+
class constructor TPythonToolsMenu.Create;
85+
begin
86+
FInstance := TPythonToolsMenu.Create();
87+
end;
88+
89+
class destructor TPythonToolsMenu.Destroy;
90+
begin
91+
FInstance.Free();
92+
end;
93+
8294
constructor TPythonToolsMenu.Create;
8395
begin
8496
FToolsMenuItems := TObjectList<TMenuItem>.Create();
85-
FToolsMenuHook := TToolsMenuEventHook.Create(
86-
GetINTAServices().MainMenu.Items.Find('Tools'));
97+
FToolsMenuHook := TToolsMenuEventHook.Create(GetToolsMenu());
8798
end;
8899

89100
destructor TPythonToolsMenu.Destroy;
@@ -94,14 +105,15 @@ destructor TPythonToolsMenu.Destroy;
94105
inherited;
95106
end;
96107

97-
class procedure TPythonToolsMenu.Initialize;
98-
begin
99-
FInstance := TPythonToolsMenu.Create();
100-
end;
101-
102-
class procedure TPythonToolsMenu.Finalize;
108+
function TPythonToolsMenu.GetToolsMenu: TMenuItem;
109+
var
110+
LMenuItem: TMenuItem;
103111
begin
104-
FInstance.Free();
112+
for LMenuItem in GetINTAServices().MainMenu.Items do begin
113+
if (LMenuItem.Name = sToolsMenu) then
114+
Exit(LMenuItem);
115+
end;
116+
raise Exception.Create('Tools menu not found.');
105117
end;
106118

107119
function TPythonToolsMenu.GetINTAServices: INTAServices;
@@ -221,7 +233,7 @@ procedure TPythonToolsMenu.DoDestroyMenu;
221233
LRoot: TMenuItem;
222234
LMenuItem: TMenuItem;
223235
begin
224-
LRoot := GetINTAServices().MainMenu.Items.Find('Tools');
236+
LRoot := GetToolsMenu();
225237
if Assigned(LRoot) then begin
226238
with GetINTAServices() do begin
227239
MenuBeginUpdate();
@@ -286,10 +298,4 @@ procedure TToolsMenuEventHook.UnHook(AEvt: TNotifyEvent);
286298
FHook := nil;
287299
end;
288300

289-
initialization
290-
TPythonToolsMenu.Initialize();
291-
292-
finalization
293-
TPythonToolsMenu.Finalize();
294-
295301
end.

0 commit comments

Comments
 (0)