lazarus/components/projecttemplates/frmtemplatevariables.pas

149 lines
3.6 KiB
ObjectPascal

unit frmTemplateVariables;
{$mode objfpc}{$H+}
interface
uses
Classes,
// LCL
Controls, Forms, ExtCtrls, Grids, StdCtrls, EditBtn, ButtonPanel,
// ProjectTemplates
ProjectTemplates, ptstrconst;
type
{ TProjectVariablesForm }
TProjectVariablesForm = class(TForm)
ButtonPanel1: TButtonPanel;
DEDestDir: TDirectoryEdit;
EProjectName: TEdit;
ProjNameLabel: TLabel;
DEDestDirLabel: TLabel;
PDescription: TPanel;
SGVariables: TStringGrid;
procedure BOKClick(Sender: TObject);
procedure EssentialDataChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ProjectVariablesFormShow(Sender: TObject);
procedure SGVariablesSelectEditor(Sender: TObject; aCol, aRow: Integer;
var Editor: TWinControl);
private
FSChanged: Boolean;
FTemplates: TProjectTemplates;
FVariables : TStrings;
function GetProjectDir: String;
function GetProjectName: String;
procedure SetVariables(const AValue: TStrings);
public
Property Templates : TProjectTemplates Read FTemplates Write FTemplates;
Property ProjectName : String Read GetProjectName;
Property ProjectDir : String Read GetProjectDir;
Property Variables : TStrings Read FVariables Write SetVariables;
Property SettingsChanged: Boolean Read FSChanged Write FSChanged;
end;
var
ProjectVariablesForm: TProjectVariablesForm;
implementation
{$R *.lfm}
{ TProjectVariablesForm }
procedure TProjectVariablesForm.ProjectVariablesFormShow(Sender: TObject);
begin
SGVariables.Cells[0,0]:=SVariable;
SGVariables.Cells[1,0]:=SValue;
SGVariables.Cells[2,0]:=SDescription;
end;
procedure TProjectVariablesForm.SGVariablesSelectEditor(Sender: TObject; aCol,
aRow: Integer; var Editor: TWinControl);
begin
if aCol<>1 then
Editor:=nil;
end;
procedure TProjectVariablesForm.BOKClick(Sender: TObject);
Var
N,V : String;
I : Integer;
begin
For I:=0 to FVariables.Count-1 do
begin
FVariables.GetNameValue(I,N,V);
V:=SGVariables.Cells[1,I+1];
if V='' then
V:=N; // Let Value=Name if not given by user.
FVariables[i]:=N+'='+V;
end;
end;
procedure TProjectVariablesForm.EssentialDataChange(Sender: TObject);
begin
ButtonPanel1.OKButton.Enabled:=(EProjectName.Text<>'') and (DEDestDir.Text<>'');
end;
procedure TProjectVariablesForm.FormCreate(Sender: TObject);
begin
Caption := SNewFromTemplate;
ProjNameLabel.Caption:= SNameforProject;
DEDestDirLabel.Caption:= SCreateinDir;
PDescription.Caption:= SThisProject;
// This is good for most projects and can be changed later. Only directory must be selected.
EProjectName.Text:='project1';
EssentialDataChange(Nil);
end;
procedure TProjectVariablesForm.SetVariables(const AValue: TStrings);
Var
N,V : String;
I,J : Integer;
begin
FVariables:=AValue;
If (FVariables.Count=0) then
begin
SGVariables.Enabled:=False;
PDescription.Caption:=SNoAdditionalVars;
end
else
begin
SGVariables.RowCount:=FVariables.Count+1;
For I:=1 to FVariables.Count do
begin
FVariables.GetNameValue(I-1,N,V);
SGVariables.Cells[0,I]:=N;
J:=Pos('|',V);
if J>0 then
begin
SGVariables.Cells[1,I]:=copy(V,J+1,Length(V));
SGVariables.Cells[2,I]:=copy(V,1,J-1);
end
else
begin
SGVariables.Cells[1,I]:='';
SGVariables.Cells[2,I]:=V;
end;
end;
end;
end;
function TProjectVariablesForm.GetProjectDir: String;
begin
Result:=DEDestDir.Text;
end;
function TProjectVariablesForm.GetProjectName: String;
begin
Result:=EProjectName.Text;
end;
end.