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(); } } } }
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(); }
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; } }
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; } }