Skip to content

Commit 2adfbd7

Browse files
dspec creator improvements
auto check Win32, Win64 when adding compiler version and auto select default template.
1 parent feeda36 commit 2adfbd7

4 files changed

Lines changed: 166 additions & 122 deletions

File tree

Source/Core/Spec/DPM.Core.Spec.pas

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ TSpec = class(TSpecNode, IPackageSpec)
9999
implementation
100100

101101
uses
102+
System.Generics.Defaults,
102103
DPM.Core.Constants,
103104
DPM.Core.Dependency.Version,
104105
DPM.Core.Spec.MetaData,
@@ -427,8 +428,23 @@ constructor TSpec.Create(const logger : ILogger; const fileName : string);
427428
inherited Create(logger);
428429
FFileName := fileName;
429430
FMetaData := TSpecMetaData.Create(logger);
430-
FTargetPlatforms := TCollections.CreateList<ISpecTargetPlatform>;
431-
FTemplates := TCollections.CreateList<ISpecTemplate>;
431+
FTargetPlatforms := TCollections.CreateSortedList<ISpecTargetPlatform>(
432+
function(const Left, Right: ISpecTargetPlatform): Integer
433+
begin
434+
if left.Compiler = right.Compiler then
435+
result := 0
436+
else if Left.Compiler > Right.Compiler then
437+
result := 1
438+
else
439+
result := -1;
440+
end
441+
);
442+
FTemplates := TCollections.CreateSortedList<ISpecTemplate>(
443+
function(const Left, Right: ISpecTemplate): Integer
444+
begin
445+
result := CompareText(Left.Name, Right.Name);
446+
end
447+
);
432448
end;
433449

434450
procedure TSpec.DeleteTemplate(const templateName: string);

Source/DSpecCreator/DPM.Creator.Dspec.FileHandler.pas

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ TDSpecFile = class
1818
FReader: IPackageSpecReader;
1919
FFilename : string;
2020
FLoadedSpec : IPackageSpec;
21+
FPackageSpec : IPackageSpec;
22+
2123
public
22-
spec : IPackageSpec;
2324
procedure DeleteTemplate(const templateName: string);
2425
function DuplicateTemplate(const sourceTemplate: ISpecTemplate; const newTemplateName: string): ISpecTemplate;
2526
function DoesTemplateExist(const templateName: string): Boolean;
@@ -28,6 +29,7 @@ TDSpecFile = class
2829
function GetPlatform(const compiler: string): ISpecTargetPlatform;
2930
function AddCompiler(const compiler: string): ISpecTargetPlatform;
3031
procedure DeleteCompiler(const compiler: string);
32+
procedure ClearCompilers;
3133
function LoadFromFile(const filename: string; var errorMessage : string) : boolean;
3234
procedure SaveToFile(const filename: string);
3335
function WorkingDir: string;
@@ -36,6 +38,7 @@ TDSpecFile = class
3638
constructor Create(logger: ILogger);
3739
destructor Destroy; override;
3840
property FileName : string read FFileName;
41+
property PackageSpec : IPackageSpec read FPackageSpec;
3942
end;
4043

4144

@@ -56,44 +59,48 @@ implementation
5659
{ TDSpecFile }
5760

5861
function TDSpecFile.AddCompiler(const compiler: string): ISpecTargetPlatform;
59-
var
60-
vplatform : ISpecTargetPlatform;
6162
begin
6263
if Assigned(GetPlatform(compiler)) then
6364
raise Exception.Create('Platform already exists in file');
6465

65-
vplatform := TSpecTargetPlatform.Create(FLogger);
66-
vplatform.Compiler := StringToCompilerVersion(compiler);
66+
result := TSpecTargetPlatform.Create(FLogger);
67+
result.Compiler := StringToCompilerVersion(compiler);
68+
result.Platforms := [TDPMPlatform.Win32, TDPMPlatform.Win64];
6769

68-
spec.TargetPlatforms.Add(vplatform);
70+
FPackageSpec.TargetPlatforms.Add(result);
6971
end;
7072

7173
function TDSpecFile.AsString: string;
7274
begin
73-
Result := spec.ToJSON;
75+
Result := FPackageSpec.ToJSON;
76+
end;
77+
78+
procedure TDSpecFile.ClearCompilers;
79+
begin
80+
FPackageSpec.TargetPlatforms.Clear;
7481
end;
7582

7683
constructor TDSpecFile.Create(logger: ILogger);
7784
begin
7885
FLogger := logger;
79-
spec := TSpec.Create(FLogger, '');
86+
FPackageSpec := TSpec.Create(FLogger, '');
8087
FLoadedSpec := TSpec.Create(FLogger, '');
8188
end;
8289

8390
procedure TDSpecFile.DeleteTemplate(const templateName: string);
8491
begin
85-
spec.DeleteTemplate(templateName);
92+
FPackageSpec.DeleteTemplate(templateName);
8693
end;
8794

8895
procedure TDSpecFile.DeleteCompiler(const compiler: string);
8996
var
9097
i : Integer;
9198
begin
92-
for i := 0 to spec.TargetPlatforms.Count - 1 do
99+
for i := 0 to FPackageSpec.TargetPlatforms.Count - 1 do
93100
begin
94-
if SameText(CompilerToString(spec.TargetPlatforms[i].compiler), compiler) then
101+
if SameText(CompilerToString(FPackageSpec.TargetPlatforms[i].compiler), compiler) then
95102
begin
96-
spec.TargetPlatforms.Delete(i);
103+
FPackageSpec.TargetPlatforms.Delete(i);
97104
Exit;
98105
end;
99106
end;
@@ -107,24 +114,24 @@ destructor TDSpecFile.Destroy;
107114

108115
function TDSpecFile.DoesTemplateExist(const templateName: string): Boolean;
109116
begin
110-
Result := Assigned(spec.FindTemplate(templateName));
117+
Result := Assigned(FPackageSpec.FindTemplate(templateName));
111118
end;
112119

113120
function TDSpecFile.DuplicateTemplate(const sourceTemplate: ISpecTemplate; const newTemplateName: string): ISpecTemplate;
114121
begin
115-
Result := spec.DuplicateTemplate(sourceTemplate, NewTemplateName);
122+
Result := FPackageSpec.DuplicateTemplate(sourceTemplate, NewTemplateName);
116123
end;
117124

118125
function TDSpecFile.GetTemplate(const templateName: string): ISpecTemplate;
119126
var
120127
i : Integer;
121128
begin
122129
Result := nil;
123-
for i := 0 to spec.templates.Count - 1 do
130+
for i := 0 to FPackageSpec.templates.Count - 1 do
124131
begin
125-
if spec.templates[i].name = templateName then
132+
if FPackageSpec.templates[i].name = templateName then
126133
begin
127-
Result := spec.templates[i];
134+
Result := FPackageSpec.templates[i];
128135
Exit;
129136
end;
130137
end;
@@ -142,11 +149,11 @@ function TDSpecFile.GetPlatform(const compiler: string): ISpecTargetPlatform;
142149
i: Integer;
143150
begin
144151
Result := nil;
145-
for i := 0 to spec.targetPlatforms.Count - 1 do
152+
for i := 0 to FPackageSpec.targetPlatforms.Count - 1 do
146153
begin
147-
if spec.targetPlatforms[i].compiler = StringToCompilerVersion(compiler) then
154+
if FPackageSpec.targetPlatforms[i].compiler = StringToCompilerVersion(compiler) then
148155
begin
149-
Result := spec.targetPlatforms[i];
156+
Result := FPackageSpec.targetPlatforms[i];
150157
Exit;
151158
end;
152159
end;
@@ -156,8 +163,8 @@ function TDSpecFile.IsModified: Boolean;
156163
begin
157164
//TODO : This is wasteful - implement a modified flag.
158165

159-
if (spec <> nil) and (FLoadedSpec <> nil) then
160-
Result := not SameText(spec.ToJSON, FLoadedSpec.ToJSON)
166+
if (FPackageSpec <> nil) and (FLoadedSpec <> nil) then
167+
Result := not SameText(FPackageSpec.ToJSON, FLoadedSpec.ToJSON)
161168
else
162169
result := false;
163170
end;
@@ -167,8 +174,8 @@ function TDSpecFile.LoadFromFile(const filename: string; var errorMessage : stri
167174
result := true;
168175
FReader := TPackageSpecReader.Create(FLogger);
169176
try
170-
spec := FReader.ReadSpec(filename);
171-
if (spec = nil) then
177+
FPackageSpec := FReader.ReadSpec(filename);
178+
if (FPackageSpec = nil) then
172179
raise Exception.Create('Failed to load dspec');
173180
FLoadedSpec := FReader.ReadSpec(filename);
174181
except
@@ -185,7 +192,7 @@ procedure TDSpecFile.SaveToFile(const filename: string);
185192
var
186193
writer : IPackageSpecWriter;
187194
begin
188-
writer := TPackageSpecWriter.Create(FLogger, spec);
195+
writer := TPackageSpecWriter.Create(FLogger, FPackageSpec);
189196
writer.SaveToFile(filename);
190197
FFilename := Filename;
191198
end;

Source/DSpecCreator/DPM.Creator.MainForm.dfm

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ object DSpecCreatorForm: TDSpecCreatorForm
2222
Top = 0
2323
Width = 871
2424
Height = 506
25-
ActivePage = tsTemplates
25+
ActivePage = tsInfo
2626
Align = alClient
2727
TabOrder = 0
2828
object tsInfo: TTabSheet
@@ -76,9 +76,9 @@ object DSpecCreatorForm: TDSpecCreatorForm
7676
Caption = 'License:'
7777
end
7878
object lblTags: TLabel
79-
Left = 57
79+
Left = 56
8080
Top = 400
81-
Width = 26
81+
Width = 27
8282
Height = 15
8383
Alignment = taRightJustify
8484
Caption = 'Tags:'
@@ -271,7 +271,7 @@ object DSpecCreatorForm: TDSpecCreatorForm
271271
object lblTemplate: TLabel
272272
Left = 256
273273
Top = 252
274-
Width = 48
274+
Width = 49
275275
Height = 15
276276
Caption = 'Template'
277277
Enabled = False
@@ -315,8 +315,7 @@ object DSpecCreatorForm: TDSpecCreatorForm
315315
PopupMenu = pmCompilers
316316
TabOrder = 0
317317
OnClick = clbCompilersClick
318-
OnClickCheck = clbCompilersClickCheck
319-
OnDblClick = clbCompilersClick
318+
OnKeyPress = clbCompilersKeyPress
320319
end
321320
object cboTemplate: TComboBox
322321
Left = 256
@@ -426,7 +425,7 @@ object DSpecCreatorForm: TDSpecCreatorForm
426425
object Label10: TLabel
427426
Left = 16
428427
Top = 163
429-
Width = 80
428+
Width = 79
430429
Height = 15
431430
Caption = 'Excluded Items'
432431
end
@@ -754,7 +753,7 @@ object DSpecCreatorForm: TDSpecCreatorForm
754753
object Label11: TLabel
755754
Left = 8
756755
Top = 8
757-
Width = 48
756+
Width = 49
758757
Height = 15
759758
Caption = 'Template'
760759
end
@@ -1001,7 +1000,7 @@ object DSpecCreatorForm: TDSpecCreatorForm
10011000
object lblTemplateView: TLabel
10021001
Left = 3
10031002
Top = 3
1004-
Width = 76
1003+
Width = 77
10051004
Height = 15
10061005
Caption = 'Template View'
10071006
end

0 commit comments

Comments
 (0)