IDE: Macro support for module's filename in "Code Templates" dialog. Issue #33901, patch from errno.

git-svn-id: trunk@58678 -
This commit is contained in:
juha 2018-08-05 08:32:02 +00:00
parent dd0594c20b
commit f8fcb833f4
3 changed files with 28 additions and 19 deletions

View File

@ -856,7 +856,8 @@ begin
AutoOnOptionsCheckGroup.Items.Add(lisAutomaticallyIgnoreForSelection);
AutoOnOptionsCheckGroup.Items.Add(lisAutomaticallyRemoveCharacter);
FilenameEdit.Text:=EditorOpts.CodeTemplateFileName;
FilenameEdit.Text:=EditorOpts.CodeTemplateFileNameRaw;
FilenameEdit.InitialDir:=ExtractFilePath(EditorOpts.CodeTemplateFileNameExpand);
FilenameEdit.DialogTitle:=dlgChsCodeTempl;
FilenameEdit.Filter:=dlgFilterDciFile + '|*.dci|' + dlgFilterAll + '|' + GetAllFilesMask;
@ -874,7 +875,7 @@ begin
// init SynAutoComplete
with SynAutoComplete do begin
s:=EditorOpts.CodeTemplateFileName;
s:=EditorOpts.CodeTemplateFileNameExpand;
if FileExistsUTF8(s) then
try
LoadStringsFromFileUTF8(AutoCompleteList,s);
@ -910,7 +911,7 @@ var
begin
SaveCurCodeTemplate;
EditorOpts.CodeTemplateFileName:=FilenameEdit.Text;
EditorOpts.CodeTemplateFileNameRaw:=FilenameEdit.Text;
//EditorOpts.CodeTemplateIndentToTokenStart:=
// (CodeTemplateIndentTypeRadioGroup.ItemIndex=0);
@ -920,11 +921,11 @@ begin
Res:=mrOk;
repeat
try
SaveStringsToFileUTF8(SynAutoComplete.AutoCompleteList,EditorOpts.CodeTemplateFileName);
SaveStringsToFileUTF8(SynAutoComplete.AutoCompleteList,EditorOpts.CodeTemplateFileNameExpand);
except
res:=IDEMessageDialog(lisCCOErrorCaption, 'Unable to write code '
+'templates to file '''
+EditorOpts.CodeTemplateFileName+'''! ',mtError
+EditorOpts.CodeTemplateFileNameExpand+'''! ',mtError
,[mbAbort, mbIgnore, mbRetry]);
if res=mrAbort then exit;
end;

View File

@ -67,7 +67,7 @@ uses
LinkScanner, CodeToolManager,
// IDEIntf
IDECommands, SrcEditorIntf, IDEOptionsIntf, IDEOptEditorIntf, IDEDialogs,
EditorSyntaxHighlighterDef,
EditorSyntaxHighlighterDef, MacroIntf,
// IDE
SourceMarks, LazarusIDEStrConsts, KeyMapping, LazConf;
@ -1454,7 +1454,7 @@ type
fAutoToolTipExprEval: Boolean;
fAutoToolTipSymbTools: Boolean;
FDbgHintAutoTypeCastClass: Boolean;
fCodeTemplateFileName: String;
fCodeTemplateFileNameRaw: String;
fCTemplIndentToTokenStart: Boolean;
fAutoDisplayFuncPrototypes: Boolean;
@ -1497,7 +1497,7 @@ type
FStringBreakPrefix: String;
FDefaultValues: TEditorOptions;
function GetCodeTemplateFileNameExpand:String;
protected
function GetTabPosition: TTabPosition; override;
public
@ -1655,8 +1655,10 @@ type
public
property AutoDelayInMSec: Integer read fAutoDelayInMSec
write fAutoDelayInMSec default 1000;
property CodeTemplateFileName: String
read fCodeTemplateFileName write fCodeTemplateFileName;
property CodeTemplateFileNameRaw: String
read fCodeTemplateFileNameRaw write fCodeTemplateFileNameRaw;
property CodeTemplateFileNameExpand:String
read GetCodeTemplateFileNameExpand;
property CodeTemplateIndentToTokenStart: Boolean
read fCTemplIndentToTokenStart write fCTemplIndentToTokenStart;
property AutoRemoveEmptyMethods: Boolean read FAutoRemoveEmptyMethods
@ -4548,15 +4550,15 @@ begin
Init;
// code templates (dci file)
fCodeTemplateFileName :=
fCodeTemplateFileNameRaw :=
TrimFilename(AppendPathDelim(GetPrimaryConfigPath)+DefaultCodeTemplatesFilename);
CopySecondaryConfigFile(DefaultCodeTemplatesFilename);
if not FileExistsUTF8(CodeTemplateFileName) then
if not FileExistsUTF8(CodeTemplateFileNameExpand) then
begin
res := TResourceStream.Create(HInstance, PChar('lazarus_dci_file'), PChar(RT_RCDATA));
try
InvalidateFileStateCache;
fs := TFileStreamUTF8.Create(CodeTemplateFileName, fmCreate);
fs := TFileStreamUTF8.Create(CodeTemplateFileNameExpand, fmCreate);
try
fs.CopyFrom(res, res.Size);
finally
@ -4564,7 +4566,7 @@ begin
end;
except
DebugLn('WARNING: unable to write code template file "',
CodeTemplateFileName, '"');
CodeTemplateFileNameExpand, '"');
end;
res.Free;
end;
@ -4902,7 +4904,7 @@ begin
XMLConfig.GetValue('EditorOptions/CodeTools/AutoToolTipSymbTools', True);
fAutoDelayInMSec :=
XMLConfig.GetValue('EditorOptions/CodeTools/AutoDelayInMSec', 1000);
fCodeTemplateFileName :=
fCodeTemplateFileNameRaw :=
XMLConfig.GetValue('EditorOptions/CodeTools/CodeTemplateFileName'
, TrimFilename(AppendPathDelim(GetPrimaryConfigPath) + DefaultCodeTemplatesFilename));
fCTemplIndentToTokenStart :=
@ -5098,7 +5100,7 @@ begin
XMLConfig.SetDeleteValue('EditorOptions/CodeTools/AutoDelayInMSec'
, fAutoDelayInMSec, 1000);
XMLConfig.SetDeleteValue('EditorOptions/CodeTools/CodeTemplateFileName'
, fCodeTemplateFileName, '');
, fCodeTemplateFileNameRaw, '');
XMLConfig.SetDeleteValue(
'EditorOptions/CodeTools/CodeTemplateIndentToTokenStart/Value'
, fCTemplIndentToTokenStart, False);
@ -5946,6 +5948,12 @@ begin
end;
end;
function TEditorOptions.GetCodeTemplateFileNameExpand:String;
begin
result:=fCodeTemplateFileNameRaw;
IDEMacros.SubstituteMacros(result);
end;
function TEditorOptions.GetTabPosition: TTabPosition;
begin
Result := fTabPosition;

View File

@ -10259,8 +10259,8 @@ begin
AutoStartCompletionBoxTimer.Interval:=EditorOpts.AutoDelayInMSec;
// reload code templates
with CodeTemplateModul do begin
if FileExistsUTF8(EditorOpts.CodeTemplateFilename) then
LoadStringsFromFileUTF8(AutoCompleteList,EditorOpts.CodeTemplateFilename)
if FileExistsUTF8(EditorOpts.CodeTemplateFileNameExpand) then
LoadStringsFromFileUTF8(AutoCompleteList,EditorOpts.CodeTemplateFileNameExpand)
else begin
Filename:=EnvironmentOptions.GetParsedLazarusDirectory
+GetForcedPathDelims('ide/lazarus.dci');
@ -11191,7 +11191,7 @@ begin
// code templates
FCodeTemplateModul:=TSynEditAutoComplete.Create(Self);
with FCodeTemplateModul do begin
DCIFilename:=EditorOpts.CodeTemplateFilename;
DCIFilename:=EditorOpts.CodeTemplateFileNameExpand;
if not FileExistsCached(DCIFilename) then
DCIFilename:=EnvironmentOptions.GetParsedLazarusDirectory
+GetForcedPathDelims('ide/lazarus.dci');