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

View File

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

View File

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