mirror of https://gitlab.com/basile.b/dexed.git
added ICEMainMenuProvider handler
This commit is contained in:
parent
84466ab7c5
commit
6262ac9802
|
|
@ -197,6 +197,8 @@ type
|
||||||
fRunProc: TCheckedAsyncProcess;
|
fRunProc: TCheckedAsyncProcess;
|
||||||
|
|
||||||
fLogMessager: TCELogMessageSubject;
|
fLogMessager: TCELogMessageSubject;
|
||||||
|
fMainMenuSubj: TCEMainMenuSubject;
|
||||||
|
procedure updateMainMenuProviders;
|
||||||
|
|
||||||
// ICEMultiDocObserver
|
// ICEMultiDocObserver
|
||||||
procedure docNew(aDoc: TCESynMemo);
|
procedure docNew(aDoc: TCESynMemo);
|
||||||
|
|
@ -294,6 +296,7 @@ constructor TCEMainForm.create(aOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited create(aOwner);
|
inherited create(aOwner);
|
||||||
fLogMessager := TCELogMessageSubject.create;
|
fLogMessager := TCELogMessageSubject.create;
|
||||||
|
fMainMenuSubj:= TCEMainMenuSubject.create;
|
||||||
//
|
//
|
||||||
EntitiesConnector.addObserver(self);
|
EntitiesConnector.addObserver(self);
|
||||||
//
|
//
|
||||||
|
|
@ -308,6 +311,7 @@ begin
|
||||||
getCMdParams;
|
getCMdParams;
|
||||||
//
|
//
|
||||||
EntitiesConnector.endUpdate;
|
EntitiesConnector.endUpdate;
|
||||||
|
updateMainMenuProviders;
|
||||||
fInitialized := true;
|
fInitialized := true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -686,6 +690,7 @@ begin
|
||||||
FreeRunnableProc;
|
FreeRunnableProc;
|
||||||
//
|
//
|
||||||
fLogMessager.Free;
|
fLogMessager.Free;
|
||||||
|
fMainMenuSubj.Free;
|
||||||
EntitiesConnector.removeObserver(self);
|
EntitiesConnector.removeObserver(self);
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
@ -730,6 +735,7 @@ var
|
||||||
hasEd: boolean;
|
hasEd: boolean;
|
||||||
hasProj: boolean;
|
hasProj: boolean;
|
||||||
begin
|
begin
|
||||||
|
Handled := true;
|
||||||
if fEditWidg = nil then exit;
|
if fEditWidg = nil then exit;
|
||||||
if fUpdateCount > 0 then exit;
|
if fUpdateCount > 0 then exit;
|
||||||
Inc(fUpdateCount);
|
Inc(fUpdateCount);
|
||||||
|
|
@ -796,9 +802,40 @@ begin
|
||||||
actProjRunWithArgs.Enabled := fProject.canBeRun;
|
actProjRunWithArgs.Enabled := fProject.canBeRun;
|
||||||
end;
|
end;
|
||||||
actFileAddToProj.Enabled := hasEd and hasProj;
|
actFileAddToProj.Enabled := hasEd and hasProj;
|
||||||
|
//
|
||||||
|
updateMainMenuProviders;
|
||||||
finally
|
finally
|
||||||
Dec(fUpdateCount);
|
Dec(fUpdateCount);
|
||||||
Handled := true;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMainForm.updateMainMenuProviders;
|
||||||
|
var
|
||||||
|
i, j: Integer;
|
||||||
|
itm: TMenuItem;
|
||||||
|
doneUpdate: boolean;
|
||||||
|
begin
|
||||||
|
doneUpdate := false;
|
||||||
|
for j := 0 to fMainMenuSubj.observersCount-1 do
|
||||||
|
begin
|
||||||
|
// try to update existing entry.
|
||||||
|
for i := 0 to mainMenu.Items.Count-1 do
|
||||||
|
if PtrInt(fMainMenuSubj.observers[j]) = mainMenu.Items[i].Tag then
|
||||||
|
begin
|
||||||
|
(fMainMenuSubj.observers[j] as ICEMainMenuProvider).menuUpdate(mainMenu.Items[i]);
|
||||||
|
doneUpdate := true;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
if doneUpdate then
|
||||||
|
continue;
|
||||||
|
// otherwise propose to create a new entry
|
||||||
|
itm := TMenuItem.Create(Self);
|
||||||
|
(fMainMenuSubj.observers[j] as ICEMainMenuProvider).menuDeclare(itm);
|
||||||
|
itm.Tag:= PtrInt(fMainMenuSubj.observers[j]);
|
||||||
|
case itm.Count > 0 of
|
||||||
|
true: mainMenu.Items.Add(itm);
|
||||||
|
false: itm.Free;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue