home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 25: Programming / pc_actual_25.iso / Delphi / eXpertDevelopmentKit / SOURCE / XDKGEN.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-01-26  |  8.3 KB  |  267 lines

  1. {*******************************************************}
  2. {                                                       }
  3. {       eXpert Development Kit                          }
  4. {                                                       }
  5. {       Copyright (c) 1996,97 Sergey Orlik              }
  6. {       - product manager of Borland Russia             }
  7. {                                                       }
  8. {*******************************************************}
  9. unit XDKGen;
  10.  
  11. interface
  12. uses
  13.   Windows, SysUtils, Classes, Graphics, Forms,
  14.   DsgnIntf, ExptIntf, EditIntf, FileIntf, ToolIntf, LibIntf;
  15.  
  16. const
  17.   CRLF = #13#10;        // inserting to begin new source code string 
  18.   CRLF2 = #13#10#13#10;
  19.  
  20.   DefaultModuleFlags = [cmShowSource,cmShowForm,cmMarkModified,cmAddToProject,cmUnNamed];
  21.  
  22. type
  23.   TProjectSourceWritingEvent = function (const ProjectName:string):string of object;
  24.   TModuleSourceWritingEvent = function (UnitIdent, FormIdent, AncestorIdent: string): string of object;
  25.   TModuleCreatedEvent = procedure (Sender:TObject; IModule:TIModuleInterface) of object;
  26.   TFormCreatedEvent = procedure (Sender:TObject; IForm:TIFormInterface) of object;
  27.  
  28.   TxdkProjectCreator = class;
  29.   TxdkModuleCreator = class;
  30.  
  31.   TxdkProjectCreator = class(TComponent)
  32.   private
  33.     FExisting     : boolean;
  34.     FFlags        : TCreateProjectFlags;
  35.     FFileName     : string;
  36.     FFileSystem   : string;
  37.     FMainModule   : TxdkModuleCreator;
  38.     FOnSourceWriting  : TProjectSourceWritingEvent;
  39.     FOnResourceCreated: TModuleCreatedEvent;
  40.   protected
  41.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  42.   public
  43.     constructor Create(AOwner:TComponent); override;
  44.     destructor Destroy; override;
  45.     procedure ProjectCreate;
  46.   published
  47.     property Existing:boolean read FExisting write FExisting;
  48.     property Flags:TCreateProjectFlags read FFlags write FFlags;
  49.     property FileName:string read FFileName write FFileName;
  50.     property FileSystem:string read FFileSystem write FFileSystem;
  51.     property MainModule:TxdkModuleCreator read FMainModule write FMainModule;
  52.     property OnSourceWriting:TProjectSourceWritingEvent read FOnSourceWriting write FOnSourceWriting;
  53.     property OnResourceCreated:TModuleCreatedEvent read FOnResourceCreated write FOnResourceCreated;
  54.   end;
  55.  
  56.   TxdkModuleCreator = class(TComponent)
  57.   private
  58.     FExisting       : boolean;
  59.     FAncestorName   : string;
  60.     FFormName       : string;
  61.     FFlags          : TCreateModuleFlags;
  62.     FFileName       : string;
  63.     FFileSystem     : string;
  64.     FOnSourceWriting: TModuleSourceWritingEvent;
  65.     FOnModuleCreated: TModuleCreatedEvent;
  66.     FOnFormCreated  : TFormCreatedEvent;
  67.   public
  68.     constructor Create(AOwner:TComponent); override;
  69.     procedure ModuleCreate;
  70.   published
  71.     property Existing:boolean read FExisting write FExisting;
  72.     property AncestorName:string read FAncestorName write FAncestorName;
  73.     property FormName:string read FFormName write FFormName;
  74.     property Flags:TCreateModuleFlags read FFlags write FFlags default DefaultModuleFlags;
  75.     property FileName:string read FFileName write FFileName;
  76.     property FileSystem:string read FFileSystem write FFileSystem;
  77.     property OnSourceWriting:TModuleSourceWritingEvent read FOnSourceWriting write FOnSourceWriting;
  78.     property OnModuleCreated:TModuleCreatedEvent read FOnModuleCreated write FOnModuleCreated;
  79.     property OnFormCreated:TFormCreatedEvent read FOnFormCreated write FOnFormCreated;
  80.   end;
  81.  
  82. //================================================================
  83. implementation
  84. //================================================================
  85.  
  86. type
  87.   TxdkIProjectCreator = class(TIProjectCreator)
  88.   private
  89.     FCreator : TxdkProjectCreator;
  90.   public
  91.     constructor Create(ACreator:TxdkProjectCreator);
  92.     function Existing:boolean; override;
  93.     function GetFileName:string; override;
  94.     function GetFileSystem:string; override;
  95.     function NewProjectSource(const ProjectName:string):string; override;
  96.     procedure NewDefaultModule; override;
  97.     procedure NewProjectResource(Module:TIModuleInterface); override;
  98.   end;
  99.  
  100.   TxdkIModuleCreator = class(TIModuleCreator)
  101.   private
  102.     FCreator : TxdkModuleCreator;
  103.   public
  104.     constructor Create(ACreator:TxdkModuleCreator);
  105.     function Existing:boolean; override;
  106.     function GetAncestorName:string; override;
  107.     function GetFileName:string; override;
  108.     function GetFileSystem:string; override;
  109.     function GetFormName:string; override;
  110.     function NewModuleSource(UnitIdent, FormIdent, AncestorIdent: string): string; override;
  111.     procedure FormCreated(Form: TIFormInterface); override;
  112.   end;
  113.  
  114. //================================================================
  115. // TxdkIProjectCreator
  116.  
  117. constructor TxdkIProjectCreator.Create(ACreator:TxdkProjectCreator);
  118. begin
  119.   inherited Create;
  120.   FCreator:=ACreator;
  121. end;
  122.  
  123. function TxdkIProjectCreator.Existing:boolean;
  124. begin
  125.   Result:=FCreator.FExisting;
  126. end;
  127.  
  128. function TxdkIProjectCreator.GetFileName:string;
  129. begin
  130.   Result:=FCreator.FFileName;
  131. end;
  132.  
  133. function TxdkIProjectCreator.GetFileSystem:string;
  134. begin
  135.   Result:=FCreator.FFileSystem;
  136. end;
  137.  
  138. function TxdkIProjectCreator.NewProjectSource(const ProjectName:string):string;
  139. begin
  140.   if Assigned(FCreator.FOnSourceWriting) then
  141.     Result:=FCreator.FOnSourceWriting(ProjectName);
  142. end;
  143.  
  144. procedure TxdkIProjectCreator.NewDefaultModule;
  145. begin
  146.   if Assigned(FCreator.FMainModule) then
  147.     FCreator.FMainModule.ModuleCreate;
  148. end;
  149.  
  150. procedure TxdkIProjectCreator.NewProjectResource(Module:TIModuleInterface);
  151. begin
  152.   if Assigned(FCreator.FOnResourceCreated) then
  153.     FCreator.FOnResourceCreated(FCreator,Module);
  154. end;
  155.  
  156. //================================================================
  157. // TxdkProjectCreator
  158.  
  159. constructor TxdkProjectCreator.Create(AOwner:TComponent);
  160. begin
  161.   inherited Create(AOwner);
  162.   FMainModule:=nil;
  163. end;
  164.  
  165. destructor TxdkProjectCreator.Destroy;
  166. begin
  167.   FMainModule:=nil;
  168.   inherited Destroy;
  169. end;
  170.  
  171. procedure TxdkProjectCreator.Notification(AComponent: TComponent; Operation: TOperation);
  172. begin
  173.   inherited Notification(AComponent,Operation);
  174.   if (Operation=opRemove) and (AComponent=FMainModule) then
  175.     FMainModule:=nil;
  176. end;
  177.  
  178. procedure TxdkProjectCreator.ProjectCreate;
  179. var
  180.   IProjectCreator : TxdkIProjectCreator;
  181. begin
  182.   IProjectCreator:=TxdkIProjectCreator.Create(Self);
  183.   try
  184.     ToolServices.ProjectCreate(IProjectCreator,FFlags);
  185.   finally
  186.     IProjectCreator.Free;
  187.   end;
  188. end;
  189.  
  190. //================================================================
  191. // TxdkIModuleCreator
  192.  
  193. constructor TxdkIModuleCreator.Create(ACreator:TxdkModuleCreator);
  194. begin
  195.   inherited Create;
  196.   FCreator:=ACreator;
  197. end;
  198.  
  199. function TxdkIModuleCreator.Existing:boolean;
  200. begin
  201.   Result:=FCreator.FExisting;
  202. end;
  203.  
  204. function TxdkIModuleCreator.GetAncestorName:string;
  205. begin
  206.   Result:=FCreator.FAncestorName;
  207. end;
  208.  
  209. function TxdkIModuleCreator.GetFileName:string;
  210. begin
  211.   Result:=FCreator.FFileName;
  212. end;
  213.  
  214. function TxdkIModuleCreator.GetFileSystem:string;
  215. begin
  216.   Result:=FCreator.FFileSystem;
  217. end;
  218.  
  219. function TxdkIModuleCreator.GetFormName:string;
  220. begin
  221.   Result:=FCreator.FFormName;
  222. end;
  223.  
  224. function TxdkIModuleCreator.NewModuleSource(UnitIdent,FormIdent,AncestorIdent:string):string;
  225. begin
  226.   if Assigned(FCreator.FOnSourceWriting) then
  227.     Result:=FCreator.FOnSourceWriting(UnitIdent,FormIdent,AncestorIdent);
  228. end;
  229.  
  230. procedure TxdkIModuleCreator.FormCreated(Form:TIFormInterface);
  231. begin
  232.   if Assigned(FCreator.FOnFormCreated) then
  233.     FCreator.FOnFormCreated(FCreator,Form);
  234. end;
  235.  
  236. //================================================================
  237. // TxdkModuleCreator
  238.  
  239. constructor TxdkModuleCreator.Create(AOwner:TComponent);
  240. begin
  241.   inherited Create(AOwner);
  242.   FFlags:=DefaultModuleFlags;
  243. end;
  244.  
  245. procedure TxdkModuleCreator.ModuleCreate;
  246. var
  247.   IModuleCreator : TxdkIModuleCreator;
  248.   IModule : TIModuleInterface;
  249. begin
  250.   IModuleCreator:=TxdkIModuleCreator.Create(Self);
  251.   try
  252.     IModule:=ToolServices.ModuleCreate(IModuleCreator,FFlags);
  253.     try
  254.       if Assigned(FOnModuleCreated) then
  255.         FOnModuleCreated(Self,IModule);
  256.     finally
  257.      IModule.Free;
  258.     end;
  259.   finally
  260.     IModuleCreator.Free;
  261.   end;
  262. end;
  263.  
  264. //================================================================
  265.  
  266. end.
  267.