XP_OTACreators.pas
上传用户:yjb1804
上传日期:2021-01-30
资源大小:3105k
文件大小:12k
源码类别:

Email服务器

开发平台:

Delphi

  1. unit XP_OTACreators;
  2. {
  3.  $Source: /cvsroot/dunit/dunit/Contrib/DUnitWizard/Source/DelphiExperts/Common/XP_OTACreators.pas,v $
  4.  $Revision: 1.2 $
  5.  $Date: 2004/05/03 15:07:15 $
  6.  Last amended by $Author: pvspain $
  7.  $State: Exp $
  8.  XP_OTAProjectCreator:
  9.  Base class for IOTACreator and descendant interface implementations
  10.  Copyright (c) 2001 by The Excellent Programming Company Pty Ltd
  11.  (Australia) (ABN 27 005 394 918).
  12.  Contact Paul Spain via email: paul@xpro.com.au
  13.  This unit is free software; you can redistribute it and/or
  14.  modify it under the terms of the GNU Lesser General Public
  15.  License as published by the Free Software Foundation; either
  16.  version 2.1 of the License, or (at your option) any later version.
  17.  This unit is distributed in the hope that it will be useful,
  18.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  20.  Lesser General Public License for more details.
  21.  You should have received a copy of the GNU Lesser General Public
  22.  License along with this unit; if not, the license can be viewed at:
  23.  http://www.gnu.org/copyleft/lesser.html
  24.  or write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  25.  Boston, MA  02111-1307  USA
  26.  }
  27. interface
  28. {$I JEDI.inc}
  29. uses
  30.   ToolsAPI;
  31. //////////////////////////////////////////////////////////////////////////////
  32. ///     TXP_OTACreator declaration
  33. //////////////////////////////////////////////////////////////////////////////
  34. type
  35.  TXP_OTACreator = class (TInterfacedObject, IOTACreator)
  36.  protected
  37.    FNamed: boolean;
  38.    FAbsoluteFileName: string;
  39.    // IOTACreator implementation
  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. //////////////////////////////////////////////////////////////////////////////
  47. ///     TXP_OTAModuleCreator declaration
  48. //////////////////////////////////////////////////////////////////////////////
  49. type
  50.   TXP_OTAModuleCreator = class (TXP_OTACreator, IOTAModuleCreator)
  51.   protected
  52.     // IOTACreator implementation
  53.     function GetCreatorType: string; override;
  54.     function GetOwner: IOTAModule; override;
  55.     // IOTAModuleCreator implementation
  56.     function GetAncestorName: string; virtual;
  57.     function GetImplFileName: string; virtual;
  58.     function GetIntfFileName: string;
  59.     function GetFormName: string; virtual;
  60.     function GetMainForm: Boolean; virtual;
  61.     function GetShowForm: Boolean; virtual;
  62.     function GetShowSource: Boolean; virtual;
  63.     function NewIntfSource(
  64.       const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile;
  65.     procedure FormCreated(const FormEditor: IOTAFormEditor); virtual;
  66.     // Subclasses must override NewFormFile() and
  67.     // NewImplSource()
  68.     // Create and return the Form resource for this new module if applicable
  69.     function NewFormFile(const FormIdent,
  70.       AncestorIdent: string): IOTAFile; virtual; abstract;
  71.     // Create and return the Implementation source for this module.
  72.     // (Delphi unit)
  73.     function NewImplSource(const ModuleIdent, FormIdent,
  74.       AncestorIdent: string): IOTAFile; virtual; abstract;
  75.   public
  76.     constructor Create(const AUnitName: string = '');
  77.   end;
  78. //////////////////////////////////////////////////////////////////////////////
  79. ///     TXP_OTAUnitCreator declaration
  80. //////////////////////////////////////////////////////////////////////////////
  81. type
  82.   TXP_OTAUnitCreator = class (TXP_OTAModuleCreator)
  83.   protected
  84.     // IOTACreator implementation
  85.     function GetCreatorType: string; override;
  86.     // IOTAModuleCreator implementation
  87.     function NewFormFile(const FormIdent,
  88.       AncestorIdent: string): IOTAFile; override;
  89.     // Subclasses must override NewImplSource()
  90.    end;
  91. //////////////////////////////////////////////////////////////////////////////
  92. ///     TXP_OTAProjectCreator declaration
  93. //////////////////////////////////////////////////////////////////////////////
  94. type
  95.   TXP_OTAProjectCreator = class (TXP_OTACreator, IOTAProjectCreator)
  96.   protected
  97.     // IOTACreator implementation
  98.     function GetCreatorType: string; override;
  99.     function GetOwner: IOTAModule; override;
  100.     // IOTAProjectCreator implementation
  101.     function GetFileName: string; virtual;
  102.     function GetOptionFileName: string; virtual;
  103.     function GetShowSource: Boolean; virtual;
  104.     procedure NewDefaultModule; virtual;
  105.     function NewOptionSource(const ProjectName: string): IOTAFile; virtual;
  106.     procedure NewProjectResource(const Project: IOTAProject); virtual;
  107.     // Subclasses must override NewProjectSource()
  108.     function NewProjectSource(
  109.      const ProjectName: string): IOTAFile; virtual; abstract;
  110.   public
  111.     constructor Create(const AProjectName: string = '');
  112.   end;
  113. implementation
  114. uses
  115.   SysUtils,           // ExpandFileName() ...
  116. {$IFNDEF DELPHI6_UP}
  117.   FileCtrl,           // ForceDirectories()
  118. {$ENDIF}
  119.   XP_OTAUtils;        // GetCurrentProjectGroup()
  120. const CVSID: string = '$Header: /cvsroot/dunit/dunit/Contrib/DUnitWizard/Source/DelphiExperts/Common/XP_OTACreators.pas,v 1.2 2004/05/03 15:07:15 pvspain Exp $';
  121. //////////////////////////////////////////////////////////////////////////////
  122. ///     TXP_OTACreator implementation
  123. //////////////////////////////////////////////////////////////////////////////
  124. function TXP_OTACreator.GetExisting: Boolean;
  125. begin
  126.   // New module
  127.   Result := false;
  128. end;
  129. function TXP_OTACreator.GetFileSystem: string;
  130. begin
  131.   // Use default (non-virtual) file system
  132.   Result := '';
  133. end;
  134. function TXP_OTACreator.GetOwner: IOTAModule;
  135. begin
  136.   // No owner
  137.   Result := nil;
  138. end;
  139. function TXP_OTACreator.GetUnnamed: Boolean;
  140. begin
  141.   // if not FNamed (default) Prompt with "Save As..."  when the user closes
  142.   // this module.
  143.   Result := not FNamed;
  144. end;
  145. //////////////////////////////////////////////////////////////////////////////
  146. ///     TXP_OTAModuleCreator implementation
  147. //////////////////////////////////////////////////////////////////////////////
  148. constructor TXP_OTAModuleCreator.Create(const AUnitName: string);
  149. begin
  150.   inherited Create;
  151.   FAbsoluteFileName := SysUtils.Trim(AUnitName);
  152.   if FAbsoluteFileName <> '' then
  153.   begin
  154.     // Ensure we have an absolute file specification for GetFileName()
  155.     FAbsoluteFileName := SysUtils.ExpandFileName(FAbsoluteFileName);
  156.     // Create as a PAS file
  157.     SysUtils.ChangeFileExt(FAbsoluteFileName, '.pas');
  158.     // Create directories as necessary
  159.     ForceDirectories(SysUtils.ExtractFilePath(FAbsoluteFileName));
  160.     // Set inherited attribute
  161.     FNamed := true;
  162.   end;
  163. end;
  164. procedure TXP_OTAModuleCreator.FormCreated(
  165.   const FormEditor: IOTAFormEditor);
  166. begin
  167.   // Called when the new form/datamodule/custom module is created
  168. end;
  169. function TXP_OTAModuleCreator.GetAncestorName: string;
  170. begin
  171.   // Return the Ancestor form name
  172.   Result := 'TForm';
  173. end;
  174. function TXP_OTAModuleCreator.GetCreatorType: string;
  175. begin
  176.   // We supply all required information
  177.   Result := '';
  178. end;
  179. function TXP_OTAModuleCreator.GetFormName: string;
  180. begin
  181.   // Return the form name (without path or extension) with a suffix of 'Form'
  182.   Result := SysUtils.ChangeFileExt(
  183.     SysUtils.ExtractFileName(FAbsoluteFileName), '') + 'Form';
  184. end;
  185. function TXP_OTAModuleCreator.GetImplFileName: string;
  186. begin
  187.   // Return the implementation filename, or blank to have the IDE create a new
  188.   // unique one. (C++ .cpp file or Delphi unit)
  189.   // Must be an absolute path
  190.   Result  := FAbsoluteFileName;
  191. end;
  192. function TXP_OTAModuleCreator.GetIntfFileName: string;
  193. begin
  194.  // Return the interface filename, or blank to have the IDE create a new
  195.  // unique one.  (C++ header) - not applicable to Delphi
  196.  Result := '';
  197. end;
  198. function TXP_OTAModuleCreator.GetMainForm: Boolean;
  199. begin
  200.   // Return True to Make this module the main form of the given Owner/Project
  201.   Result := false;
  202. end;
  203. function TXP_OTAModuleCreator.GetOwner: IOTAModule;
  204. var
  205.   Project: IOTAProject;
  206. begin
  207.   // Make the current project the owner of this module
  208.   XP_OTAUtils.GetCurrentProject(Project);
  209.   Result := Project;
  210. end;
  211. function TXP_OTAModuleCreator.GetShowForm: Boolean;
  212. begin
  213.   // Return True to show the form
  214.   Result := true;
  215. end;
  216. function TXP_OTAModuleCreator.GetShowSource: Boolean;
  217. begin
  218.   // Return True to show the source
  219.   Result := true;
  220. end;
  221. function TXP_OTAModuleCreator.NewIntfSource(const ModuleIdent, FormIdent,
  222.   AncestorIdent: string): IOTAFile;
  223. begin
  224.   // Create and return the Interface (C++ header) source for this module
  225.   Result := nil;
  226. end;
  227. //////////////////////////////////////////////////////////////////////////////
  228. ///     TXP_OTAUnitCreator implementation
  229. //////////////////////////////////////////////////////////////////////////////
  230. function TXP_OTAUnitCreator.GetCreatorType: string;
  231. begin
  232.   Result := ToolsAPI.sUnit;
  233. end;
  234. function TXP_OTAUnitCreator.NewFormFile(const FormIdent,
  235.   AncestorIdent: string): IOTAFile;
  236. begin
  237.   // No form file required for a unit...
  238.   Result := nil;
  239. end;
  240. //////////////////////////////////////////////////////////////////////////////
  241. ///     TXP_OTAProjectCreator implementation
  242. //////////////////////////////////////////////////////////////////////////////
  243. constructor TXP_OTAProjectCreator.Create(const AProjectName: string);
  244. begin
  245.   inherited Create;
  246.   FAbsoluteFileName := SysUtils.Trim(AProjectName);
  247.   if FAbsoluteFileName <> '' then
  248.   begin
  249.     // Ensure we have an absolute file specification for GetFileName()
  250.     FAbsoluteFileName := SysUtils.ExpandFileName(FAbsoluteFileName);
  251.     // Create as an application (or library) if extension not provided
  252.     if SysUtils.ExtractFileExt(FAbsoluteFileName) = '' then
  253.       FAbsoluteFileName := FAbsoluteFileName + '.dpr';
  254.     // Create directories as necessary
  255.     ForceDirectories(SysUtils.ExtractFilePath(FAbsoluteFileName));
  256.     FNamed := true;
  257.   end;
  258. end;
  259. function TXP_OTAProjectCreator.GetCreatorType: string;
  260. begin
  261.   // Invoke default application behaviour for the hard methods!
  262.   Result := ToolsAPI.sApplication;
  263. end;
  264. function TXP_OTAProjectCreator.GetFileName: string;
  265. begin
  266.   Result := FAbsoluteFileName;
  267. end;
  268. function TXP_OTAProjectCreator.GetOptionFileName: string;
  269. begin
  270.   // Invoke default application behaviour since we set ToolsAPI.sApplication
  271.   // in GetCreatorType()
  272.   Result := '';
  273. end;
  274. function TXP_OTAProjectCreator.GetOwner: IOTAModule;
  275. var
  276.   ProjectGroup: IOTAProjectGroup;
  277. begin
  278.   // Add to current project group if available - ProjectGroup is nil
  279.   // on failure
  280.   XP_OTAUtils.GetCurrentProjectGroup(ProjectGroup);
  281.   Result := ProjectGroup;
  282. end;
  283. function TXP_OTAProjectCreator.GetShowSource: Boolean;
  284. begin
  285.   // Show the project source file in the IDE source editor
  286.   Result := true;
  287. end;
  288. procedure TXP_OTAProjectCreator.NewDefaultModule;
  289. begin
  290.   // Invoke default application behaviour since we set ToolsAPI.sApplication
  291.   // in GetCreatorType()
  292. end;
  293. function TXP_OTAProjectCreator.NewOptionSource(
  294.   const ProjectName: string): IOTAFile;
  295. begin
  296.   // Invoke default application behaviour since we set ToolsAPI.sApplication
  297.   // in GetCreatorType()
  298.   Result := nil;
  299. end;
  300. procedure TXP_OTAProjectCreator.NewProjectResource(const Project: IOTAProject);
  301. begin
  302.   // Invoke default application behaviour since we set ToolsAPI.sApplication
  303.   // in GetCreatorType()
  304. end;
  305. end.