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 @@
<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> <PropertyGroup>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<RootNamespace>ClassDiagramAddin</RootNamespace> <RootNamespace>ClassDiagramAddin</RootNamespace>
@ -11,6 +11,8 @@
<NoStdLib>False</NoStdLib> <NoStdLib>False</NoStdLib>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<SourceAnalysisOverrideSettingsFile>C:\Users\Daniel\AppData\Roaming\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis</SourceAnalysisOverrideSettingsFile>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<IntermediateOutputPath>obj\Debug\</IntermediateOutputPath> <IntermediateOutputPath>obj\Debug\</IntermediateOutputPath>

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

@ -11,12 +11,12 @@ using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using ClassDiagram; using ClassDiagram;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Commands; using ICSharpCode.SharpDevelop.Commands;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using System.Xml;
namespace ClassDiagramAddin namespace ClassDiagramAddin
{ {
@ -50,15 +50,24 @@ namespace ClassDiagramAddin
} }
classcanvas.AutoArrange(); classcanvas.AutoArrange();
classcanvas.WriteToXml().Save(filename); XmlDocument xmlDocument = classcanvas.WriteToXml();
FileProjectItem fpi = new FileProjectItem(p, ItemType.Content); FileUtility.ObservedSave(
fpi.FileName = filename; newFileName => SaveAndOpenNewClassDiagram(p, newFileName, xmlDocument),
ProjectService.AddProjectItem(p, fpi); filename, FileErrorPolicy.ProvideAlternative
ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView(); );
p.Save();
FileService.OpenFile(filename);
} }
} }
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
{ {
public static void AddProject(ISolutionFolderNode solutionFolderNode, string fileName) 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))); AddProject(solutionFolderNode, LanguageBindingService.LoadProject(solutionFolderNode.Solution, fileName, Path.GetFileNameWithoutExtension(fileName)));
} }
public static void AddProject(ISolutionFolderNode solutionFolderNode, IProject newProject) public static void AddProject(ISolutionFolderNode solutionFolderNode, IProject newProject)
{ {
if (solutionFolderNode == null)
throw new ArgumentNullException("solutionFolderNode");
if (newProject != null) { if (newProject != null) {
newProject.Location = FileUtility.GetRelativePath(solutionFolderNode.Solution.Directory, newProject.FileName); newProject.Location = FileUtility.GetRelativePath(solutionFolderNode.Solution.Directory, newProject.FileName);
ProjectService.AddProject(solutionFolderNode, newProject); ProjectService.AddProject(solutionFolderNode, newProject);

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

@ -65,7 +65,10 @@ namespace ICSharpCode.SharpDevelop.Project
public AbstractProjectBrowserTreeNode RootNode { public AbstractProjectBrowserTreeNode RootNode {
get { 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
ServiceManager.MessageService.InformSaveError(fileName, message, "${res:FileUtilityService.ErrorWhileSaving}", e); ServiceManager.MessageService.InformSaveError(fileName, message, "${res:FileUtilityService.ErrorWhileSaving}", e);
break; break;
case FileErrorPolicy.ProvideAlternative: 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) { if (r.IsRetry) {
return ObservedSave(saveFileAs, fileName, message, policy); return ObservedSave(saveFileAs, fileName, message, policy);
} else if (r.IsIgnore) { } else if (r.IsIgnore) {

Loading…
Cancel
Save