Stage.Manager.pas 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //
  2. // The graphics engine GLXEngine
  3. //
  4. unit Stage.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 Stage.Defines.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. implementation // ------------------------------------------------------------
  20. var
  21. vManagers: TList;
  22. procedure RegisterManager(aManager: TComponent);
  23. begin
  24. if not Assigned(vManagers) then
  25. vManagers := TList.Create;
  26. if vManagers.IndexOf(aManager) < 0 then
  27. vManagers.Add(aManager);
  28. end;
  29. procedure DeRegisterManager(aManager: TComponent);
  30. begin
  31. if Assigned(vManagers) then
  32. vManagers.Remove(aManager);
  33. end;
  34. function FindManager(classType: TComponentClass; const managerName: String)
  35. : TComponent;
  36. var
  37. i: Integer;
  38. begin
  39. Result := nil;
  40. if Assigned(vManagers) then
  41. for i := 0 to vManagers.Count - 1 do
  42. with TComponent(vManagers[i]) do
  43. if InheritsFrom(classType) and (Name = managerName) then
  44. begin
  45. Result := TComponent(vManagers[i]);
  46. Break;
  47. end;
  48. end;
  49. // ============================================================
  50. initialization
  51. // ============================================================
  52. finalization
  53. vManagers.Free;
  54. vManagers := nil;
  55. end.