GLS.Manager.pas 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. //
  2. // The multimedia graphics platform GLScene https://github.com/glscene
  3. //
  4. unit GLS.Manager;
  5. (*
  6. Managers are used to manage many different kinds of clients in GLScene.
  7. They are registered so that when clients are loaded, the client can
  8. look up the manager + register themselves with it.
  9. *)
  10. interface
  11. {$I GLScene.inc}
  12. uses
  13. System.Classes,
  14. System.Types;
  15. procedure RegisterManager(aManager: TComponent);
  16. procedure DeRegisterManager(aManager: TComponent);
  17. function FindManager(classType: TComponentClass; const managerName: String)
  18. : TComponent;
  19. // ------------------------------------------------------
  20. implementation
  21. // ------------------------------------------------------
  22. var
  23. vManagers: TList;
  24. procedure RegisterManager(aManager: TComponent);
  25. begin
  26. if not Assigned(vManagers) then
  27. vManagers := TList.Create;
  28. if vManagers.IndexOf(aManager) < 0 then
  29. vManagers.Add(aManager);
  30. end;
  31. procedure DeRegisterManager(aManager: TComponent);
  32. begin
  33. if Assigned(vManagers) then
  34. vManagers.Remove(aManager);
  35. end;
  36. function FindManager(classType: TComponentClass; const managerName: String)
  37. : TComponent;
  38. var
  39. i: Integer;
  40. begin
  41. Result := nil;
  42. if Assigned(vManagers) then
  43. for i := 0 to vManagers.Count - 1 do
  44. with TComponent(vManagers[i]) do
  45. if InheritsFrom(classType) and (Name = managerName) then
  46. begin
  47. Result := TComponent(vManagers[i]);
  48. Break;
  49. end;
  50. end;
  51. // ============================================================
  52. initialization
  53. // ============================================================
  54. finalization
  55. vManagers.Free;
  56. vManagers := nil;
  57. end.