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

Email服务器

开发平台:

Delphi

  1. unit XPDUnitProject;
  2. {
  3.  $Source: /cvsroot/dunit/dunit/Contrib/DUnitWizard/Source/DelphiExperts/DUnitProject/XPDUnitProject.pas,v $
  4.  $Revision: 1.2 $
  5.  $Date: 2004/05/03 15:07:16 $
  6.  Last amended by $Author: pvspain $
  7.  $State: Exp $
  8.  TXPDUnitProjectForm:
  9.  Copyright (c) 2003 by The Excellent Programming Company Pty Ltd
  10.  (Australia) (ABN 27 005 394 918). All rights reserved.
  11.  Contact Paul Spain via email: paul@xpro.com.au
  12.  This unit is free software; you can redistribute it and/or
  13.  modify it under the terms of the GNU Lesser General Public
  14.  License as published by the Free Software Foundation; either
  15.  version 2.1 of the License, or (at your option) any later version.
  16.  This unit is distributed in the hope that it will be useful,
  17.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  19.  Lesser General Public License for more details.
  20.  You should have received a copy of the GNU Lesser General Public
  21.  License along with this unit; if not, the license can be viewed at:
  22.  http://www.gnu.org/copyleft/lesser.html
  23.  or write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  24.  Boston, MA  02111-1307  USA
  25.  }
  26. interface
  27. {$I JEDI.inc}
  28. uses
  29.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  30.   StdCtrls, Buttons, ExtCtrls, XPDUnitCommon, IniFiles;
  31. type
  32. ////////////////////////////////////////////////////////////////////////////
  33. ///          TXPDUnitProjectForm declaration
  34. ////////////////////////////////////////////////////////////////////////////
  35.   TXPDUnitProjectForm = class(TForm)
  36.     Label1: TLabel;
  37.     ProjectName: TEdit;
  38.     ProjectFileName: TEdit;
  39.     Label2: TLabel;
  40.     ProjectPath: TEdit;
  41.     Label3: TLabel;
  42.     SelectPath: TSpeedButton;
  43.     BitBtn1: TBitBtn;
  44.     CreateProject: TBitBtn;
  45.     AddToProjectGroup: TCheckBox;
  46.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  47.     procedure FormCreate(Sender: TObject);
  48.     procedure FormShow(Sender: TObject);
  49.     procedure FormDestroy(Sender: TObject);
  50.     procedure ProjectNameChange(Sender: TObject);
  51.     procedure CreateProjectClick(Sender: TObject);
  52.     procedure SelectPathClick(Sender: TObject);
  53.   private
  54.     { Private declarations }
  55.     FParameters: IXPDUnitParameters;
  56.     FPersistedValues: TIniFile;
  57.   public
  58.     { Public declarations }
  59.     procedure GetParameters(out Parameters: IXPDUnitParameters);
  60.   end;
  61. ///////////////////////////////////////////////////////////////////////////////
  62. //  Unit entry point
  63. ///////////////////////////////////////////////////////////////////////////////
  64. function ShowXPDUnitProjectForm(
  65.   out Parameters: IXPDUnitParameters): boolean;
  66. implementation
  67. uses
  68.   XPDUnitParameters,    // CreateXPDUnitParameters()
  69. {$IFNDEF DELPHI6_UP}
  70.   FileCtrl;             // SelectDirectory()
  71. {$ELSE}               
  72.   QDialogs;             // SelectDirectory()
  73. {$ENDIF}
  74. const CVSID: string = '$Header: /cvsroot/dunit/dunit/Contrib/DUnitWizard/Source/DelphiExperts/DUnitProject/XPDUnitProject.pas,v 1.2 2004/05/03 15:07:16 pvspain Exp $';
  75. {$R *.DFM}
  76. var
  77.   LForm: TXPDUnitProjectForm;
  78. ///////////////////////////////////////////////////////////////////////////////
  79. //  Unit entry point
  80. ///////////////////////////////////////////////////////////////////////////////
  81. function ShowXPDUnitProjectForm(
  82.   out Parameters: IXPDUnitParameters): boolean;
  83. begin
  84.   // Singleton instance of form. Destroyed in finalization section
  85.   // Don't assign Owner as this form is part of a package, which can be removed
  86.   // from IDE at any time. We want to be in control of form destruction.
  87.   if not System.Assigned(LForm) then
  88.     LForm := TXPDUnitProjectForm.Create(nil);
  89.   // Extract user's settings
  90.   LForm.GetParameters(Parameters);
  91.   // Modal form
  92.   Result := LForm.ShowModal = mrOK;
  93. end;
  94. ////////////////////////////////////////////////////////////////////////////
  95. ///          TXPDUnitProjectForm implementation
  96. ////////////////////////////////////////////////////////////////////////////
  97. procedure TXPDUnitProjectForm.FormCreate(Sender: TObject);
  98. begin
  99.   FParameters := XPDUnitParameters.CreateXPDUnitParameters;
  100.   FPersistedValues := TIniFile.Create(XPDUnitSetupFile);
  101. end;
  102. procedure TXPDUnitProjectForm.FormShow(Sender: TObject);
  103. begin
  104.   // Reload our persisted data
  105.   Width := FPersistedValues.ReadInteger('ProjectForm', 'Width', Width);
  106.   Height := FPersistedValues.ReadInteger('ProjectForm', 'Height', Height);
  107.   AddToProjectGroup.Checked := FPersistedValues.ReadBool(sBehaviours,
  108.     iAddProjectToGroup, dAddProjectToGroup);
  109.   // Initialise edits
  110.   FParameters.EvaluateValues;
  111.   ProjectName.Text := FParameters.Values[dpProjectName];
  112.   // Project filename initialised by ProjectNameChange()
  113.   ProjectPath.Text := FParameters.Values[dpProjectPath];
  114. end;
  115. procedure TXPDUnitProjectForm.FormDestroy(Sender: TObject);
  116. begin
  117.   FPersistedValues.Free;
  118.   // Clear local reference
  119.   LForm := nil;
  120. end;
  121. procedure TXPDUnitProjectForm.FormClose(Sender: TObject;
  122.   var Action: TCloseAction);
  123. begin
  124.   // This is an infrequently used form in the plug-in, so destroy on close
  125.   Action := caFree;
  126.   // Persist our geometry
  127.   FPersistedValues.WriteInteger('ProjectForm', 'Width', Width);
  128.   FPersistedValues.WriteInteger('ProjectForm', 'Height', Height);
  129. end;
  130. procedure TXPDUnitProjectForm.ProjectNameChange(Sender: TObject);
  131. begin
  132.   ProjectFileName.Text := SysUtils.Format('%s.dpr',
  133.     [SysUtils.Trim(ProjectName.Text)]);
  134. end;
  135. procedure TXPDUnitProjectForm.CreateProjectClick(Sender: TObject);
  136. begin
  137.   // Persist our settings
  138.   FPersistedValues.WriteBool(sBehaviours, iAddProjectToGroup,
  139.     AddToProjectGroup.Checked);
  140.   // Apply user values
  141.   FParameters.Values[dpProjectName] := SysUtils.Trim(ProjectName.Text);
  142.   FParameters.Values[dpProjectPath] := SysUtils.Trim(ProjectPath.Text);
  143.   // Close form now
  144.   // * parameters handed on via GetParameters()
  145.   // * ModalResult is mrOK
  146. end;
  147. procedure TXPDUnitProjectForm.SelectPathClick(Sender: TObject);
  148. const
  149.   PathDelimiter  = '';
  150. var
  151. {$IFDEF DELPHI7_UP}
  152.   Directory: WideString;
  153. {$ELSE}
  154.   Directory: string;
  155. {$ENDIF}
  156. begin
  157.   Directory := SysUtils.Trim(ProjectPath.Text);
  158.   if SelectDirectory('Choose TestProject directory...', '', Directory) then
  159.     ProjectPath.Text := Directory + PathDelimiter;
  160. end;
  161. procedure TXPDUnitProjectForm.GetParameters(
  162.   out Parameters: IXPDUnitParameters);
  163. begin
  164.   Parameters := FParameters;
  165. end;
  166. initialization
  167. finalization
  168.   LForm.Free;
  169. end.