fixed menu editor deleting items

git-svn-id: trunk@7642 -
This commit is contained in:
mattias 2005-09-07 22:06:17 +00:00
parent 2901f22b92
commit 3a45cb4d8d
3 changed files with 13 additions and 6 deletions

View File

@ -1837,13 +1837,14 @@ begin
end else
UpdateMenu(MenuItem.Items[index_sequence[Ind]], DesignerMenuItem, Ind + 1, TheAction)
end;
// Deletes an MenuItem
// Deletes a MenuItem
7: begin
if (index_sequence[Ind + 1] = -1) then
begin
//MenuItem.Remove(MenuItem[index_sequence[Ind]]);
GlobalDesignHook.PersistentDeleting(MenuItem[index_sequence[Ind]]);
MenuItem[index_sequence[Ind]].Free;
temp_menuitem:=MenuItem[index_sequence[Ind]];
GlobalDesignHook.DeletePersistent(temp_menuitem);
//MenuItem[index_sequence[Ind]].Free;
end else
UpdateMenu(MenuItem.Items[index_sequence[Ind]], DesignerMenuItem, Ind + 1, TheAction)
end;
@ -1853,8 +1854,9 @@ begin
begin
for i := MenuItem[index_sequence[Ind]].Count - 1 downto 0 do
begin
GlobalDesignHook.PersistentDeleting(MenuItem[index_sequence[Ind]].Items[i]);
MenuItem[index_sequence[Ind]].Delete(i);
temp_menuitem:=MenuItem[index_sequence[Ind]].Items[i];
GlobalDesignHook.DeletePersistent(temp_menuitem);
//MenuItem[index_sequence[Ind]].Delete(i);
//MenuItem[index_sequence[Ind]].Items.Free
end;
end else

View File

@ -5359,6 +5359,7 @@ begin
end;
procedure TPropertyEditorHook.PersistentDeleting(APersistent: TPersistent);
// call this to tell all IDE parts to remove all references from the APersistent
var
i: Integer;
begin
@ -5368,13 +5369,15 @@ begin
end;
procedure TPropertyEditorHook.DeletePersistent(var APersistent: TPersistent);
// Call this to actually free APersistent
// One of the hooks will free it.
var
i: Integer;
begin
if APersistent=nil then exit;
i:=GetHandlerCount(htDeletePersistent);
if i>0 then begin
while GetNextHandlerIndex(htDeletePersistent,i) do
while (APersistent<>nil) and GetNextHandlerIndex(htDeletePersistent,i) do
TPropHookDeletePersistent(FHandlers[htDeletePersistent][i])(APersistent);
end else
FreeThenNil(APersistent);

View File

@ -176,6 +176,7 @@ var
i : integer;
HandlerType: TMenuItemHandlerType;
begin
//debugln('TMenuItem.Destroy A ',dbgsName(Self));
i:=FMenuItemHandlers[mihtDestroy].Count;
while FMenuItemHandlers[mihtDestroy].NextDownIndex(i) do
TNotifyEvent(FMenuItemHandlers[mihtDestroy][i])(Self);
@ -197,6 +198,7 @@ begin
if FParent<>nil then
FParent.FItems.Remove(Self);
if FCommand <> 0 then CommandPool[FCommand] := False;
//debugln('TMenuItem.Destroy B ',dbgsName(Self));
inherited Destroy;
end;