Componentes.Terceros.jvcl/official/3.32/devtools/PackagesGenerator/ModelsForm.pas

458 lines
14 KiB
ObjectPascal
Raw Normal View History

unit ModelsForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, JvToolEdit, Mask, Grids, JvStringGrid,
JvSimpleXml, JvExGrids, JvExMask;
type
TfrmModels = class(TForm)
btnOk: TBitBtn;
bttCancel: TBitBtn;
lblSelectModel: TLabel;
cmbModels: TComboBox;
grpProperties: TGroupBox;
lblName: TLabel;
edtName: TEdit;
lblPrefix: TLabel;
lblFormat: TLabel;
lblPackageLocation: TLabel;
lblIncFile: TLabel;
edtPrefix: TEdit;
edtFormat: TEdit;
jfeIncFile: TJvFilenameEdit;
jdePackages: TJvDirectoryEdit;
stgTargets: TJvStringGrid;
lblTargets: TLabel;
lblAliases: TLabel;
stgAliases: TJvStringGrid;
btnAdd: TButton;
btnDelete: TButton;
lblClx: TLabel;
edtClxFormat: TEdit;
edtClxPrefix: TEdit;
lblNoLibSuffix: TLabel;
edtNLSFormat: TEdit;
edtNLSPrefix: TEdit;
stgClxRepl: TJvStringGrid;
Label1: TLabel;
lblDotNet: TLabel;
edtDotNetFormat: TEdit;
edtDotNetPrefix: TEdit;
procedure stgTargetsGetCellAlignment(Sender: TJvStringGrid; AColumn,
ARow: Integer; State: TGridDrawState; var CellAlignment: TAlignment);
procedure stgTargetsExitCell(Sender: TJvStringGrid; AColumn,
ARow: Integer; const EditText: String);
procedure cmbModelsClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnOkClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
xml : TJvSimpleXML;
filename : string;
FEditIndex: integer;
procedure SaveModel;
procedure LoadModel;
procedure RefreshModelList;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure LoadModels(XmlFileName : string; ConfigLoadedOk : Boolean);
property EditIndex : integer read FEditIndex write FEditIndex;
end;
var
frmModels: TfrmModels;
implementation
{$R *.dfm}
{ TfrmModels }
procedure TfrmModels.LoadModels(XmlFileName : string; ConfigLoadedOk : Boolean);
begin
if ConfigLoadedOk then
begin
self.filename := XmlFileName;
// read XML file
xml.LoadFromFile(XmlFileName);
RefreshModelList;
end;
btnDelete.Enabled := cmbModels.Items.Count > 1;
end;
constructor TfrmModels.Create(AOwner: TComponent);
begin
inherited;
xml := TJvSimpleXml.Create(nil);
FEditIndex := -1;
with stgTargets do
begin
Cells[0, 0] := 'name';
Cells[1, 0] := 'dir';
Cells[2, 0] := 'pname';
Cells[3, 0] := 'pdir';
Cells[4, 0] := 'env';
Cells[5, 0] := 'ver';
Cells[6, 0] := 'PathSep';
Cells[7, 0] := 'IsClx';
Cells[8, 0] := 'IsBds';
Cells[9, 0] := 'IsDotNet';
ColWidths[0] := 40;
ColWidths[1] := 30;
ColWidths[2] := 40;
ColWidths[3] := 35;
ColWidths[4] := 25;
ColWidths[5] := 25;
ColWidths[6] := 45;
ColWidths[7] := 30;
ColWidths[8] := 30;
ColWidths[9] := 45;
end;
with stgAliases do
begin
Cells[0, 0] := 'name';
Cells[1, 0] := 'value';
ColWidths[0] := 70;
ColWidths[1] := 135;
end;
with stgClxRepl do
begin
Cells[0, 0] := 'original';
Cells[1, 0] := 'replacement';
ColWidths[0] := 90;
ColWidths[1] := 90;
end;
end;
procedure TfrmModels.stgTargetsGetCellAlignment(Sender: TJvStringGrid;
AColumn, ARow: Integer; State: TGridDrawState;
var CellAlignment: TAlignment);
begin
if ARow = 0 then
CellAlignment := taCenter
else
CellAlignment := taLeftJustify;
end;
procedure TfrmModels.stgTargetsExitCell(Sender: TJvStringGrid; AColumn,
ARow: Integer; const EditText: String);
begin
if AColumn = 0 then
begin
if (Sender.RowCount > 2) and
(Sender.Cells[0, ARow] = '') and
(ARow < Sender.RowCount-1) then
Sender.RemoveRow(ARow);
end;
if (Sender.RowCount <=1) or
(Sender.Cells[0, Sender.RowCount-1] <> '') then
begin
Sender.InsertRow(Sender.RowCount);
Sender.FixedRows := 1;
end;
end;
destructor TfrmModels.Destroy;
begin
xml.Free;
inherited;
end;
procedure TfrmModels.cmbModelsClick(Sender: TObject);
begin
SaveModel;
LoadModel;
end;
procedure TfrmModels.LoadModel;
var
model : TJvSimpleXmlElem;
target : TJvSimpleXmlElem;
alias : TJvSimpleXmlElem;
replacement : TJvSimpleXmlElem;
row : TStrings;
i : integer;
begin
model := xml.root.Items.ItemNamed['Models'].Items[0];
for i := 0 to xml.root.Items.ItemNamed['Models'].Items.Count - 1 do
begin
if xml.root.Items.ItemNamed['Models'].Items[i].Properties.ItemNamed['Name'].value = cmbModels.Text then
model := xml.root.Items.ItemNamed['Models'].Items[i];
end;
// generic properties
edtFormat.Text := model.Properties.ItemNamed['format'].value;
edtName.Text := model.Properties.ItemNamed['name'].value;
edtPrefix.Text := model.Properties.ItemNamed['prefix'].value;
jdePackages.Text := model.Properties.ItemNamed['packages'].value;
jfeIncFile.Text := model.Properties.ItemNamed['incfile'].value;
edtClxFormat.Text := '';
edtClxPrefix.Text := '';
if Assigned(model.Properties.ItemNamed['clxformat']) then
edtClxFormat.Text := model.Properties.ItemNamed['clxformat'].value;
if Assigned(model.Properties.ItemNamed['clxprefix']) then
edtClxPrefix.Text := model.Properties.ItemNamed['clxprefix'].value;
edtNLSFormat.Text := '';
edtNLSPrefix.Text := '';
if Assigned(model.Properties.ItemNamed['nolibsuffixformat']) then
edtNLSFormat.Text := model.Properties.ItemNamed['nolibsuffixformat'].value;
if Assigned(model.Properties.ItemNamed['nolibsuffixprefix']) then
edtNLSPrefix.Text := model.Properties.ItemNamed['nolibsuffixprefix'].value;
edtDotNetFormat.Text := '';
edtDotNetPrefix.Text := '';
if Assigned(model.Properties.ItemNamed['dotnetformat']) then
edtDotNetFormat.Text := model.Properties.ItemNamed['dotnetformat'].value;
if Assigned(model.Properties.ItemNamed['dotnetprefix']) then
edtDotNetPrefix.Text := model.Properties.ItemNamed['dotnetprefix'].value;
// targets
stgTargets.RowCount := 2;
stgTargets.Rows[1].Text := '';
for i := 0 to model.Items.ItemNamed['targets'].Items.count - 1 do
begin
target := model.Items.ItemNamed['targets'].Items[i];
row := stgTargets.Rows[stgTargets.RowCount-1];
row[0] := target.properties.ItemNamed['name'].value;
if Assigned(target.properties.ItemNamed['dir']) then
row[1] := target.properties.ItemNamed['dir'].value;
if Assigned(target.properties.ItemNamed['pname']) then
row[2] := target.properties.ItemNamed['pname'].value;
if Assigned(target.properties.ItemNamed['pdir']) then
row[3] := target.properties.ItemNamed['pdir'].value;
if Assigned(target.properties.ItemNamed['env']) then
row[4] := target.properties.ItemNamed['env'].value;
if Assigned(target.properties.ItemNamed['ver']) then
row[5] := target.properties.ItemNamed['ver'].value;
if Assigned(target.properties.ItemNamed['PathSep']) then
row[6] := target.properties.ItemNamed['PathSep'].value;
if Assigned(target.properties.ItemNamed['IsClx']) then
row[7] := target.properties.ItemNamed['IsClx'].value;
if Assigned(target.properties.ItemNamed['IsBds']) then
row[8] := target.properties.ItemNamed['IsBds'].value;
if Assigned(target.properties.ItemNamed['IsDotNet']) then
row[9] := target.properties.ItemNamed['IsDotNet'].value;
stgTargets.InsertRow(stgTargets.RowCount);
end;
// aliases
stgAliases.RowCount := 2;
stgAliases.Rows[1].Text := '';
for i := 0 to model.Items.ItemNamed['aliases'].Items.count - 1 do
begin
alias := model.Items.ItemNamed['aliases'].Items[i];
row := stgAliases.Rows[stgAliases.RowCount-1];
row[0] := alias.properties.ItemNamed['name'].value;
row[1] := alias.properties.ItemNamed['value'].value;
stgAliases.InsertRow(stgAliases.RowCount);
end;
// Clx Filename replacements, if any
stgClxRepl.RowCount := 2;
stgClxRepl.Rows[1].Text := '';
if Assigned(model.Items.ItemNamed['ClxReplacements']) then
begin
for i := 0 to model.Items.ItemNamed['ClxReplacements'].Items.count - 1 do
begin
replacement := model.Items.ItemNamed['ClxReplacements'].Items[i];
row := stgClxRepl.Rows[stgClxRepl.RowCount-1];
row[0] := replacement.properties.ItemNamed['original'].value;
row[1] := replacement.properties.ItemNamed['replacement'].value;
stgClxRepl.InsertRow(stgClxRepl.RowCount);
end;
end;
end;
procedure TfrmModels.SaveModel;
var
model : TJvSimpleXmlElem;
target : TJvSimpleXmlElem;
alias : TJvSimpleXmlElem;
replacement : TJvSimpleXmlElem;
row : TStrings;
i : integer;
begin
if edtName.Text <> '' then
begin
model := xml.root.Items.ItemNamed['Models'].Items[0];
for i := 0 to xml.root.Items.ItemNamed['Models'].Items.Count - 1 do
begin
if xml.root.Items.ItemNamed['Models'].Items[i].Properties.ItemNamed['Name'].value = edtName.Text then
model := xml.root.Items.ItemNamed['Models'].Items[i];
end;
model.Clear;
xml.Options := xml.Options + [sxoAutoCreate];
try
// generic properties
model.Properties.ItemNamed['format'].value := edtFormat.Text;
model.Properties.ItemNamed['name'].value := edtName.Text;
model.Properties.ItemNamed['prefix'].value := edtPrefix.Text;
model.Properties.ItemNamed['packages'].value := jdePackages.Text;
model.Properties.ItemNamed['incfile'].value := jfeIncFile.Text;
if edtClxFormat.Text <> '' then
model.Properties.ItemNamed['clxformat'].value := edtClxFormat.Text;
if edtClxPrefix.Text <> '' then
model.Properties.ItemNamed['clxprefix'].value := edtClxPrefix.Text;
if edtNLSFormat.Text <> '' then
model.Properties.ItemNamed['nolibsuffixformat'].value := edtNLSFormat.Text;
if edtNLSPrefix.Text <> '' then
model.Properties.ItemNamed['nolibsuffixprefix'].value := edtNLSPrefix.Text;
if edtDotNetFormat.Text <> '' then
model.Properties.ItemNamed['dotnetformat'].value := edtDotNetFormat.Text;
if edtDotNetPrefix.Text <> '' then
model.Properties.ItemNamed['dotnetprefix'].value := edtDotNetPrefix.Text;
// targets
model.Items.ItemNamed['targets'].Items.Clear;
for i := 1 to stgTargets.RowCount-2 do
begin
target := model.Items.ItemNamed['targets'].Items.Add('target');
row := stgTargets.Rows[i];
target.properties.Add('name', row[0]);
if row[1] <> '' then
target.properties.Add('dir', row[1]);
if row[2] <> '' then
target.properties.Add('pname', row[2]);
if row[3] <> '' then
target.properties.Add('pdir', row[3]);
if row[4] <> '' then
target.properties.Add('env', row[4]);
if row[5] <> '' then
target.properties.Add('ver', row[5]);
if row[6] <> '' then
target.properties.Add('PathSep', row[6]);
if row[7] <> '' then
target.properties.Add('IsClx', row[7]);
if row[8] <> '' then
target.properties.Add('IsBds', row[8]);
if row[9] <> '' then
target.Properties.Add('IsDotNet', row[9]);
end;
// aliases
model.Items.ItemNamed['aliases'].Items.Clear;
for i := 1 to stgAliases.RowCount-2 do
begin
alias := model.Items.ItemNamed['aliases'].Items.Add('alias');
row := stgAliases.Rows[i];
alias.properties.Add('name', row[0]);
alias.properties.Add('value', row[1]);
end;
// Clx filename replacements, if any
if stgClxRepl.Cells[0, 1] <> '' then
begin
model.Items.ItemNamed['ClxReplacements'].Items.Clear;
for i := 1 to stgClxRepl.RowCount-2 do
begin
replacement := model.Items.ItemNamed['ClxReplacements'].Items.Add('replacement');
row := stgClxRepl.Rows[i];
replacement.properties.Add('original', row[0]);
replacement.properties.Add('replacement', row[1]);
end;
end;
finally
xml.Options := xml.Options - [sxoAutoCreate];
end;
end;
end;
procedure TfrmModels.btnDeleteClick(Sender: TObject);
begin
if Application.MessageBox('Are you sure you want to delete this model?', 'Delete confirmation', MB_ICONQUESTION+MB_YESNO) = MRYES then
begin
xml.root.Items.ItemNamed['Models'].Items.Delete(cmbModels.Text);
RefreshModelList;
end;
end;
procedure TfrmModels.btnAddClick(Sender: TObject);
var
ModelName : string;
Model : TJvSimpleXmlElem;
begin
ModelName := InputBox('Adding a model', 'Please indicate the name of the model to add', '');
if ModelName <> '' then
begin
model := xml.root.Items.ItemNamed['Models'].Items.Add('Model');
model.Properties.Add('Name', ModelName);
model.Properties.Add('format', '');
model.Properties.Add('prefix', '');
model.Properties.Add('packages', '');
model.Properties.Add('incfile', '');
model.Items.Add('targets');
model.Items.Add('aliases');
RefreshModelList;
end;
end;
procedure TfrmModels.btnOkClick(Sender: TObject);
begin
SaveModel;
xml.SaveToFile(filename);
ModalResult := mrOk;
end;
procedure TfrmModels.RefreshModelList;
var
models : TJvSimpleXMLElem;
i : integer;
savedIndex : integer;
begin
with xml do
begin
models := root.Items.ItemNamed['Models'];
savedIndex := cmbModels.ItemIndex;
cmbModels.Items.Clear;
if Assigned(models) then
begin
for i := 0 to models.Items.Count - 1 do
cmbModels.Items.Add(models.Items[i].Properties.ItemNamed['Name'].Value);
end;
cmbModels.ItemIndex := savedIndex;
end;
end;
procedure TfrmModels.FormShow(Sender: TObject);
begin
cmbModels.ItemIndex := EditIndex;
LoadModel;
end;
end.