Browse Source

Fixed SD2-556: Resx not being added to project

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@759 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
c090e3a27c
  1. 3
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs
  2. 48
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/Services/DesignerResourceService.cs
  3. 4
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/Bookmark.cs
  4. 9
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/BookmarkManager.cs
  5. 19
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs
  6. 5
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
  7. 7
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs
  8. 126
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  9. 3
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs
  10. 15
      src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs
  11. 2
      src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs
  12. 27
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
  13. 2
      src/Main/Base/Project/Src/TextEditor/Bookmarks/BookmarkConverter.cs
  14. 7
      src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/Nodes/BookmarkNode.cs
  15. 3
      src/Main/StartUp/Project/SharpDevelopMain.cs

3
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs

@ -120,7 +120,7 @@ namespace ICSharpCode.FormDesigner
serviceContainer.AddService(typeof(IHelpService), new HelpService()); serviceContainer.AddService(typeof(IHelpService), new HelpService());
serviceContainer.AddService(typeof(System.Drawing.Design.IPropertyValueUIService), new PropertyValueUIService()); serviceContainer.AddService(typeof(System.Drawing.Design.IPropertyValueUIService), new PropertyValueUIService());
designerResourceService = new DesignerResourceService(this.resources); designerResourceService = new DesignerResourceService(viewContent.FileName, this.resources);
serviceContainer.AddService(typeof(System.ComponentModel.Design.IResourceService), designerResourceService); serviceContainer.AddService(typeof(System.ComponentModel.Design.IResourceService), designerResourceService);
AmbientProperties ambientProperties = new AmbientProperties(); AmbientProperties ambientProperties = new AmbientProperties();
serviceContainer.AddService(typeof(AmbientProperties), ambientProperties); serviceContainer.AddService(typeof(AmbientProperties), ambientProperties);
@ -137,7 +137,6 @@ namespace ICSharpCode.FormDesigner
serviceContainer.AddService(typeof(System.ComponentModel.Design.IEventBindingService), eventBindingService); serviceContainer.AddService(typeof(System.ComponentModel.Design.IEventBindingService), eventBindingService);
designerResourceService.Host = Host; designerResourceService.Host = Host;
designerResourceService.FileName = viewContent.FileName;
serviceContainer.AddService(typeof(IDesignerHost), Host); serviceContainer.AddService(typeof(IDesignerHost), Host);
DesignerLoader designerLoader = loaderProvider.CreateLoader(generator); DesignerLoader designerLoader = loaderProvider.CreateLoader(generator);

48
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/Services/DesignerResourceService.cs

@ -27,9 +27,7 @@ namespace ICSharpCode.FormDesigner.Services
{ {
IDesignerHost host; IDesignerHost host;
public string FileName = String.Empty; string FileName = String.Empty;
protected IProject project;
#region ResourceStorage #region ResourceStorage
public class ResourceStorage public class ResourceStorage
@ -160,12 +158,31 @@ namespace ICSharpCode.FormDesigner.Services
} }
} }
public DesignerResourceService(Dictionary<string, ResourceStorage> resources) public DesignerResourceService(string fileName, Dictionary<string, ResourceStorage> resources)
{ {
project = ProjectService.CurrentProject; this.FileName = fileName;
this.resources = resources; this.resources = resources;
} }
IProject _project;
IProject GetProject()
{
if (_project != null)
return _project;
if (ProjectService.OpenSolution != null) {
LoggingService.Warn(FileName);
foreach (IProject project in ProjectService.OpenSolution.Projects) {
if (project.IsFileInProject(FileName)) {
LoggingService.Warn("use project " + project.Name);
_project = project;
return project;
}
}
}
return null;
}
#region System.ComponentModel.Design.IResourceService interface implementation #region System.ComponentModel.Design.IResourceService interface implementation
public System.Resources.IResourceWriter GetResourceWriter(System.Globalization.CultureInfo info) public System.Resources.IResourceWriter GetResourceWriter(System.Globalization.CultureInfo info)
{ {
@ -176,7 +193,8 @@ namespace ICSharpCode.FormDesigner.Services
if (resources.ContainsKey(fileName)) { if (resources.ContainsKey(fileName)) {
resourceStorage = resources[fileName]; resourceStorage = resources[fileName];
} else { } else {
resourceStorage = new ResourceStorage(fileName, project); resources[fileName] = resourceStorage; resourceStorage = new ResourceStorage(fileName, GetProject());
resources[fileName] = resourceStorage;
} }
return resourceStorage.GetWriter(); return resourceStorage.GetWriter();
} catch (Exception e) { } catch (Exception e) {
@ -194,7 +212,7 @@ namespace ICSharpCode.FormDesigner.Services
if (resources != null && resources.ContainsKey(fileName)) { if (resources != null && resources.ContainsKey(fileName)) {
resourceStorage = resources[fileName]; resourceStorage = resources[fileName];
} else { } else {
resourceStorage = new ResourceStorage(fileName, project); resourceStorage = new ResourceStorage(fileName, GetProject());
resources[fileName] = resourceStorage; resources[fileName] = resourceStorage;
} }
return resourceStorage.GetReader(); return resourceStorage.GetReader();
@ -212,20 +230,24 @@ namespace ICSharpCode.FormDesigner.Services
string resourceFileName = entry.Key; string resourceFileName = entry.Key;
FileUtility.ObservedSave(new NamedFileOperationDelegate(entry.Value.Save), resourceFileName, FileErrorPolicy.Inform); FileUtility.ObservedSave(new NamedFileOperationDelegate(entry.Value.Save), resourceFileName, FileErrorPolicy.Inform);
IProject project = GetProject();
// Add this resource file to the project // Add this resource file to the project
if (entry.Value.ContainsData && project != null && !project.IsFileInProject(resourceFileName)) { if (entry.Value.ContainsData && project != null && !project.IsFileInProject(resourceFileName)) {
FileProjectItem newFileProjectItem = new FileProjectItem(project, ItemType.EmbeddedResource);
newFileProjectItem.DependentUpon = Path.GetFileName(FileName);
newFileProjectItem.Include = FileUtility.GetRelativePath(project.Directory, resourceFileName);
ProjectService.AddProjectItem(project, newFileProjectItem);
PadDescriptor pd = WorkbenchSingleton.Workbench.GetPad(typeof(ProjectBrowserPad)); PadDescriptor pd = WorkbenchSingleton.Workbench.GetPad(typeof(ProjectBrowserPad));
FileNode formFileNode = ((ProjectBrowserPad)pd.PadContent).ProjectBrowserControl.FindFileNode(FileName); FileNode formFileNode = ((ProjectBrowserPad)pd.PadContent).ProjectBrowserControl.FindFileNode(FileName);
if (formFileNode != null) { if (formFileNode != null) {
LoggingService.Info("FormFileNode found, adding subitem");
FileNode fileNode = new FileNode(resourceFileName, FileNodeStatus.BehindFile); FileNode fileNode = new FileNode(resourceFileName, FileNodeStatus.BehindFile);
fileNode.AddTo(formFileNode); fileNode.AddTo(formFileNode);
FileProjectItem newFileProjectItem = new FileProjectItem(fileNode.Project, ItemType.EmbeddedResource);
newFileProjectItem.DependentUpon = Path.GetFileName(formFileNode.FileName);
newFileProjectItem.Include = FileUtility.GetRelativePath(fileNode.Project.Directory, fileNode.FileName);
fileNode.ProjectItem = newFileProjectItem; fileNode.ProjectItem = newFileProjectItem;
ProjectService.AddProjectItem(fileNode.Project, newFileProjectItem);
fileNode.Project.Save();
} }
project.Save();
} }
} }
} }
@ -234,6 +256,8 @@ namespace ICSharpCode.FormDesigner.Services
protected string CalcResourceFileName(System.Globalization.CultureInfo info) protected string CalcResourceFileName(System.Globalization.CultureInfo info)
{ {
StringBuilder resourceFileName = null; StringBuilder resourceFileName = null;
IProject project = GetProject();
if (FileName != null && FileName != String.Empty) { if (FileName != null && FileName != String.Empty) {
resourceFileName = new StringBuilder(Path.GetDirectoryName(FileName)); resourceFileName = new StringBuilder(Path.GetDirectoryName(FileName));
} else if (project != null) { } else if (project != null) {

4
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/Bookmark.cs

@ -59,6 +59,8 @@ namespace ICSharpCode.TextEditor.Document
return lineNumber; return lineNumber;
} }
set { set {
if (value < 0)
throw new ArgumentOutOfRangeException("value", value, "line number must be >= 0");
if (lineNumber != value) { if (lineNumber != value) {
lineNumber = value; lineNumber = value;
OnLineNumberChanged(EventArgs.Empty); OnLineNumberChanged(EventArgs.Empty);
@ -90,6 +92,8 @@ namespace ICSharpCode.TextEditor.Document
public Bookmark(IDocument document, int lineNumber, bool isEnabled) public Bookmark(IDocument document, int lineNumber, bool isEnabled)
{ {
if (lineNumber < 0)
throw new ArgumentOutOfRangeException("lineNumber", lineNumber, "line number must be >= 0");
this.document = document; this.document = document;
this.lineNumber = lineNumber; this.lineNumber = lineNumber;
this.isEnabled = isEnabled; this.isEnabled = isEnabled;

9
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/BookmarkManager.cs

@ -138,7 +138,14 @@ namespace ICSharpCode.TextEditor.Document
changed = true; changed = true;
} else if (mark.LineNumber > e.LineStart + 1 || (e.LinesMoved < 0 && mark.LineNumber > e.LineStart)) { } else if (mark.LineNumber > e.LineStart + 1 || (e.LinesMoved < 0 && mark.LineNumber > e.LineStart)) {
changed = true; changed = true;
bookmark[i].LineNumber = mark.LineNumber + e.LinesMoved; int newLine = mark.LineNumber + e.LinesMoved;
if (newLine >= 0) {
bookmark[i].LineNumber = newLine;
} else {
bookmark.RemoveAt(i);
OnRemoved(new BookmarkEventArgs(mark));
--i;
}
} }
} }

19
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs

@ -7,6 +7,7 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.ComponentModel; using System.ComponentModel;
using System.Drawing; using System.Drawing;
@ -41,12 +42,11 @@ namespace ICSharpCode.TextEditor
TextAreaControl motherTextAreaControl; TextAreaControl motherTextAreaControl;
TextEditorControl motherTextEditorControl; TextEditorControl motherTextEditorControl;
ArrayList bracketshemes = new ArrayList(); List<BracketHighlightingSheme> bracketshemes = new List<BracketHighlightingSheme>();
TextAreaClipboardHandler textAreaClipboardHandler; TextAreaClipboardHandler textAreaClipboardHandler;
bool autoClearSelection = false; bool autoClearSelection = false;
ArrayList leftMargins = new ArrayList(); List<AbstractMargin> leftMargins = new List<AbstractMargin>();
ArrayList topMargins = new ArrayList();
TextView textView; TextView textView;
GutterMargin gutterMargin; GutterMargin gutterMargin;
@ -58,6 +58,19 @@ namespace ICSharpCode.TextEditor
bool disposed; bool disposed;
[Browsable(false)]
public IList<AbstractMargin> LeftMargins {
get {
return leftMargins.AsReadOnly();
}
}
public void InsertLeftMargin(int index, AbstractMargin margin)
{
leftMargins.Insert(index, margin);
Refresh();
}
public TextEditorControl MotherTextEditorControl { public TextEditorControl MotherTextEditorControl {
get { get {
return motherTextEditorControl; return motherTextEditorControl;

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

@ -131,6 +131,11 @@ namespace ICSharpCode.SharpDevelop.Project
return null; return null;
} }
/// <summary>
/// Finds the node of a file in the project browser.
/// WARNING: this method only finds the node if it already is created. Since the tree
/// is lazy-loaded, not every file has a node!
/// </summary>
public FileNode FindFileNode(string fileName) public FileNode FindFileNode(string fileName)
{ {
return FindFileNode(treeView.Nodes, fileName); return FindFileNode(treeView.Nodes, fileName);

7
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs

@ -29,7 +29,6 @@ namespace ICSharpCode.SharpDevelop.Project
{ {
string toolbarAddinTreePath = null; string toolbarAddinTreePath = null;
ProjectItem item; ProjectItem item;
protected LinkedList<ProjectItem> subItems = new LinkedList<ProjectItem>();
protected bool autoClearNodes = true; protected bool autoClearNodes = true;
protected bool canLabelEdited = true; protected bool canLabelEdited = true;
@ -40,12 +39,6 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
public LinkedList<ProjectItem> SubItems {
get {
return subItems;
}
}
/// <returns> /// <returns>
/// True, if this node can be label edited, false otherwise. /// True, if this node can be label edited, false otherwise.
/// </returns> /// </returns>

126
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs

@ -217,7 +217,15 @@ namespace ICSharpCode.SharpDevelop.Project
Nodes.Remove(removeMe); Nodes.Remove(removeMe);
removeMe = null; removeMe = null;
} }
Dictionary<string, AbstractProjectBrowserTreeNode> fileNodeDictionary = new Dictionary<string, AbstractProjectBrowserTreeNode>();
LoggingService.Info("Initialize DirectoryNode " + Directory);
Dictionary<string, FileNode> fileNodeDictionary
= new Dictionary<string, FileNode>(StringComparer.InvariantCultureIgnoreCase);
Dictionary<FileNode, string> dependendFileDictionary = new Dictionary<FileNode, string>();
Dictionary<string, DirectoryNode> directoryNodeList = new Dictionary<string, DirectoryNode>(StringComparer.InvariantCultureIgnoreCase);
// Add files found in file system
if (System.IO.Directory.Exists(Directory)) { if (System.IO.Directory.Exists(Directory)) {
foreach (string subDirectory in System.IO.Directory.GetDirectories(Directory)) { foreach (string subDirectory in System.IO.Directory.GetDirectories(Directory)) {
@ -227,6 +235,7 @@ namespace ICSharpCode.SharpDevelop.Project
newDirectoryNode.SpecialFolder = SpecialFolder.AppDesigner; newDirectoryNode.SpecialFolder = SpecialFolder.AppDesigner;
} }
newDirectoryNode.AddTo(this); newDirectoryNode.AddTo(this);
directoryNodeList[Path.GetFileName(subDirectory)] = newDirectoryNode;
} }
} }
@ -240,71 +249,50 @@ namespace ICSharpCode.SharpDevelop.Project
SetClosedImage(); SetClosedImage();
} }
Dictionary<FileNode, string> dependendFileDictionary = new Dictionary<FileNode, string>(); string relativeDirectoryPath = this.RelativePath;
if (relativeDirectoryPath.Length > 0)
relativeDirectoryPath = relativeDirectoryPath.Replace('\\', '/') + '/';
foreach (AbstractProjectBrowserTreeNode node in Nodes) { // Add project items
LinkedListNode<ProjectItem> cur = subItems.First;
while (cur != null) {
if (node is DirectoryNode) {
DirectoryNode dirNode = (DirectoryNode)node;
bool isBelow = FileUtility.IsBaseDirectory(dirNode.Directory, cur.Value.FileName);
if (isBelow) {
// check if there is a 'folder' item.
if (FileUtility.IsEqualFileName(dirNode.RelativePath, cur.Value.Include)) {
dirNode.ProjectItem = cur.Value;
if (cur.Value.ItemType == ItemType.WebReferences) {
dirNode.SpecialFolder = SpecialFolder.WebReferenceFolder;
}
dirNode.FileNodeStatus = FileNodeStatus.InProject;
cur = Remove(subItems, cur);
} else {
dirNode.ProjectItem = cur.Value;
dirNode.FileNodeStatus = FileNodeStatus.InProject;
node.SubItems.AddLast(cur.Value);
cur = Remove(subItems, cur);
}
} else {
cur = cur.Next;
}
} else if (node is FileNode) {
FileNode fileNode = (FileNode)node;
if (cur.Value is FileProjectItem && FileUtility.IsEqualFileName(fileNode.FileName, cur.Value.FileName)) {
FileProjectItem fileProjectItem = cur.Value as FileProjectItem;
if (fileProjectItem != null && fileProjectItem.DependentUpon != null && fileProjectItem.DependentUpon.Length > 0) {
dependendFileDictionary[fileNode] = fileProjectItem.DependentUpon;
}
fileNode.FileNodeStatus = FileNodeStatus.InProject; foreach (ProjectItem item in Project.Items) {
fileNode.ProjectItem = cur.Value; FileProjectItem fileItem = item as FileProjectItem;
node.SubItems.AddLast(cur.Value); if (fileItem == null)
cur = Remove(subItems, cur); continue;
string virtualName = fileItem.VirtualName.Replace('\\', '/');
string fileName = Path.GetFileName(virtualName);
if (!string.Equals(virtualName, relativeDirectoryPath + fileName, StringComparison.InvariantCultureIgnoreCase)) {
AddParentFolder(virtualName, relativeDirectoryPath, directoryNodeList);
continue;
}
if (item.ItemType == ItemType.Folder || item.ItemType == ItemType.WebReferences) {
DirectoryNode node;
if (directoryNodeList.TryGetValue(fileName, out node)) {
node.FileNodeStatus = FileNodeStatus.InProject;
} else {
new DirectoryNode(item.FileName.Trim('\\', '/'), FileNodeStatus.Missing).AddTo(this);
}
} else {
FileNode node;
if (fileItem.IsLink) {
node = new FileNode(fileItem.FileName, FileNodeStatus.InProject);
node.AddTo(this);
fileNodeDictionary[fileName] = node;
} else {
if (fileNodeDictionary.TryGetValue(fileName, out node)) {
node.FileNodeStatus = FileNodeStatus.InProject;
} else { } else {
cur = cur.Next; node = new FileNode(fileItem.FileName, FileNodeStatus.Missing);
node.AddTo(this);
fileNodeDictionary[fileName] = node;
} }
} else {
cur = cur.Next;
} }
}
}
// Create nodes for missing items. node.ProjectItem = fileItem;
{ if (fileItem != null && fileItem.DependentUpon != null && fileItem.DependentUpon.Length > 0) {
LinkedListNode<ProjectItem> cur = subItems.First; dependendFileDictionary[node] = fileItem.DependentUpon;
while (cur != null) {
if (cur.Value.ItemType == ItemType.Folder || cur.Value.ItemType == ItemType.WebReferences) {
new DirectoryNode(cur.Value.FileName.Trim('\\', '/'), FileNodeStatus.Missing).AddTo(this);
} else if (cur.Value is FileProjectItem) {
FileProjectItem fileProjectItem = cur.Value as FileProjectItem;
FileNode missingFile = new FileNode(cur.Value.FileName, fileProjectItem.IsLink ? FileNodeStatus.InProject : FileNodeStatus.Missing);
missingFile.ProjectItem = cur.Value;
if (fileProjectItem != null && fileProjectItem.DependentUpon != null && fileProjectItem.DependentUpon.Length > 0) {
dependendFileDictionary[missingFile] = fileProjectItem.DependentUpon;
}
missingFile.AddTo(this);
fileNodeDictionary[Path.GetFileName(cur.Value.FileName)] = missingFile;
} }
cur = cur.Next;
} }
} }
@ -324,6 +312,26 @@ namespace ICSharpCode.SharpDevelop.Project
base.Initialize(); base.Initialize();
} }
void AddParentFolder(string virtualName, string relativeDirectoryPath, Dictionary<string, DirectoryNode> directoryNodeList)
{
if (relativeDirectoryPath.Length == 0
|| string.Compare(virtualName, 0, relativeDirectoryPath, 0, relativeDirectoryPath.Length, StringComparison.InvariantCultureIgnoreCase) == 0)
{
// virtualName is a file in this folder, so we have to add its containing folder
// to the project
int pos = virtualName.IndexOf('/', relativeDirectoryPath.Length + 1);
if (pos < 0)
return;
string subFolderName = virtualName.Substring(relativeDirectoryPath.Length, pos - relativeDirectoryPath.Length);
DirectoryNode node;
if (directoryNodeList.TryGetValue(subFolderName, out node)) {
node.FileNodeStatus = FileNodeStatus.InProject;
} else {
new DirectoryNode(Path.Combine(Directory, subFolderName), FileNodeStatus.Missing).AddTo(this);
}
}
}
void SetOpenedImage() void SetOpenedImage()
{ {
if (openedImage != null) { if (openedImage != null) {

3
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs

@ -62,9 +62,6 @@ namespace ICSharpCode.SharpDevelop.Project
OpenedImage = ClosedImage = IconService.GetImageForProjectType(project.Language); OpenedImage = ClosedImage = IconService.GetImageForProjectType(project.Language);
} }
Tag = project; Tag = project;
foreach (ProjectItem item in project.Items) {
subItems.AddLast(item);
}
} }
public override void ShowProperties() public override void ShowProperties()

15
src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs

@ -111,6 +111,21 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
[Browsable(false)]
/// <summary>
/// Gets the name of the file in the virtual project file system.
/// This is normally the same as Include, except for linked files, where it is
/// the value of Properties["Link"].
/// </summary>
public string VirtualName {
get {
if (IsLink)
return base.Properties["Link"];
else
return this.Include;
}
}
public FileProjectItem(IProject project, ItemType type) : base(project) public FileProjectItem(IProject project, ItemType type) : base(project)
{ {
this.type = type; this.type = type;

2
src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs

@ -42,7 +42,7 @@ namespace ICSharpCode.Core
protected override TextMarker CreateMarker() protected override TextMarker CreateMarker()
{ {
LineSegment lineSeg = Document.GetLineSegment(LineNumber); LineSegment lineSeg = Document.GetLineSegment(Math.Min(Document.TotalNumberOfLines, LineNumber));
TextMarker marker = new TextMarker(lineSeg.Offset, lineSeg.Length, TextMarkerType.SolidBlock, Color.Red, Color.White); TextMarker marker = new TextMarker(lineSeg.Offset, lineSeg.Length, TextMarkerType.SolidBlock, Color.Red, Color.White);
Document.MarkerStrategy.AddMarker(marker); Document.MarkerStrategy.AddMarker(marker);
return marker; return marker;

27
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -14,8 +14,8 @@ namespace ICSharpCode.SharpDevelop.Project
{ {
public static class ProjectService public static class ProjectService
{ {
static Solution openSolution = null; static Solution openSolution;
static IProject currentProject = null; static IProject currentProject;
public static Solution OpenSolution { public static Solution OpenSolution {
get { get {
@ -30,6 +30,7 @@ namespace ICSharpCode.SharpDevelop.Project
} }
set { set {
if (currentProject != value) { if (currentProject != value) {
LoggingService.Info("CurrentProject changed to " + (value == null ? "null" : value.Name));
currentProject = value; currentProject = value;
OnCurrentProjectChanged(new ProjectEventArgs(currentProject)); OnCurrentProjectChanged(new ProjectEventArgs(currentProject));
} }
@ -40,18 +41,21 @@ namespace ICSharpCode.SharpDevelop.Project
{ {
filename = Path.GetFullPath(filename).ToLower(); filename = Path.GetFullPath(filename).ToLower();
foreach (IProject project in OpenSolution.Projects) { foreach (IProject project in OpenSolution.Projects) {
if (project.FileName.ToLower() == filename) { if (FileUtility.IsEqualFileName(project.FileName, filename)) {
return project; return project;
} }
} }
return null; return null;
} }
static ProjectService() static bool initialized;
public static void InitializeService()
{ {
if (WorkbenchSingleton.Workbench != null) { if (initialized)
WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += new EventHandler(ActiveWindowChanged); throw new InvalidOperationException("ProjectService already is initialized");
} initialized = true;
WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += ActiveWindowChanged;
FileService.FileRenamed += FileServiceFileRenamed; FileService.FileRenamed += FileServiceFileRenamed;
FileService.FileRemoved += FileServiceFileRemoved; FileService.FileRemoved += FileServiceFileRemoved;
} }
@ -68,6 +72,7 @@ namespace ICSharpCode.SharpDevelop.Project
{ {
return ext.Equals(".CSPROJ", StringComparison.OrdinalIgnoreCase) return ext.Equals(".CSPROJ", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".VBPROJ", StringComparison.OrdinalIgnoreCase) || ext.Equals(".VBPROJ", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".BOOPROJ", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".ILPROJ", StringComparison.OrdinalIgnoreCase); || ext.Equals(".ILPROJ", StringComparison.OrdinalIgnoreCase);
} }
@ -149,7 +154,13 @@ namespace ICSharpCode.SharpDevelop.Project
static void ActiveWindowChanged(object sender, EventArgs e) static void ActiveWindowChanged(object sender, EventArgs e)
{ {
IViewContent viewContent = WorkbenchSingleton.Workbench.ActiveContent as IViewContent; object activeContent = WorkbenchSingleton.Workbench.ActiveContent;
IViewContent viewContent = activeContent as IViewContent;
if (viewContent == null && activeContent is ISecondaryViewContent) {
// required if one creates a new winforms app and then immediately switches to design mode
// without focussing the text editor
viewContent = ((ISecondaryViewContent)activeContent).WorkbenchWindow.ViewContent;
}
if (OpenSolution == null || viewContent == null) { if (OpenSolution == null || viewContent == null) {
return; return;
} }

2
src/Main/Base/Project/Src/TextEditor/Bookmarks/BookmarkConverter.cs

@ -31,6 +31,8 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
string[] v = ((string)value).Split('|'); string[] v = ((string)value).Split('|');
string fileName = v[1]; string fileName = v[1];
int lineNumber = int.Parse(v[2], culture); int lineNumber = int.Parse(v[2], culture);
if (lineNumber < 0)
return null;
SDBookmark bookmark; SDBookmark bookmark;
switch (v[0]) { switch (v[0]) {
case "Breakpoint": case "Breakpoint":

7
src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/Nodes/BookmarkNode.cs

@ -17,7 +17,7 @@ using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.SharpDevelop.Bookmarks namespace ICSharpCode.SharpDevelop.Bookmarks
{ {
/// <summary> /// <summary>
/// Description of SearchFolderNode. /// ExtTreeNode representing a bookmark.
/// </summary> /// </summary>
public class BookmarkNode : ExtTreeNode public class BookmarkNode : ExtTreeNode
{ {
@ -47,8 +47,7 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
bookmark.DocumentChanged += BookmarkDocumentChanged; bookmark.DocumentChanged += BookmarkDocumentChanged;
bookmark.LineNumberChanged += BookmarkLineNumberChanged; bookmark.LineNumberChanged += BookmarkLineNumberChanged;
if (bookmark.Document != null) { if (bookmark.Document != null) {
line = bookmark.Document.GetLineSegment(bookmark.LineNumber); BookmarkDocumentChanged(null, null);
Text = positionText + bookmark.Document.GetText(line);
} else { } else {
Text = positionText; Text = positionText;
} }
@ -62,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
void BookmarkDocumentChanged(object sender, EventArgs e) void BookmarkDocumentChanged(object sender, EventArgs e)
{ {
if (bookmark.Document != null) { if (bookmark.Document != null) {
line = bookmark.Document.GetLineSegment(bookmark.LineNumber); line = bookmark.Document.GetLineSegment(Math.Min(bookmark.LineNumber, bookmark.Document.TotalNumberOfLines));
Text = positionText + bookmark.Document.GetText(line); Text = positionText + bookmark.Document.GetText(line);
} }
} }

3
src/Main/StartUp/Project/SharpDevelopMain.cs

@ -174,6 +174,9 @@ namespace ICSharpCode.SharpDevelop
InitializeCore(); InitializeCore();
// initialize workbench-dependent services:
ProjectService.InitializeService();
if (SplashScreenForm.SplashScreen != null) { if (SplashScreenForm.SplashScreen != null) {
SplashScreenForm.SplashScreen.Dispose(); SplashScreenForm.SplashScreen.Dispose();
} }

Loading…
Cancel
Save