Browse Source

Fixed forum-9719: cannot include binary files in project templates.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1563 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
88688e3a01
  1. 15
      src/Main/Base/Project/Src/Gui/Dialogs/NewFileDialog.cs
  2. 14
      src/Main/Base/Project/Src/Internal/Templates/File/FileDescriptionTemplate.cs
  3. 2
      src/Main/Base/Project/Src/Internal/Templates/File/ScriptRunner.cs
  4. 10
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs
  5. 2
      src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Gui/SearchAndReplacePanel.cs

15
src/Main/Base/Project/Src/Gui/Dialogs/NewFileDialog.cs

@ -373,7 +373,7 @@ namespace ICSharpCode.SharpDevelop.Gui
return true; return true;
} }
public void SaveFile(FileDescriptionTemplate newfile, string content) public void SaveFile(FileDescriptionTemplate newfile, string content, byte[] binaryContent)
{ {
string parsedFileName = StringParser.Parse(newfile.Name); string parsedFileName = StringParser.Parse(newfile.Name);
// Parse twice so that tags used in included standard header are parsed // Parse twice so that tags used in included standard header are parsed
@ -382,9 +382,16 @@ namespace ICSharpCode.SharpDevelop.Gui
parsedFileName = parsedFileName.Substring(1); parsedFileName = parsedFileName.Substring(1);
if (newfile.IsDependentFile && Path.IsPathRooted(parsedFileName)) { if (newfile.IsDependentFile && Path.IsPathRooted(parsedFileName)) {
Directory.CreateDirectory(Path.GetDirectoryName(parsedFileName)); Directory.CreateDirectory(Path.GetDirectoryName(parsedFileName));
if (binaryContent != null)
File.WriteAllBytes(parsedFileName, binaryContent);
else
File.WriteAllText(parsedFileName, parsedContent, ParserService.DefaultFileEncoding); File.WriteAllText(parsedFileName, parsedContent, ParserService.DefaultFileEncoding);
ParserService.ParseFile(parsedFileName, parsedContent); ParserService.ParseFile(parsedFileName, parsedContent);
} else { } else {
if (binaryContent != null) {
LoggingService.Warn("binary file was skipped");
return;
}
IWorkbenchWindow window = FileService.NewFile(Path.GetFileName(parsedFileName), StringParser.Parse(newfile.Language), parsedContent); IWorkbenchWindow window = FileService.NewFile(Path.GetFileName(parsedFileName), StringParser.Parse(newfile.Language), parsedContent);
if (window == null) { if (window == null) {
return; return;
@ -486,7 +493,11 @@ namespace ICSharpCode.SharpDevelop.Gui
ScriptRunner scriptRunner = new ScriptRunner(); ScriptRunner scriptRunner = new ScriptRunner();
foreach (FileDescriptionTemplate newfile in item.Template.FileDescriptionTemplates) { foreach (FileDescriptionTemplate newfile in item.Template.FileDescriptionTemplates) {
SaveFile(newfile, scriptRunner.CompileScript(item.Template, newfile)); if (newfile.ContentData != null) {
SaveFile(newfile, null, newfile.ContentData);
} else {
SaveFile(newfile, scriptRunner.CompileScript(item.Template, newfile), null);
}
} }
DialogResult = DialogResult.OK; DialogResult = DialogResult.OK;
} }

14
src/Main/Base/Project/Src/Internal/Templates/File/FileDescriptionTemplate.cs

@ -19,7 +19,11 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
{ {
string name; string name;
string language; string language;
// Either content or contentData is set, the other is null
string content; string content;
byte[] contentData;
string buildAction; string buildAction;
string copyToOutputDirectory; string copyToOutputDirectory;
string dependentUpon; string dependentUpon;
@ -42,7 +46,11 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
if (xml.HasAttribute("src")) { if (xml.HasAttribute("src")) {
string fileName = Path.Combine(hintPath, StringParser.Parse(xml.GetAttribute("src"))); string fileName = Path.Combine(hintPath, StringParser.Parse(xml.GetAttribute("src")));
try { try {
if (xml.HasAttribute("binary") && bool.Parse(xml.GetAttribute("binary"))) {
contentData = File.ReadAllBytes(fileName);
} else {
content = File.ReadAllText(fileName); content = File.ReadAllText(fileName);
}
} catch (Exception e) { } catch (Exception e) {
content = "Error reading content from " + fileName + ":\n" + e.ToString(); content = "Error reading content from " + fileName + ":\n" + e.ToString();
LoggingService.Warn(content); LoggingService.Warn(content);
@ -95,6 +103,12 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
} }
} }
public byte[] ContentData {
get {
return contentData;
}
}
public string BuildAction { public string BuildAction {
get { get {
return buildAction ?? ""; return buildAction ?? "";

2
src/Main/Base/Project/Src/Internal/Templates/File/ScriptRunner.cs

@ -33,6 +33,8 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
public string CompileScript(FileTemplate item, FileDescriptionTemplate file) public string CompileScript(FileTemplate item, FileDescriptionTemplate file)
{ {
if (file.Content == null)
throw new ArgumentException("file must have textual content");
Match m = scriptRegex.Match(file.Content); Match m = scriptRegex.Match(file.Content);
m = m.NextMatch(); m = m.NextMatch();
if (m.Success) { if (m.Success) {

10
src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs

@ -202,11 +202,15 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
if (!Directory.Exists(Path.GetDirectoryName(fileName))) { if (!Directory.Exists(Path.GetDirectoryName(fileName))) {
Directory.CreateDirectory(Path.GetDirectoryName(fileName)); Directory.CreateDirectory(Path.GetDirectoryName(fileName));
} }
Properties properties = ((Properties)PropertyService.Get("ICSharpCode.TextEditor.Document.Document.DefaultDocumentAggregatorProperties", new Properties())); if (file.ContentData != null) {
// Binary content
StreamWriter sr = new StreamWriter(File.Create(fileName), Encoding.GetEncoding(properties.Get("Encoding", 1252))); File.WriteAllBytes(fileName, file.ContentData);
} else {
// Textual content
StreamWriter sr = new StreamWriter(File.Create(fileName), ParserService.DefaultFileEncoding);
sr.Write(StringParser.Parse(StringParser.Parse(file.Content, new string[,] { {"ProjectName", projectCreateInformation.ProjectName}, {"FileName", fileName}}))); sr.Write(StringParser.Parse(StringParser.Parse(file.Content, new string[,] { {"ProjectName", projectCreateInformation.ProjectName}, {"FileName", fileName}})));
sr.Close(); sr.Close();
}
} catch (Exception ex) { } catch (Exception ex) {
StringParser.Properties["fileName"] = fileName; StringParser.Properties["fileName"] = fileName;
MessageService.ShowError(ex, "${res:ICSharpCode.SharpDevelop.Internal.Templates.ProjectDescriptor.FileCouldntBeWrittenError}"); MessageService.ShowError(ex, "${res:ICSharpCode.SharpDevelop.Internal.Templates.ProjectDescriptor.FileCouldntBeWrittenError}");

2
src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Gui/SearchAndReplacePanel.cs

@ -42,11 +42,13 @@ namespace SearchAndReplace
SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("Resources.FindPanel.xfrm")); SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("Resources.FindPanel.xfrm"));
Get<Button>("findAll").Click += FindAllButtonClicked; Get<Button>("findAll").Click += FindAllButtonClicked;
Get<Button>("bookmarkAll").Click += BookmarkAllButtonClicked; Get<Button>("bookmarkAll").Click += BookmarkAllButtonClicked;
this.ParentForm.AcceptButton = Get<Button>("findNext");
break; break;
case SearchAndReplaceMode.Replace: case SearchAndReplaceMode.Replace:
SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("Resources.ReplacePanel.xfrm")); SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("Resources.ReplacePanel.xfrm"));
Get<Button>("replace").Click += ReplaceButtonClicked; Get<Button>("replace").Click += ReplaceButtonClicked;
Get<Button>("replaceAll").Click += ReplaceAllButtonClicked; Get<Button>("replaceAll").Click += ReplaceAllButtonClicked;
this.ParentForm.AcceptButton = Get<Button>("replace");
break; break;
} }

Loading…
Cancel
Save