diff options
author | Lluis Sanchez <lluis@novell.com> | 2009-07-27 18:20:10 +0400 |
---|---|---|
committer | Lluis Sanchez <lluis@novell.com> | 2009-07-27 18:20:10 +0400 |
commit | 20fd1725bbc5e185545367efb1daaa8230c9e46c (patch) | |
tree | 448fd94cedc8c57f5258c8baec7952590cc25149 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad | |
parent | 580e5550b503e3add1c93396912b7692c731891d (diff) |
* MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs:
* MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs:
Properly support moving items between solution folders of the same
solution (the ItemAddedToSolution is not fired anymore in this
case).
svn path=/trunk/monodevelop/; revision=138729
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad')
2 files changed, 62 insertions, 23 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs index 655c64122a..6c305da567 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs @@ -43,10 +43,14 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad public class SolutionFolderNodeBuilder: TypeNodeBuilder { SolutionItemRenamedEventHandler combineNameChanged; + SolutionItemChangeEventHandler combineEntryAdded; + SolutionItemChangeEventHandler combineEntryRemoved; public SolutionFolderNodeBuilder () { combineNameChanged = (SolutionItemRenamedEventHandler) DispatchService.GuiDispatch (new SolutionItemRenamedEventHandler (OnCombineRenamed)); + combineEntryAdded = (SolutionItemChangeEventHandler) DispatchService.GuiDispatch (new SolutionItemChangeEventHandler (OnEntryAdded)); + combineEntryRemoved = (SolutionItemChangeEventHandler) DispatchService.GuiDispatch (new SolutionItemChangeEventHandler (OnEntryRemoved)); } public override Type NodeDataType { @@ -103,14 +107,18 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad public override void OnNodeAdded (object dataObject) { - SolutionFolder combine = (SolutionFolder) dataObject; - combine.NameChanged += combineNameChanged; + SolutionFolder folder = (SolutionFolder) dataObject; + folder.NameChanged += combineNameChanged; + folder.ItemAdded += combineEntryAdded; + folder.ItemRemoved += combineEntryRemoved; } public override void OnNodeRemoved (object dataObject) { - SolutionFolder combine = (SolutionFolder) dataObject; - combine.NameChanged -= combineNameChanged; + SolutionFolder folder = (SolutionFolder) dataObject; + folder.NameChanged -= combineNameChanged; + folder.ItemAdded -= combineEntryAdded; + folder.ItemRemoved -= combineEntryRemoved; } void OnCombineRenamed (object sender, SolutionItemRenamedEventArgs e) @@ -118,6 +126,24 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad ITreeBuilder tb = Context.GetTreeBuilder (e.SolutionItem); if (tb != null) tb.Update (); } + + void OnEntryAdded (object sender, SolutionItemEventArgs e) + { + ITreeBuilder tb = Context.GetTreeBuilder (e.SolutionItem.ParentFolder); + if (tb != null) { + tb.AddChild (e.SolutionItem, true); + tb.Expanded = true; + } + } + + void OnEntryRemoved (object sender, SolutionItemEventArgs e) + { + ITreeBuilder tb = Context.GetTreeBuilder (e.SolutionItem); + if (tb != null) { + ITreeBuilder tbs = Context.GetTreeBuilder (e.SolutionItem); + tb.Remove (); + } + } } public class CombineNodeCommandHandler: NodeCommandHandler @@ -151,8 +177,8 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad SolutionItem it = (SolutionItem) dataObject; if (!MessageService.Confirm (GettextCatalog.GetString ("Are you sure you want to move the item '{0}' to the solution folder '{1}'?", it.Name, folder.Name), AlertButton.Move)) return; - - it.ParentFolder.Items.Remove (it); + + // If the items belongs to another folder, it will be automatically removed from it folder.Items.Add (it); IdeApp.ProjectOperations.Save (folder.ParentSolution); } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs index 05cff362bb..4e42046bfc 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs @@ -42,27 +42,29 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad { public class SolutionNodeBuilder: TypeNodeBuilder { - SolutionItemEventHandler combineEntryAdded; - SolutionItemEventHandler combineEntryRemoved; + SolutionItemEventHandler globalItemAddedRemoved; + SolutionItemChangeEventHandler combineEntryAdded; + SolutionItemChangeEventHandler combineEntryRemoved; EventHandler<WorkspaceItemRenamedEventArgs> combineNameChanged; EventHandler startupChanged; public SolutionNodeBuilder () { - combineEntryAdded = (SolutionItemEventHandler) DispatchService.GuiDispatch (new SolutionItemEventHandler (OnEntryAdded)); - combineEntryRemoved = (SolutionItemEventHandler) DispatchService.GuiDispatch (new SolutionItemEventHandler (OnEntryRemoved)); + globalItemAddedRemoved = (SolutionItemEventHandler) DispatchService.GuiDispatch (new SolutionItemEventHandler (OnSolutionItemAddedRemoved)); + combineEntryAdded = (SolutionItemChangeEventHandler) DispatchService.GuiDispatch (new SolutionItemChangeEventHandler (OnEntryAdded)); + combineEntryRemoved = (SolutionItemChangeEventHandler) DispatchService.GuiDispatch (new SolutionItemChangeEventHandler (OnEntryRemoved)); combineNameChanged = (EventHandler<WorkspaceItemRenamedEventArgs>) DispatchService.GuiDispatch (new EventHandler<WorkspaceItemRenamedEventArgs> (OnCombineRenamed)); startupChanged = (EventHandler) DispatchService.GuiDispatch (new EventHandler (OnStartupChanged)); - IdeApp.Workspace.ItemAddedToSolution += combineEntryAdded; - IdeApp.Workspace.ItemRemovedFromSolution += combineEntryRemoved; + IdeApp.Workspace.ItemAddedToSolution += globalItemAddedRemoved; + IdeApp.Workspace.ItemRemovedFromSolution += globalItemAddedRemoved; } public override void Dispose () { base.Dispose (); - IdeApp.Workspace.ItemAddedToSolution -= combineEntryAdded; - IdeApp.Workspace.ItemRemovedFromSolution -= combineEntryRemoved; + IdeApp.Workspace.ItemAddedToSolution -= globalItemAddedRemoved; + IdeApp.Workspace.ItemRemovedFromSolution -= globalItemAddedRemoved; } @@ -129,6 +131,8 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad Solution solution = (Solution) dataObject; solution.NameChanged += combineNameChanged; solution.StartupItemChanged += startupChanged; + solution.RootFolder.ItemAdded += combineEntryAdded; + solution.RootFolder.ItemRemoved += combineEntryRemoved; } public override void OnNodeRemoved (object dataObject) @@ -136,6 +140,8 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad Solution solution = (Solution) dataObject; solution.NameChanged -= combineNameChanged; solution.StartupItemChanged -= startupChanged; + solution.RootFolder.ItemAdded -= combineEntryAdded; + solution.RootFolder.ItemRemoved -= combineEntryRemoved; } void OnStartupChanged (object sender, EventArgs args) @@ -147,16 +153,17 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad } } + void OnSolutionItemAddedRemoved (object sender, SolutionItemEventArgs e) + { + ITreeBuilder tb = Context.GetTreeBuilder (e.SolutionItem.ParentSolution); + if (tb != null) + tb.Update (); // Update the entry count + } + void OnEntryAdded (object sender, SolutionItemEventArgs e) { - ITreeBuilder tb; - if (e.SolutionItem.ParentFolder.IsRoot) - tb = Context.GetTreeBuilder (e.SolutionItem.ParentSolution); - else - tb = Context.GetTreeBuilder (e.SolutionItem.ParentFolder); - + ITreeBuilder tb = Context.GetTreeBuilder (e.SolutionItem.ParentSolution); if (tb != null) { - tb.Update (); // Update the entry count tb.AddChild (e.SolutionItem, true); tb.Expanded = true; } @@ -167,8 +174,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad ITreeBuilder tb = Context.GetTreeBuilder (e.SolutionItem); if (tb != null) { ITreeBuilder tbs = Context.GetTreeBuilder (e.SolutionItem); - if (tbs.MoveToParent ()) - tbs.Update (); // Update the entry count tb.Remove (); } } @@ -200,6 +205,14 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad public override void OnNodeDrop (object dataObject, DragOperation operation) { + Solution sol = CurrentNode.DataItem as Solution; + SolutionItem it = (SolutionItem) dataObject; + if (!MessageService.Confirm (GettextCatalog.GetString ("Are you sure you want to move the item '{0}' to the root node of the solution?", it.Name), AlertButton.Move)) + return; + + // If the items belongs to another folder, it will be automatically removed from it + sol.RootFolder.Items.Add (it); + IdeApp.ProjectOperations.Save (sol); } public override void ActivateMultipleItems () |