fixed removing deleted mainmenus from menu editor

git-svn-id: trunk@4481 -
This commit is contained in:
mattias 2003-08-14 13:26:09 +00:00
parent f98120ba94
commit e04775ee8e
2 changed files with 37 additions and 15 deletions

View File

@ -136,7 +136,7 @@ type
procedure SaveAsTemplateClick(Sender: TObject); procedure SaveAsTemplateClick(Sender: TObject);
procedure DeleteFromTemplateClick(Sender: TObject); procedure DeleteFromTemplateClick(Sender: TObject);
procedure OnComponentModified(Sender: TComponent); procedure OnComponentModified(Sender: TComponent);
// Functions for editing menus // Functions for editing menus
function AddNewItemBefore(MenuItem: PDesignerMenuItem; Ident: string): PDesignerMenuItem; function AddNewItemBefore(MenuItem: PDesignerMenuItem; Ident: string): PDesignerMenuItem;
function AddNewItemAfter(MenuItem: PDesignerMenuItem; Ident: string): PDesignerMenuItem; function AddNewItemAfter(MenuItem: PDesignerMenuItem; Ident: string): PDesignerMenuItem;
@ -266,7 +266,7 @@ begin
DesignerPopupMenu.Items.Add(PopupMenuItem); DesignerPopupMenu.Items.Add(PopupMenuItem);
//Handle for renaming a caption in the OI for some menuitem to rename also a //Handle for renaming a caption in the OI for some menuitem to rename also a
// propriet designermenuitem // designermenuitem
GlobalDesignHook.AddHandlerModified(@OnComponentModified); GlobalDesignHook.AddHandlerModified(@OnComponentModified);
new(Root); new(Root);

View File

@ -38,10 +38,9 @@ interface
uses uses
Classes, SysUtils, LCLProc, Forms, Controls, Graphics, Dialogs, LResources, Classes, SysUtils, LCLProc, Forms, Controls, Graphics, Dialogs, LResources,
StdCtrls, Buttons, ExtCtrls, LMessages, DesignerMenu, Menus, GraphType, StdCtrls, Buttons, ExtCtrls, LMessages, DesignerMenu, Menus, GraphType,
ComponentEditors, Designer, LazarusIDEStrConsts; ComponentEditors, Designer, LazarusIDEStrConsts, PropEdits;
type type
TMainMenuEditorForm = class(TForm) TMainMenuEditorForm = class(TForm)
private private
fDesignerMainMenu: TDesignerMainMenu; fDesignerMainMenu: TDesignerMainMenu;
@ -53,6 +52,7 @@ type
Label_menus: TLabel; Label_menus: TLabel;
//DesignerPopupMenu: TPopupMenu; //DesignerPopupMenu: TPopupMenu;
// fEditor: TComponentEditor; // fEditor: TComponentEditor;
procedure OnComponentDeleting(AComponent: TComponent);
public public
constructor CreateWithMenu(aOwner: TComponent; aMenu: TMenu; aEditor: TComponentEditor; aDesigner: TDesigner); constructor CreateWithMenu(aOwner: TComponent; aMenu: TMenu; aEditor: TComponentEditor; aDesigner: TDesigner);
destructor Destroy; override; destructor Destroy; override;
@ -72,21 +72,33 @@ type
protected protected
public public
constructor Create(AComponent: TComponent; ADesigner: TComponentEditorDesigner); override; constructor Create(AComponent: TComponent; ADesigner: TComponentEditorDesigner); override;
destructor Destroy; override;
procedure Edit; override; procedure Edit; override;
property Menu: TMainMenu read fMenu write fMenu; property Menu: TMainMenu read fMenu write fMenu;
// function Menu: TMenu;
end; end;
var
MainMenuEditorForm: TMainMenuEditorForm;
implementation implementation
{ TMainMenuEditorForm } { 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); constructor TMainMenuEditorForm.CreateWithMenu(aOwner: TComponent; aMenu: TMenu; aEditor: TComponentEditor; aDesigner: TDesigner);
var var
Cmp: TPanel; Cmp: TPanel;
Cmp2: TScrollBox; Cmp2: TScrollBox;
i: Integer; i: Integer;
CurComponent: TComponent;
begin begin
inherited Create(AOwner); inherited Create(AOwner);
@ -133,7 +145,6 @@ begin
Top:=10; Top:=10;
Width:=180; Width:=180;
Height:=20; Height:=20;
// content of "Text" is generated from LazarusIDEStrConsts
Text:=lisMenuEditorSelectMenu; Text:=lisMenuEditorSelectMenu;
end; end;
@ -145,23 +156,22 @@ begin
Top:=30; Top:=30;
Width:=180; Width:=180;
Height:=180; Height:=180;
OnCLick:=@SelectMenuClick; OnClick:=@SelectMenuClick;
end; end;
for i:=0 to aDesigner.Form.ComponentCount - 1 do for i:=0 to aDesigner.Form.ComponentCount - 1 do
begin 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 begin
List_menus.Items.Add(aDesigner.Form.Components[i].Name); List_menus.Items.Add(CurComponent.Name);
end; end;
end; end;
for i:=0 to List_menus.Items.Count - 1 do for i:=0 to List_menus.Items.Count - 1 do
begin begin
//writeln(aMenu.Name,' --- ',List_menus.Items[i]);
if (aMenu.Name = List_menus.Items[i]) then if (aMenu.Name = List_menus.Items[i]) then
begin begin
List_menus.Selected[i]:=true; List_menus.Selected[i]:=true;
//writeln('Mam ho .....');
end; end;
end; end;
@ -174,10 +184,14 @@ begin
LoadMainMenu; LoadMainMenu;
SetCoordinates(10,10,0,DesignerMainMenu.Root); SetCoordinates(10,10,0,DesignerMainMenu.Root);
end; end;
GlobalDesignHook.AddHandlerComponentDeleting(@OnComponentDeleting);
end; end;
destructor TMainMenuEditorForm.Destroy; destructor TMainMenuEditorForm.Destroy;
begin begin
if GlobalDesignHook<>nil then
GlobalDesignHook.RemoveAllHandlersForObject(Self);
inherited Destroy; inherited Destroy;
end; end;
@ -231,12 +245,20 @@ begin
fDesigner:=TDesigner(aDesigner); fDesigner:=TDesigner(aDesigner);
end; end;
destructor TMainMenuComponentEditor.Destroy;
begin
if MainMenuEditorForm.DesignerMainMenu.Editor=Self then begin
FreeThenNil(MainMenuEditorForm);
end;
inherited Destroy;
end;
procedure TMainMenuComponentEditor.Edit; procedure TMainMenuComponentEditor.Edit;
var
MainMenuEditorForm: TMainMenuEditorForm;
begin begin
//if Menu=nil then RaiseGDBException('TMainMenuComponentEditor.Edit Menu=nil'); //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.Show;
//MainMenuEditorForm.Free; //MainMenuEditorForm.Free;
end; end;