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

Reply via email to