@@ -20,8 +20,8 @@ TC4DWizardIDEMainMenuOpenExternal = class(TInterfacedObject, IC4DWizardIDEMain
2020 FMenuItemOpenExternal: TMenuItem;
2121 FList: TObjectList<TC4DWizardOpenExternal>;
2222 procedure CreateItemMenuMain ;
23- procedure CreateSubMenu (const AName: string; const ACaption: string; const AOnClick: TNotifyEvent); overload;
24- procedure CreateSubMenu (const AC4DWizardOpenExternal: TC4DWizardOpenExternal); overload;
23+ function CreateSubMenu (const AMenuItemParent: TMenuItem; const AName: string; const ACaption: string; const AOnClick: TNotifyEvent): TMenuItem ; overload;
24+ function CreateSubMenu (const AMenuItemParent: TMenuItem; const AC4DWizardOpenExternal: TC4DWizardOpenExternal): TMenuItem ; overload;
2525 procedure CustomizeClick (Sender: TObject);
2626 procedure ItemMenuClick (Sender: TObject);
2727 procedure CreateMenuItensList ;
@@ -63,13 +63,11 @@ destructor TC4DWizardIDEMainMenuOpenExternal.Destroy;
6363function TC4DWizardIDEMainMenuOpenExternal.CreateMenusOpenExternal : IC4DWizardIDEMainMenuOpenExternal;
6464begin
6565 Self.CreateItemMenuMain;
66- Self.CreateSubMenu(' C4DOpenExternalMenuItemCad1' , ' Customize...' , Self.CustomizeClick);
67- Self.CreateSubMenu(' C4DOpenExternalSeparator01' , ' -' , { $IF CompilerVersion = 30.0} TNotifyEvent(nil ) { $ELSE} nil { $ENDIF} );
66+ Self.CreateSubMenu(FMenuItemOpenExternal, ' C4DOpenExternalMenuItemCad1' , ' Customize...' , Self.CustomizeClick);
67+ Self.CreateSubMenu(FMenuItemOpenExternal, ' C4DOpenExternalSeparator01' , ' -' , { $IF CompilerVersion = 30.0} TNotifyEvent(nil ) { $ELSE} nil { $ENDIF} );
6868
6969 FList.Clear;
70- TC4DWizardOpenExternalModel
71- .New
72- .ReadIniFile(
70+ TC4DWizardOpenExternalModel.New.ReadIniFile(
7371 procedure(AC4DWizardOpenExternal: TC4DWizardOpenExternal)
7472 var
7573 LC4DWizardOpenExternal: TC4DWizardOpenExternal;
@@ -85,6 +83,8 @@ function TC4DWizardIDEMainMenuOpenExternal.CreateMenusOpenExternal: IC4DWizardID
8583 LC4DWizardOpenExternal.Order := AC4DWizardOpenExternal.Order;
8684 LC4DWizardOpenExternal.Shortcut := AC4DWizardOpenExternal.Shortcut;
8785 LC4DWizardOpenExternal.IconHas := AC4DWizardOpenExternal.IconHas;
86+ LC4DWizardOpenExternal.GuidMenuParent := AC4DWizardOpenExternal.GuidMenuParent;
87+ LC4DWizardOpenExternal.Created := False;
8888 FList.Add(LC4DWizardOpenExternal);
8989 end );
9090 Self.CreateMenuItensList;
@@ -95,6 +95,11 @@ procedure TC4DWizardIDEMainMenuOpenExternal.CreateMenuItensList;
9595 LItem: TC4DWizardOpenExternal;
9696 LListOrder: TList<Integer>;
9797 I: Integer;
98+ LMenuItem: TMenuItem;
99+
100+ I2: Integer;
101+ LItem2: TC4DWizardOpenExternal;
102+ LMenuItem2: TMenuItem;
98103begin
99104 if (FList.Count <= 0 )then
100105 Exit;
@@ -106,17 +111,38 @@ procedure TC4DWizardIDEMainMenuOpenExternal.CreateMenuItensList;
106111 LListOrder.Add(LItem.Order);
107112
108113 LListOrder.Sort;
114+
115+ // PRIMEIRO COLOCA OS PARENT (PAIS)
109116 for I in LListOrder do
110117 for LItem in FList do
118+ begin
111119 if (LItem.Order = I)then
112- Self.CreateSubMenu(LItem);
120+ if (not LItem.Created)and (LITem.GuidMenuParent.Trim.IsEmpty)then
121+ begin
122+ LMenuItem := Self.CreateSubMenu(FMenuItemOpenExternal, LItem);
123+ LItem.Created := True;
124+
125+ // **
126+ for I2 in LListOrder do
127+ for LItem2 in FList do
128+ begin
129+ if (LItem2.Order = I2)then
130+ if (not LItem2.Created)and (LItem2.GuidMenuParent.Trim = LITem.Guid.Trim)then
131+ begin
132+ LMenuItem2 := Self.CreateSubMenu(LMenuItem, LItem2);
133+ LItem2.Created := True;
134+ end ;
135+ end ;
136+ // **
137+ end ;
138+ end ;
113139 finally
114140 LListOrder.Free;
115141 end ;
116142
117143 for LItem in FList do
118144 if (LItem.Order = 0 )then
119- Self.CreateSubMenu(LItem);
145+ Self.CreateSubMenu(FMenuItemOpenExternal, LItem);
120146end ;
121147
122148procedure TC4DWizardIDEMainMenuOpenExternal.CreateItemMenuMain ;
@@ -128,36 +154,33 @@ procedure TC4DWizardIDEMainMenuOpenExternal.CreateItemMenuMain;
128154 FMenuItemParent.Add(FMenuItemOpenExternal);
129155end ;
130156
131- procedure TC4DWizardIDEMainMenuOpenExternal.CustomizeClick (Sender: TObject);
132- begin
133- C4DWizardOpenExternalViewShow;
134- end ;
135-
136- procedure TC4DWizardIDEMainMenuOpenExternal.CreateSubMenu (const AName: string; const ACaption: string; const AOnClick: TNotifyEvent);
157+ function TC4DWizardIDEMainMenuOpenExternal.CreateSubMenu (const AMenuItemParent: TMenuItem; const AName: string; const ACaption: string; const AOnClick: TNotifyEvent): TMenuItem;
137158var
138159 LMenuItem: TMenuItem;
139160begin
140- LMenuItem := TMenuItem.Create(FMenuItemOpenExternal );
161+ LMenuItem := TMenuItem.Create(AMenuItemParent );
141162 LMenuItem.Name := AName;
142163 LMenuItem.Caption := ACaption;
143164 LMenuItem.OnClick := AOnClick;
144165 LMenuItem.Hint := ' ' ;
145166 LMenuItem.ImageIndex := -1 ;
146- FMenuItemOpenExternal.Add(LMenuItem);
167+ AMenuItemParent.Add(LMenuItem);
168+ Result := LMenuItem;
147169end ;
148170
149- procedure TC4DWizardIDEMainMenuOpenExternal.CreateSubMenu (const AC4DWizardOpenExternal: TC4DWizardOpenExternal);
171+ function TC4DWizardIDEMainMenuOpenExternal.CreateSubMenu (const AMenuItemParent: TMenuItem; const AC4DWizardOpenExternal: TC4DWizardOpenExternal): TMenuItem ;
150172var
151173 LMenuItem: TMenuItem;
152174begin
153- LMenuItem := TMenuItem.Create(FMenuItemOpenExternal );
175+ LMenuItem := TMenuItem.Create(AMenuItemParent );
154176 LMenuItem.Name := ' C4DOpenExternalItemMenu' + TC4DWizardUtils.IncInt(FCont).Tostring;
155177 LMenuItem.Caption := AC4DWizardOpenExternal.Description;
156178 LMenuItem.OnClick := Self.ItemMenuClick;
157179 LMenuItem.Hint := AC4DWizardOpenExternal.Path + TC4DConsts.OPEN_EXTERNAL_Separator_PARAMETERS + AC4DWizardOpenExternal.Parameters;
158180 LMenuItem.Shortcut := TextToShortCut(AC4DWizardOpenExternal.Shortcut);
159181 LMenuItem.ImageIndex := TC4DWizardOpenExternalUtils.GetImageIndexIfExists(AC4DWizardOpenExternal);
160- FMenuItemOpenExternal.Add(LMenuItem);
182+ AMenuItemParent.Add(LMenuItem);
183+ Result := LMenuItem;
161184end ;
162185
163186procedure TC4DWizardIDEMainMenuOpenExternal.ItemMenuClick (Sender: TObject);
@@ -171,4 +194,9 @@ procedure TC4DWizardIDEMainMenuOpenExternal.ItemMenuClick(Sender: TObject);
171194 TC4DWizardOpenExternalUtils.ClickFromString(LMenuItem.Hint);
172195end ;
173196
197+ procedure TC4DWizardIDEMainMenuOpenExternal.CustomizeClick (Sender: TObject);
198+ begin
199+ C4DWizardOpenExternalViewShow;
200+ end ;
201+
174202end .
0 commit comments