From e04775ee8eee789f6077d6069df7a90fe97f0303 Mon Sep 17 00:00:00 2001 From: mattias Date: Thu, 14 Aug 2003 13:26:09 +0000 Subject: [PATCH] fixed removing deleted mainmenus from menu editor git-svn-id: trunk@4481 - --- designer/designermenu.pp | 4 ++-- designer/menueditorform.pas | 48 +++++++++++++++++++++++++++---------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/designer/designermenu.pp b/designer/designermenu.pp index f740483c30..e59cc71f07 100644 --- a/designer/designermenu.pp +++ b/designer/designermenu.pp @@ -136,7 +136,7 @@ type procedure SaveAsTemplateClick(Sender: TObject); procedure DeleteFromTemplateClick(Sender: TObject); procedure OnComponentModified(Sender: TComponent); - + // Functions for editing menus function AddNewItemBefore(MenuItem: PDesignerMenuItem; Ident: string): PDesignerMenuItem; function AddNewItemAfter(MenuItem: PDesignerMenuItem; Ident: string): PDesignerMenuItem; @@ -266,7 +266,7 @@ begin DesignerPopupMenu.Items.Add(PopupMenuItem); //Handle for renaming a caption in the OI for some menuitem to rename also a - // propriet designermenuitem + // designermenuitem GlobalDesignHook.AddHandlerModified(@OnComponentModified); new(Root); diff --git a/designer/menueditorform.pas b/designer/menueditorform.pas index 8a502d26c2..8eaf4a097f 100644 --- a/designer/menueditorform.pas +++ b/designer/menueditorform.pas @@ -38,10 +38,9 @@ interface uses Classes, SysUtils, LCLProc, Forms, Controls, Graphics, Dialogs, LResources, StdCtrls, Buttons, ExtCtrls, LMessages, DesignerMenu, Menus, GraphType, - ComponentEditors, Designer, LazarusIDEStrConsts; + ComponentEditors, Designer, LazarusIDEStrConsts, PropEdits; type - TMainMenuEditorForm = class(TForm) private fDesignerMainMenu: TDesignerMainMenu; @@ -53,6 +52,7 @@ type Label_menus: TLabel; //DesignerPopupMenu: TPopupMenu; // fEditor: TComponentEditor; + procedure OnComponentDeleting(AComponent: TComponent); public constructor CreateWithMenu(aOwner: TComponent; aMenu: TMenu; aEditor: TComponentEditor; aDesigner: TDesigner); destructor Destroy; override; @@ -72,21 +72,33 @@ type protected public constructor Create(AComponent: TComponent; ADesigner: TComponentEditorDesigner); override; + destructor Destroy; override; procedure Edit; override; property Menu: TMainMenu read fMenu write fMenu; - -// function Menu: TMenu; end; +var + MainMenuEditorForm: TMainMenuEditorForm; + implementation { TMainMenuEditorForm } +procedure TMainMenuEditorForm.OnComponentDeleting(AComponent: TComponent); +var + i: Integer; +begin + if FindRootDesigner(AComponent)<>fDesigner then exit; + i:=List_menus.Items.IndexOf(AComponent.Name); + if i>=0 then List_menus.Items.Delete(i); +end; + constructor TMainMenuEditorForm.CreateWithMenu(aOwner: TComponent; aMenu: TMenu; aEditor: TComponentEditor; aDesigner: TDesigner); var Cmp: TPanel; Cmp2: TScrollBox; i: Integer; + CurComponent: TComponent; begin inherited Create(AOwner); @@ -133,7 +145,6 @@ begin Top:=10; Width:=180; Height:=20; - // content of "Text" is generated from LazarusIDEStrConsts Text:=lisMenuEditorSelectMenu; end; @@ -145,23 +156,22 @@ begin Top:=30; Width:=180; Height:=180; - OnCLick:=@SelectMenuClick; + OnClick:=@SelectMenuClick; end; for i:=0 to aDesigner.Form.ComponentCount - 1 do begin - if (aDesigner.Form.Components[i] is TMainMenu) or (aDesigner.Form.Components[i] is TPopupMenu) then + CurComponent:=aDesigner.Form.Components[i]; + if (CurComponent is TMainMenu) or (CurComponent is TPopupMenu) then begin - List_menus.Items.Add(aDesigner.Form.Components[i].Name); + List_menus.Items.Add(CurComponent.Name); end; end; for i:=0 to List_menus.Items.Count - 1 do begin - //writeln(aMenu.Name,' --- ',List_menus.Items[i]); if (aMenu.Name = List_menus.Items[i]) then begin List_menus.Selected[i]:=true; - //writeln('Mam ho .....'); end; end; @@ -174,10 +184,14 @@ begin LoadMainMenu; SetCoordinates(10,10,0,DesignerMainMenu.Root); end; + + GlobalDesignHook.AddHandlerComponentDeleting(@OnComponentDeleting); end; destructor TMainMenuEditorForm.Destroy; begin + if GlobalDesignHook<>nil then + GlobalDesignHook.RemoveAllHandlersForObject(Self); inherited Destroy; end; @@ -231,12 +245,20 @@ begin fDesigner:=TDesigner(aDesigner); end; +destructor TMainMenuComponentEditor.Destroy; +begin + if MainMenuEditorForm.DesignerMainMenu.Editor=Self then begin + FreeThenNil(MainMenuEditorForm); + end; + inherited Destroy; +end; + procedure TMainMenuComponentEditor.Edit; -var - MainMenuEditorForm: TMainMenuEditorForm; begin //if Menu=nil then RaiseGDBException('TMainMenuComponentEditor.Edit Menu=nil'); - MainMenuEditorForm:=TMainMenuEditorForm.CreateWithMenu(Application, TMenu(GetComponent), Self, fDesigner); + if MainMenuEditorForm=nil then + MainMenuEditorForm:=TMainMenuEditorForm.CreateWithMenu(Application, + TMenu(GetComponent), Self, fDesigner); MainMenuEditorForm.Show; //MainMenuEditorForm.Free; end;