WizHelpers.pas 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. unit WizHelpers;
  2. {$I WizDefine.inc}
  3. interface
  4. uses
  5. Classes, Windows, DesignIntf, ToolsApi, DesignEditors, BeanConst ;
  6. type
  7. { TWzOTACustomRepositoryWizard }
  8. TWzOTACustomRepositoryWizard = class(TNotifierObject,
  9. IOTARepositoryWizard,
  10. IOTARepositoryWizard60,
  11. {$IFDEF DELPHI8}
  12. IOTARepositoryWizard80,
  13. {$ENDIF}
  14. IOTAWizard)
  15. protected
  16. // IOTAWizard
  17. function GetIDString: string; virtual;
  18. function GetName: string; virtual; abstract;
  19. function GetState: TWizardState;
  20. procedure Execute; virtual; abstract;
  21. // IOTARepositoryWizard
  22. function GetAuthor: string;
  23. function GetComment: string; virtual;
  24. function GetGlyph: Cardinal; virtual;
  25. function GetPage: string;
  26. // IOTARepositoryWizard60
  27. function GetDesigner: string;
  28. {$IFDEF DELPHI8}
  29. // IOTARepositoryWizard80
  30. function GetGalleryCategory: IOTAGalleryCategory; virtual;
  31. function GetPersonality: string; virtual;
  32. property GalleryCategory: IOTAGalleryCategory read GetGalleryCategory;
  33. property Personality: string read GetPersonality;
  34. {$ENDIF}
  35. end;
  36. { TWzOTACustomCreator }
  37. TWzOTACustomCreator = class(TInterfacedObject, IOTACreator)
  38. protected
  39. // IOTACreator
  40. function GetCreatorType: string; virtual; abstract;
  41. function GetExisting: Boolean; virtual;
  42. function GetFileSystem: string; virtual;
  43. function GetOwner: IOTAModule; virtual;
  44. function GetUnnamed: Boolean; virtual;
  45. end;
  46. { TWzOTAFormCreator }
  47. TWzOTAFormCreator = class(TWzOTACustomCreator, IOTAModuleCreator)
  48. private
  49. FFormTemplate: string;
  50. FImplTemplate: string;
  51. FIntfTemplate: string;
  52. function CreateOTAFile(const ATemplate, AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
  53. protected
  54. function ExpandTemplate(const ATemplate, AModuleIdent, AFormIdent, AAncestorIdent: string): string; virtual;
  55. // IOTACreator
  56. function GetCreatorType: string; override;
  57. // IOTAModuleCreator
  58. function GetAncestorName: string; virtual;
  59. function GetFormName: string; virtual;
  60. function GetImplFileName: string; virtual;
  61. function GetIntfFileName: string; virtual;
  62. function GetMainForm: Boolean; virtual;
  63. function GetShowForm: Boolean; virtual;
  64. function GetShowSource: Boolean; virtual;
  65. function NewFormFile(const FormIdent, AncestorIdent: string): IOTAFile; virtual;
  66. function NewImplSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile; virtual;
  67. function NewIntfSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile; virtual;
  68. procedure FormCreated(const FormEditor: IOTAFormEditor); virtual;
  69. public
  70. constructor Create(const AFormTemplate, AImplTemplate, AIntfTemplate: string);
  71. //
  72. property FormTemplate: string read FFormTemplate;
  73. property ImplTemplate: string read FImplTemplate;
  74. property IntfTemplate: string read FIntfTemplate;
  75. end;
  76. { TWzOTACustomProjectCreator }
  77. TWzOTACustomProjectCreator = class(TWzOTACustomCreator,
  78. IOTAProjectCreator50,
  79. {$IFDEF DELPHI8}
  80. IOTAProjectCreator80,
  81. {$ENDIF}
  82. {$IFDEF DELPHI16}
  83. IOTAProjectCreator160,
  84. {$ENDIF}
  85. IOTAProjectCreator)
  86. protected
  87. // IOTACreator
  88. function GetOwner: IOTAModule; override;
  89. // IOTAProjectCreator
  90. function GetFileName: string; virtual;
  91. function GetOptionFileName: string; // deprecated;
  92. function GetShowSource: Boolean; virtual;
  93. function NewOptionSource(const ProjectName: string): IOTAFile; // deprecated;
  94. function NewProjectSource(const ProjectName: string): IOTAFile; virtual;
  95. procedure NewDefaultModule; // deprecated;
  96. procedure NewProjectResource(const Project: IOTAProject); virtual;
  97. // IOTAProjectCreator50
  98. procedure NewDefaultProjectModule(const Project: IOTAProject); virtual;
  99. {$IFDEF DELPHI8}
  100. // IOTAProjectCreator80
  101. function GetProjectPersonality: string;
  102. {$ENDIF}
  103. {$IFDEF DELPHI16}
  104. // IOTAProjectCreator160
  105. function GetFrameworkType: string;
  106. function GetPlatforms: TArray<string>;
  107. function GetPreferredPlatform: string;
  108. procedure SetInitialOptions(const NewProject: IOTAProject);
  109. {$ENDIF}
  110. end;
  111. function wzGetActiveProject: IOTAProject;
  112. function wzGetActiveProjectFileName: string;
  113. procedure wzRegisterPackageWizard(AWizard: TWzOTACustomRepositoryWizard);
  114. implementation
  115. uses
  116. {$IFDEF DELPHI16}
  117. PlatformAPI,
  118. {$ENDIF}
  119. {$IFNDEF DELPHI11}
  120. ToolIntf, ExptIntf,
  121. {$ENDIF}
  122. SysUtils;
  123. function wzGetActiveProject: IOTAProject;
  124. {$IFDEF DELPHI9}
  125. begin
  126. Result := GetActiveProject;
  127. end;
  128. {$ELSE}
  129. var
  130. AProjectGroup: IOTAProjectGroup;
  131. AModuleServices: IOTAModuleServices;
  132. I: Integer;
  133. begin
  134. Result := nil;
  135. if Assigned(BorlandIDEServices) then
  136. begin
  137. AProjectGroup := nil;
  138. AModuleServices := BorlandIDEServices as IOTAModuleServices;
  139. for I := 0 to AModuleServices.ModuleCount - 1 do
  140. begin
  141. if Supports(AModuleServices.Modules[I], IOTAProjectGroup, AProjectGroup) then
  142. Break;
  143. end;
  144. if AProjectGroup <> nil then
  145. Result := AProjectGroup.ActiveProject
  146. else
  147. if not Supports(AModuleServices.CurrentModule, IOTAProject, Result) then
  148. Result := nil;
  149. end;
  150. end;
  151. {$ENDIF}
  152. function wzGetActiveProjectFileName: string;
  153. var
  154. AProject: IOTAProject;
  155. begin
  156. {$IFNDEF DELPHI11}
  157. if Assigned(ToolServices) then
  158. Result := ToolServices.GetProjectName
  159. else
  160. {$ENDIF}
  161. begin
  162. AProject := wzGetActiveProject;
  163. if AProject <> nil then
  164. Result := AProject.FileName
  165. else
  166. Result := '';
  167. end;
  168. end;
  169. procedure wzRegisterPackageWizard(AWizard: TWzOTACustomRepositoryWizard);
  170. begin
  171. {$IFNDEF DELPHI8}
  172. if AWizard.Personality <> wzopDelphi then
  173. begin
  174. FreeAndNil(AWizard);
  175. Exit;
  176. end;
  177. {$ENDIF}
  178. RegisterPackageWizard(AWizard);
  179. end;
  180. { TWzOTACustomRepositoryWizard }
  181. function TWzOTACustomRepositoryWizard.GetIDString: string;
  182. begin
  183. Result := ClassName;
  184. end;
  185. function TWzOTACustomRepositoryWizard.GetState: TWizardState;
  186. begin
  187. Result := [wsEnabled];
  188. end;
  189. function TWzOTACustomRepositoryWizard.GetAuthor: string;
  190. begin
  191. Result := Author;
  192. end;
  193. function TWzOTACustomRepositoryWizard.GetComment: string;
  194. begin
  195. Result := '';
  196. end;
  197. function TWzOTACustomRepositoryWizard.GetGlyph: Cardinal;
  198. begin
  199. Result := 0;
  200. end;
  201. function TWzOTACustomRepositoryWizard.GetPage: string;
  202. begin
  203. Result := PageName;
  204. end;
  205. function TWzOTACustomRepositoryWizard.GetDesigner: string;
  206. begin
  207. Result := dVCL;
  208. end;
  209. {$IFDEF DELPHI8}
  210. function TWzOTACustomRepositoryWizard.GetGalleryCategory: IOTAGalleryCategory;
  211. begin
  212. result := NIL;
  213. end;
  214. function TWzOTACustomRepositoryWizard.GetPersonality: string;
  215. begin
  216. result := sDelphiPersonality;
  217. end;
  218. {$ENDIF}
  219. { TWzOTACustomCreator }
  220. function TWzOTACustomCreator.GetExisting: Boolean;
  221. begin
  222. Result := False;
  223. end;
  224. function TWzOTACustomCreator.GetFileSystem: string;
  225. begin
  226. Result := '';
  227. end;
  228. function TWzOTACustomCreator.GetOwner: IOTAModule;
  229. begin
  230. Result := wzGetActiveProject;
  231. end;
  232. function TWzOTACustomCreator.GetUnnamed: Boolean;
  233. begin
  234. Result := True;
  235. end;
  236. { TWzOTAFormCreator }
  237. constructor TWzOTAFormCreator.Create(const AFormTemplate, AImplTemplate, AIntfTemplate: string);
  238. begin
  239. inherited Create;
  240. FFormTemplate := AFormTemplate;
  241. FImplTemplate := AImplTemplate;
  242. FIntfTemplate := AIntfTemplate;
  243. end;
  244. function TWzOTAFormCreator.ExpandTemplate(
  245. const ATemplate, AModuleIdent, AFormIdent, AAncestorIdent: string): string;
  246. begin
  247. Result := ATemplate;
  248. Result := StringReplace(Result, '%FormIdent%', AFormIdent, [rfReplaceAll]);
  249. Result := StringReplace(Result, '%AncestorIdent%', AAncestorIdent, [rfReplaceAll]);
  250. Result := StringReplace(Result, '%ModuleIdent%', AModuleIdent, [rfReplaceAll]);
  251. end;
  252. function TWzOTAFormCreator.GetCreatorType: string;
  253. begin
  254. Result := sForm;
  255. end;
  256. function TWzOTAFormCreator.GetAncestorName: string;
  257. begin
  258. Result := '';
  259. end;
  260. function TWzOTAFormCreator.GetFormName: string;
  261. begin
  262. Result := '';
  263. end;
  264. function TWzOTAFormCreator.GetImplFileName: string;
  265. begin
  266. Result := '';
  267. end;
  268. function TWzOTAFormCreator.GetIntfFileName: string;
  269. begin
  270. Result := '';
  271. end;
  272. function TWzOTAFormCreator.GetMainForm: Boolean;
  273. begin
  274. Result := False;
  275. end;
  276. function TWzOTAFormCreator.GetShowForm: Boolean;
  277. begin
  278. Result := True;
  279. end;
  280. function TWzOTAFormCreator.GetShowSource: Boolean;
  281. begin
  282. Result := True;
  283. end;
  284. function TWzOTAFormCreator.NewFormFile(const FormIdent, AncestorIdent: string): IOTAFile;
  285. begin
  286. Result := CreateOTAFile(FormTemplate, '', FormIdent, AncestorIdent);
  287. end;
  288. function TWzOTAFormCreator.NewImplSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile;
  289. begin
  290. Result := CreateOTAFile(ImplTemplate, ModuleIdent, FormIdent, AncestorIdent);
  291. end;
  292. function TWzOTAFormCreator.NewIntfSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile;
  293. begin
  294. Result := CreateOTAFile(IntfTemplate, ModuleIdent, FormIdent, AncestorIdent);
  295. end;
  296. procedure TWzOTAFormCreator.FormCreated(const FormEditor: IOTAFormEditor);
  297. begin
  298. end;
  299. function TWzOTAFormCreator.CreateOTAFile(const ATemplate, AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
  300. begin
  301. if ATemplate <> '' then
  302. Result := TOTAFile.Create(ExpandTemplate(ATemplate, AModuleIdent, AFormIdent, AAncestorIdent))
  303. else
  304. Result := nil;
  305. end;
  306. { TWzOTACustomProjectCreator }
  307. function TWzOTACustomProjectCreator.GetOwner: IOTAModule;
  308. begin
  309. Result := nil;
  310. end;
  311. function TWzOTACustomProjectCreator.GetFileName: string;
  312. begin
  313. Result := '';
  314. end;
  315. function TWzOTACustomProjectCreator.GetOptionFileName: string;
  316. begin
  317. Result := '';
  318. end;
  319. function TWzOTACustomProjectCreator.GetShowSource: Boolean;
  320. begin
  321. Result := False;
  322. end;
  323. function TWzOTACustomProjectCreator.NewOptionSource(const ProjectName: string): IOTAFile;
  324. begin
  325. Result := nil;
  326. end;
  327. function TWzOTACustomProjectCreator.NewProjectSource(const ProjectName: string): IOTAFile;
  328. begin
  329. Result := nil; // Default project source
  330. end;
  331. procedure TWzOTACustomProjectCreator.NewDefaultModule;
  332. begin
  333. // do nothing
  334. end;
  335. procedure TWzOTACustomProjectCreator.NewProjectResource(const Project: IOTAProject);
  336. begin
  337. // do nothing
  338. end;
  339. procedure TWzOTACustomProjectCreator.NewDefaultProjectModule(const Project: IOTAProject);
  340. begin
  341. // do nothing
  342. end;
  343. {$IFDEF DELPHI8}
  344. function TWzOTACustomProjectCreator.GetProjectPersonality: string;
  345. begin
  346. Result := sDelphiPersonality;
  347. end;
  348. {$ENDIF}
  349. {$IFDEF DELPHI16}
  350. function TWzOTACustomProjectCreator.GetFrameworkType: string;
  351. begin
  352. Result := sFrameworkTypeVCL;
  353. end;
  354. function TWzOTACustomProjectCreator.GetPlatforms: TArray<string>;
  355. begin
  356. SetLength(Result, 2);
  357. Result[0] := cWin32Platform;
  358. Result[1] := cWin64Platform;;
  359. end;
  360. function TWzOTACustomProjectCreator.GetPreferredPlatform: string;
  361. begin
  362. Result := cWin32Platform;
  363. end;
  364. procedure TWzOTACustomProjectCreator.SetInitialOptions(const NewProject: IOTAProject);
  365. begin
  366. // do nothing
  367. end;
  368. {$ENDIF}
  369. end.