Browse Source

Handle errors when writing new class diagram (fixes forum-9024: Read only class diagram file causing System.UnauthorizedAccessException)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3828 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
18699759d9
  1. 4
      src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/ClassDiagramAddin.csproj
  2. 27
      src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ShowClassDiagramCommand.cs
  3. 4
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs
  4. 5
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
  5. 2
      src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs

4
src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/ClassDiagramAddin.csproj

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<OutputType>Library</OutputType>
<RootNamespace>ClassDiagramAddin</RootNamespace>
@ -11,6 +11,8 @@ @@ -11,6 +11,8 @@
<NoStdLib>False</NoStdLib>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<SourceAnalysisOverrideSettingsFile>C:\Users\Daniel\AppData\Roaming\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis</SourceAnalysisOverrideSettingsFile>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<IntermediateOutputPath>obj\Debug\</IntermediateOutputPath>

27
src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ShowClassDiagramCommand.cs

@ -11,12 +11,12 @@ using System.IO; @@ -11,12 +11,12 @@ using System.IO;
using System.Windows.Forms;
using ClassDiagram;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Commands;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using System.Xml;
namespace ClassDiagramAddin
{
@ -50,15 +50,24 @@ namespace ClassDiagramAddin @@ -50,15 +50,24 @@ namespace ClassDiagramAddin
}
classcanvas.AutoArrange();
classcanvas.WriteToXml().Save(filename);
FileProjectItem fpi = new FileProjectItem(p, ItemType.Content);
fpi.FileName = filename;
ProjectService.AddProjectItem(p, fpi);
ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
p.Save();
FileService.OpenFile(filename);
XmlDocument xmlDocument = classcanvas.WriteToXml();
FileUtility.ObservedSave(
newFileName => SaveAndOpenNewClassDiagram(p, newFileName, xmlDocument),
filename, FileErrorPolicy.ProvideAlternative
);
}
}
void SaveAndOpenNewClassDiagram(IProject p, string filename, XmlDocument xmlDocument)
{
xmlDocument.Save(filename);
FileProjectItem fpi = new FileProjectItem(p, ItemType.Content);
fpi.FileName = filename;
ProjectService.AddProjectItem(p, fpi);
ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
p.Save();
FileService.OpenFile(filename);
}
}
}

4
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs

@ -68,11 +68,15 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -68,11 +68,15 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
{
public static void AddProject(ISolutionFolderNode solutionFolderNode, string fileName)
{
if (solutionFolderNode == null)
throw new ArgumentNullException("solutionFolderNode");
AddProject(solutionFolderNode, LanguageBindingService.LoadProject(solutionFolderNode.Solution, fileName, Path.GetFileNameWithoutExtension(fileName)));
}
public static void AddProject(ISolutionFolderNode solutionFolderNode, IProject newProject)
{
if (solutionFolderNode == null)
throw new ArgumentNullException("solutionFolderNode");
if (newProject != null) {
newProject.Location = FileUtility.GetRelativePath(solutionFolderNode.Solution.Directory, newProject.FileName);
ProjectService.AddProject(solutionFolderNode, newProject);

5
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs

@ -65,7 +65,10 @@ namespace ICSharpCode.SharpDevelop.Project @@ -65,7 +65,10 @@ namespace ICSharpCode.SharpDevelop.Project
public AbstractProjectBrowserTreeNode RootNode {
get {
return treeView.Nodes[0] as AbstractProjectBrowserTreeNode;
if (treeView.Nodes.Count > 0)
return treeView.Nodes[0] as AbstractProjectBrowserTreeNode;
else
return null;
}
}

2
src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs

@ -552,7 +552,7 @@ namespace ICSharpCode.Core @@ -552,7 +552,7 @@ namespace ICSharpCode.Core
ServiceManager.MessageService.InformSaveError(fileName, message, "${res:FileUtilityService.ErrorWhileSaving}", e);
break;
case FileErrorPolicy.ProvideAlternative:
ChooseSaveErrorResult r = ServiceManager.MessageService.ChooseSaveError(fileName, message, "${res:FileUtilityService.ErrorWhileSaving}", e, false);
ChooseSaveErrorResult r = ServiceManager.MessageService.ChooseSaveError(fileName, message, "${res:FileUtilityService.ErrorWhileSaving}", e, true);
if (r.IsRetry) {
return ObservedSave(saveFileAs, fileName, message, policy);
} else if (r.IsIgnore) {

Loading…
Cancel
Save