/OfflineClient/GuidanceExplorerNT-Stripped/GuidanceExplorer/Controls/FolderNode.cs
C# | 223 lines | 156 code | 24 blank | 43 comment | 31 complexity | c9a5b5922548183706153573de4f32b9 MD5 | raw file
- //===============================================================================
- // Microsoft patterns & practices
- // Guidance Explorer Offline Client
- //===============================================================================
- // Copyright Microsoft Corporation. All rights reserved.
- // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
- // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
- // LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- // FITNESS FOR A PARTICULAR PURPOSE.
- //===============================================================================
-
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Windows.Forms;
- using GuidanceExplorer.Model;
-
- namespace GuidanceExplorer.Controls
- {
- /// <summary>
- /// Represents a folder in the tree view.
- /// </summary>
- [MenuItemAttribute(12, "&File\\&New Item", GuidanceExplorer.Commands.NewGuidanceItem, typeof(ModelItemMenuItemIsEditableCondition), typeof(NewItemMenuItemProvider), Keys.None)]
- [MenuItemAttribute(15, "&File\\New &Folder", GuidanceExplorer.Commands.NewFolder, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(20, "&File\\New &View", GuidanceExplorer.Commands.NewView, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(30, "&File\\New Search Vie&w", GuidanceExplorer.Commands.NewSearchView, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(40, "&File\\-", null, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(50, "&File\\&Import Item...", GuidanceExplorer.Commands.ImportItemToFolder, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(60, "&File\\-", null, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- //[MenuItemAttribute(70, "&File\\Save &Item as Xml...", "Save Items as Xml...", GuidanceExplorer.Commands.SaveItemAsXml, Keys.None)]
- [MenuItemAttribute(71, "&File\\&Save Folder as...", GuidanceExplorer.Commands.SaveFolderAs, Keys.None)]
- [MenuItemAttribute(80, "&File\\-", null, Keys.None)]
- //[MenuItemAttribute(82, "&File\\Subscribe to &Library\\From &File...", GuidanceExplorer.Commands.SubscribeLibraryFromFile, Keys.None)]
- [MenuItemAttribute(84, "&File\\Subscribe to &Library\\From &Web...", GuidanceExplorer.Commands.SubscribeLibraryFromWeb, Keys.None)]
- [MenuItemAttribute(85, "&File\\S&ynchronize Libraries", Commands.Synchronize, Keys.None)]
- [MenuItemAttribute(86, "&File\\-", null, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(90, "&File\\E&xport as Library...", GuidanceExplorer.Commands.ExportFolderAsLibrary, Keys.None)]
- //[MenuItemAttribute(100, "&File\\Save Item &as...", "Save Items as...", GuidanceExplorer.Commands.SaveItemAs, Keys.None)]
- [MenuItemAttribute(110, "&File\\-", null, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(120, "&File\\&Rename Folder", GuidanceExplorer.Commands.RenameFolder, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(130, "&File\\&Delete Folder", GuidanceExplorer.Commands.DeleteFolder, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(140, "&File\\-", null, Keys.None)]
- [MenuItemAttribute(148, "&File\\Add/Remove &Guidance Type...", GuidanceExplorer.Commands.AddRemoveGuidanceType, Keys.None)]
- [MenuItemAttribute(149, "&File\\-", null, Keys.None)]
- [MenuItemAttribute(150, "&File\\&Exit", GuidanceExplorer.Commands.FileExit, Keys.None)]
-
- [MenuItemAttribute(200, "&Edit\\&Undo drag/drop", GuidanceExplorer.Commands.UndoDragAndDrop, Keys.Control | Keys.Z)]
- [MenuItemAttribute(210, "&Edit\\-", null, Keys.None)]
- [MenuItemAttribute(230, "&Edit\\&Add To View...", GuidanceExplorer.Commands.MoveGuidanceItemToView, Keys.None)]
- [MenuItemAttribute(260, "&Edit\\-", null, Keys.None)]
- [MenuItemAttribute(270, "&Edit\\&Select All", GuidanceExplorer.Commands.SelectAll, Keys.Control | Keys.A)]
-
- [MenuItemAttribute(300, "&View\\Reset &Sort Order", GuidanceExplorer.Commands.ResetSortOrder, Keys.None)]
- [MenuItemAttribute(310, "&View\\&Reset Columns", GuidanceExplorer.Commands.ResetColumns, Keys.None)]
- [MenuItemAttribute(320, "&View\\Reset &Filters", GuidanceExplorer.Commands.ResetFilters, Keys.None)]
- [MenuItemAttribute(330, "&View\\&Column Chooser", GuidanceExplorer.Commands.ColumnChooser, Keys.None)]
-
- //[MenuItemAttribute(400, "&Help\\&About", GuidanceExplorer.Commands.HelpAbout, Keys.None)]
-
- [MenuItemAttribute(500, "context\\New Folder", GuidanceExplorer.Commands.NewFolder, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(510, "context\\New View", GuidanceExplorer.Commands.NewView, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- //[MenuItemAttribute(520, "context\\New Search View", GuidanceExplorer.Commands.NewSearchView, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(540, "context\\-", null, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(560, "context\\Export as Library...", GuidanceExplorer.Commands.ExportFolderAsLibrary, Keys.None)]
- [MenuItemAttribute(561, "context\\Save Folder as...", GuidanceExplorer.Commands.SaveFolderAs, Keys.None)]
- [MenuItemAttribute(570, "context\\-", null, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(580, "context\\Delete Folder", GuidanceExplorer.Commands.DeleteFolder, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- [MenuItemAttribute(590, "context\\Rename Folder", GuidanceExplorer.Commands.RenameFolder, typeof(ModelItemMenuItemIsEditableCondition), Keys.None)]
- public class FolderNode : ModelNode<Folder>
- {
- /// <summary>
- /// Factory.
- /// </summary>
- /// <returns></returns>
- public static FolderNode New()
- {
- return new FolderNode();
- }
-
- /// <summary>
- /// Private default constructor.
- /// </summary>
- private FolderNode() : base("a folder", 4, 4) { }
-
- public override bool CanDrop(IModelItem modelNode)
- {
- Library thisLibrary = ModelInstance.GetContainerLibrary();
-
- //If the library is read only, then all operations are cancelled.
- if (thisLibrary != null && thisLibrary.ReadProtection == ReadProtection.ReadOnly)
- {
- return false;
- }
-
- ViewNode viewNode = modelNode as ViewNode;
- FolderNode folderNode = modelNode as FolderNode;
- SearchViewNode searchViewNode = modelNode as SearchViewNode;
-
- if (viewNode != null)
- {
- /*
- * Test for views:
- * Views can't be droped in its parent folder.
- */
- //Root views cant be dragged
- if (viewNode.ModelInstance.RootView)
- {
- return false;
- }
-
- //Can't drag to its parent.
- if (Object.ReferenceEquals(viewNode.ModelInstance.ParentFolder, ModelInstance))
- {
- return false;
- }
-
- return true;
- }
- else if (folderNode != null)
- {
- /*
- * Test for folders:
- * Folders can't be droped in its parent folder.
- * A folder can't be droped to any of its childs.
- */
-
- //Can't drag to its parent.
- if (Object.ReferenceEquals(folderNode.ModelInstance.ParentFolder, ModelInstance))
- {
- return false;
- }
-
- //Find the node in its childs.
- if (FindNodeInChilds(folderNode, this))
- {
- return false;
- }
- return true;
- }
- else if (searchViewNode != null)
- {
- //Root views cant be dragged
- if (searchViewNode.ModelInstance.RootView)
- {
- return false;
- }
-
- return true;
- }
-
- return false;
- }
-
- /// <summary>
- /// Whether the node is editable.
- /// </summary>
- public override bool IsEditable
- {
- get
- {
- Library library = ModelInstance.GetContainerLibrary();
- if (library != null)
- {
- return (library.ReadProtection == ReadProtection.ReadWrite);
- }
- return true;
- }
- }
-
- public FolderNode Clone(Folder newModelInstance)
- {
- FolderNode cloneNode = new FolderNode();
- cloneNode.Text = Text;
- cloneNode.SelectedItem = SelectedItem;
- if (newModelInstance == null)
- {
- cloneNode.ModelInstance = (Folder)ModelInstance.Clone();
- }
- else
- {
- cloneNode.ModelInstance = newModelInstance;
- }
-
- if (Nodes.Count > 0)
- {
- foreach (TreeNode tempNode in Nodes)
- {
- FolderNode tempFolderNode = tempNode as FolderNode;
- ViewNode tempViewNode = tempNode as ViewNode;
- SearchViewNode tempSearchViewNode = tempNode as SearchViewNode;
- TreeNode copyNode = null;
-
- if (tempFolderNode != null)
- {
- Folder folder = tempFolderNode.ModelInstance.Clone();
- folder.ParentFolder = cloneNode.ModelInstance;
- copyNode = (TreeNode)tempFolderNode.Clone(folder);
- }
- else if (tempViewNode != null)
- {
- GuidanceExplorer.Model.View view = tempViewNode.ModelInstance.Clone();
- view.ParentFolder = cloneNode.ModelInstance;
- view.Container = null;
- copyNode = (TreeNode)tempViewNode.Clone(view);
- }
- else if (tempSearchViewNode != null)
- {
- SearchView searchView = (SearchView) tempSearchViewNode.ModelInstance.Clone();
- searchView.ParentFolder = cloneNode.ModelInstance;
- searchView.ReadedScope = SearchViewScope.Folder;
- searchView.Container = null;
- copyNode = (TreeNode)tempSearchViewNode.Clone(searchView);
- }
-
- cloneNode.Nodes.Add(copyNode);
- }
- }
-
- return cloneNode;
- }
- }
- }
-