Exemple #1
0
        private void CollapseInternal(bool byInternal)
        {
            if (!is_expanded || nodes.Count < 1)
            {
                return;
            }

            if (IsRoot)
            {
                return;
            }

            bool     cancel    = false;
            TreeView tree_view = TreeView;

            if (tree_view != null)
            {
                TreeViewCancelEventArgs e = new TreeViewCancelEventArgs(this, false, TreeViewAction.Collapse);
                tree_view.OnBeforeCollapse(e);
                cancel = e.Cancel;
            }

            if (!cancel)
            {
                int count_to_next = CountToNext();

                is_expanded = false;

                if (tree_view != null)
                {
                    tree_view.OnAfterCollapse(new TreeViewEventArgs(this));

                    bool hbar_visible = tree_view.hbar.Visible;
                    bool vbar_visible = tree_view.vbar.Visible;

                    tree_view.RecalculateVisibleOrder(this);
                    tree_view.UpdateScrollBars(false);

                    // CollapseBelow if we affect the visible area
                    if (visible_order < tree_view.skipped_nodes + tree_view.VisibleCount + 1 && ArePreviousNodesExpanded)
                    {
                        tree_view.CollapseBelow(this, count_to_next);
                    }
                    if (!byInternal && HasFocusInChildren())
                    {
                        tree_view.SelectedNode = this;
                    }

                    // If one or both of our scrollbars disappeared,
                    // invalidate everything
                    if ((hbar_visible & !tree_view.hbar.Visible) || (vbar_visible & !tree_view.vbar.Visible))
                    {
                        tree_view.Invalidate();
                    }
                }
            }
        }
Exemple #2
0
 private void timerIconAnimate_Tick(object sender, EventArgs e)
 {
     if (loadingNode != null)
     {
         loadingNode.ImageIndex         = (loadingNode.ImageIndex >= 29) ? 26 : (loadingNode.ImageIndex + 1);
         loadingNode.SelectedImageIndex = loadingNode.ImageIndex;
         MyTree.Invalidate();
     }
 }
        void RefreshModTree(TreeView treeView, string[] modList)
        {
            treeView.Nodes.Clear();
            Dictionary<string, TreeNode> nodes;
            nodes = modList.Where(x => allMods[x].Standalone).ToDictionary(x => x, x => new TreeNode(x));
            string[] rootMods = modList.Where(x => allMods[x].Standalone).ToArray();
            string[] remaining = modList.Except(nodes.Keys).ToArray();

            while (remaining.Length > 0)
            {
                bool progress = false;
                List<string> toRemove = new List<string>();
                foreach (string s in remaining)
                {
                    var n = new TreeNode(s);
                    if (allMods[s].Requires == null) continue;
                    if (!nodes.ContainsKey(allMods[s].Requires)) continue;
                    nodes[allMods[s].Requires].Nodes.Add(n);
                    nodes.Add(s, n);
                    toRemove.Add(s);
                    progress = true;
                }

                if (!progress)
                    break;
                remaining = remaining.Except(toRemove).ToArray();
            }

            foreach (string s in rootMods)
                treeView.Nodes.Add(nodes[s]);

            if (remaining.Length > 0)
            {
                var n = new TreeNode("<Unspecified Dependency>");
                n.ForeColor = SystemColors.GrayText;
                var m = new TreeNode("<Missing Dependency>");
                m.ForeColor = SystemColors.GrayText;

                foreach (var s in remaining)
                {
                    if (allMods[s].Requires == null)
                        n.Nodes.Add(new TreeNode(s) { ForeColor = SystemColors.GrayText });
                    else if (!nodes.ContainsKey(allMods[s].Requires))
                        m.Nodes.Add(new TreeNode(s) { ForeColor = SystemColors.GrayText });
                }

                treeView.Nodes.Add(n);
                treeView.Nodes.Add(m);
            }

            treeView.Invalidate();
        }
Exemple #4
0
        public void EnsureVisible()
        {
            if (null == treeView)
            {
                return;
            }

            TreeView.NodeEnumerator nodes;
            int nodeFromTop;
            int nodeNo;

            while (true)
            {
                // Find "this" node number and position from the top control.
                nodeFromTop = -1;
                nodeNo      = 0;
                bool nodeFound = false;
                nodes = new TreeView.NodeEnumerator(treeView.nodes);
                while (nodes.MoveNext())
                {
                    if (nodes.currentNode == treeView.topNode)
                    {
                        // We are at the top of the control.
                        nodeFromTop = 0;
                    }
                    if (nodes.currentNode == this)
                    {
                        if (nodeFromTop < 0)
                        {
                            treeView.topNode = this;
                            treeView.Invalidate();
                            return;
                        }
                        nodeFound = true;
                        break;
                    }
                    if (nodeFromTop >= 0)
                    {
                        nodeFromTop++;
                    }
                    nodeNo++;
                }


                if (nodeFound)
                {
                    break;
                }
                else
                {
                    // Make sure all parents are expanded and see if its now visible.
                    TreeNode node        = this;
                    TreeNode highestNode = node;
                    for (; node != null; node = node.Parent)
                    {
                        node.expanded = true;
                        highestNode   = node;
                    }
                    treeView.InvalidateDown(highestNode);
                }
            }

            int visibleNodes = treeView.VisibleCountActual;

            // See if its already visible.
            if (nodeFromTop < visibleNodes)
            {
                return;
            }

            // Set the top node no we want to make this node 1 up from the bottom.
            nodeFromTop = nodeNo - visibleNodes + 1;
            if (nodeFromTop < 0)
            {
                nodeFromTop = 0;
            }

            // Find the node corresponding to this node no.
            nodes.Reset();
            nodeNo = 0;
            while (nodes.MoveNext())
            {
                if (nodeFromTop == nodeNo)
                {
                    treeView.topNode = nodes.currentNode;
                    treeView.Invalidate();
                    break;
                }
                nodeNo++;
            }
        }
//		private void UndoLastSelectedNode()
//		{
//			if (m_lastSelectedTreeNode != null)
//			{
//				if (IsTerminalNode(m_lastSelectedTreeNode))
//				{
//					m_lastSelectedTreeNode.Chosen = false;
//					m_lastSelectedTreeNode.ImageIndex = m_lastSelectedTreeNode.SelectedImageIndex = (int)ImageKind.radio;
//				}
//			}
//		}
		private void HandleCheckBoxNodes(TreeView tv, FeatureTreeNode tn)
		{
			//UndoLastSelectedNode();
			if (IsTerminalNode(tn))
			{
				tn.Chosen = true;
				tn.ImageIndex = tn.SelectedImageIndex = (int)ImageKind.radioSelected;
				if (tn.Parent != null)
				{
					FeatureTreeNode sibling = (FeatureTreeNode)tn.Parent.FirstNode;
					while (sibling != null)
					{
						if (IsTerminalNode(sibling) && sibling != tn)
						{
							sibling.Chosen = false;
							sibling.ImageIndex = sibling.SelectedImageIndex = (int)ImageKind.radio;
						}
						sibling = (FeatureTreeNode)sibling.NextNode;
					}
				}
				tv.Invalidate();
			}
//			m_lastSelectedTreeNode = tn;
		}
		protected virtual void HandleCheckBoxNodes(TreeView tv, TreeNode tn)
		{
			UndoLastSelectedNode();
			if (m_fTerminalsUseCheckBoxes)
			{
				if (IsTerminalNode(tn))
				{
					MasterInflectionFeature mif = tn.Tag as MasterInflectionFeature;
					if (tn.Checked)
					{
						if (mif == null || !mif.InDatabase)
						{
							tn.Checked = false;
							tn.ImageIndex = tn.SelectedImageIndex = (int)ImageKind.checkBox;
						}
					}
					else
					{
						tn.Checked = true;
						tn.ImageIndex = tn.SelectedImageIndex = (int)ImageKind.checkedBox;
						if (mif != null)
						{
							string sId = XmlUtils.GetOptionalAttributeValue(mif.Node, "id");
							if (FsFeatureSystem.HasSymbolicValue(m_cache, sId))
							{
								// we want to set all other sisters that are in the database
								TreeNode sibling = tn.Parent.FirstNode;
								while (sibling != null)
								{
									if (IsTerminalNode(sibling) && sibling != tn)
									{
										mif = sibling.Tag as MasterInflectionFeature;
										if (mif != null)
										{
											sId = XmlUtils.GetOptionalAttributeValue(mif.Node, "id");
											if (FsFeatureSystem.HasSymbolicValue(m_cache, sId))
											{
												sibling.Checked = true;
												sibling.ImageIndex =
													sibling.SelectedImageIndex = (int)ImageKind.checkedBox;
											}
										}
									}
									sibling = sibling.NextNode;
								}
							}
						}
					}
					tv.Invalidate();
				}
			}
			else
			{
				if (IsTerminalNode(tn))
				{
					tn.Checked = true;
					tn.ImageIndex = tn.SelectedImageIndex = (int)ImageKind.radioSelected;
					if (tn.Parent != null)
					{
						TreeNode sibling = tn.Parent.FirstNode;
						while (sibling != null)
						{
							if (IsTerminalNode(sibling) && sibling != tn)
							{
								sibling.Checked = false;
								sibling.ImageIndex = sibling.SelectedImageIndex = (int)ImageKind.radio;
							}
							sibling = sibling.NextNode;
						}
					}
					tv.Invalidate();
				}
				m_lastSelectedTreeNode = tn;
			}
		}
Exemple #7
0
        void RefreshModTree(TreeView treeView, string[] modList)
        {
            treeView.Nodes["ModsNode"].Nodes.Clear();
            Dictionary<string, TreeNode> nodes;
            nodes = modList.Where(x => allMods[x].Standalone).ToDictionary(x => x,
                x => new TreeNode(allMods[x].Title) { Name = x });
            string[] rootMods = modList.Where(x => allMods[x].Standalone).ToArray();
            Stack<string> remaining = new Stack<string>(modList.Except(nodes.Keys));

            bool progress = true;
            while (remaining.Count > 0 && progress)
            {
                progress = false;
                string s = remaining.Pop();
                var n = new TreeNode(allMods[s].Title) { Name = s };
                if (allMods[s].Requires == null) { remaining.Push(s); continue; }
                if (!nodes.ContainsKey(allMods[s].Requires)) { remaining.Push(s); continue; }
                nodes[allMods[s].Requires].Nodes.Add(n);
                nodes.Add(s, n);
                progress = true;
            }

            foreach (string s in rootMods)
                treeView.Nodes["ModsNode"].Nodes.Add(nodes[s]);

            if (remaining.Count > 0)
            {
                var unspecified = new TreeNode("<Unspecified Dependency>") { ForeColor = SystemColors.GrayText };
                var missing = new TreeNode("<Missing Dependency>") { ForeColor = SystemColors.GrayText };

                foreach (var s in remaining)
                {
                    if (allMods[s].Requires == null)
                        unspecified.Nodes.Add(new TreeNode(allMods[s].Title)
                        { ForeColor = SystemColors.GrayText, Name = s });
                    else if (!nodes.ContainsKey(allMods[s].Requires))
                        missing.Nodes.Add(new TreeNode(allMods[s].Title)
                        { ForeColor = SystemColors.GrayText, Name = s });
                }
                string brokenKey = "BrokenModsNode";
                if (treeView.Nodes[brokenKey] != null)
                    treeView.Nodes.RemoveByKey(brokenKey);
                treeView.Nodes.Add(brokenKey, "Broken Mods");
                treeView.Nodes[brokenKey].Nodes.Add(unspecified);
                treeView.Nodes[brokenKey].Nodes.Add(missing);
            }
            treeView.Nodes["ModsNode"].ExpandAll();
            treeView.Invalidate();

            string responseString = UtilityProgram.CallSimpleResponse("--settings-value", SupportDir, "Game.Mods");

            if (Util.IsError(ref responseString))
                treeView.SelectedNode = treeView.Nodes["ModsNode"].Nodes["ra"];
            else
                treeView.SelectedNode = treeView.Nodes["ModsNode"].Nodes[responseString];
        }
		/// <summary>
		/// Called by the framework when the designer is being initialized with the designed control
		/// </summary>
		/// <param name="component"></param>
		public override void Initialize(IComponent component)
		{
			base.Initialize(component);

			if (Control is TreeView)
			{
				try
				{
					m_oSelectionService = (ISelectionService) GetService(typeof (ISelectionService));
				}
				catch
				{
				}
				try
				{
					m_oSelectionService.SelectionChanged += new EventHandler(this.OnSelectionServiceChanged);
				}
				catch
				{
				}
				try
				{
					m_oDesignerHost = (IDesignerHost) GetService(typeof (IDesignerHost));
				}
				catch
				{
				}
				try
				{
					m_oMenuService = (IMenuCommandService) GetService(typeof (IMenuCommandService));
				}
				catch
				{
				}
				try
				{
					m_oDesignerSerializationService = (IDesignerSerializationService) GetService(typeof (IDesignerSerializationService));
				}
				catch
				{
				}
				try
				{
					m_oToolboxService = (IToolboxService) GetService(typeof (IToolboxService));
				}
				catch
				{
				}
				try
				{
					m_oUIService = (IUIService) GetService(typeof (IUIService));
				}
				catch
				{
				}
				try
				{
					m_oComponentChangeService = (IComponentChangeService) GetService(typeof (IComponentChangeService));
				}
				catch
				{
				}

				m_oTreeView = (TreeView) Control;
				m_oTreeView.m_bFocus = true;
				m_oTreeView.ClearAllSelection();
				m_oTreeView.DesignerHost = m_oDesignerHost;
				m_oTreeView.IsDesignMode = true;

				if (m_bFirstTime == true)
				{
					OnComponentCreated(m_oTreeView);
					m_bFirstTime = false;
				}

				try
				{
					m_oComponentAddedHandler = new ComponentEventHandler(this.OnComponentAdded);
				}
				catch
				{
				}
				try
				{
					m_oComponentRemovingHandler = new ComponentEventHandler(this.OnComponentRemoving);
				}
				catch
				{
				}
				try
				{
					m_oComponentChangeService.ComponentAdded += m_oComponentAddedHandler;
				}
				catch
				{
				}
				try
				{
					m_oComponentChangeService.ComponentRemoving += m_oComponentRemovingHandler;
				}
				catch
				{
				}
				try
				{
					m_oNodeParentChanged = new EventHandler(this.OnNodeParentChanged);
				}
				catch
				{
				}

				try
				{
					m_oOldCmdCopy = m_oMenuService.FindCommand(StandardCommands.Copy);
				}
				catch
				{
				}
				try
				{
					m_oOldCmdPaste = m_oMenuService.FindCommand(StandardCommands.Paste);
				}
				catch
				{
				}
				try
				{
					m_oOldCmdCut = m_oMenuService.FindCommand(StandardCommands.Cut);
				}
				catch
				{
				}
				try
				{
					m_oOldBringFront = m_oMenuService.FindCommand(StandardCommands.BringToFront);
				}
				catch
				{
				}
				try
				{
					m_oOldSendBack = m_oMenuService.FindCommand(StandardCommands.SendToBack);
				}
				catch
				{
				}
				try
				{
					m_oOldAlignGrid = m_oMenuService.FindCommand(StandardCommands.AlignToGrid);
				}
				catch
				{
				}
				try
				{
					m_oOldLockControls = m_oMenuService.FindCommand(StandardCommands.LockControls);
				}
				catch
				{
				}
				try
				{
					m_oOldDelete = m_oMenuService.FindCommand(StandardCommands.Delete);
				}
				catch
				{
				}

				try
				{
					m_oNewCmdCopy = new MenuCommand(new EventHandler(this.OnMenuCopy), StandardCommands.Copy);
				}
				catch
				{
				}
				try
				{
					m_oNewCmdPaste = new MenuCommand(new EventHandler(this.OnMenuPaste), StandardCommands.Paste);
				}
				catch
				{
				}

				if (TreeViewDesigner.MenuAdded == false)
				{
					try
					{
						m_oMenuService.RemoveCommand(m_oOldCmdCopy);
					}
					catch
					{
					}
					try
					{
						m_oMenuService.RemoveCommand(m_oOldCmdPaste);
					}
					catch
					{
					}
					try
					{
						m_oMenuService.AddCommand(m_oNewCmdCopy);
					}
					catch
					{
					}
					try
					{
						m_oMenuService.AddCommand(m_oNewCmdPaste);
					}
					catch
					{
					}

					TreeViewDesigner.MenuAdded = true;
				}

				m_oTreeView.Invalidate();

				#region action menus

				#region node menu

				m_oActionMenuNode = new ActionMenuNative();
				m_oActionMenuNode.Width = 170;
				m_oActionMenuNode.Title = "Node Action Menu";

				ActionMenuGroup oMenuGroup = m_oActionMenuNode.AddMenuGroup("Editing");
				oMenuGroup.Expanded = true;
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Add Node");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Delete Node");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Add Panel");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "-");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Clear Content");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Delete TreeView");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "-");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Copy");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Paste");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "-");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Properties");
				oMenuGroup = m_oActionMenuNode.AddMenuGroup("Arranging");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Expand");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Collapse");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Move Top");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Move Bottom");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Move Up");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Move Down");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Move Left");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Move Right");
				oMenuGroup = m_oActionMenuNode.AddMenuGroup("Color Schemes");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Default");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Forest");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Gold");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Ocean");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Rose");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Silver");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Sky");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Sunset");
				m_oActionMenuNode.AddMenuItem(oMenuGroup, "Wood");

				m_oActionMenuNode.ItemClick += new ActionMenuNative.ItemClickEventHandler(this.OnActionMenuNodeItemClicked);

				#endregion			

				#region TreeView menu

				m_oActionMenuTreeView = new ActionMenuNative();
				m_oActionMenuTreeView.Width = 170;
				m_oActionMenuTreeView.Title = "TreeView Action Menu";

				oMenuGroup = m_oActionMenuTreeView.AddMenuGroup("Editing");
				oMenuGroup.Expanded = true;
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Add Node");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Color Scheme Picker...");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "-");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Clear Content");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Delete TreeView");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "-");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Copy");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Paste");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "-");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Properties");
				oMenuGroup = m_oActionMenuTreeView.AddMenuGroup("Arranging");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Expand All");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Collapse All");
				oMenuGroup = m_oActionMenuTreeView.AddMenuGroup("Layout");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Bring to Front");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Send to Back");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Align to Grid");
				m_oActionMenuTreeView.AddMenuItem(oMenuGroup, "Lock Controls");

				m_oActionMenuTreeView.ItemClick += new ActionMenuNative.ItemClickEventHandler(this.OnActionMenuTreeViewItemClicked);

				#endregion

				#endregion

				// enable the drag drop operations
				m_oTreeView.AllowDrop = true;
				this.EnableDragDrop(true);

				m_oTreeView.CollapseAll();
				m_oSelector.SelectionService = m_oSelectionService;
				m_oSelector.TreeView = m_oTreeView;
			}
		}