Author: lluis Date: 2006-08-22 08:09:04 -0400 (Tue, 22 Aug 2006) New Revision: 64185
Modified: trunk/monodevelop/Core/src/MonoDevelop.Ide/ChangeLog trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/AssemblyReferencePanel.cs trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/GacReferencePanel.cs trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/ProjectReferencePanel.cs trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/SelectReferenceDialog.cs trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/NamespaceNodeBuilder.cs trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs Log: 2006-08-22 Lluis Sanchez Gual <[EMAIL PROTECTED]> * MonoDevelop.Ide.Gui.Pads.ClassPad/NamespaceNodeBuilder.cs: Fixed exception when trying to update an empty tree. * MonoDevelop.Ide.Gui/Workbench.cs: Don't crash if a file load fails. * MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs: Route commands through the view, before routing to the parent. * MonoDevelop.Ide.Gui.Dialogs/SelectReferenceDialog.cs: * MonoDevelop.Ide.Gui.Dialogs/AssemblyReferencePanel.cs: * MonoDevelop.Ide.Gui.Dialogs/GacReferencePanel.cs: * MonoDevelop.Ide.Gui.Dialogs/ProjectReferencePanel.cs: Several fixes and code refactoring that closes bug #79099. Modified: trunk/monodevelop/Core/src/MonoDevelop.Ide/ChangeLog =================================================================== --- trunk/monodevelop/Core/src/MonoDevelop.Ide/ChangeLog 2006-08-22 10:49:31 UTC (rev 64184) +++ trunk/monodevelop/Core/src/MonoDevelop.Ide/ChangeLog 2006-08-22 12:09:04 UTC (rev 64185) @@ -1,3 +1,17 @@ +2006-08-22 Lluis Sanchez Gual <[EMAIL PROTECTED]> + + * MonoDevelop.Ide.Gui.Pads.ClassPad/NamespaceNodeBuilder.cs: Fixed + exception when trying to update an empty tree. + * MonoDevelop.Ide.Gui/Workbench.cs: Don't crash if a file load fails. + * MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs: Route commands through + the view, before routing to the parent. + + * MonoDevelop.Ide.Gui.Dialogs/SelectReferenceDialog.cs: + * MonoDevelop.Ide.Gui.Dialogs/AssemblyReferencePanel.cs: + * MonoDevelop.Ide.Gui.Dialogs/GacReferencePanel.cs: + * MonoDevelop.Ide.Gui.Dialogs/ProjectReferencePanel.cs: Several fixes + and code refactoring that closes bug #79099. + 2006-08-10 Lluis Sanchez Gual <[EMAIL PROTECTED]> * MonoDevelop.Ide.Gui.Dialogs/FileSelectorDialog.cs: Don't show Modified: trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs =================================================================== --- trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs 2006-08-22 10:49:31 UTC (rev 64184) +++ trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs 2006-08-22 12:09:04 UTC (rev 64185) @@ -21,7 +21,7 @@ namespace MonoDevelop.Ide.Gui { - internal class SdiWorkspaceWindow : Frame, IWorkbenchWindow, ICommandRouter + internal class SdiWorkspaceWindow : Frame, IWorkbenchWindow, ICommandDelegatorRouter { IWorkbench workbench; IViewContent content; @@ -349,12 +349,22 @@ OnActiveViewContentChanged (new ActiveViewContentEventArgs (this.ActiveViewContent)); } - object ICommandRouter.GetNextCommandTarget () + object ICommandDelegatorRouter.GetNextCommandTarget () { commandHandler.SetNextCommandTarget (Parent); return commandHandler; } + object ICommandDelegatorRouter.GetDelegatedCommandTarget () + { + Gtk.Widget w = content as Gtk.Widget; + if (w != this.tabPage) { + // Route commands to the view + return content; + } else + return null; + } + protected virtual void OnTitleChanged(EventArgs e) { if (show_notification) { Modified: trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs =================================================================== --- trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs 2006-08-22 10:49:31 UTC (rev 64184) +++ trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs 2006-08-22 12:09:04 UTC (rev 64185) @@ -612,15 +612,20 @@ public void Invoke(string fileName) { - newContent = binding.CreateContentForFile (fileName); - if (newContent == null) + try { + newContent = binding.CreateContentForFile (fileName); + if (newContent == null) + return; + + if (fileInfo.Encoding != null && newContent is IEncodedTextContent) + ((IEncodedTextContent)newContent).Load (fileName, fileInfo.Encoding); + else + newContent.Load (fileName); + } catch (Exception ex) { + IdeApp.Services.MessageService.ShowError (ex, GettextCatalog.GetString ("The file '{0}' could not be opened.")); return; + } - if (fileInfo.Encoding != null && newContent is IEncodedTextContent) - ((IEncodedTextContent)newContent).Load (fileName, fileInfo.Encoding); - else - newContent.Load (fileName); - if (project != null) newContent.Project = project; Modified: trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/AssemblyReferencePanel.cs =================================================================== --- trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/AssemblyReferencePanel.cs 2006-08-22 10:49:31 UTC (rev 64184) +++ trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/AssemblyReferencePanel.cs 2006-08-22 12:09:04 UTC (rev 64185) @@ -67,9 +67,7 @@ } if (isAssembly) { - selectDialog.AddReference(ReferenceType.Assembly, - System.IO.Path.GetFileName(file), - file); + selectDialog.AddReference (ReferenceType.Assembly, file); } else { Services.MessageService.ShowError (null, GettextCatalog.GetString ("File '{0}' is not a valid .Net Assembly", file), selectDialog.Window, true); } Modified: trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/GacReferencePanel.cs =================================================================== --- trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/GacReferencePanel.cs 2006-08-22 10:49:31 UTC (rev 64184) +++ trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/GacReferencePanel.cs 2006-08-22 12:09:04 UTC (rev 64185) @@ -93,15 +93,11 @@ store.GetIterFromString (out iter, e.Path); if ((bool)store.GetValue (iter, 3) == false) { store.SetValue (iter, 3, true); - selectDialog.AddReference(ReferenceType.Gac, - (string)store.GetValue (iter, 0), - (string)store.GetValue (iter, 4)); + selectDialog.AddReference (ReferenceType.Gac, (string)store.GetValue (iter, 4)); } else { store.SetValue (iter, 3, false); - selectDialog.RemoveReference (ReferenceType.Gac, - (string)store.GetValue (iter, 0), - (string)store.GetValue (iter, 4)); + selectDialog.RemoveReference (ReferenceType.Gac, (string)store.GetValue (iter, 4)); } } Modified: trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/ProjectReferencePanel.cs =================================================================== --- trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/ProjectReferencePanel.cs 2006-08-22 10:49:31 UTC (rev 64184) +++ trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/ProjectReferencePanel.cs 2006-08-22 12:09:04 UTC (rev 64185) @@ -78,15 +78,11 @@ if ((bool)store.GetValue (iter, 3) == false) { store.SetValue (iter, 3, true); - selectDialog.AddReference(ReferenceType.Project, - project.Name, - project.GetOutputFileName()); + selectDialog.AddReference (ReferenceType.Project, project.Name); } else { store.SetValue (iter, 3, false); - selectDialog.RemoveReference(ReferenceType.Project, - project.Name, - project.GetOutputFileName()); + selectDialog.RemoveReference(ReferenceType.Project, project.Name); } } Modified: trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/SelectReferenceDialog.cs =================================================================== --- trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/SelectReferenceDialog.cs 2006-08-22 10:49:31 UTC (rev 64184) +++ trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/SelectReferenceDialog.cs 2006-08-22 12:09:04 UTC (rev 64185) @@ -31,7 +31,13 @@ GacReferencePanel gacRefPanel; ProjectReferencePanel projectRefPanel; + Project configureProject; + const int NameColumn = 0; + const int TypeNameColumn = 1; + const int LocationColumn = 2; + const int ProjectReferenceColumn = 3; + public ProjectReferenceCollection ReferenceInformations { get { ProjectReferenceCollection referenceInformations = new ProjectReferenceCollection(); @@ -40,7 +46,7 @@ return referenceInformations; } do { - referenceInformations.Add ((ProjectReference) refTreeStore.GetValue(looping_iter, 3)); + referenceInformations.Add ((ProjectReference) refTreeStore.GetValue(looping_iter, ProjectReferenceColumn)); } while (refTreeStore.IterNext (ref looping_iter)); return referenceInformations; } @@ -62,27 +68,56 @@ public void SetProject (Project configureProject) { + this.configureProject = configureProject; ((TreeStore) ReferencesTreeView.Model).Clear (); projectRefPanel.SetProject (configureProject); gacRefPanel.SetProject (configureProject); gacRefPanel.Reset (); - foreach (ProjectReference refInfo in configureProject.ProjectReferences) { - switch (refInfo.ReferenceType) { - case ReferenceType.Assembly: - case ReferenceType.Project: - AddNonGacReference (refInfo); - break; - case ReferenceType.Gac: - AddGacReference (refInfo, configureProject); - break; - } - } + foreach (ProjectReference refInfo in configureProject.ProjectReferences) + AddReference (refInfo); OnChanged (null, null); } + TreeIter AddReference (ProjectReference refInfo) + { + switch (refInfo.ReferenceType) { + case ReferenceType.Assembly: + return AddAssemplyReference (refInfo); + case ReferenceType.Project: + return AddProjectReference (refInfo); + case ReferenceType.Gac: + return AddGacReference (refInfo); + default: + return TreeIter.Zero; + } + } + + TreeIter AddAssemplyReference (ProjectReference refInfo) + { + return refTreeStore.AppendValues (System.IO.Path.GetFileName (refInfo.Reference), GetTypeText (refInfo), System.IO.Path.GetFullPath (refInfo.Reference), refInfo); + } + + TreeIter AddProjectReference (ProjectReference refInfo) + { + Combine c = configureProject.RootCombine; + if (c == null) return TreeIter.Zero; + + Project p = c.FindProject (refInfo.Reference); + if (p == null) return TreeIter.Zero; + + projectRefPanel.SignalRefChange (refInfo.Reference, true); + return refTreeStore.AppendValues (System.IO.Path.GetFileName (refInfo.Reference), GetTypeText (refInfo), p.BaseDirectory, refInfo); + } + + TreeIter AddGacReference (ProjectReference refInfo) + { + gacRefPanel.SignalRefChange (refInfo.Reference, true); + return refTreeStore.AppendValues (System.IO.Path.GetFileNameWithoutExtension (refInfo.Reference), GetTypeText (refInfo), refInfo.Reference, refInfo); + } + public SelectReferenceDialog(Project configureProject) { Glade.XML refXML = new Glade.XML (null, "Base.glade", "AddReferenceDialog", null); @@ -91,9 +126,9 @@ refTreeStore = new TreeStore (typeof (string), typeof(string), typeof(string), typeof(ProjectReference)); ReferencesTreeView.Model = refTreeStore; - ReferencesTreeView.AppendColumn (GettextCatalog.GetString("Reference Name"), new CellRendererText (), "text", 0); - ReferencesTreeView.AppendColumn (GettextCatalog.GetString ("Type"), new CellRendererText (), "text", 1); - ReferencesTreeView.AppendColumn (GettextCatalog.GetString ("Location"), new CellRendererText (), "text", 2); + ReferencesTreeView.AppendColumn (GettextCatalog.GetString("Reference Name"), new CellRendererText (), "text", NameColumn); + ReferencesTreeView.AppendColumn (GettextCatalog.GetString ("Type"), new CellRendererText (), "text", TypeNameColumn); + ReferencesTreeView.AppendColumn (GettextCatalog.GetString ("Location"), new CellRendererText (), "text", LocationColumn); projectRefPanel = new ProjectReferencePanel (this); gacRefPanel = new GacReferencePanel (this); @@ -115,73 +150,62 @@ else RemoveReferenceButton.Sensitive = false; } - - void AddNonGacReference (ProjectReference refInfo) + + string GetTypeText (ProjectReference pref) { - gacRefPanel.SignalRefChange (refInfo.Reference, true); - projectRefPanel.SignalRefChange (refInfo.Reference, true); - refTreeStore.AppendValues (System.IO.Path.GetFileName (refInfo.Reference), refInfo.ReferenceType.ToString (), System.IO.Path.GetFullPath (refInfo.Reference), refInfo); + switch (pref.ReferenceType) { + case ReferenceType.Gac: return GettextCatalog.GetString ("Package"); + case ReferenceType.Assembly: return GettextCatalog.GetString ("Assembly"); + case ReferenceType.Project: return GettextCatalog.GetString ("Project"); + default: return ""; + } } - void AddGacReference (ProjectReference refInfo, Project referencedProject) + public void RemoveReference (ReferenceType referenceType, string reference) { - gacRefPanel.SignalRefChange (refInfo.Reference, true); - projectRefPanel.SignalRefChange (refInfo.Reference, true); - refTreeStore.AppendValues (System.IO.Path.GetFileNameWithoutExtension (refInfo.Reference), refInfo.ReferenceType.ToString (), refInfo.Reference, refInfo); + TreeIter iter = FindReference (referenceType, reference); + if (iter.Equals (TreeIter.Zero)) + return; + refTreeStore.Remove (ref iter); } - - public void RemoveReference (ReferenceType referenceType, string referenceName, string referenceLocation) + + public void AddReference (ReferenceType referenceType, string reference) { - TreeIter looping_iter; - if (!refTreeStore.GetIterFirst (out looping_iter)) + TreeIter iter = FindReference (referenceType, reference); + if (!iter.Equals (TreeIter.Zero)) return; - do { - if (referenceLocation == (string)refTreeStore.GetValue (looping_iter, 2)) { - refTreeStore.Remove (ref looping_iter); - return; - } - } while (refTreeStore.IterNext (ref looping_iter)); + + ProjectReference tag = new ProjectReference (referenceType, reference); + TreeIter ni = AddReference (tag); + if (!ni.Equals (TreeIter.Zero)) + ReferencesTreeView.ScrollToCell (refTreeStore.GetPath (ni), null, false, 0, 0); } - public void AddReference(ReferenceType referenceType, string referenceName, string referenceLocation) + TreeIter FindReference (ReferenceType referenceType, string reference) { TreeIter looping_iter; if (refTreeStore.GetIterFirst (out looping_iter)) { do { - try { - if (referenceLocation == (string)refTreeStore.GetValue (looping_iter, 2) && referenceName == (string)refTreeStore.GetValue (looping_iter, 0)) { - return; - } - } catch { + ProjectReference pref = (ProjectReference) refTreeStore.GetValue (looping_iter, ProjectReferenceColumn); + if (pref.Reference == reference && pref.ReferenceType == referenceType) { + return looping_iter; } } while (refTreeStore.IterNext (ref looping_iter)); } - - ProjectReference tag; - switch (referenceType) { - case ReferenceType.Project: - tag = new ProjectReference(referenceType, referenceName); - break; - default: - tag = new ProjectReference(referenceType, referenceLocation); - break; - - } - TreeIter ni = refTreeStore.AppendValues (referenceName, referenceType.ToString (), referenceLocation, tag); - ReferencesTreeView.ScrollToCell (refTreeStore.GetPath (ni), null, false, 0, 0); + return TreeIter.Zero; } - protected void RemoveReference(object sender, EventArgs e) + protected void RemoveReference (object sender, EventArgs e) { TreeIter iter; TreeModel mdl; if (ReferencesTreeView.Selection.GetSelected (out mdl, out iter)) { - switch (((ProjectReference)refTreeStore.GetValue (iter, 3)).ReferenceType) { + switch (((ProjectReference)refTreeStore.GetValue (iter, ProjectReferenceColumn)).ReferenceType) { case ReferenceType.Gac: - gacRefPanel.SignalRefChange ((string)refTreeStore.GetValue (iter, 2), false); + gacRefPanel.SignalRefChange ((string)refTreeStore.GetValue (iter, LocationColumn), false); break; case ReferenceType.Project: - projectRefPanel.SignalRefChange ((string)refTreeStore.GetValue (iter, 0), false); + projectRefPanel.SignalRefChange ((string)refTreeStore.GetValue (iter, NameColumn), false); break; } TreeIter newIter = iter; Modified: trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/NamespaceNodeBuilder.cs =================================================================== --- trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/NamespaceNodeBuilder.cs 2006-08-22 10:49:31 UTC (rev 64184) +++ trunk/monodevelop/Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/NamespaceNodeBuilder.cs 2006-08-22 12:09:04 UTC (rev 64185) @@ -173,8 +173,10 @@ void AddClass (Project project, IClass cls) { ITreeBuilder builder = Context.GetTreeBuilder (); - if (!builder.MoveToObject (project)) - builder.MoveToRoot (); + if (!builder.MoveToObject (project)) { + if (!builder.MoveToRoot ()) + return; // The tree may have been cleaned + } if (cls.Namespace == "") { builder.AddChild (new ClassData (project, cls)); _______________________________________________ Mono-patches maillist - Mono-patches@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-patches