GXS.Manager.pas 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. //
  2. // The graphics engine GXScene https://github.com/glscene
  3. //
  4. unit GXS.Manager;
  5. (*
  6. Managers are used to manage many different kinds of clients in Scene.
  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. uses
  12. System.Classes,
  13. System.Types;
  14. procedure RegisterManager(aManager: TComponent);
  15. procedure DeRegisterManager(aManager: TComponent);
  16. function FindManager(classType: TComponentClass; const managerName: String)
  17. : TComponent;
  18. // --------------------------------------------------------------------
  19. implementation
  20. // --------------------------------------------------------------------
  21. var
  22. vManagers: TList;
  23. procedure RegisterManager(aManager: TComponent);
  24. begin
  25. if not Assigned(vManagers) then
  26. vManagers := TList.Create;
  27. if vManagers.IndexOf(aManager) < 0 then
  28. vManagers.Add(aManager);
  29. end;
  30. procedure DeRegisterManager(aManager: TComponent);
  31. begin
  32. if Assigned(vManagers) then
  33. vManagers.Remove(aManager);
  34. end;
  35. function FindManager(classType: TComponentClass; const managerName: String)
  36. : TComponent;
  37. var
  38. i: Integer;
  39. begin
  40. Result := nil;
  41. if Assigned(vManagers) then
  42. for i := 0 to vManagers.Count - 1 do
  43. with TComponent(vManagers[i]) do
  44. if InheritsFrom(classType) and (Name = managerName) then
  45. begin
  46. Result := TComponent(vManagers[i]);
  47. Break;
  48. end;
  49. end;
  50. // ----------------------------------------
  51. initialization
  52. // ----------------------------------------
  53. finalization
  54. vManagers.Free;
  55. vManagers := nil;
  56. end.