OpenProjectManager.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. unit OpenProjectManager;
  2. interface
  3. uses
  4. Classes, ZhAPI, UtilMethods, Windows, ProjectData, sdDB;
  5. type
  6. TOpenProjectManager = class
  7. private
  8. FProjectList: TList;
  9. FCurProjectIndex: Integer;
  10. function GetProjectCount: Integer;
  11. procedure SetCurProjectIndex(const Value: Integer);
  12. function GetCurProjectData: TProjectData;
  13. function CheckIndexAvailable(AIndex: Integer): Boolean;
  14. function GetProjectData(AIndex: Integer): TProjectData;
  15. public
  16. constructor Create;
  17. destructor Destroy; override;
  18. function Open(ARec: TsdDataRecord): TProjectData;
  19. procedure Save(AIndex: Integer);
  20. procedure SaveAll;
  21. procedure Delete(AIndex: Integer);
  22. function FindProjectData(AProjectID: Integer): TProjectData;
  23. function ProjectIndex(AProjectID: Integer): Integer;
  24. property CurProjectIndex: Integer read FCurProjectIndex write SetCurProjectIndex;
  25. property CurProjectData: TProjectData read GetCurProjectData;
  26. property ProjectData[AIndex: Integer]: TProjectData read GetProjectData;
  27. property ProjectCount : Integer read GetProjectCount;
  28. end;
  29. implementation
  30. { TOpenProjectManager }
  31. function TOpenProjectManager.CheckIndexAvailable(AIndex: Integer): Boolean;
  32. begin
  33. Result := (AIndex >= 0) and (AIndex < FProjectList.Count);
  34. end;
  35. constructor TOpenProjectManager.Create;
  36. begin
  37. FProjectList := TList.Create;
  38. end;
  39. procedure TOpenProjectManager.Delete(AIndex: Integer);
  40. begin
  41. if CheckIndexAvailable(AIndex) then
  42. begin
  43. TProjectData(FProjectList[AIndex]).Free;
  44. FProjectList.Delete(AIndex);
  45. end;
  46. end;
  47. destructor TOpenProjectManager.Destroy;
  48. begin
  49. ClearObjects(FProjectList);
  50. FProjectList.Free;
  51. inherited;
  52. end;
  53. function TOpenProjectManager.FindProjectData(
  54. AProjectID: Integer): TProjectData;
  55. var
  56. iIndex: Integer;
  57. begin
  58. Result := nil;
  59. for iIndex := 0 to FProjectList.Count - 1 do
  60. if TProjectData(FProjectList.Items[iIndex]).ProjectID = AProjectID then
  61. begin
  62. Result := TProjectData(FProjectList.Items[iIndex]);
  63. end;
  64. end;
  65. function TOpenProjectManager.GetCurProjectData: TProjectData;
  66. begin
  67. Result := TProjectData(FProjectList.Items[FCurProjectIndex]);
  68. end;
  69. function TOpenProjectManager.GetProjectCount: Integer;
  70. begin
  71. Result := FProjectList.Count;
  72. end;
  73. function TOpenProjectManager.GetProjectData(AIndex: Integer): TProjectData;
  74. begin
  75. Result := TProjectData(FProjectList.Items[AIndex]);
  76. end;
  77. function TOpenProjectManager.Open(ARec: TsdDataRecord): TProjectData;
  78. begin
  79. Result := TProjectData.Create;
  80. Result.Open(ARec);
  81. CurProjectIndex := FProjectList.Add(Result);
  82. end;
  83. function TOpenProjectManager.ProjectIndex(
  84. AProjectID: Integer): Integer;
  85. var
  86. iIndex: Integer;
  87. begin
  88. Result := -1;
  89. for iIndex := 0 to FProjectList.Count - 1 do
  90. if TProjectData(FProjectList.Items[iIndex]).ProjectID = AProjectID then
  91. begin
  92. Result := iIndex;
  93. Break;
  94. end;
  95. end;
  96. procedure TOpenProjectManager.Save(AIndex: Integer);
  97. begin
  98. if CheckIndexAvailable(AIndex) then
  99. TProjectData(FProjectList.Items[AIndex]).SaveAndCheck;
  100. end;
  101. procedure TOpenProjectManager.SaveAll;
  102. var
  103. iIndex: Integer;
  104. begin
  105. for iIndex := 0 to FProjectList.Count - 1 do
  106. TProjectData(FProjectList.Items[iIndex]).SaveAndCheck;
  107. end;
  108. procedure TOpenProjectManager.SetCurProjectIndex(const Value: Integer);
  109. begin
  110. if CheckIndexAvailable(Value) then
  111. FCurProjectIndex := Value;
  112. end;
  113. end.