Pārlūkot izejas kodu

* Make formmanager a global instance

Michaël Van Canneyt 1 gadu atpakaļ
vecāks
revīzija
fa0e59255d
1 mainītis faili ar 29 papildinājumiem un 14 dzēšanām
  1. 29 14
      src/base/fresnel.forms.pas

+ 29 - 14
src/base/fresnel.forms.pas

@@ -215,18 +215,16 @@ type
     Procedure RemoveForm(aForm : TFresnelCustomForm);
     Property MainForm : TFresnelCustomForm Read FMainForm Write SetMainForm;
   end;
-
+  TFresnelFormManagerClass = Class of TFresnelFormManager;
 
   TFresnelBaseApplication = class(TCustomApplication)
   private
     FAsyncCall: TAsyncCallQueues;
     FEventDispatcher : TFresnelEventDispatcher;
-    FFormManager: TFresnelFormManager;
     procedure DoFresnelLog(aType: TEventType; const Msg: UTF8String);
     function GetHookFresnelLog: Boolean;
     procedure SetHookFresnelLog(AValue: Boolean);
   protected
-    function CreateFormManager(aOwner : TComponent) : TFresnelFormManager; virtual;
     function CreateEventDispatcher(aDefaultSender : TObject) : TFresnelEventDispatcher; virtual;
     procedure DoHandleAsyncCalls; virtual;
     class procedure RegisterApplicationEvents; virtual;
@@ -244,15 +242,35 @@ type
     function AddEventListener(aID : TEventID; aHandler : TFresnelEventHandler) : Integer;
     function AddEventListener(Const aName: TEventName; aHandler : TFresnelEventHandler): Integer;
     property EventDispatcher : TFresnelEventDispatcher Read FEventDispatcher;
-    Property FormManager : TFresnelFormManager Read FFormManager;
     Property HookFresnelLog : Boolean Read GetHookFresnelLog Write SetHookFresnelLog;
   end;
 
 var
   Application: TFresnelBaseApplication;
+  FormManagerClass : TFresnelFormManagerClass = Nil;
+
+Function FormManager : TFresnelFormManager;
 
 implementation
 
+var
+  _FormManager : TFresnelFormManager;
+
+Function FormManager : TFresnelFormManager;
+var
+  aclass : TFresnelFormManagerClass;
+
+begin
+  if _FormManager = Nil then
+    begin
+    aClass:=FormManagerClass;
+    if aClass=Nil then
+      aClass:=TFresnelFormManager;
+    _FormManager:=aClass.Create(Nil);
+    end;
+  Result:=_FormManager;
+end;
+
 { TFresnelCustomForm }
 
 procedure TFresnelCustomForm.SetFormStyle(AValue: TFormStyle);
@@ -476,12 +494,12 @@ begin
   FVisible:=true;
   Layouter:=TViewportLayouter.Create(nil);
   TViewportLayouter(Layouter).Viewport:=Self;
-  Application.FormManager.AddForm(Self);
+  FormManager.AddForm(Self);
 end;
 
 destructor TFresnelCustomForm.Destroy;
 begin
-  Application.FormManager.RemoveForm(Self);
+  FormManager.RemoveForm(Self);
   Layouter.Free;
   Layouter:=nil;
   WSForm:=nil;
@@ -778,10 +796,6 @@ begin
     Result:=(TFresnelComponent._LogHook=@DoFresnelLog);
 end;
 
-function TFresnelBaseApplication.CreateFormManager(aOWner: TComponent): TFresnelFormManager;
-begin
-  Result:=TFresnelFormManager.Create(aOWner);
-end;
 
 function TFresnelBaseApplication.CreateEventDispatcher(aDefaultSender: TObject): TFresnelEventDispatcher;
 begin
@@ -815,9 +829,9 @@ end;
 procedure TFresnelBaseApplication.ShowMainForm;
 begin
   FLLog(etDebug,'ShowMainForm');
-  If FFormManager.MainForm=nil then
+  If FormManager.MainForm=nil then
     raise Exception.Create('No main form available');
-  FFormManager.MainForm.Show;
+  FormManager.MainForm.Show;
 end;
 
 
@@ -830,12 +844,10 @@ begin
   FAsyncCall:=TAsyncCallQueues.Create;
   FAsyncCall.WakeMainThreadOnCalls:=True;
   FEventDispatcher:=CreateEventDispatcher(Self);
-  FFormManager:=CreateFormManager(Self);
 end;
 
 destructor TFresnelBaseApplication.Destroy;
 begin
-  FreeAndNil(FFormManager);
   FreeAndNil(FEventDispatcher);
   FreeAndNil(FAsyncCall);
   inherited Destroy;
@@ -886,5 +898,8 @@ end;
 
 initialization
   TFresnelBaseApplication.RegisterApplicationEvents;
+finalization
+  _FormManager.Free;
+
 end.