@@ -49,10 +49,11 @@ TSaveSourceMgr = class abstract(TNoPublicConstructObject)
49
49
// / Provides array of encodings supported for a file extension.</summary>
50
50
// / <param name="Sender">TObject [in] Reference to object that triggered
51
51
// / event.</param>
52
- // / <param name="Ext">string [in] Name of extension to check.</param>
52
+ // / <param name="FilterIdx">string [in] Index of file type withing dialog's
53
+ // / filter string to check.</param>
53
54
// / <param name="Encodings">TSourceFileEncodings [in/out] Receives array of
54
55
// / supported encodings.</param>
55
- procedure EncodingQueryHandler (Sender: TObject; const Ext: string ;
56
+ procedure EncodingQueryHandler (Sender: TObject; const FilterIdx: Integer ;
56
57
var Encodings: TSourceFileEncodings);
57
58
// / <summary>Handles custom save dialog's OnPreview event. Displays source
58
59
// / code appropriately formatted in preview dialog box.</summary>
@@ -81,6 +82,12 @@ TSaveSourceMgr = class abstract(TNoPublicConstructObject)
81
82
// / <returns>TEncodedData - Formatted source code, syntax highlighted if
82
83
// / required.</returns>
83
84
function GenerateOutput (const FileType: TSourceFileType): TEncodedData;
85
+ // / <summary>Returns the source file type associated with the selected
86
+ // / index in the save dialogue box.</summary>
87
+ // / <remarks>This method assumes that the filter string entries are in the
88
+ // / same order as elements of the <c>TSourceFileType</c> enumeration.
89
+ // / </remarks>
90
+ function FileTypeFromFilterIdx : TSourceFileType;
84
91
strict protected
85
92
// / <summary>Internal constructor. Initialises managed save source dialog
86
93
// / box and records information about supported file types.</summary>
@@ -178,18 +185,16 @@ procedure TSaveSourceMgr.DoExecute;
178
185
begin
179
186
// Set up dialog box
180
187
fSaveDlg.Filter := fSourceFileInfo.FilterString;
181
- fSaveDlg.FilterIndex := ExtToFilterIndex (
188
+ fSaveDlg.FilterIndex := FilterDescToIndex (
182
189
fSaveDlg.Filter,
183
- fSourceFileInfo.FileTypeInfo[Preferences.SourceDefaultFileType].Extension ,
190
+ fSourceFileInfo.FileTypeInfo[Preferences.SourceDefaultFileType].DisplayName ,
184
191
1
185
192
);
186
193
fSaveDlg.FileName := fSourceFileInfo.DefaultFileName;
187
194
// Display dialog box and save file if user OKs
188
195
if fSaveDlg.Execute then
189
196
begin
190
- FileType := fSourceFileInfo.FileTypeFromExt(
191
- ExtractFileExt(fSaveDlg.FileName)
192
- );
197
+ FileType := FileTypeFromFilterIdx;
193
198
FileContent := GenerateOutput(FileType).ToString;
194
199
Encoding := TEncodingHelper.GetEncoding(fSaveDlg.SelectedEncoding);
195
200
try
@@ -201,14 +206,27 @@ procedure TSaveSourceMgr.DoExecute;
201
206
end ;
202
207
203
208
procedure TSaveSourceMgr.EncodingQueryHandler (Sender: TObject;
204
- const Ext: string ; var Encodings: TSourceFileEncodings);
209
+ const FilterIdx: Integer ; var Encodings: TSourceFileEncodings);
205
210
var
206
211
FileType: TSourceFileType; // type of file that has given extension
207
212
begin
208
- FileType := fSourceFileInfo.FileTypeFromExt(Ext) ;
213
+ FileType := FileTypeFromFilterIdx ;
209
214
Encodings := fSourceFileInfo.FileTypeInfo[FileType].Encodings;
210
215
end ;
211
216
217
+ function TSaveSourceMgr.FileTypeFromFilterIdx : TSourceFileType;
218
+ var
219
+ FilterIdx: Integer; // dlg FilterIndex adjusted to be 0 based
220
+ begin
221
+ FilterIdx := fSaveDlg.FilterIndex - 1 ;
222
+ Assert(
223
+ (FilterIdx >= Ord(Low(TSourceFileType)))
224
+ and (FilterIdx <= Ord(High(TSourceFileType))),
225
+ ClassName + ' .FileTypeFromFilterIdx: FilerIdx out of range'
226
+ );
227
+ Result := TSourceFileType(FilterIdx)
228
+ end ;
229
+
212
230
function TSaveSourceMgr.GenerateOutput (const FileType: TSourceFileType):
213
231
TEncodedData;
214
232
var
@@ -231,7 +249,7 @@ function TSaveSourceMgr.GenerateOutput(const FileType: TSourceFileType):
231
249
procedure TSaveSourceMgr.HiliteQueryHandler (Sender: TObject; const Ext: string;
232
250
var CanHilite: Boolean);
233
251
begin
234
- CanHilite := IsHilitingSupported(fSourceFileInfo.FileTypeFromExt(Ext) );
252
+ CanHilite := IsHilitingSupported(FileTypeFromFilterIdx );
235
253
end ;
236
254
237
255
constructor TSaveSourceMgr.InternalCreate;
@@ -262,6 +280,13 @@ constructor TSaveSourceMgr.InternalCreate;
262
280
TSourceFileEncoding.Create(etUTF8, sUTF8Encoding)
263
281
]
264
282
);
283
+ fSourceFileInfo.FileTypeInfo[sfHTML5] := TSourceFileTypeInfo.Create(
284
+ ' .html' ,
285
+ GetFileTypeDesc(sfHTML5),
286
+ [
287
+ TSourceFileEncoding.Create(etUTF8, sUTF8Encoding)
288
+ ]
289
+ );
265
290
fSourceFileInfo.FileTypeInfo[sfXHTML] := TSourceFileTypeInfo.Create(
266
291
' .html' ,
267
292
GetFileTypeDesc(sfXHTML),
@@ -305,7 +330,7 @@ procedure TSaveSourceMgr.PreviewHandler(Sender: TObject);
305
330
var
306
331
FileType: TSourceFileType; // type of source file to preview
307
332
begin
308
- FileType := fSourceFileInfo.FileTypeFromExt(fSaveDlg.SelectedExt) ;
333
+ FileType := FileTypeFromFilterIdx ;
309
334
// Display preview dialog box. We use save dialog as owner to ensure preview
310
335
// dialog box is aligned over save dialog box
311
336
TPreviewDlg.Execute(
0 commit comments